里程计是衡量我们从初始位姿到终点位姿的一个标准,通俗的说,要实现机器人的定位与导航,就需要知道机器人行进了多少距离,是往哪个方向行进的。举例来说,gmapping导航建图包里建图需要里程计信息,且导航也需要。
hector建图有个缺点,如果雷达不够精确,那么建出来的图会导致定位不够精确,这是我们不期望的,所以要实现精确的定位与导航,需要加入里程计信息。
ROS gmapping导航包,要求有2个输入,一个是激光数据,另一个就是里程计信息。里程计又包含2个方面的信息。
一、是位姿(位置和转角)即(x,y,θ)
二、是速度(前进速度和转向速度)
那么问题来了,这些数据该如何获取呢?
里程计信息的数据获取的路径有
一、采用编码器点击来获取
二、采用ROS里的package:laser_scan_matcher\
这个包能根据/scan数据发布2D位姿的数据,是否可以根据2D位姿数据来转换成表示位置的x,y,z以及表示姿态的四元数,理论上是可以的。(四元数就是形如 ai+bj+ck+d 的数,a、b、c、d是实数)
速度的获取,还是根据2D位姿和时间变量,来计算前进速度和转向速度,2D位姿数据包含,float64 x, float64 x, float64 y, float64 theta,根据dt 时间里dx,dy,dtheta, 就可以算出前进速度,和转向速度。如果2D位姿数据足够精准,基本都用不上陀螺仪校准。