본문 바로가기
Language & Framework & GIT/ROS2

ROS 1과 ROS 2의 차이 & ROS 2의 특징

by veganwithbacon 2023. 6. 27.
반응형

  ROS(Robot Operating System)

: 로봇을 위한 오픈 소스, 메타 운영 시스템

 

독립된 운영체제는 아니고, 기존 운영체제를 이용한다.  우분투와 같은 운영체제 위에 설치해 운영체제에서 제공하는 프로그램 등을 사용한다. 이에 추가로 다수의 이기종 하드웨어 간의 데이터 송수신, 스케줄링 등 로봇 응용 프로그램에 필요한 필수 기능들을 라이브러리 형태로 제공한다. 이러한 콘셉을 미들웨어 또는 소프트웨어 프레임워크라고 한다.

 

  ROS의 목적?

로보틱스 소프트웨어 개발을 전 세계 레벨에서 공동 작업이 가능하도록 하는 환경을 구축하는 것

 

 

  ROS의 장점 

: 당연히 최대의 장점은 공개 소프트웨어라는 점이다.

소스코드의 이해와 수정이 필요하다면 ROS2 설치 시, 바이너리 파일이 아닌 소스코드를 받아 빌드하자.

 

파이썬 커뮤니티와 같이 REPs(ROS Enhancement Proposals) 리스트를 통해 개발을 하는 과정에 긍정적인 효과를 볼 수 있다. ROS를 통한 개발 대부분은 커뮤니티 게시판의 글/ Repository의 이슈나 REP에 제안의 초안을 올려두면 관련된 사람들이 글을 정리하며 개발로 이어지는 플로우를 통해 이뤄진다.

 

종종 개발을 하다보면 특정 버전부터 왜? 굳이? 라는 생각이 드는 부분이 있다면 REPs를 통해 궁금증을 해결할 수 있을 것이다.

 

ROS는 커뮤니티 활성화가 잘되어 있기 때문에, 문제가 생겼거나 궁금한 것이 생기면 ROS 질의응답 페이지를 통해 키워드를 검색하면 된다. 뭐 안나오면; 구글링이나 스택오버플로우/ 요즘은 chatGPT도 있긴하지만 애가 뻥을 너무쳐서 팩트체크를 하면서 봐야한다.

------------------------------------------------------------------------------------

1. 시장 출시 시간 단축

2. 생산을 위한 설계

3. 멀티 플랫폼

4. 다중 도메인

5. 벤더 선택 가능

6. 공개 표준 기반

7. 자유 재량 허용 범위가 넓은 오픈소스 라이센스 채택

8. 글로벌 커뮤니티

9. 산업지원

10. ROS 1과의 상호 운용성 확보

------------------------------------------------------------------------------

 

  ROS2의 특징🐢

 

