[ROS2] EP8. 두 개의 토픽을 구독하고 메세지 발행하기

김희상·2024년 7월 16일

ROS2

목록 보기
8/17
post-thumbnail

  • OS : Ubuntu 22.04
  • ROS 2 Humble
  • Gazebo 11

1. 두 토픽 구독하고 새로운 메세지타입에 발행하기

1. 코드 수정

import rclpy as rp
from rclpy.node import Node
from my_first_package_msgs.msg import CmdAndPoseVel
from geometry_msgs.msg import Twist
from turtlesim.msg import Pose

class CmdAndPose(Node):

    def __init__(self):
        super().__init__('turtle_cmd_pose')
        self.sub_pose = self.create_subscription(
                Pose, '/turtle1/pose', self.callback_pose, 10)
        
        self.sub_pose = self.create_subscription(
                Twist, '/turtle1/cmd_vel', self.callback_cmd, 10)
        self.timer_period = 1.10
        self.publisher = self.create_publisher(CmdAndPoseVel, '/cmd_and_pose', 10)
        self.timer = self.create_timer(self.timer_period, self.timer_callback)        
        self.cmd_pose = CmdAndPoseVel()

    def callback_pose(self, msg):
        self.cmd_pose.pose_x = msg.x
        self.cmd_pose.pose_y = msg.y
        self.cmd_pose.linear_vel = msg.linear_velocity
        self.cmd_pose.angular_vel = msg.angular_velocity


    def callback_cmd(self, msg):
        self.cmd_pose.cmd_vel_linear = msg.linear.x
        self.cmd_pose.cmd_vel_angular = msg.angular.z

    def timer_callback(self):
        self.publisher.publish(self.cmd_pose)


def main(args=None):
    rp.init(args=args)
    
    turtle_cmd_pose_node = CmdAndPose()
    rp.spin(turtle_cmd_pose_node)

    turtle_cmd_pose_node.destroy_node()
    rp.shutdown()


if __name__ == '__main__':
    main()
  • import 부분은 동일
  • super 가져오기
  • publisher 이름으로 create_publisher 생성
  • 데이터 타입은 CmdAndPoseVel, 토픽 이름은 cmd_and_pose
  • timer로 timer_callback을 1초에 1번 실행
  • timer_callback은 cmd_pose를 publish

2. 빌드하고 환경 부르기

3. 실행하기

  • turtlesim_publisher가 cmd_vel 토픽을 쏘고, turtlesim에 도착
  • cmd_vel 토픽은 turtle_cmd_pose로 도착
  • turtlesim이 발행하는 pose 토픽도 turtle_cmd_pose로 도착

4. echo로 관찰하기

  • topic list에서 cmd_and_pose를 구독 후 결과 확인
  • rqt_graph에서 cmd_and_pose 토픽 발행 확인
profile
3D 모델러의 개발 도전기

0개의 댓글