最近在Cartographer使用ODOM过程中,遇到了加入odom后建图失败,车稍微一旋转就会出现重叠,定位失败。在解决这个问题的过程中,把odom driver, cartographer launch的配置,lua文件的配置,坐标系的设定,tf关系统统熟悉了一遍。下面我介绍一下在cartographer中使用odom的一个流程,大家可以参考。
我的实验环境是:差速车,导航仪选用p+f的R2000,配备工业级高精度IMU。本文介绍中,没有使用IMU。首先明确坐标系的关系,这是很重要的,你需要了解坐标系右手定则。一般来说,odom的坐标系初始位置跟base_link, map等是重合的。在这里,我选用x轴指向车前方,
2. 准备好ODOM的驱动,关于odom的驱动,ros wiki有详细的介绍,以及示例代码。参考链接:http://wiki.ros.org/navigation/Tutorials/RobotSetup/Odomwiki.ros.org
这里要注意的是,代码可以参考,但是要理解,最终你要确保你的odom的数据完全符合你所想要建立的坐标系,不管是x,y,angle,还是vx,vy,vz,angular_x,angular_y,angular_z。
3. cartographer launch
在launch中要声明base_link和scan link的静态tf关系,或者在urdf里去声明,这里我在launch中用static_transform_publisher声明的,不了解的可以去搜一下static_transform_publisher用法。
4. lua配置