⏺ Platforms : 리눅스, 윈도우, 맥 지원가능

 

 Real-time : 실시간성을 지원. 선별된 하드웨어, 리얼타임 지원 운영체제, DDS의 RTPS(Real-time Publish-Subscribe Protocol)와 같은 통신 프로토콜, 리얼타임 코드 사용을 전제로 한다.

 

 Security : ROS1에서 문제가 되었던 부분들을 DDS와 SROS2를 통해 보안을 강화

 

 Communication

                : ROS2에서는 리얼타임 퍼블리시와 서브스크라이브 프로토콜인 RTTS를 지원하는 통신 미들웨어 DDS를 사용

                : DDS(D의 OMG(Object Management Group)에 의해 표준화가 진행

                IDL(Interface Description Lagguage)를 통해 메시지 정의 및 직렬화를 쉽고 포괄적으로 다룬다

                DDS는 노드 간 자동 감지 기능을 지원하여 기존 ROS1에서 관리하던 노드 간의 정보를 관리하던 ROS MASTER가 없어도 여러 DDS 프로그램 간 통신이 가능

 

 Middleware interface :

                 1. ADLink의 Cyclone DDS

                 2. Eclipse Foundation의 Cyclone DDS

                 2. Eprosima의 Fast DDS

                 3. GurumNetworks의 Gurum DDS

                 4. RTI의 Connext DDS

 

 Node manager(Discovery)

ros1에서는 roscore ROS Master, ROS Parameter Server, rosout logging node가 실행됐다.

ros1에서는 ROS Master가 중매 역할을 하며 실행되는 노들들을 연결하여 각 노드들의 정보를 관리해 서로 연결되어야 하는 노드들에게 상대방 노드의 정보를 건네주어 연결했다.

ROS1에서는 노드 사이의 연결을 위해 네임 서비스를 마스터에서 실행했고, ROS Master는 연결이 끊기거나 죽는 경우 모든 시스템이 마비되는 단점이 있었다.

 

ros2에서는 roscore를 없애고 3가지 프로그램이 각각 독립적으로 수행되도록 바꿨다. 특히, ROS MASTER의 경우 삭제되고, 이는 DDS의 기능들로 대체됐다.

 

노드는 DDS의 Participant로, Dynamic Discovery를 통해 DDS 미들웨어를 통해 노드를 직접 검색해 연결

 

 Languages

ROS 1 : C++, Python

ROS 2 : C++, Python

 

⏺Build system

ROS2에서는 ament를 사용

 

ROS1 : rosbuild -> catkin(CMake)

ROS2 : ament(CMake), Python setuptools(Full support)

 

⏺Build tools

ROS2에서는 여러가지가 있지만 현재는 colcon(collective construction)을 제일 많이 쓴다.

작업 흐름을 향상시키는 CLI타입의 명령어 도구이며, 터미널 창에서 colcon test, colcon build와 같은 명령어를 통해 실행하며, 다양한 옵션도 함께 사용 가능하다

 

⏺Build options

 

Multiple workspace : ROS1과 달리 ROS2로 오면서 복수의 독립된 워크스페이스를 사용할 수 있어서 작업 목적 및 패키지 종류별로 이를 관리할 수 있게 됐다.

 

No non-isolated build :

ROS 1에서는 하나의 CMake 파일로 여러 개의 패키지를 동시 빌드할 수 있다.

빌드 속도는 빠르나 모든 패키지의 종속성에 신경을 많이 써야 하고 빌드 순서가 매우 중요하게 된다.

이는 모든 패키지가 동일 네임스페이스를 사용하기 때문에 충돌이 발생할 수 있다.

 

ROS 2에서는 이전 빌드시스템인 catkin의 일부기능으로 사용하던 catkin_make_isolated 형태 같은 격리 빌드만을 지원하여 모든 패키지를 별도 빌드하게 됐다. 설치용 폴더를 분리하거나 병합할 수 있게 됐다.

 

No devel space 

catkin은 패키지를 빌드한 후 devel 폴더에 코드를 저장했다.

이 폴더는 패키지 설치가 필요 없이 패키지를 사용가능하게 환경을 제공한다.

파일 복사는 피하되 사용자는 코드를 편집하고 즉시 코드 실행이 가능하게 했다.

위 기능은 편리성을 더해줬으나 패키지 관리 측면에서는 복잡성이 증가됐다.

 

이를 보완하고자 ROS2에서는 패키지를 빌드 후 설치해얗 패키지 사용이 가능하도록 바뀌었다.

편리성도 고려해 colcon 사용에 따라 "--symlink -install"과 같은 옵션 제공을 통해 심볼릭 링크 설치를 가능하게 했다.

 

⏺ Version control system

ROS 1 : rosws -> wstool, rosinstall(*.rosinstall)

ROS 2 : vcstool(*.repos)

 

커뮤니티가 활성화된만큼 버전 관리 시스템을 사용하더라도 ROS를 사용함에는 불편함이 없도록 통합적인 툴을 제공

ROS1 => wstool

ROS2 => vcstool

 

⏺ Client library

ROS기반 프로그래밍 : ROS구조

                                      - 유저 코드 영역(User land)   -> ROS 클라이언트 라이브러리(ROS Client Library)  

                                          -> Middleware interface 

: 유저 코드 영역을 다루는 것은 하위에 ROS 클라이언트 라이브러리가 있으며 클라이언트 라이브러리는 미들웨어를 사용

 

ROS 2 : ROS 클라이언트 라이브러리를 제공. 

              이는 언어별로 rclcpp, rclc, rclpy, rcljava, rclobjc, rclada, rclgo, rclnodejs 등으로 제공

              위에 언급한 제공언어에서 rcl은 Ros Client Library를 뜻한다.

 

 

⏺ Lifecycle

로봇 개발에서 로봇의 현재 상태 파악과 현재 상태에서 다른 상태로 변경되는 상태천이 제어는 중요 부분 중 하나다.

ROS 1에서는 SMACH와 같은 상태천이를 관리하는 독립적인 패키지를 사용해야 했고, 클라이언트 라이브러리는 상태 관리 부분이 없기에 사용자가 임의로 모두 수정하여 사용해야했다.

 

ROS 2에서는 니즈 반영을 통해 패키지의 각 노드들의 현재 상태 모니터링과 제어 가능한 Lifecycle을 클라이언트 라이브러리에 포함시켜 ROS 시스템 상태를 효과적으로 제어할 수 있게 했다.

Lifecycle을 클라이언트 라이브러리에 포함함에 따라 ROS1에서는 할 수 없던 노드의 상태를 모니터링 및 상태 천이, 노드의 상태 재시작이나 교체가 가능하다 

 

내가 좀 무식한건지 상태천이라는 말을 처음 들어봐서 메모해두었다.

상태천이 : 오토마타, 순차 회로 따위에서 현재 상태에 입력이 전달된 경우에 상태가 변환되는 현상

오버헤드(overhead)는 어떤 처리를 하기 위해 들어가는 간접적인 처리 시간 · 메모리 등을 말한다

 

⏺ Multiple nodes

ROS1의 초기에 여러 노드 실행이 안되었기에, 이를 보완하는 Nodelet라이브러리가 있었는데 이는 ROS2에서 Nodelet을 RCL에 포함시켰다. 이는 컴포넌트라 불렀고, ROS2에서는 해당 컴퓨넌트를 통해 동일한 실행파일에서 복수의 노드 실행이 가능하게 했다.

컴포넌트를 통해 노드의 실행 파일 수준 세분화와 프로세스 내 통신 기능을 통해 ROS2의 오버 헤드를 제거할 수 있게 됐다.

                     

 

⏺ Threading model

세분화된 실행 모델 사용 가능

 

⏺ Messages(Topic, Service, Action)

ROS2도 1과 마찬가지로 단일 데이터 구조를 메시지라고 정의한다.

Topic, Service, Action에서 사용하며 기존 비슷한 형태로 사용이 가능하다.

 

ROS2에서는 OMG에서 정의한 IDL(Interface Description Language)를 사용해 메시지 정의 및 직렬화를 쉽고 포괄적으로 다룰 수 있게 한다. 

 

ROS2는 기존 msg, srv, action 파일 외에도 IDL을 지원한다.                                                                                                    또한 DDS를 채용하며 기존 메시지들과 DDS규칙을 맞추는 작업이 진행됐다.

ROS2가 DDS를 사용하며 메시지를 이용한 Topic, Service, Action 콘셉은 변하지 않으나 사용 방법은 많이 바뀌었다.

 

⏺ Command Line Interface

대부분 CLI 타입의 명령어 사용법은 ROS 1과 ROS 2가 비슷하다.

EX)

 ROS 1 : rostopic list

 ROS 2 : ros2 topic list

 

