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

| Feature | ROS1 | ROS2 |
|---|---|---|
| Platforms | Linux, macOS | Linux, macOS, Windows |
| Real-time | 실시간 제어 지원 x, external frameworks like OROCOS를 활용해야함 | 실시간 제어 지원, Real-time nodes when using a proper *RTOS with carefully written user code |
| Security | *SROS | SROS2, DDS-Security, Robotic Systems Threat Model |
| Communication | XPMRPC+TCPROS | DDS(RTPS) |
| Middleware interface | - | RMW |
| Node manager | ROS Master | DDS'S dynamic discovery |
| Language | C++03, Python 2.7 | c++14(17), python 3.5+ |
| Client library | roscpp, rospy, rosjava, rosnodejs, and more | rclcpp, rclpy, rcljava, and more |
| Build system | rosbuild -> catkin(CMAKE) | Ament(CMake), PYthoon setuptools(Full support) |
| Build tools | catkin_make, catkin_tools | Colcon |
| Build options | - | Multiple workspace, NO non-isolated build, No devel space |
| Version control system | rosws->wstool, rosinstall | vcstool(*repos) |
| Life cycle | - | Node life cycle |
| Multiple nodes | One node in a process | Multiple nodes in a process |
| Threading model | Single-threaded execution or multi-threaded execution | custom executors |
| Messages | .msg, .srv, *.action | .msg, .srv, .action, .idl |
| Command Line Interface | rosrun, roslaunch, ros topic ... | ros2 run ros2 launch, ros2 topic |
| roslaunch | XML | XML, YAML, Python |
| Graphic API | remappong at startup time only | Remapping at runtime |
| Embedded Systems | rosseroal, mROS | microROS, 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에서 노드 간의 메세지를 신뢰성 있게 전달하기 위해 설계된 기능, 연결 지향 프로토콜, 스트림 기반


ROS2에서의 변화
(1) multiple workspace - catkin_ws와 같은 특정 워크스페이스 확보없이 복수의 독립된 워크스페이스 사용 가능 --> 작업 목적 및 패키기 종류별로 관리 가능
(2) No non-isolated build - 격리 빌드만을 지원하여 모든 패키지를 별도로 빌드 가능, 설치용 폴더를 분리하거나 병합 가능
(3) No devel space - devel 폴더에 패키지 빌드 저장 없이 사용가능 --> 파이썬 코드 편집 후 즉시 실행 가능, 패키지를 빌드 후 설치해야 패키지를 사용할 수 있음
| Feature | Topic | Service | Action |
|---|---|---|---|
| 연속성 | 연속성 | 일회성 | 복합(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) |
| Trigger | publisher | client | client |
| interface | msg interface | srv interface | action interface |
| CLI 명령어 | ros2 topic ros2 interface | ros2 service ros2 interface | ros2 action ros2 interface |
| 기타 | - publisher는 QoS 설정을 이용, 데이터 발행 - ROS 통신에서 가장 많이 사용 - 센서 데이터, 로봇상태, 로봇좌표, 로봇 속도 명령 | LED 제어, 모터 토크 On/Off, IK/FK 계산, 이동 경로 계산 등 | 목적지로 이동, 물건 파지, 복합 태스크 등 |
DDS: Data Distribution Service, 데이터 분산 서비스