ROS2 Reference
ROS2 노드/토픽/서비스/액션 CLI 레퍼런스
ROS2 Reference 소개
이 ROS2 레퍼런스는 Robot Operating System 2의 CLI 명령어와 워크플로를 5가지 실무 카테고리로 정리한 종합 치트 시트입니다. 노드·실행 섹션에서는 ros2 run(노드 이름 변경, 네임스페이스 지정, 파라미터 전달), ros2 node list/info(실행 중인 노드의 퍼블리셔, 서브스크라이버, 서비스, 액션 조회), ros2 daemon 관리, ros2 lifecycle(매니지드 노드 상태 전이), ros2 doctor(시스템 진단)를 다룹니다.
토픽, 메시지, 서비스, 액션 통신 패턴을 전체 명령어 구문과 실용 예제로 문서화했습니다. 토픽 명령에는 ros2 topic list(타입 표시), echo(필드 필터링, CSV, 1회 출력), pub(발행 주기 제어), info(상세 QoS 정보), hz(주파수 측정), delay(지연 분석)가 포함됩니다. ros2 interface show로 메시지·서비스·액션 구조를 확인할 수 있으며, std_msgs, geometry_msgs(Twist, Pose, Transform), sensor_msgs(Image, LaserScan, PointCloud2, Imu, JointState), nav_msgs(Odometry, Path, OccupancyGrid) 등 주요 메시지 타입을 정리했습니다.
패키지 관리, 빌드 시스템, 파라미터, 런치 파일, rosbag, QoS, TF2 도구로 레퍼런스를 완성합니다. ros2 pkg create(ament_cmake, ament_python), colcon build(선택적 빌드, symlink install, Release 최적화), rosdep 의존성 설치를 다룹니다. 파라미터 명령(list, get/set, YAML dump/load), Python 기반 런치 파일 문법(LaunchDescription, Node, 인자 처리), rosbag record/play(압축, 속도 조절, 반복 재생), QoS 프로파일(RELIABLE/BEST_EFFORT 호환성), TF2 프레임 트리 시각화와 정적 변환 발행까지 포함합니다.
주요 기능
- 노드 실행 명령: ros2 run(리매핑, 네임스페이스, 파라미터), node list/info, daemon, lifecycle, doctor
- 토픽 명령: list, echo(필드 필터링, CSV, once), pub(주기 제어), info(상세 QoS), hz, delay, bw
- std_msgs, geometry_msgs, sensor_msgs, nav_msgs 주요 메시지 타입과 필드 구조 정리
- 서비스·액션 명령: list, call, find, send_goal(피드백 포함), interface show 타입 구조 확인
- 패키지·빌드: ros2 pkg create, colcon build(선택적·symlink·Release), rosdep, ament_cmake vs ament_python
- 파라미터 관리: list, get/set 런타임 변경, YAML dump/load, 런치 시 params-file 지정
- 런치 파일·rosbag: Python LaunchDescription 문법, ros2 bag record(압축)·play(속도·반복·토픽 필터)
- QoS 프로파일(RELIABLE/BEST_EFFORT 호환성)과 TF2 도구(view_frames, tf2_echo, static_transform_publisher)
자주 묻는 질문
커스텀 이름과 네임스페이스로 ROS2 노드를 실행하려면 어떻게 하나요?
ros2 run에서 --ros-args로 리매핑합니다. 노드 이름 변경: ros2 run turtlesim turtlesim_node --ros-args -r __node:=my_turtle. 네임스페이스 설정: -r __ns:=/sim1 추가. 파라미터 전달: --ros-args -p frequency:=2.0. 이 리매핑으로 같은 노드를 다른 설정으로 여러 인스턴스 실행이 가능합니다.
토픽과 메시지를 어떻게 조사하나요?
ros2 topic list -t로 모든 활성 토픽과 메시지 타입을 확인합니다. ros2 topic echo로 실시간 메시지를 출력하고(--once 1회, --field 특정 필드, --csv CSV 형식), hz로 발행 주파수, bw로 대역폭, delay로 지연을 측정합니다. ros2 interface show로 모든 메시지 타입의 필드 구조를 조회할 수 있습니다.
서비스와 액션의 차이는 무엇인가요?
서비스는 빠른 작업에 적합한 동기식 요청-응답 호출입니다(예: 터틀 생성, 화면 지우기). 액션은 진행 상황 피드백과 취소가 필요한 장시간 작업용입니다(예: 목표 위치 내비게이션). 액션은 Goal(클라이언트 전송), Result(최종 결과), Feedback(진행 업데이트) 세 요소로 구성됩니다. ros2 action send_goal에 --feedback 옵션을 추가하면 실시간 진행 상황을 볼 수 있습니다.
ROS2 패키지를 어떻게 생성하고 빌드하나요?
C++: ros2 pkg create --build-type ament_cmake my_pkg --dependencies rclcpp std_msgs. Python: ros2 pkg create --build-type ament_python my_pkg --dependencies rclpy std_msgs. 빌드: colcon build(--packages-select로 특정 패키지, --symlink-install로 Python 수정 시 재빌드 불필요, --cmake-args -DCMAKE_BUILD_TYPE=Release로 최적화). 빌드 후 반드시 source install/setup.bash를 실행합니다.
Python 런치 파일은 어떻게 작성하나요?
launch 디렉토리에 파일을 만들고 LaunchDescription, DeclareLaunchArgument, Node를 import합니다. generate_launch_description() 함수에서 LaunchDescription을 반환하며, Node에 package, executable, name, parameters, remappings, output을 지정합니다. DeclareLaunchArgument로 설정 가능한 옵션을, LaunchConfiguration으로 참조합니다. ros2 launch my_pkg my_launch.py로 실행합니다.
rosbag 데이터를 어떻게 녹화하고 재생하나요?
ros2 bag record로 녹화합니다. -a는 전체 토픽, 특정 토픽은 /scan /odom /cmd_vel처럼 나열합니다. -o my_bag으로 이름 지정, --compression-format zstd로 압축합니다. ros2 bag play my_bag/로 재생하며, --rate 2.0(2배속), --loop(반복), --topics(필터), --start-paused(일시정지 시작, 스페이스바로 재생)를 사용합니다. ros2 bag info로 내용을 확인합니다.
QoS 프로파일이란 무엇이고 왜 중요한가요?
QoS(Quality of Service)는 통신 신뢰성을 제어합니다. RELIABLE은 메시지 전달을 보장하고(TCP 유사, 명령용), BEST_EFFORT는 속도를 우선합니다(UDP 유사, 레이저 스캔·이미지 같은 센서 데이터용). RELIABLE 퍼블리셔는 BEST_EFFORT 서브스크라이버에 전달 가능하지만, BEST_EFFORT 퍼블리셔는 RELIABLE 서브스크라이버에 전달 불가합니다. ros2 topic info --verbose로 QoS를 확인하고, 센서 토픽에는 --qos-reliability best_effort를 사용합니다.
TF2 좌표 변환을 어떻게 디버깅하나요?
ros2 run tf2_tools view_frames로 전체 TF 트리를 PDF로 시각화합니다. ros2 run tf2_ros tf2_echo map base_link로 두 프레임 간 변환(이동, 쿼터니언 회전)을 조회합니다. static_transform_publisher로 정적 변환을 발행할 때 --x, --y, --z, --roll, --pitch, --yaw, --frame-id, --child-frame-id 인자를 사용합니다. ros2 run tf2_ros tf2_monitor로 모든 변환을 실시간 모니터링합니다.