ROS中map,odom坐标系的理解以及acml和robot_pose_ekf的对比和小车漂移方法解决

这篇具有很好参考价值的文章主要介绍了ROS中map,odom坐标系的理解以及acml和robot_pose_ekf的对比和小车漂移方法解决。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

之前一直不知道odom,map到底是什么关系,看了这个博客:https://blog.csdn.net/u012686154/article/details/88174195 才了解了一些。这边记录我自己的看法,看下是否正确:

1 ROS中map,odom坐标系的理解

我想解决的问题是:计算出小车在真实世界(这个坐标系称为map)的位置

我可以得到的数据:

gazebo的传感器(比如 libgazebo_ros_diff_drive.so)会在/odom topic下面发布小车在map坐标系的坐标。但是这个坐标只是根据传感器得到的,gazebo无法保证它是正确的。

于是新增了一个概念:odom坐标系。意思是gazebo本来计算的是小车在map上的坐标,但是这个这个坐标和真实值有偏差,因此把该坐标看成小车在odom坐标系上的坐标,然后odom坐标系相对于map有相对偏差。

坐标变换从base_footprint->map 变化为了:base_footprint->odom->map

2 odom坐标系的总结

  1. 只是一个概念上的坐标系,实际不存在
  2. 如果说完全相信传感器的数据,那么可以认为odom坐标系就是map坐标系
  3. 如何计算odom坐标系相对于map坐标系的位置:首先获得差速计推算出的小车坐标p,然后使用雷达再次估算小车的位置g(此时认为g比较准确,因此认为g就是小车在map上的坐标),那么差速计得到的坐标可以看成是小车在odom的坐标+odom相对于map的偏差,因此odom在map上的坐标就是p-g

3 acml和robot_pose_ekf的区别

先说下他们的共同点:

  • 都是可以估算出robot在map上的位置。
  • 虽然它们都会在某个topic发布小车的坐标,并且发布一个tf变换。tf变换可以看成一个特殊的topic,里面说明了两个坐标系的相对位置。在实际开发中,一般直接使用这个tf变换,而不是使用发布出来的坐标。

区别是:

  • acml估算的方法是输入雷达信号,然后直接算出位置。

  • robot_pose_ekf是通过将imu信号和原来里程计估算出来的坐标整合以后算出一个新的坐标。

  • 真正计算坐标的位置,更多是通过坐标变换进行的

    • acml发布了一个map到odom的变换,
    • robot_pose_ekf发布了一个odom到base_footprint的变换

比较让人困惑的是:acml应该只是知道base_footprint到odom的坐标,它怎么知道map到odom的坐标的?

我的理解是,acml觉得自己准确率非常高,因此把自己计算出的坐标当成了map上的坐标,而通过获得base_footprint到另一个坐标系的坐标,就可以获得该坐标系到map的坐标了。现在这个坐标系被称为了odom而已。

amcl能否和robot_pose_ekf一起使用?

我的理解是可以。理论上来说,因为robot_pose_ekf算出了odom到base_link的变化,而amcl计算出的odom到map的变化其实是通过map到base_link变化得到的,(base_link->map)表示base_link相对于map的坐标,那么有:

(base_link->map) = (base_link->odom) + (odom->map)

而acml计算的odom->map:

(odom->map) = (base_link->map) - (base_link->odom)

把它代入上面,发现算出来的还是acml计算出的base_link对于map的坐标,而base_link到odom的坐标不管是什么都不会产生影响。

但是实际上来说,很多包可能会用到odom坐标系,如果说不太相信里程计的话还是使用一下amcl比较好。

下面是详细解释:

从acml的描述可以看出来:

amcl transforms incoming laser scans to the odometry frame (~odom_frame_id). So there must exist a path through the tf tree from the frame in which the laser scans are published to the odometry frame.

The drawing below shows the difference between localization using odometry and amcl. During operation amcl estimates the transformation of the base frame (~base_frame_id) in respect to the global frame (~global_frame_id) but it only publishes the transform between the global frame and the odometry frame (~odom_frame_id). Essentially, this transform accounts for the drift that occurs using Dead Reckoning. The published transforms are future dated

我的理解是:acml和GPS差不多,根据雷达信息可以直接估算出机器人在map上面的坐标。但是acml提供了一个功能,就是可以指定一个别的坐标系,它帮你把map上的坐标转为该坐标系相对于map的坐标。这个坐标系一般是指定为odom。

4 小车漂移的解决方法

我的现象:小车在运动过程中一会儿飘过来,然后突然飘回去。

一开始我觉得可能是odom不准,后来把里程计坐标直接看成map上的坐标,发现小车不再飘了。于是发现是gmapping发布的map到odom的坐标不准。如果说遇到这种情况,可以按照下面的步骤排除:

  1. 如果说用的是差速计控制的小车,可以去网上找一份键盘控制小车的代码
  2. 让小车原地转圈
  3. 如果说小车原地转圈也会飘一定不是里程计的问题。事实上,如果开的不太远,里程计应该是非常准的

解决方法:文章来源地址https://www.toymoban.com/news/detail-800459.html

  1. 里程计不准可以使用robot_pose_ekf
  2. gmapping不准可以直接放弃使用gmapping发布坐标,完全相信里程计。就是里程计直接发布map到base_footprint的tf变换
  3. 如果是场景非常空旷,可以在场景中加入一些障碍物,不然雷达不会起效
  4. 可以把gmapping的miniScore改的小一点,甚至是负数。因为雷达在空旷的地区置信度为0,而出现一些小的障碍物就会导致置信度>0,转而使用雷达。而我们希望多使用差速计。

