上次总结了 ROS 机器人技术 - TF 坐标系统基本概念,这次学习下如何发布静态坐标转换,静态 TF 官方教程在这里。
一、我在项目中应用 TF 的方法
先说下这个静态坐标转换在我项目中的应用,我在建图的时候需要一个 rslidar -> world
的 TF 变换,但是系统 TF 树中只有师兄 lego_loam 的 base_link -> world
的转换,所以为了获取 rslidar -> world
,我用 Kinetic 提供的工具手动发布了一个静态的 TF:
# 欧拉角
rosrun tf2_ros static_transform_publisher x y z yaw pitch roll frame_id child_frame_id
# 四元数
rosrun tf2_ros static_transform_publisher x y z qx qy qz qw frame_id child_frame_id
我用的第一种参数类型,因为我只是想要 rslidar -> world
的变换存在,不需要真实的旋转和平移,所以我把 6 个转换参数都设置为 0:
rosrun tf2_ros static_transform_publisher 0 0 0 0 0 0 base_link rslidar
这样我就能在系统中找到 rslidar -> world
了,但是这句话是在命令行中运行的,每次测试都要运行一遍很麻烦,所以我把上面这句加到我的 launch 中,跟测试的节点一同启动:
<launch>
<!-- 其他节点 -->
<node pkg="tf2_ros" type="static_transform_publisher" name="dlonng_static_transform_publisher" args="0 0 0 0 0 0 base_link rslidar" />
</launch>
以上就是这一节静态的 TF 帮我完成的工作,下面就带你手动实现一个静态 TF 发布程序,实际使用的时候不用自己写,直接使用已经提供的 static_transform_publisher
即可。
二、自己编写静态 TF 发布者
先在你的工作空间创建一个 learning_tf2
包,记得 source devel/setup.zsh
:
catkin_create_pkg learning_tf2 tf2 tf2_ros roscpp rospy turtlesim
然后进入这个包中,如果已经知道包名且环境变量也 source<