ROS中odom、map坐标系的理解

学ROS大半年了,之前一直没搞明白odom和map,今天重新查资料看博客加自己思考才真正理解了。深深怀疑自己的理解能力。。。

此处参考了https://blog.csdn.net/flyinsilence/article/details/51854123,博主的解释一开始我还是没太看明白,看了好几遍才看懂,懂了之后才发现人家写的真的是言简意赅啊!

我就详细的把自己的理解以及想到的例子写出来,万一有人也是不太明白这个呢。

举个栗子

比如说我现在算出来了一个一维的坐标X=10(odom-->base_link),但是这个位置的真实坐标应该是X'=2(map-->base_link),也就是说我计算的坐标和真实坐标出现了偏差。但是ROS在说的时候换了个说法,不说计算出来的坐标在map中漂了8,而是说是odom坐标系相对于map坐标系漂了8。所以此时base_link相对odom坐标是真实坐标x=2(因为odom坐标系短时间是准确的,如果是刚开始时odom和map重合,odom中的该坐标就是真实坐标);odom相对于map坐标是driftX=8(map-->odom);最后计算出来的base_link相对于map的坐标就是X=drixfX+X'=10了。

如果用IMU作积分的话,通过IMU获得的是odom坐标系下的坐标,初始时odom和map重合,都为0。那么短时间内,由于IMU的漂移很小,所以获得的位移deltaX是准确的,最终的在odom坐标系下的坐标是X=dextaX,在map中的坐标X'也是deltaX。但是时间长了之后,IMU积分开始产生漂移driftX了,最终在map下的坐标X=deltaX+driftX。由于我们定义IMU在短时间内产的的位移deltaX是准确的,所以deltaX是就是IMU在odom坐标系下的真实位移,但是此时odom相对于map则漂移了driftX。

 

所以odom相当于是根据实际计算得到的坐标和真实坐标之间的变换虚拟出来的一个坐标系。

 

Relationship between Frames

The map frame is the parent of odom, and odom is the parent of base_link. Although intuition would say that both map and odom should be attached to base_link, this is not allowed because each frame can only have one parent.

(尽管直觉上map和odom都应该和base_link连接,但是这是不行的,由于每个坐标系只能有一个父坐标系)

  • 55
    点赞
  • 178
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,作为参考资料学习借鉴。 3、本资源作为“参考资料”如果需要实现其他功能,需要能看懂代码,并且热爱钻研,自行调试。 基于ROS的激光雷达+小车+IMU的SLAM建图、定位、路径规划c++实现源码+项目说明.zip # 单线激光雷达SLAM建图与路径规划 使用的硬件:autolabor pro1小车、小觅双目相机(S1030标准版本)、IntelNUC迷你主机、显示器、2D激光雷达 Delta-1A 使用的软件:ubuntu 16.04 LTS、ROS-kinetic、小觅驱动、autolabor pro1小车驱动、Delta-1A驱动、VINS-Fusion算法、ROS-navigation导航包、gmapping建图算法、cartographer_ros建图算法 ## tf介绍 tf变换:map(地图坐标系)-->odom(里程计坐标系)——>base_link(小车基座坐标系)——>传感器坐标系(lidar、camera) ---- map-->odom 由建图算法提供 ---- odom --> base_link 由小车驱动提供 ---- base_link --> 传感器坐标系 根据传感器在小车上安装的位置确定,使用static_transform_publisher静态坐标转换来设置 所需传感器数据类型: sensor_msgs/LaserScan 使用Delta-1A驱动发布的雷达扫描话题,话题名:/scan 所需里程计信息数据类型:nav_msgs/Odometry 使用autolabor pro1发布的里程计,话题名:/wheel_odom ## 建图 采用gmapping与 cartographer_ros建图算法分别进行建图 ### gmapping建图:(雷达+小车) 打开终端,执行如下指令: $ cd ~/catkin_ws_lidar_slam/ $ source devel/setup.bash $ roslaunch autolabor_box_launch create_map_gmapping.launch ####打开小车urdf模型、驱动、键盘控制节点、打开雷达驱动、打开gmapping节点、打开rviz可视化节点 ####此时使用键盘的上下左右键控制小车移动,开始建图 ####建图完成后,开启新的终端执行如下指令,保存地图: $ rosrun map_server map_saver -f map_name ####保存地图 map_name为保存地图的名称,运行结果,会生成2个文件,后缀名分别为 .pgm .yaml ### cartographer_ros建图:(雷达+小车) ##打开终端,执行如下指令: $ cd ~/catkin_ws_lidar_slam/ $ source devel/setup.bash $ roslaunch autolabor_box_launch create_map_cartographer.launch ####此时使用键盘的上下左右键控制小车移动,开始建图 ####建图完成后,开启新的终端执行如下指令,保存地图: $ rosrun map_server map_saver -f map_name ......
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值