ros2cli
ros2cli는 ROS2의 명령줄 인터페이스(Command Line Interface) 도구로, 다양한 ROS2 작업을 쉽게 수행할 수 있는 명령어 집합을 제공한다. 이 도구는 ROS2 노드, 토픽, 서비스 등을 명령줄에서 직접 조작할 수 있도록 해 주며, 시스템 관리 및 디버깅을 위한 중요한 역할을 한다. ROS2CLI는 아래와 같은 주요 기능을 제공한다:
- 노드 관리
ros2 node list
: 현재 실행 중인 모든 ROS2 노드들의 리스트를 확인할 수 있다.ros2 node info [node_name]
: 특정 노드에 대한 정보를 확인한다. 해당 노드가 구독하는 토픽, 서비스, 액션 등을 보여준다.
이를 통해 사용자는 네트워크 상의 ROS2 노드를 쉽게 탐색하고, 시스템 상태를 진단할 수 있다.
- 토픽 관리
ROS2에서 토픽은 노드 간 통신의 기본 단위이다. 이를 효과적으로 관리하기 위해 ros2cli는 다양한 명령어를 제공한다: ros2 topic list
: 현재 사용 중인 모든 토픽들을 나열한다.ros2 topic info [topic_name]
: 특정 토픽에 대한 정보를 제공한다. 이에는 토픽의 타입, 퍼블리셔, 구독자 수 등이 포함된다.ros2 topic pub [topic_name] [msg_type] [args]
: 명령줄에서 직접 특정 토픽으로 메시지를 퍼블리싱할 수 있다.ros2 topic echo [topic_name]
: 특정 토픽에 퍼블리시된 메시지를 실시간으로 확인할 수 있다.-
ros2 topic bw [topic_name]
: 특정 토픽의 대역폭을 측정하여 시스템 성능을 진단할 수 있다. -
서비스 관리
ROS2의 서비스는 동기적 호출을 통해 데이터를 교환하는 방법을 제공하며, 이를 관리하기 위한 명령어들도 ros2cli에서 제공된다: ros2 service list
: 현재 존재하는 모든 서비스의 리스트를 확인한다.ros2 service call [service_name] [srv_type] [args]
: 특정 서비스에 요청을 보내고 그 응답을 받을 수 있다.ros2 service type [service_name]
: 특정 서비스의 타입을 확인할 수 있다.
이러한 명령어들을 통해 서비스 기반의 통신을 빠르게 테스트하고 시스템을 관리할 수 있다.
- 액션 관리
ROS2의 액션(Action)은 장시간 실행되는 작업에 대한 비동기적 처리 방법을 제공한다: ros2 action list
: 실행 중인 모든 액션 서버를 나열한다.ros2 action send_goal [action_name] [goal_type] [goal_args]
: 특정 액션에 목표(goal)를 보내고 그 결과를 기다린다.-
ros2 action cancel [goal_id]
: 특정 목표를 취소한다. -
파라미터 관리
ROS2 노드는 다양한 설정을 위해 파라미터를 사용할 수 있으며, ros2cli는 이를 쉽게 관리할 수 있는 명령어들을 제공한다: ros2 param list
: 특정 노드에 설정된 모든 파라미터를 나열한다.ros2 param get [node_name] [param_name]
: 특정 노드에서 특정 파라미터의 값을 가져온다.-
ros2 param set [node_name] [param_name] [value]
: 특정 노드에서 특정 파라미터 값을 설정한다. -
로깅 및 디버깅
ROS2의 로그는 시스템 진단에 중요한 역할을 하며, ros2cli는 이를 관리하기 위한 다양한 도구들을 제공한다: ros2 logging set_level [logger_name] [level]
: 특정 로그 레벨을 설정하여 디버깅 정보를 조정한다.
이처럼 ros2cli는 ROS2 시스템을 관리하고 진단하는 데 필수적인 도구이며, 이를 통해 개발자는 쉽게 노드, 토픽, 서비스, 액션, 파라미터 등을 조작할 수 있다.
rviz2
rviz2는 ROS2에서의 시각화 도구로, 로봇의 상태, 센서 데이터, 경로 계획 등을 시각적으로 표현해 주는 강력한 툴이다. 이는 주로 로봇 개발자들이 시스템을 쉽게 이해하고 디버깅할 수 있도록 도와주는 역할을 한다. rviz2는 다양한 기능을 제공하며, 그 중 일부는 다음과 같다:
- 센서 데이터 시각화
rviz2는 로봇의 각종 센서 데이터를 3D 공간에서 시각화할 수 있다. 예를 들어, 라이다(LIDAR) 센서로부터 얻은 포인트 클라우드를 화면에 렌더링하여 로봇 주변의 환경을 실시간으로 확인할 수 있다. 이러한 시각화는 다음과 같은 데이터를 포함한다: - 포인트 클라우드(PointCloud2)
- 이미지 데이터
-
레이저 스캔(LaserScan)
-
로봇 모델 시각화
ROS2의 URDF(Unified Robot Description Format)를 통해 정의된 로봇의 모델을 3D 공간에서 실시간으로 확인할 수 있다. 로봇의 각 링크 및 조인트 상태를 시각적으로 표현하며, 이는 로봇의 운동학적 상태를 쉽게 이해하는 데 도움이 된다. -
경로 계획 및 실행 시각화
rviz2는 경로 계획을 시각적으로 표현할 수 있다. 로봇의 목표 위치를 설정하고, 해당 위치로의 경로를 시각적으로 확인하면서 경로 계획 알고리즘의 성능을 평가할 수 있다. 예를 들어, 경로 탐색 시 노드 간의 연결성을 시각화하고, 장애물을 회피하는 경로를 실시간으로 모니터링할 수 있다. -
TF 트리 시각화
ROS2에서 TF(transform)는 좌표계 간의 변환을 관리하는데 사용된다. 각 센서 및 링크는 서로 다른 좌표계를 가지며, 이들 간의 변환을 정확히 이해하는 것이 중요하다. rviz2는 TF 트리를 시각적으로 표현하여, 변환 관계를 명확히 파악할 수 있도록 해 준다. 이를 통해 각 좌표계의 위치 및 방향을 한눈에 확인할 수 있으며, 로봇의 기하학적 구조와 센서 데이터를 이해하는 데 중요한 역할을 한다. -
인터랙티브 마커
rviz2에서는 인터랙티브 마커(interactive marker) 기능을 제공하여 사용자가 3D 공간에서 직접 로봇의 상태나 목표를 설정할 수 있다. 사용자는 마우스를 통해 로봇의 목표 위치를 설정하거나, 특정 노드를 클릭하여 동작을 트리거할 수 있다. -
플러그인 확장성
rviz2는 다양한 플러그인을 지원하며, 이를 통해 새로운 기능을 추가하거나 기존 기능을 확장할 수 있다. 플러그인 구조를 통해 사용자는 자신이 필요로 하는 맞춤형 시각화 도구를 만들 수 있으며, ROS2 생태계에 존재하는 다른 패키지들과도 쉽게 통합할 수 있다. 예를 들어, 특수한 센서나 커스텀 데이터 타입을 사용하는 경우, 그에 맞는 플러그인을 개발하여 rviz2에 추가할 수 있다.
rviz2에서 사용되는 몇 가지 주요 플러그인들은 다음과 같다: - Camera 플러그인: 로봇 카메라에서 입력되는 이미지 데이터를 실시간으로 확인할 수 있는 플러그인이다. 주로 로봇이 시각 정보를 사용하는 환경에서 유용하게 사용된다. - Map 플러그인: 2D 및 3D 지도 데이터를 시각화할 수 있는 플러그인이다. SLAM(동시적 위치 추정 및 지도 작성)이나 내비게이션에서 유용하게 사용된다. - RobotModel 플러그인: 로봇의 URDF 모델을 불러와 3D로 렌더링하고, 링크 및 조인트 상태를 시각화할 수 있다. - Marker 플러그인: 다양한 형태의 마커(arrow, cube, sphere, etc.)를 시각적으로 표현할 수 있는 플러그인이다. 주로 특정 위치나 방향을 표시할 때 사용된다.
- 시각화 설정 및 사용자 정의
rviz2는 사용자가 시각화 설정을 쉽게 변경할 수 있도록 다양한 사용자 정의 옵션을 제공한다. 예를 들어, 각 데이터 소스의 시각화 스타일(예: 포인트 클라우드의 크기, 색상)을 조정하거나, 새로운 보기(View)를 추가할 수 있다. 또한, 시각화 설정을 저장하고 나중에 다시 불러오는 기능을 제공하여, 프로젝트별로 다른 설정을 사용할 수 있다.
시각화 설정의 주요 옵션은 다음과 같다: - 포인트 클라우드 색상 및 크기: 센서에서 수집한 포인트 클라우드의 색상과 포인트 크기를 조정할 수 있다. - 레이저 스캔 스타일: 라이다에서 수집한 레이저 스캔 데이터를 라인, 점 등 다양한 스타일로 표현할 수 있다. - 카메라 시점 조정: 3D 뷰에서 카메라의 위치와 각도를 조정하여 다양한 시점에서 로봇과 데이터를 확인할 수 있다.
ros2 launch
ros2 launch는 여러 개의 ROS2 노드를 동시에 실행하는 데 사용되는 툴이다. 복잡한 로봇 시스템은 여러 개의 노드를 포함하는 경우가 많으며, 각 노드를 개별적으로 실행하는 것은 비효율적일 수 있다. 이때 ros2 launch를 사용하면, 여러 노드를 하나의 명령어로 간편하게 실행할 수 있다.
launch 파일은 XML 또는 Python으로 작성되며, 시스템의 전체적인 실행 흐름을 정의한다. 주로 사용되는 기능은 다음과 같다:
-
노드 실행
여러 개의 노드를 정의하고 동시에 실행할 수 있다. 각 노드의 실행 옵션(예: 이름, 네임스페이스, 파라미터)을 설정할 수 있다.xml <launch> <node pkg="my_package" exec="my_node" name="node1" output="screen"/> <node pkg="my_package" exec="my_node" name="node2" output="screen"/> </launch>
-
파라미터 설정
launch 파일을 통해 각 노드에 파라미터를 전달할 수 있다. 이는 각 노드가 실행될 때 필요한 설정 값을 정의하는 데 유용하다.xml <launch> <node pkg="my_package" exec="my_node" name="node1" output="screen"> <param name="param1" value="100"/> </node> </launch>
-
리매핑
토픽이나 서비스의 이름을 launch 파일에서 리매핑하여, 실행 시 동적으로 통신 채널을 변경할 수 있다. 이는 노드 간 충돌을 피하거나 통신 구조를 유연하게 바꾸는 데 유용하다.xml <launch> <node pkg="my_package" exec="my_node" name="node1" output="screen"> <remap from="/old_topic" to="/new_topic"/> </node> </launch>
-
환경 변수 설정
각 노드가 실행될 때 사용할 환경 변수를 설정할 수 있다. 이는 ROS2 외부의 시스템 환경 설정에 유용하다.xml <launch> <node pkg="my_package" exec="my_node" name="node1" output="screen"> <env name="MY_ENV_VAR" value="true"/> </node> </launch>
ros2 launch는 이러한 기능들을 통해 대규모 시스템에서 노드를 효율적으로 관리하고 실행할 수 있게 해 준다. 이는 특히 자율 주행 로봇과 같이 복잡한 시스템에서 필수적인 툴로 사용된다.
rqt
rqt는 ROS2에서 제공하는 유연한 플러그인 기반의 GUI 관리 도구로, ROS2 환경을 시각적으로 관리, 디버깅, 분석할 수 있도록 다양한 기능을 제공한다. 플러그인 구조로 되어 있어 사용자가 필요한 기능만을 추가하거나 제거할 수 있으며, 다양한 상황에서 효율적인 시스템 관리 도구로 활용된다. 아래는 rqt의 주요 플러그인 및 그 동작에 대해 더 자세히 설명한다.
rqt의 주요 플러그인
rqt_graph
rqt_graph는 ROS2 네트워크 상에서 실행 중인 노드 간의 관계를 그래프로 시각화하는 플러그인이다. 각 노드가 퍼블리시하거나 구독하는 토픽을 연결선으로 나타내어, 시스템 통신 구조를 한눈에 파악할 수 있도록 돕는다. 이를 통해 시스템 내 통신 흐름을 쉽게 이해하고, 예상하지 못한 노드 간의 의존성이나 통신 오류를 빠르게 진단할 수 있다.
-
노드 간의 관계: 각 노드는 네트워크 상의 독립적인 프로세스를 나타내며, 노드 간의 통신 경로가 화살표로 표현된다. 퍼블리셔 노드에서 구독자 노드로의 화살표는 데이터를 주고받는 과정을 의미한다.
-
리매핑 및 네임스페이스 표현: rqt_graph는 토픽 리매핑이나 네임스페이스의 적용 여부도 시각적으로 표현한다. 이를 통해 복잡한 시스템에서의 통신 구조를 쉽게 파악할 수 있으며, 특정 토픽의 리매핑이 예상대로 이루어졌는지 확인할 수 있다.
-
실시간 업데이트: ROS2 시스템에서 노드의 추가나 삭제, 토픽 연결 상태의 변화가 발생할 경우, rqt_graph는 이를 실시간으로 반영하여 업데이트된 네트워크 상태를 즉시 보여준다. 이를 통해 시스템 내 통신의 동적 변화를 효과적으로 모니터링할 수 있다.
rqt_console
rqt_console는 ROS2 노드의 로그 메시지를 모니터링하고 분석할 수 있는 도구다. 각 노드에서 출력되는 디버깅 정보, 경고, 에러 메시지를 실시간으로 확인하고, 문제 발생 시 그 원인을 추적할 수 있다. ROS2의 로깅 기능은 로봇 시스템에서 발생하는 다양한 정보를 기록하고, 이를 통해 시스템의 상태를 진단하는 데 중요한 역할을 한다.
-
로그 필터링: rqt_console는 로그 메시지를 특정 기준에 따라 필터링할 수 있다. 예를 들어, 특정 노드에서 발생하는 에러 메시지만을 표시하거나, 특정 로그 레벨(디버그, 정보, 경고, 에러 등) 이상의 메시지만을 확인할 수 있다. 이를 통해 불필요한 정보를 배제하고, 문제의 원인을 신속하게 찾아낼 수 있다.
-
시간 기반 필터링: 로그 메시지를 발생 시간에 따라 필터링하여, 특정 시간대에 발생한 문제를 집중적으로 분석할 수 있다. 이 기능은 시간에 민감한 이벤트나, 특정 시점에서 발생한 오류를 찾을 때 유용하다.
-
로그 저장 및 분석: rqt_console는 로그 메시지를 파일로 저장할 수 있어, 후속 분석이나 시스템 성능 평가에 사용할 수 있다. 이러한 로그 파일은 다른 툴을 사용해 분석하거나, 문제 해결을 위한 기록으로 남길 수 있다.
rqt_plot
rqt_plot는 ROS2 시스템에서 퍼블리시되는 토픽 데이터를 실시간으로 그래프로 시각화하는 플러그인이다. 이 도구는 주로 센서 데이터나 상태 정보를 그래프 형태로 나타내어, 시간에 따른 데이터 변화를 직관적으로 파악할 수 있도록 돕는다. 이를 통해 센서 값이나 로봇의 특정 상태가 어떻게 변화하고 있는지 실시간으로 모니터링할 수 있다.
-
실시간 데이터 시각화: 예를 들어, 온도 센서에서 발생하는 데이터를 실시간으로 확인하거나, 로봇의 속도 변화를 시간에 따라 그래프로 나타낼 수 있다. 이 기능은 시스템 튜닝 및 성능 분석에 매우 유용하다.
-
멀티플 데이터 시각화: 여러 개의 토픽 데이터를 동시에 그래프에 그릴 수 있어, 서로 다른 데이터 간의 상관관계를 분석할 수 있다. 예를 들어, 모터의 전류와 속도를 동시에 시각화하여, 전류 변화에 따른 속도 반응을 분석할 수 있다.
-
확대 및 축소 기능: 그래프의 특정 부분을 확대하여 자세한 데이터를 확인할 수 있으며, 그래프의 범위를 자유롭게 조정할 수 있다. 이는 데이터의 급격한 변화나 미세한 변화를 분석하는 데 도움을 준다.
rqt_reconfigure
rqt_reconfigure는 ROS2 시스템에서 실행 중인 노드의 파라미터를 실시간으로 조정할 수 있는 도구다. 이 플러그인은 시스템을 다시 시작하지 않고도 노드의 동작을 동적으로 수정할 수 있어, 실시간 튜닝에 매우 유용하다.
-
동적 파라미터 변경: 사용자는 노드의 동작을 제어하는 파라미터를 GUI 상에서 실시간으로 변경할 수 있다. 예를 들어, 특정 제어기의 PID 게인을 실시간으로 조정하여 로봇의 제어 성능을 향상시키거나, 센서 필터링 파라미터를 변경하여 데이터를 최적화할 수 있다.
-
파라미터 적용 즉시 반영: 파라미터 변경 사항은 즉시 해당 노드에 반영되며, 시스템의 동작이 실시간으로 변한다. 이를 통해 여러 번의 실험과 튜닝 과정을 거치며 최적의 파라미터를 찾을 수 있다.
-
노드별 파라미터 관리: 각 노드별로 파라미터가 분리되어 있어, 특정 노드의 파라미터만을 관리하거나 변경할 수 있다. 이를 통해 복잡한 시스템에서도 효율적으로 파라미터를 관리할 수 있다.
rqt_bag
rqt_bag는 ROS2에서 발생하는 데이터(토픽, 메시지)를 기록하고 재생할 수 있는 도구로, 데이터 수집 및 재현에 중요한 역할을 한다. 로봇 시스템에서는 실시간으로 다양한 데이터가 발생하며, 이를 기록하여 분석하거나 나중에 재현하는 것은 시스템 성능을 최적화하거나 문제를 진단하는 데 매우 유용하다.
-
데이터 기록: ROS2에서 퍼블리시되는 모든 토픽 데이터를 bag 파일로 기록할 수 있다. 이 파일에는 토픽 메시지와 그 시간 정보가 포함되어, 이후 재생 시 동일한 시간 순서로 데이터를 확인할 수 있다.
-
데이터 재생: 기록된 bag 파일을 나중에 재생하여, 그 시점에 발생했던 데이터를 재현할 수 있다. 이 기능은 시뮬레이션이나 디버깅 과정에서 매우 유용하다. 예를 들어, 로봇이 특정 환경에서 센서 데이터를 어떻게 수집했는지를 재현하고 분석할 수 있다.
-
필터링 및 부분 재생: 전체 데이터를 재생하는 대신 특정 시간대나 특정 토픽의 데이터를 선택적으로 재생할 수 있다. 이를 통해 대량의 데이터를 효율적으로 분석할 수 있다.
rqt_service_caller
rqt_service_caller는 ROS2에서 제공되는 서비스 인터페이스를 GUI 상에서 호출할 수 있는 플러그인이다. 이 도구는 사용자가 명령줄을 사용하지 않고도 서비스를 쉽게 호출할 수 있도록 돕는다.
-
서비스 목록 표시: 현재 실행 중인 모든 ROS2 서비스를 나열하고, 각 서비스의 입력과 출력 타입을 보여준다.
-
서비스 호출: GUI를 통해 간단한 입력값만으로 서비스를 호출할 수 있으며, 결과도 즉시 확인할 수 있다. 예를 들어, 로봇의 특정 동작을 트리거하거나, 센서 데이터를 요청할 때 유용하다.
rqt의 확장성 및 커스터마이징
rqt의 가장 큰 장점 중 하나는 플러그인 기반 아키텍처를 통해 확장성과 유연성을 제공한다는 점이다. rqt는 기본 제공 플러그인 외에도 사용자가 직접 플러그인을 개발하여 시스템의 요구에 맞게 기능을 확장할 수 있다.
-
커스텀 플러그인 개발: 사용자는 자신만의 플러그인을 만들어 rqt에 추가할 수 있다. 예를 들어, 특정한 데이터 타입을 시각화하는 도구나, 특수한 노드 동작을 관리하는 툴을 직접 개발하여 rqt의 기능을 확장할 수 있다.
-
플러그인 설치 및 관리: rqt는 다양한 플러그인을 ROS 패키지 관리 시스템을 통해 설치하고 관리할 수 있다. 기존의 오픈소스 플러그인을 쉽게 설치하여 rqt에 추가하거나,
필요하지 않은 플러그인을 제거할 수 있다.
이처럼 rqt는 사용자의 요구에 맞추어 시스템을 관리하고, 분석하는 데 매우 유용한 툴이며, 그 확장성과 유연성 덕분에 복잡한 ROS2 시스템에서도 효율적으로 활용할 수 있다.