文章目录
由于网上相关资料较少,在学习ROS时对TF变换关系还是一知半解,故利用实体机器人验证 【ROS】map、odom、base_link坐标系与坐标系变换关系里个人总结的一些结论,供参考。
1 启动
# 开ros
roscore
# 开键盘控制
roslaunch xtark_ctl xtark_keyboard.launch
# 开雷达、底盘、里程计等
roslaunch xtark_driver xtark_bringup.launch
# 开定位导航包
roslaunch xtark_nav lj_nav.launch map_file:=/home/xtark/ros_ws/src/xtark_nav/maps/ljmap.yaml
2 TF树
3 订阅map->footprint关系
3.1 运行功能包tf_subscriber
#!/usr/bin/env python
import rospy
import tf2_ros
if __name__ == '__main__':
rospy.init_node('tf2_listener')
tfBuffer = tf2_ros.Buffer()
listener = tf2_ros.TransformListener(tfBuffer)
rate = rospy.Rate(10) # 设置循环频率为10Hz
while not rospy.is_shutdown():
try:
transform = tfBuffer.lookup_transform("map", "base_footprint", rospy.Time())
print(transform)
except (tf2_ros.LookupException, tf2_ros.ConnectivityException, tf2_ros.ExtrapolationException):
rospy.logwarn("Failed to lookup transform")
rate.sleep()
可以输出map->footprint变换关系,但是连成一片,可读性差且不灵活。
3.2 命令行rosrun tf tf_echo …
可以直接用命令
rosrun tf tf_echo map <其他坐标系>
输出两个坐标系之间的变换关系。
4 一些实验结果
4.1 刚刚启动雷达、底盘、里程计等,启动定位导航包
odom->base_footprint:保持 [ 0 , 0 , 0 ] [0,0,0] [0,0,0]和 [ 0 , 0 , 0 , 1 ] [0,0,0,1] [0,0,0,1]不变
map->odom:保持 [ 0 , 0 , 0 ] [0,0,0] [0,0,0]和