ROS中坐标关系理解(基于cartographer和navigation)

本文探讨ROS中坐标转换的重要性,介绍ROS常用坐标系如map、odom和base_link,阐述tf/tf2在坐标变换中的角色,并讨论map与odom的关系。作者通过实例解释了如何将不同传感器数据转换到同一坐标系,以及如何让ROS理解和发布坐标系转换关系。
摘要由CSDN通过智能技术生成

写在前面:

下面其实相当于自己在ROS实践中对于坐标关系的一些理解,主要是cartographer建图和navigation导航中用到的坐标转换,可能有些地方理解的不对或者不全面,非常希望有缘看到的朋友斧正或者提出意见,也希望交个朋友做进一步的技术交流。

首先我们需要明确一点,ROS中的坐标系之间的关系及实时的变换是通过tf/tf2来发布的,tf树的作用就是:定义不同坐标系之间的平移与旋转变换关系,并且持续追踪多个坐标系内的变化情况。

问题1: 我们为什么需要坐标转换?

在ROS中我们会涉及到多个传感器,如激光雷达,摄像头,imu,odom等,而每个传感器发布的数据都是基于自己的坐标系(frame_id)的,这样当我们对多传感器数据融合的时候,必须将所有的数据先转换到同一个坐标系下,然后才能进行后续的数据融合,因此坐标系转换是非常重要且基础的一步。

问题2: ROS中有哪些常用到的坐标系?

参考链接:https://www.ros.org/reps/rep-0105.html#id8

我们假设一个场景:一辆携带有多个传感器的小车在某个环境中行走

 

map:这是一个世界固定的坐标系,z轴指向上面。在此坐标系下的机器人的位姿不会有漂移,因为他会依据传感器测量不断的计算机器人位姿,但是他不保证连续,因此可能会有大的跳跃,在长时间全局定位很有用,但是短期局部定位作用有限。

如何理解map呢? 根据我们的场景,小车在环境中行驶,map就可以看作是描述这个环境的坐标系,他是不变的,比如说环境里有颗树,位置是(5.1,6.2,1.0),那么从map坐标系来看,这颗树的位置就已经固定了,是不会变的,因此其是一个全局坐标系,小车定位说白了就是通过算法能够更加精确的知道小车在map中的位置。

odom:里程计坐标系也是一个全局固定的坐标系,但是他和map不一样,他是通过编码器或者视觉里程计计算出来的,比方说小车静止的时候,其在odom坐标系下的位置是(0.,0.,0.),当小车开始运动的时候,通过编码器不断的计算其走了多少,如果他往前走了一米,那么其在odom坐标系下的位置是(1.,0.,0.),可以看到odom似乎也是不动的,那和map不久一样了吗?非也,如果轮子突然打滑了一米,那么小车在odom坐标系下的位置是(2.,0.,0.),但其在map下的位置和打滑前是一样的。其实odom与map的关系是值的继续探讨的,我们放在后面,这里只是介绍一下odom坐标系。

base_link或者base_footprint:他们都是表示的是小车本体的坐标系,在cartographer中为base_link,在navigation中其是base_footprint,但是他们都表示的是小车本体,也就是以小车为参考系,其他物体的位置,这个坐标系很重要,因为小车上安装的其他传感器都要和base_link和base_footprint建立联系。

其他传感器坐标系: 比方说常用的摄像头,imu等等,他们都有自己的坐标系,而坐标系的名字可以在他们的ROS驱动包里修改,重要的

  • 13
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
FAILED: CMakeFiles/cartographer.transform.timestamped_transform_test.dir/cartographer/transform/timestamped_transform_test.cc.o /usr/bin/c++ -DBOOST_ALL_NO_LIB -DBOOST_IOSTREAMS_DYN_LINK -DGFLAGS_IS_A_DLL=0 -I../cartographer -I. -I../ -isystem /usr/include/eigen3 -isystem /usr/include/lua5.2 -O3 -DNDEBUG -pthread -fPIC -Wall -Wpedantic -Werror=format-security -Werror=missing-braces -Werror=reorder -Werror=return-type -Werror=switch -Werror=uninitialized -O3 -DNDEBUG -pthread -fPIC -Wall -Wpedantic -Werror=format-security -Werror=missing-braces -Werror=reorder -Werror=return-type -Werror=switch -Werror=uninitialized -O3 -DNDEBUG -std=gnu++11 -MD -MT CMakeFiles/cartographer.transform.timestamped_transform_test.dir/cartographer/transform/timestamped_transform_test.cc.o -MF CMakeFiles/cartographer.transform.timestamped_transform_test.dir/cartographer/transform/timestamped_transform_test.cc.o.d -o CMakeFiles/cartographer.transform.timestamped_transform_test.dir/cartographer/transform/timestamped_transform_test.cc.o -c ../cartographer/transform/timestamped_transform_test.cc In file included from ../cartographer/transform/timestamped_transform_test.cc:17: ../cartographer/transform/timestamped_transform.h:21:10: fatal error: cartographer/transform/proto/timestamped_transform.pb.h: No such file or directory 21 | #include "cartographer/transform/proto/timestamped_transform.pb.h" | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compilation terminated. [44/380] Building CXX object CMakeFiles/cartographer.sensor.internal.voxel_filter_test.dir/cartographer/sensor/internal/voxel_filter_test.cc.o
07-23
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值