ROS(6)AGV方向-坐标管理系统

6. ros中坐标系管理系统

【 原理 】 : 通过tf包的发布功能,可以发布一组坐标之间的转换关系(平移+旋转), 构建一个树形结构,然后通过lookupTransform()接口可以获取任意两个坐标之间的转换关系,不用自己再计算了,强大!!即通过tf广播器广播坐标映射关系,通过tf监听器得到任意两个坐标系之间的关系

6.1. 代码解释

  • 创建坐标映射
 static tf::TransformBroadcaster tfb;  
 tfb.sendTransform(tf::StampedTransform(tr, ros::Time::now(), "world", strTurtlename));   
  • 获取坐标映射
 tf::TransformListener listener;  
 tf::StampedTransform tr;
 listener.waitForTransform("/turtle2", "/turtle1", ros::Time(0), ros::Duration(3.0)); //从当前时间开始,等待一段时间3s,没有数据应该会异常(猜的),有数据返回  
 listener.lookupTransform("/turtle2", "/turtle1", ros::Time(0), tr); //获取转换关系   

6.2. 相关指令

  • rosrun rqt_tf_tree rqt_tf_tree :显示tf关系图
  • rosrun tf view_frames : tf功能包中的一个工具,监听一段时间,5s内所有坐标系之间的关系保存成pdf文件。其中展示tf树,表示有多少个坐标系及他们之间的关系。
  • rosrun tf tf_echo 坐标系1 坐标系2 : 实时打印两个坐标系之间的关系:
    Translation: [-0.000, -0.000, 0.000] 表示坐标系之间的平移向量
    Rotation: in Quaternion [0.000, 0.000, 0.599, 0.801] 表示坐标系之间的旋转向量,本行是四元数方式[x,y,z,w]
    in RPY (radian) [0.000, -0.000, 1.284] 弧度表示,表示每个轴旋转的角度
    in RPY (degree) [0.000, -0.000, 73.549] 度表示,表示每个轴旋转的角度
  • 可视化工具rviz:rosrun rviz rviz -d rospack find turtle_tf /rviz/turtle_rviz.rviz
  • rosmsg info tf2_msgs/TFMessage查看消息内容:
geometry_msgs/TransformStamped[] transforms
std_msgs/Header header
  uint32 seq
  time stamp
  string frame_id 
string child_frame_id #子坐标系
geometry_msgs/Transform transform
  geometry_msgs/Vector3 translation
    float64 x
    float64 y
    float64 z
  geometry_msgs/Quaternion rotation
    float64 x
    float64 y
    float64 z
    float64 w

6.3. ROS基本坐标系理解:map, odom, base_link, base_footprint, base_laser等等

参考链接https://blog.csdn.net/weixin_46181372/article/details/109694300

  • map
    地图坐标系,顾名思义,一般设该坐标系为固定坐标系,一般与机器人所在的世界坐标是重合的。
  • base_link
    机器人本体坐标系,与机器人中心重合。
  • base_footprint
    为base_link原点在地面的投影,和base_link只是z值不同。
  • odom
    里程计坐标系,这里主要区分odom topic,这是两个概念,一个是坐标系,一个是根据编码里程计计算得到的里程计信息。但是两者也有关系,odom topic转化得到的位姿矩阵是odom->base_link的tf关系。

两个问题:
①位姿矩阵得到的不应该是map->base_link的tf关系吗?map坐标系与odom坐标系又有什么关系?
其实机器人刚开始运动时,odom坐标系与map坐标系是重合的,即odom->base_link与map->base_link的tf是一致的。
但是随着时间的推移,出现了偏差,出现的偏差也就是里程计的累计误差,如果里程计精确度很高,没有计算误差,那么map坐标系与odom坐标系会一直是重合的。
然而实际情况中,里程计是有偏差的,所以我们计算里程计得到的位姿矩阵是odom->base_link,与map->base_link还是有偏差的。
②那么map->odom的tf是怎么得到的呢?
除去里程计还有一些合作校正的传感器例如imu,这些传感器可以估计出机器人在地图中的位置也就是map->base_link的tf,我们估计机器人在地图中的位置和解算里程计得到的位置的偏差也就是map->odom的tf。

  • base_laser
    激光雷达坐标系,与激光雷达的安装点有关,它与base_link的tf是固定的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值