ROS # 6-1 ROS1 VS ROS2

남생이·2024년 10월 2일

ROS

목록 보기
5/28

ROS 자료 사이트

1. ROS2 다운로드

https://velog.io/@i_robo_u/%EA%B0%9C%EB%B0%9C%EC%9E%90%EC%99%80-%ED%95%A8%EA%BB%98%ED%95%98%EB%8A%94-ROS2-Humble%EC%97%90%EC%84%9C-%EC%9E%91%EC%97%85%EA%B3%B5%EA%B0%84-%EC%83%9D%EC%84%B1%ED%95%98%EA%B8%B0

추후 다시 정리하여 작성 예정

2. ROS1 VS ROS2

FeatureROS1ROS2
PlatformsLinux, macOSLinux, macOS, Windows
Real-time실시간 제어 지원 x, external frameworks like OROCOS를 활용해야함실시간 제어 지원, Real-time nodes when using a proper *RTOS with carefully written user code
Security*SROSSROS2, DDS-Security, Robotic Systems Threat Model
CommunicationXPMRPC+TCPROSDDS(RTPS)
Middleware interface-RMW
Node managerROS MasterDDS'S dynamic discovery
LanguageC++03, Python 2.7c++14(17), python 3.5+
Client libraryroscpp, rospy, rosjava, rosnodejs, and morerclcpp, rclpy, rcljava, and more
Build systemrosbuild -> catkin(CMAKE)Ament(CMake), PYthoon setuptools(Full support)
Build toolscatkin_make, catkin_toolsColcon
Build options-Multiple workspace, NO non-isolated build, No devel space
Version control systemrosws->wstool, rosinstallvcstool(*repos)
Life cycle-Node life cycle
Multiple nodesOne node in a processMultiple nodes in a process
Threading modelSingle-threaded execution or multi-threaded executioncustom executors
Messages.msg, .srv, *.action.msg, .srv, .action, .idl
Command Line Interfacerosrun, roslaunch, ros topic ...ros2 run ros2 launch, ros2 topic
roslaunchXMLXML, YAML, Python
Graphic APIremappong at startup time onlyRemapping at runtime
Embedded Systemsrosseroal, mROSmicroROS, XEL NEtwork, ros2arduino, Renesas DDS-XRCE(Micro-XRCE-DDS), AWS ARCLM

*RTOS(Real time operating system):실시간 작업을 수행하기 위해 설계된 운영체계, ROS2는 RTOS와 통합될 수 있게 설계되어 QoS를 통해 데이터 전송의 지연, 안정성, 속도등을 조정할 수 있음

*SROS(Secure Robot Operating System): ROS의 보안기능을 확장하기 위해 설계된 시스템, 인증 메커니즘 및 권한 부여, 무결성 검사 등의 기능을 제공

*TCPROS(Transmission Control Protocol): ROS에서 노드 간의 메세지를 신뢰성 있게 전달하기 위해 설계된 기능, 연결 지향 프로토콜, 스트림 기반

2.1 Security & Communication

  • ROS1
    • 독자적인 TCPROS(ROS master)을 통해 통신
    • MQTT --> TCP 기반으로 브로커를 통해 메세지를 전달
    • 이는 보안이 취약한 약점이 존재
  • ROS2
    • OMG(Object Management Group) - DDS(Data Distribution Service) 도입 --> DDS-Security 적용, 통신단에서 보안 이슈 해결
    • SROS 2 개발 --> 보안 관련 RCL 서포트 강화
    • DDS --> UDP기반(중간 매개체 없음)
      - 신뢰성이 부족하지만 QoS를 설정하여 신뢰성 확보(6가지 옵션)

2.2 Middleware interface

  • RMW(ROS middleware): ROS와 미들웨어간의 인터페이스 제공, DDS와 같은 미들웨어 구현을 가능하게 함
    • 추상화
    • 플러그인 아키텍쳐
    • 통신
    • QoS 설정
    • 이식성

2.3 Build option

ROS2에서의 변화

