12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- # -*- coding: utf-8 -*-
- #!/usr/bin/env python
- import rospy
- import tf2_ros
- import geometry_msgs.msg
- from nav_msgs.msg import Odometry
- import tf
- def odometry_callback(msg):
- # 创建 TransformStamped 消息
- transformStamped = geometry_msgs.msg.TransformStamped()
- # 获取当前时间戳
- transformStamped.header.stamp = rospy.Time.now()
- transformStamped.header.frame_id = "odom" # 原坐标系
- transformStamped.child_frame_id = "base_link" # 目标坐标系
- # 提取平移信息
- transformStamped.transform.translation.x = msg.pose.pose.position.x
- transformStamped.transform.translation.y = msg.pose.pose.position.y
- transformStamped.transform.translation.z = msg.pose.pose.position.z
- # 提取旋转信息(四元数)
- q = msg.pose.pose.orientation
- transformStamped.transform.rotation.x = q.x
- transformStamped.transform.rotation.y = q.y
- transformStamped.transform.rotation.z = q.z
- transformStamped.transform.rotation.w = q.w
- # 发布TF变换
- tf_broadcaster.sendTransform(transformStamped)
- rospy.loginfo("Published transform from odom to base_link")
- def listener():
- # 初始化 ROS 节点
- rospy.init_node('odom_to_base_link_tf_broadcaster')
- # 创建 TF 广播器
- global tf_broadcaster
- tf_broadcaster = tf2_ros.TransformBroadcaster()
- # 订阅 /laser_odom 话题
- rospy.Subscriber('/laser_odom', Odometry, odometry_callback)
- # 保持节点运行
- rospy.spin()
- if __name__ == '__main__':
- try:
- listener()
- except rospy.ROSInterruptException:
- pass
|