2024. 9. 20. 11:22ㆍROS2/기초
Moving Robot
cd ~/ch_ws
source install/setup.bash
#terminal 1
ros2 launch gcamp_gazebo/gcamp_world.launch.py
#terminal 2
ros2 run py_topic_pkg cmd_vel_pub_node
[INFO] [1624889609.708600174] [cmd_vel_pub_node]: DriveForward node Started, move forward during 5 seconds
[INFO] [1624889610.195565654] [cmd_vel_pub_node]: 1 seconds passed
[INFO] [1624889610.695526857] [cmd_vel_pub_node]: 1 seconds passed
[INFO] [1624889611.195481779] [cmd_vel_pub_node]: 2 seconds passed
[INFO] [1624889611.695450639] [cmd_vel_pub_node]: 2 seconds passed
[INFO] [1624889612.195593873] [cmd_vel_pub_node]: 3 seconds passed
[INFO] [1624889612.695474598] [cmd_vel_pub_node]: 3 seconds passed
[INFO] [1624889613.196404202] [cmd_vel_pub_node]: 4 seconds passed
[INFO] [1624889613.695493502] [cmd_vel_pub_node]: 4 seconds passed
[INFO] [1624889614.195716743] [cmd_vel_pub_node]: 5 seconds passed
[INFO] [1624889614.196065373] [cmd_vel_pub_node]:
==== Stop Publishing ====
gazebo상에서 로봇이 5초동안 움직이다가 멈춤
본 예제는 gazebo 시뮬레이션 상의 로봇에게 skidbot/cmd_vel Topic publish를 한 것 입니다.
ROS2 topic
위와 같은 rqt_graph상에서 각 노드들 사이에 화살표는 데이터가 오고 간다는 것을 의미하며 이를 topic이라 지칭
정의에 따르면 topic은 node들 사이에 데이터(message)가 오고 가는 길(bus)을 의미
데이터를 주는 노드를 publisher 받는 노드를 subscriber
더불어, Topic은 여러 Node들로 부터 데이터를 받을 수 있고, 전송 시에도 여러 Node들에게 전송이 가능한 방식입니다. (특징)
ROS2에서는 주로 사용되는 이러한 데이터 형식을 message 형태로 제공하며, 기본 제공되는 형태에 더불어 사용자가 직접 커스터마이징할 수도 있습니다
내가 만들고자 하는 topic이 어떤 message type을 사용해야 할 지 선택하기 위한 방법은 다음과 같습니다.
- 오픈소스 프로젝트를 참고 합니다. (거의 대부분의 경우, 만들고자 하는 기능은 다른 사람도 작업해뒀을 확률이 높습니다.)
- 정말 새로운 센서이거나, 특별한 기능의 구현이 필요할 경우, 혹은 기존의 메세지들 중 취합하여 통합된 형태를 만들고 싶다면 ⇒ 직접 새로운 메세지를 선언합니다.
우리가 사용한 cmd_vel_pub_node는 어떤 message type을 사용했는지 살펴보기
실습을 위해 계속해서 publish하는 노드 실
ros2 run py_topic_pkg endless_cmd_vel_pub_node
실행중인 topic의 리스트와 특정 topic의 정보를 알고 싶을 때, 다음과 같은 커멘드를 사용합니다.
$ ros2 topic list
/parameter_events
/rosout
/skidbot/cmd_vel
$ ros2 topic info /skidbot/cmd_vel
Type: geometry_msgs/msg/Twist
Publisher count: 1
Subscription count: 1
특정 message가 어떻게 구성되어 있는지 확인하고 싶을 때 다음과 같은 커멘드 사용
ros2 interface show geometry_msgs/msg/Twist
Vector3 linear
Vector3 angular
커멘드를 사용해서 아까와 같은 결과도 만들어 낼 수 있음(실수하기 쉬워서 테스트용으로만 사용)
$ ros2 topic pub --rate 1 /skidbot/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 0.5, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.0}}"
$ ros2 topic pub --once /skidbot/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 0.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 0.0}}"
실행이 잘 되고 있는지 확인하고 싶을 때
$ ros2 topic echo /skidbot/cmd_vel
---
linear:
x: 0.5
y: 0.0
z: 0.0
angular:
x: 0.0
y: 0.0
z: 1.0
---
linear:
x: 0.5
y: 0.0
z: 0.0
angular:
x: 0.0
y: 0.0
z: 1.0
rqt graph에서 타원은 Node, 직사각형은 Topic입니다.
'ROS2 > 기초' 카테고리의 다른 글
ROS2 2일차(5) tf2 (0) | 2024.09.20 |
---|---|
ROS2 2일차(4) topic 프로그래밍 (0) | 2024.09.20 |
ROS2 2일차(2) launch (0) | 2024.09.20 |
ROS2 2일차(1) node (0) | 2024.09.20 |
ROS2 1일차 Gazebo 월드 생성 및 모델 (0) | 2024.09.19 |