최대 1 분 소요

ROS2 node and topic concept

  • Node 노드란 ROS에서 하나의 작은 실행 단위 프로그램 (실행가능한 최소단위) 보통 하나의 노드는 하나의 책임을 가지고 있음(ex 카메라에서 이미지를 받아오는 노드, 거북이 시뮬레이션에서 거북이를 움직이는 노드) 노드는 특정 토픽을 구독하고 있다가 누군가 퍼블리시한 메시지를 받으면 콜백 함수를 실행해서 반응함 turtlesim_node는 /turtle1/cmd_vel 토픽을 구독 중이다. 구독하다가 메시지 받으면 거북이동시킴. 로봇 시스템은 여러 노드들이 결합됨

  • Topic ROS2에서 노드끼리는 서로 직접 통신하지 않고 토픽을 통해 메시지를 주고받는다. 토픽은 하나의 통신 채널 같은 것 (메시지가 흘러가는 통로) 노드는 어떤 토픽을 publish(발행)할수도 있고, subscribe(구독)할 수도 있음 예를 들어, 거북이를 움직이는 명령은 /turtle1/cmd_vel이라는 토픽으로 보내진다

  • Publish 토픽에 데이터를 보내는 것(메시지 발행)

  • ros2 run <패키지 이름=""> <노드 실행파일명=""> 거북이 시뮬레이션 패키지인 turtlesim의 turtlesim_node (움직이는 노드)를 실행 run은 노드 하나 실행의 개념 주의할 점은 정확한 노드 이름은 `ros2 node list`로 확인해야 하며 노드 실행파일명과 노드 이름은 다름

1
ros2 run turtlesim turtlesim_node
  • 값 보내기: geometry_msgs/msg/Twist라는 형식으로 ““값을 보냄
1
ros2 topic pub /turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0}, angular: {z: 1.0}}"
  • 값 보낼때 무슨 형식인지 출력
1
2
ros2 topictype /turtle/cmd_vel
>>>geometry_msgs/msg/Twist # 무슨 형식인지 출력값
  • 현재 쏴주는 값 보기
1
ros2 topic echo /turtle1/cmd_vel
  • rqt (현재 상태 값 노드 그래프 등)
1
rqt

태그:

카테고리:

업데이트:

댓글남기기