到了这里,关于ROS中map,odom坐标系的理解以及acml和robot_pose_ekf的对比和小车漂移方法解决的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 对于SLAM定位中各类坐标系的理解(坐标系,里程计坐标系,基座坐标系与雷达坐标系)

    最近系统性学习了一遍LIO-SAM,开始的时候一直搞不懂里程计坐标系,经过不断学习才有了一点自己的拙见。 引言 :首先我们搞清楚SLAM算法主要是解决建图与定位问题,其更 侧重定位 ,即让机器人知道自己在全局地图的哪个位置,只有这样才能继续后续的预测、感知、控制

    2024年02月03日
    浏览(50)
  • 【ROS系列】坐标系转换介绍和对齐

    本篇文章介绍:ECEF、ENU、UTM、WGS-84坐标系(LLA) ECEF坐标系 也叫 地心地固直角坐标系 。 原点:地球的质心, x轴:原点延伸通过本初子午线(0度经度)和赤道(0维度)的交点。 z轴:原点延伸通过的北极,也就是理想地球旋转轴。 y轴:Z--X 完成右手定则,穿过赤道和90度经

    2024年02月06日
    浏览(37)
  • WGS84以及各种坐标系

    地心地固坐标系(Earth-Centered, Earth-Fixed,ECEF),简称地心坐标系。 地理坐标系统(Geographic Coordinate System,GCS)​​1​​,坐标系是地心坐标系,用经纬度表示球面上的点。 世界大地测量系统(World Geodetic System, WGS),比如WGS84,是一种地理坐标系统,用于全球定位系统(

    2024年02月11日
    浏览(44)
  • GPS学习(一):在ROS2中将GPS经纬度数据转换为机器人ENU坐标系,在RVIZ中显示坐标轨迹

    本文记录在Ubuntu22.04-Humbel中使用NMEA协议GPS模块的过程,使用国产ROS开发板鲁班猫(LubanCat )进行调试。 在淘宝找了款性价比较高的轮趣科技GPS北斗双模定位模块作为入门学习使用,支持GNSS系统(北斗、GPS、GLONASS、日本的QZSS以及卫星增强系统SBAS),定位精度在2.5m左右,属于民用

    2024年02月03日
    浏览(69)
  • 简单理解opencv中的坐标系,x,y,h,w

    在查阅opencv有关的技术文章时,经常能够看到如下风格的函数头: 那么这里的x究竟是指图像从左往右数,还是从上往下数呢? 这里直接给出结论: 在图片img上画矩形,坐标原点是图片左上角,向右为x轴正方向,向下为y轴正方向: 上面介绍的是x,y的概念。那么height,wid

    2024年02月11日
    浏览(49)
  • unity和3d坐标系以及和ue的比较

    unity和ue都采用左手坐标系 在3d软件中,大多数软件都用红色代表x轴,绿色代表y轴,蓝色代表z轴。 不同的是 : 在unity中X轴代表右方,Y轴代表上方,Z轴代表前方; 在ue中X轴代表前方,Y轴代表右方,Z轴代表上方; 缩放 :根据自身缩放,不受坐标系影响, (移动和旋转则分

    2024年02月11日
    浏览(41)
  • 世界坐标系、相机坐标系、图像坐标系、像素坐标系

    四个坐标系都是什么? 1.世界坐标系-相机坐标系-图像坐标系-像素坐标系 2.像素坐标系-图像坐标系-相机坐标系-世界坐标系 图像处理、立体视觉等等方向常常涉及到四个坐标系:世界坐标系、相机坐标系、图像坐标系、像素坐标系                     构建世界坐标系只是

    2024年01月21日
    浏览(69)
  • 坐标转换(相机坐标系、世界坐标系、图像物理坐标系、图像像素坐标系)

    一般情况下我们所涉及到的坐标包括四个,即相机坐标系、世界坐标系、图像物理坐标系、图像像素坐标系。我们本文的讲解思路是在讲解每个坐标转换之前先讲清楚每个坐标系所表示的含义。本文主要参考由高翔主编的视觉SLAM十四讲第五章相机模型。 相机将三维世界的坐

    2024年02月09日
    浏览(74)
  • RobotStudio的基本布局方法,模型加载,工件坐标系的创建,手动操作机器人示教,以及模拟仿真机器人运动轨迹。

    1、在文件功能选项卡中,选择【空工作站】,单击【创建】,创建一个新的工作站。 2、在【基本】功能选项卡中,打开【ABB模型库】,选择【IRB2600】。 3、设定好数值,然后单击【确认】。 4、在【基本】功能选项里,打开【导入模型库】—【设备】,选择【myTool】。 5、右

    2023年04月08日
    浏览(222)
  • 世界坐标系、相机坐标系和图像坐标系的转换

    之前只是停留在会用的阶段,一直没去读懂计算的原理,今天通读了大佬的文章,写的言简意赅,感谢感谢~~特此记录一下,仅用作个人笔记 贴链接,十分感谢~ https://blog.csdn.net/weixin_44278406/article/details/112986651 https://blog.csdn.net/guyuealian/article/details/104184551 将三维物体转换成照

    2023年04月15日
    浏览(65)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包