Page 63 - 《软件学报》2020年第9期
P. 63

2684                                 Journal of Software  软件学报 Vol.31, No.9,  September 2020

         2.2.3    接口通信
             SLAM 系统提供的接口分为输入和输出两部分.
             •   输入部分中包含:设置暂停地图,地图将暂停更新,停止对传感器数据的处理,重设置后继续;重定位功
                能,在搬动机器人后,从当前已有地图上重定位出其位姿,用当前一帧或几帧激光雷达扫描数据在地图
                中找到最佳匹配,类似于 Cartographer 中对闭环的检测;加载地图,导入之前已经建好的地图,对当前地
                图信息进行覆盖;设置机器人位姿,将当前机器人位姿设置为参数值,比如在重定位后,将得到的位姿设
                置为正确值.
             •   在输出部分中包含以下接口:获取当前完整地图、已使用地图以及增量更新地图;获取机器人位姿;保
                存地图,通过 Protobuf 将当前地图序列化保存为文件.
             在初始时,地图空间按照预定义尺寸建图(如 1000×1000,精度为 5cm),地图中心为坐标原点.获取完整地图
         是获得整个预定义好的地图,其中,网格表示等同于栅格地图,未知表示为−1,非障碍表示为 0,障碍表示为 1.已使
         用地图表示整体地图的已使用区域,返回整体地图中已知区域的最大矩形.增量更新地图则是每帧激光雷达扫
         描数据对地图的更新量.
         2.3   数据矫正及适配算法的研究

         2.3.1    激光雷达数据矫正
             机器人建图主要依靠激光雷达传感器采集的点云数据,通过基于激光雷达的 SLAM 算法实现建图与定位,
         而建图与定位的准确度非常依赖于激光雷达提供扫描数据的准确度.
             在机器人运动中,有两种会对传感器扫描数据准确度产生明显影响的特殊情况:一种是传感器发射激光束
         的可旋转部分与机器人具有相反的旋转方向,且旋转的角速度相等时,激光雷达传感器自身并不能探测到其采
         集的扫描数据是对同一个位置的多次扫描;另一种情况是机器人的前进方向垂直于一面墙,激光雷达在前进中
         不断进行扫描,在扫描过程中,机器人从远处逐渐靠近墙体,此时激光雷达采集到与机器人直面的墙面扫描数据
         将不再与机器人的前进方向所垂直,其他方向的墙面数据也与实际情况不同,只是误差相比垂直情况较小.
             只有激光雷达的旋转部分进行旋转,而机器人的其他部分没有产生相对旋转部分的运动时,传感器得到的
         扫描数据才最接近于真实环境的情况,这时的误差只有传感器自身所带来的测量误差.而在其他情况下,传感器
         采集的扫描数据不仅仅包含激光雷达旋转部分的运动,还包括机器人除旋转部分外其他部分所产生的运动                                       [23] .
         因而需要考虑激光雷达在这些运动情况下采集的扫描数据,根据扫描周期进行矫正,使扫描数据更符合所扫描
         的真实场景情况,减小误差,是进行高质量建图的基础.
         2.3.2    IMU 和里程计数据转换及处理算法
             在 Player 中,由平台传输过来的 IMU 数据和里程计数据同时得到,耦合在同一个数据结构里,原始数据无法
         直接提供给算法使用,需要进行转换处理后传递给 Cartographer.
             其中,IMU 由陀螺仪和加速度计两部分构成:陀螺仪提供各轴的角速度,加速度计提供三轴的加速度大小.
         其中,重力加速度是地表垂直方向的加速度.Cartographer 中要求陀螺仪提供的是角速度,但在 Player 中提供的
         是角度,这就需要对数据进行转化.IMU 的采集频率(30Hz)较高,角速度可以通过角度差除以时间差得到,时间差
         通过记录每次数据中附带的时间戳获取.这样,第一次的 IMU 数据并不发送给算法,只是进行一个记录.
             而加速度计部分,需要将其由四元数转化为欧拉角给算法使用.四元数和欧拉角都可以表示机器人的位姿:
         四元数可以避免万向节锁现象,提供平滑插值,但是表示不直观;欧拉角表示很直观,只用到 3 个数,但是会造成
         万向节锁现象     [24] .实际使用中,直接利用 Eigen 库构造四元数和欧拉角,调用库函数完成转换.
             里程计中的数据——机器人前进速度以及角速度,是通过对左右轮的速度计算得到,通过机器人在两个相
         邻时刻的位置变换,根据几何关系得到偏航角等于机器人绕一段圆弧运动角度得到角速度.
         3    实验测试和分析评估

             本节首先在 PC 端对增强的 Cartographer 建图质量进行测试,基于数据集对进行定量误差分析;然后基于扫
   58   59   60   61   62   63   64   65   66   67   68