- 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. 실행하기