(1) multiple workspace - catkin_ws와 같은 특정 워크스페이스 확보없이 복수의 독립된 워크스페이스 사용 가능 --> 작업 목적 및 패키기 종류별로 관리 가능
(2) No non-isolated build - 격리 빌드만을 지원하여 모든 패키지를 별도로 빌드 가능, 설치용 폴더를 분리하거나 병합 가능
(3) No devel space - devel 폴더에 패키지 빌드 저장 없이 사용가능 --> 파이썬 코드 편집 후 즉시 실행 가능, 패키지를 빌드 후 설치해야 패키지를 사용할 수 있음

2.4 Messages

  • ROS1: 단일 데이터 구조=message --> Topic, Service, Action
  • ROS2: OMG에서 정의된 IDL(interfacem description language)를 사용하여 메시지 정의 및 직렬화를 더 쉽게 처리 가능
FeatureTopicServiceAction
연속성연속성일회성복합(topic+서비스)
동기성비동기 통신동기동기+비동기
방향성단방향양방향양방향
다자간 연결1:1,1:N,N:1,N:N
(publisher:subscriber)
1:1
(server:client)
1:1
(server:client)
node 역할발행자(publisher),
구독자 (subscriber)
서버 (server),
클라언트(client)
서버 (server),
클라언트 (client)
Triggerpublisherclientclient
interfacemsg interfacesrv interfaceaction interface
CLI 명령어ros2 topic
ros2 interface
ros2 service
ros2 interface
ros2 action
ros2 interface
기타- publisher는 QoS 설정을 이용, 데이터 발행
- ROS 통신에서 가장 많이 사용
- 센서 데이터, 로봇상태, 로봇좌표,
로봇 속도 명령
LED 제어, 모터 토크 On/Off,
IK/FK 계산, 이동 경로 계산 등
목적지로 이동, 물건 파지,
복합 태스크 등

3. DDS

DDS: Data Distribution Service, 데이터 분산 서비스

  • 특징
    • 산업표준
    • 운영체제 독립
    • 언어 독립 --> RMS 추상화, ROS Client Library 지원
    • UDP 기반의 전송 방식
    • 데이터 중심적 기능(Data centric)
    • 동적 검색(Dynamic Discovery)
    • 확장 가능한 아키텍쳐
    • 상호 운용성
    • 보안 --> DDS-Security, SROS2
    • QoS(Quality of Service): 노드간 DDS 통신 옵션 설정
      • 22가지 항목
      • ROS2에서 6가지 사용
        - Reliable: 데이터 손실 방지 -> 신뢰도
        - Reliability: 데이터 통신 속도 -> 신뢰성
        - History: 통신 상태에 따라 정해진 크기만큼 데이터 보관
        - Durability: subscriber 생성 전의 데이터 사용 및 폐기 여부 설정
        - Deadline: 정해진 주기 안에 데이터가 발신 및 수신되지 않을 경우 이벤트 함수를 실행시킴
        - Lifespan: 정해진 주기 안에 수신되는 데이터만 유효 판정 그외 삭제
        - Liveliness: 정해진 주기 안에서 노드 혹은 토픽의 생사 확인

4. package

package: 하나 이상의 노드가 기능적 단위로 묶인 것, 하나 또는 복수의 노드를 이용해서 작업을 수행하는 집합

  • 노드(Node): 특정 작업을 수행하는 실행 파일(로봇 제어, 센서 데이터 처리, 토픽 발행/ 구독 등), 실행가능한 최소한의 프로세서 단위
  • 런치 파일(Launch file): 여러 노드를 실행하고, 각 노드의 매개변수, 토픽 및 서비스를 구성하는 Python 파일
  • 설정 파일(Configuration file): YAML 파일로 노드나 노드 그룹의 매개변수, 토픽, 서비스 등을 정의
  • 라이브러리(Library): C++ 또는 Python 라이브러리로 메시지 정의, 알고리즘, 드라이버 등 재사용 가능한 기능을 제공
  • 자원(Resource): 이미지, 소리, 모델 등의 데이터 파일로 노드나 시각화 도구에서 사용
  • 테스트(Test): 유닛 테스트, 통합 테스트, 시스템 테스트 등으로 패키지의 정확성과 견고성을 검증
  • 문서(Documentation): README 파일, 튜토리얼, API 참조 등으로 사용자가 패키지를 이해하고 사용할 수 있도록 도움
profile
공부하는 거북이

0개의 댓글