ROS2 명령어

이용욱·2022년 3월 13일
0

ROS2

목록 보기
1/1
post-thumbnail

1. 토픽

토픽(topic)은 그림 1의 Node A - Node B처럼 비동기식 단방향 메시지 송수신 방식으로 msg 메시지 형태의 메시지를 발행하는 Publisher와 메시지를 구독하는 Subscriber 간의 통신이라고 볼 수 있다. 이는 1:1 통신을 기본으로 하지만 그림 2의 Node A - Node B, Node A - Node C와 같이 하나의 토픽(예: Topic C)을 송수신하는 1:N도 가능하고 그 구성 방식에 따라 N:1, N:N 통신도 가능하며 ROS 메시지 통신에서 가장 널리 사용되는 통신 방법이다.
그림 1 : 퍼블리셔와 서브르크라이버]

[그림 2: 다자간 통신]

그리고 그림 2의 Node A처럼 하나의 이상의 토픽을 발행할 수 있을 뿐만이 아니라 Publisher 기능과 동시에 토픽(예: Topic D)을 구독하는 Subscriber 역할도 동시에 수행할 수 있다. 원한다면 자신이 발행한 토픽을 셀프 구독할 수 있게 구성할 수도 있다. 이처럼 토픽 기능은 목적에 따라 다양한 방법으로 사용할 수 있는데 이러한 유연성으로 다양한 곳에 사용중에 있다. 경험상 ROS 프로그래밍시에 70% 이상이 토픽으로 사용될 정도로 통신 방식 중에 가장 기본이 되며 가장 널리쓰이는 방법이다. 기본 특징으로 비동기성과 연속성을 가지기에 센서 값 전송 및 항시 정보를 주고 받아야하는 부분에 주로 사용된다.

2. 토픽 목록 확인

$ ros2 node info /turtlesim

$ ros2 node topic list -t

$ rqt_graph
[그림 3: rqt_graph 실행 모습]

3. 토픽 정보 확인

$ ros2 topic info /turtle1/cmd_vel

4. 토픽 내용 확인

$ ros2 topic echo /turtle1/cmd_vel

5. 토픽 대역폭 확인

$ ros2 topic bw /turtle1/cmd_vel

6. 토픽 주기 확인

$ ros2 topic hz /turtle1/cmd_vel

7. 토픽 지연 시간 확인

$ ros2 topic hz /turtle1/cmd_vel

8. 토픽 발행

$ ros2 topic pub <topic_name> <msg_type> "<args>"
예) "--once" 옵션을 사용하여 단 한번의 발행만을 수행하도록 하였으며, 토픽 이름으로는 /turtle1/cmd_vel 을 사용하였고, 토픽 메시지 타입은 geometry_msgs/msg/Twist 을 사용하였다. 메시지 내용으로는 병진 속도 linear.x 값으로 2.0 m/s를 넣었고, 회전 속도 angular.z 값으로 1.8 rad/s를 입력하였다.(--rate 1 로 변경 가능)
$ ros2 topic pub --once /turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.8}}"

9. bag 기록

$ ros2 bag record <topic_name1> <topic_name2> <topic_name3>

※ 별도로 원하는 이름이 있다면 '-o' (output) 옵션 이용

ros2 bag record -o 이름 /turtle1/cmd_vel

예)
$ ros2 bag record /turtle1/cmd_vel

10. bag 정보

$ ros2 bag info <저장 폴더 명>
이 rosbag 파일은 84.4 KiB 크기에 31.602s 시간 동안 기록되었고, 기록이 언제 시작되고 언제 끝났는지 타임스태프와 취득한 토픽의 이름 메시지 형태 메시지 별 갯수와 총 갯수 등이 기록되어 있다.

11. bag 재생

$ ros2 bag play <저장 폴더 명>

ros2 topic echo /turtle1/cmd_vel
로도 확인 가능

12. ROS 인터페이스

ROS의 노드 간에 데이터를 주고받을 때에는 토픽, 서비스, 액션이 사용되는데 이 때 사용되는 데이터의 형태를 ROS 인터페이스(interface) [7]라고 한다. ROS 인터페이스에는 ROS 2에 새롭게 추가된 IDL(interface definition language)과 ROS 1부터 ROS 2까지 널리 사용 중인 msg, srv, action 이 있다. 토픽, 서비스, 액션은 각각 msg, srv, action interface를 사용하고 있으며 정수, 부동 소수점, 불리언과 같은 단순 자료형을 기본으로 하여 메시지 안에 메시지를 품고 있는 간단한 데이터 구조 및 메시지들이 나열된 배열과 같은 구조도 사용할 수 있다.

[단순 자료형]
• 예) 정수(integer), 부동 소수점(floating point), 불(boolean)
https://github.com/ros2/common_interfaces/tree/foxy/std_msgs

[메시지 안에 메시지를 품고 있는 간단한 데이터 구조]
• 예) geometry_msgs/msgs/Twist의 "Vector3 linear"
https://github.com/ros2/common_interfaces/blob/foxy/geometry_msgs/msg/Twist.msg

[메시지들이 나열된 배열과 같은 구조]
• 예) sensor_msgs/msgs/LaserScan 의 "float32[] ranges"
https://github.com/ros2/common_interfaces/blob/foxy/sensor_msgs/msg/LaserScan.msg

13. 메시지 인터페이스

지금까지 우리가 다루었던 그림 12의 /turtle1/cmd_vel 토픽은 geometry_msgs/msgs/Twist 형태이다. 이름이 좀 긴데 풀어서 설명하면 기하학 관련 메시지를 모아둔 geometry_msgs 패키지의 msgs 분류의 Twist 데이터 형태라는 것이다.

Twist 데이터 형태를 자세히 보면 Vector3 linear과 Vector3 angular 이라고 되어 있다. 이는 메시지 안에 메시지를 품고 있는 것으로 Vector3 형태에 linear 이라는 이름의 메시지와 Vector3 형태에 angular 이라는 이름의 메시지, 즉 2개의 메시지가 있다는 것이며 Vector3는 다시 float64 형태에 x, y, z 값이 존재한다.

다시 말해 geometry_msgs/msgs/Twist 메시지 형태는 float64 자료형의 linear.x, linear.y, linear.z, angular.x, angular.y, angular.z 라는 이름의 메시지인 것이다. 이를 통해 병진 속도 3개, 회전 속도 3개를 표현할 수 있게 된다.

$ ros2 interface show geometry_msgs/msg/Twist

$ ros2 interface show geometry_msgs/msg/Vector3

$ ros2 interface list
list는 현재 개발 환경의 모든 msg, srv, action 메시지를 보여주며,

$ ros2 interface packages
packages는 msg, srv, action 인터페이스를 담고 있는 패키지의 목록을 보여준다.

$ ros2 interface package turtlesim
package 옵션에 패키지명을 입력하면 지정한 패키지에 포함된 인터페이스들을 보여주고,

$ ros2 interface proto geometry_msgs/msg/Twist
proto에 특정 인터페이스 형태를 입력하면 그 인터페이스의 기본 형태를 표시해준다.


[출처] 009 ROS 2 토픽 (topic) (오픈소스 소프트웨어 & 하드웨어: 로봇 기술 공유 카페 (오로카)) | 작성자 표윤석

profile
자율주행에 관심이 있으며, Lidar SLAM을 공부하고 있습니다. [개인 홈페이지 : https://woogiee.wixsite.com/youngwooklee]

0개의 댓글