⏺ Launch

ROS의 실행 시스템은 run과 launch가 있는데 run은 단일 프로그램 실행, launch는 사용자 지정 프로그램 실행을 수행한다.

보통 launch가 다양한 설정을 할 수 있기에 launch를 더 많이 사용한다.

사용자가 실행하고자 하는 프로그램의 각종 설정을 기술하고 기술된 설정에 맞춰 각종 프로그램을 실행하도록 도와준다

 

⏺ Graph API

ROS2에서는 1과 달리노드가 시작할 때뿐만 아니라 실행 도중 재매핑이 가능하며, 그 결과를 바로 그래프로 표현할 수 있게 하려한다.

 

⏺ Embedded Systems

ROS2에서는 시리얼 통신, 블루투스 및 와이파이 통신뿐만 아니라 RTOS, DDS-XRCE를 지원한다.

대문에 임베디드 보드에서 직접 ROS프로그래밍을 하여 펌웨어로 구현된 노드를 실행할 수도 있다.

반응형

'Language & Framework & GIT > ROS2' 카테고리의 다른 글

CMakeLists.txt 작성 방법  (10) 2023.07.05
[ROS2] ROS를 사용하며 알아야 할 기본적인 내용  (32) 2023.07.04
[ROS2] package 'cpp_srvcli' not found  (4) 2023.07.04
왜 ROS? 왜 LINUX?  (38) 2023.06.23
ROS2.0?  (20) 2023.06.20

댓글