通过slam的节点得到了栅格地图,那定位信息应该怎么描述呢?
假设机器人开始建图的位置是地图的原点,机器人的运行过程是一边行走一边建图,机器人在地图
中的位置可以描述为机器人和地图坐标系原点的空间关系。为了方便描述,给地图和机器人各定义
一个坐标系:
地图坐标系:原点在机器人建图的初始位置,方向遵循右手法则,取名为map;
机器人坐标系:原点定在机器人底盘投影到地面的中心位置,坐标轴方向也遵循右手法则,取名为
base_footprint。
要描述机器人的位置,则将地图坐标系定义为父坐标系,机器人坐标系定义为子坐标系,那么就可
以将机器人的位置描述成子坐标系在父坐标系中xyz坐标轴的距离偏移量(z轴的偏移量通常为0)
另外一个描述量是子坐标系在父坐标系中xyz坐标轴的角度偏差值
(x轴:滚转 y轴:俯仰 z轴:偏航)由于机器人无法发生滚转和俯仰,则xy轴上的角度偏差值是0
只有z轴上的朝向角可以发生变化。
获取具体的数值——TF系统:两个坐标系的空间关系,坐标变换
TF关系通常是由特定的ROS节点以功能包的形式发布到TF话题中,其他的节点可以通过订阅话题
来查询当前运行的节点网络中都存在哪些坐标系,这些坐标系之间的空间关系又是什么样的。
eg:rviz订阅了tf的话题,使用可以直接显示tf的坐标系
运行算法以后,另外打开一个终端运行rostopic list查找包含tf的话题,使用rostopic type /tf可以查
看tf的消息格式,使用rostopic echo /tf找到map和base_footprint可以得到下图所示,其中显示了
xyz的距离和角度偏移数值。
使用rosrun rqt_tf_tree rqt_tf_tree可以得到tf树,更清晰的展示了父坐标系和子坐标系之间的关系。