首先是使用到的依赖项:rospy、tf,可以手动在package.xml里添加,如果使用vscode创建功能包,则在填写依赖项时会帮我们补充完整
接下来是创建第一只小乌龟的并广播坐标系的py文件代码:
命名为demo01_turtle1
#! /usr/bin/env python
# coding: utf-8
import rospy
from turtlesim.msg import Pose
from tf.broadcaster import TransformBroadcaster
from tf.transformations import quaternion_from_euler
def pose_callback(msg):
if not isinstance(msg, Pose):
return
x = msg.x
y = msg.y
theta = msg.theta
translation = (x, y, 0)
rotation = quaternion_from_euler(0, 0, theta)
broadcaster.sendTransform(translation, rotation, rospy.Time().now(), "turtle1", "world")
if __name__ == '__main__':
node_name = "demo01_turtle1"
rospy.init_node(node_name)
broadcaster = TransformBroadcaster()
pose_topic_name = "/turtle1/pose"
rospy.Subscriber(pose_topic_name, Pose, pose_callback)
rospy.spin()
下面详细地解释每一行代码的作用:
import rospy # 导入ROS库
from turtlesim.msg import Pose # 从msg文件里导入乌龟Pose消息
from tf.broadcaster import TransformBroadcaster # 通过 TransformBroadcaster 类来发布变换关系的接口
from tf.transformations import quaternion_from_euler # 导入欧拉角转化成四元数的函数
def pose_callback(msg):
if not isinstance(msg, Pose): # 判断数据类型,数据不符合就退出函数
return
x = msg.x # 赋值,用于计算四元数和广播坐标系