Contents — find the section you need
ROS 2는 로봇 자체가 아닙니다. 카메라 드라이버, 자체 위치 추정, 경로 계획 및 모터 제어를 별도의 프로그램(노드)으로 실행하고 표준화된 메시징 및 통신을 통해 결합하는 기반입니다. 프로토타입 단계에서는 단 하나의 Python 파일로 시작하여 C++, 실시간 실행, 여러 대의 컴퓨터, 안전 모니터링 기능까지 확장하여 제품을 개발할 수 있습니다. 중요한 것은 API를 암기하는 것이 아니라, 데이터 소유권, 타이밍, 신뢰성, 그리고 종료 시 안전한 상태를 설계하는 것입니다.
이미지: Robot Operating System logo, Wikimedia Commons (CC BY-SA 4.0). 로고는 미들웨어를 식별하는 데 사용되며 특정 배포판이나 DDS 구성을 보장하지 않습니다.
30초 요약
-
노드는 하나의 책임을 가진 프로세스이고, 토픽은 지속적인 스트림을 나타내며, 서비스는 짧은 요청/응답을 나타내고, 액션은 중간 피드백이 있는 긴 작업을 나타냅니다.
-
ROS 2의 통신은 DDS에서 이루어지며, QoS(신뢰성, 이력, 심도, 지속성, 마감 시간)는 엔드포인트별로 선택할 수 있습니다. 센서와 제어 장치는 동일한 설정을 사용할 필요가 없습니다.
-
TF2는 시간과 함께 좌표계 트리를 관리합니다.
map,odom,base_link와 센서 프레임이 혼합되면, 로봇은 인식이 정확하더라도 잘못된 위치로 이동할 수 있습니다. -
실제 하드웨어에서는 수명 주기 관리, 워치독, 권한 분리, 로깅 및 네트워크 연결 끊김에 대한 안전 장치를 추가해야 합니다. 시뮬레이션에서 작업하는 것이 안전성을 보장하는 것은 아닙니다.
-
ROS 2 Jazzy와 같은 장기 지원 릴리스와 이에 맞는 DDS, 운영 체제 및 드라이버 조합을 처음부터 수정하고 재현 가능한 워크스페이스를 구축해야 합니다.
1. ROS 2의 전체적인 개요
그림 1 — ROS 2에서 노드는 DDS를 통해 서로를 검색하고 통신합니다.
토픽 이름뿐만 아니라 QoS, 유형, 시간, 좌표계까지 모두 계약의 일부로 취급됩니다.
ROS 2 그래프는 런타임에 구성할 수 있습니다. 카메라 노드는 이미지를 게시하고, 인식 노드는 이를 구독하며, 제어 노드는 결과에 자체 위치 정보를 더하여 속도 명령을 게시합니다. 노드를 다른 컴퓨터로 옮기더라도 DDS 검색 및 직렬화가 올바르게 작동하는 한 동일한 그래프가 유지됩니다.
2. 적절한 통신 기본 요소 선택
| 유형 | 사용 위치 | 예시 | 설계 고려 사항 |
|---|---|---|---|
| 토픽 | 연속 스트림, 다대다 | /scan , /camera/image |
QoS, 대역폭, 지연 시간, 데이터 손실 |
| 서비스 | 짧은 요청 및 응답 | /reset_odometry |
타임아웃, 재진입 |
| 액션 | 진행 상황을 표시하는 장기 실행 작업 | 탐색, 파악 | 취소, 안전한 중단 |
| 매개변수 | 시작 시간 또는 저주파 구성 | 게인, 프레임 이름 | 유형, 변경 권한, 재현성 |
토픽 메시지에는 값뿐만 아니라 header.stamp 및 frame_id도 포함되어야 합니다. 이미지 타임스탬프와 IMU 타임스탬프가 동기화되지 않은 경우에도 알고리즘은 결과를 계산할 수 있지만 움직임을 잘못 추정할 수 있습니다. 카메라 이미지를 안정적으로 재전송하면 대역폭이 과부하될 수 있으므로 각 센서의 특성에 맞는 QoS를 선택해야 합니다.
3. "통신 계약"으로서의 QoS
ROS 2에서 확인해야 할 최소 QoS 설정은 신뢰성(최선 노력/신뢰성), 지속성(휘발성/일시적 로컬), 기록(마지막 유지/전체 유지), 깊이, 마감 시간 및 활성입니다. 고속 LiDAR는 오래된 패킷을 버리는 Best Effort 방식에 적합할 수 있지만, 메시지 손실을 허용할 수 없는 속도 명령은 짧은 Deadline을 사용하는 Reliable 방식을 사용해야 합니다.
퍼블리셔와 서브스크라이버의 QoS가 호환되지 않으면 동일한 토픽 이름을 사용하더라도 통신이 이루어지지 않습니다. 센서 드라이버의 사전 설정값을 맹목적으로 신뢰하기보다는 ros2 topic info -v /scan 명령어를 사용하여 실제 설정을 확인하십시오. 네트워크를 통해 통신할 때는 MTU, Wi-Fi 재전송, 멀티캐스트 제한 및 시간 동기화를 함께 테스트해야 합니다.
4. TF2 및 시간
로봇의 자세는 좌표계 간의 변환으로 표현됩니다. 일반적인 트리 구조는 다음과 같습니다.
map ──(SLAM/Localization)──> odom ──(odometry)──> base_link
├── base_laser
├── imu_link
└── camera_link
map는 장기 월드 좌표계, odom는 단기 스무딩 오도메트리, base_link는 차량 기준 좌표계입니다. SLAM은 map → odom을 수정하고, 휠/IMU 추정은 odom → base_link을 빠른 속도로 업데이트합니다. TF2는 타임스탬프와 함께 변환값을 저장하고 각 센서의 데이터 획득 시간에 맞춰 보간합니다.
좌표계를 오른손 좌표계로 표준화하고, 광학 좌표계(z축이 앞쪽, x축이 오른쪽, y축이 아래쪽)와 차량 좌표계(x축이 앞쪽, y축이 왼쪽, z축이 위쪽)의 차이를 명확히 합니다. static_transform_publisher를 사용하여 정적 변환값을 수정하고, 동적 변환값을 정적 변환값으로 게시하지 않습니다. TF 트리에서 순환 구조나 여러 개의 부모 노드가 있는 것은 설계 오류입니다.
5. 패키지 및 구현 흐름
최소한의 ROS 2 Python 노드는 다음과 같습니다.
import rclpy
from rclpy.node import Node
from std_msgs.msg import Float32
class Speed(Node):
def __init__(self):
super().__init__('speed_node')
self.pub = self.create_publisher(Float32, '/speed', 10)
self.timer = self.create_timer(0.02, self.tick) # 50 Hz
def tick(self):
msg = Float32(); msg.data = 0.2
self.pub.publish(msg)
rclpy.init(); node = Speed(); rclpy.spin(node)
실제 하드웨어에서는 속도 명령을 모터에 직접 보내지 마십시오. 상위 노드, 속도 제한 장치, 비상 정지 장치 및 하드웨어 모니터링 장치를 중간에 배치하십시오. C++의 rclcpp을 사용하는 경우에도 콜백 그룹, 실행기, 메모리 할당 및 실시간 동작을 확인하십시오.
워크스페이스를 src, build, install, log로 분리하고 rosdep을 사용하여 종속성을 해결하십시오. Docker 또는 개발 컨테이너를 사용하여 OS, DDS 및 컴파일러를 고정하고 ros2 doctor, ros2 node list, ros2 topic hz, tf2_tools을 CI 및 현장 진단에 모두 포함시키십시오.
6. 라이프사이클 및 안전
센서와 액추에이터는 전원이 켜지는 즉시 명령을 수락할 필요는 없습니다. 라이프사이클 노드의 상태 전환(구성되지 않음 → 비활성 → 활성 → 완료)은 드라이버 초기화, 보정, 통신 점검 및 출력 권한 부여를 분리합니다. 워치독 센서가 하트비트를 잃으면 속도 명령을 초기화하고 하드웨어 측에서 브레이크 또는 릴레이를 해제해야 합니다.
안전 측면에서 ROS 2의 메시지 통신 자체만으로는 기능 안전 표준을 충족하지 못합니다. IEC 61508/ISO 26262/ISO 13849 및 유사 표준의 적용 범위를 확인하고, 안전 기능을 모니터링 시스템, 인증된 MCU 및 물리적 비상 정지 장치로 분리해야 합니다. 네트워크에 연결할 때는 SROS 2 키 및 인증서, DDS 보안, 접근 제어 및 로그 감사 기능을 도입해야 합니다.
7. 현재 생태계 및 연구
Nav2는 액션과 라이프사이클 관리를 통해 자체 위치 추정, 지도 작성, 경로 계획 및 제어를 통합하고, ros2_control은 하드웨어와 컨트롤러 간의 경계를 표준화합니다. MoveIt 2는 매니퓰레이터의 운동학, 충돌 검사 및 궤적 계획을 처리합니다. Gazebo 또는 Webots에서 시뮬레이션하고 rosbag2로 센서 로그를 재생하면 실제 로봇을 멈추지 않고 회귀 테스트를 수행할 수 있습니다.
제로 카피 통신, GPU/NPU를 사용하는 타입이 지정된 이미지 파이프라인, 결정론적 실행기, 분산 학습 및 DDS를 뛰어넘는 클라우드 로봇 공학에 대한 연구가 활발히 진행되고 있습니다. 새로운 기능을 도입할 때는 벤치마크뿐만 아니라 네트워크 연결 끊김, 시간 편차, 프로세스 재시작, 센서 오류 및 잘못된 메시지 길이도 테스트해야 합니다.
요약
ROS 2는 로봇을 단순히 여러 부품의 집합체가 아닌 재사용 가능한 분산 시스템으로 만들어 줍니다. 노드 책임, 토픽 QoS, TF2 좌표 및 타이밍, 수명 주기, 안전 상태 등을 사전에 설계하면 알고리즘을 변경하더라도 전체 시스템이 안정적으로 유지됩니다.
노드 간 연결이 올바르게 작동하도록 설정되어 있습니까?
타임스탬프, 프레임, QoS 및 전송률도 일치해야 합니다.
데이터를 수신했다고 해서 해당 데이터가 제어에 사용 가능하다는 것을 의미하지는 않습니다.
댓글
먼저 로그인해 주세요.
아직 데이터가 없습니다.