朱增添,张 鹏,杨依玲,温戈平,张勇超,张子园
随着现代科技的高速发展,各种自动化设备层出不穷,机器人开始走入了人们的生活,从农业机械到工业设备,而服务型机器人更是受到了广泛关注。但室内机器人的普及还存在许多问题亟待解决,定位与导航就是其中的关键问题之一。
在这类问题的研究中,需要把握三点:一是地图精确建模;二是机器人准确定位;三是路径实时规划。
近几年,出现了多种有效的解决方法,例如,即时定位与地图构建,蒙特卡罗定位算法,动态窗口逼近避障算法,等等[1]。
为了保证室内移动机器人的全向移动特性,本文采用麦克纳姆轮作为驱动轮,设计和制作了移动机器人底盘和车载结构,设计了集成激光雷达、摄像头、超声波传感器的硬件控制系统,上位机采用工控机搭载的ROS,下位机采用STM32 嵌入式系统,基于ROS 设计了地图构建算法,实现了高精度的地图构建。
普通的机器人轮子很难实现全向移动,若想要实现机器人的全向移动,一般使用全向轮或麦克纳姆轮。相比全向轮,麦克纳姆轮的灵活性和机动性较强,有利于控制机器人纵向X 和横向Y 的速度分量以及ω 旋转的角速度,提高机器人的运动稳定性。由于本文所设计的机器人需要进行地图构建自主导航运动,且重心较低,因此,在运动过程中为了方便避障,本文选用麦克纳姆轮。
机器人车体主要分为上、中、下3 层设计,上层因为视野开阔,用来放置显示屏与kinect 2 摄像头,方便使用者操作与检查;用于地图建模和检测周围环境的激光雷达也放置在上层,避免扫描不到关键的障碍物;中层放置下位机,包含STM32 单片机、各类电气元件以及散热机构;下层用于放置麦克纳姆轮以及排线。通过这样有序的排列,可以有效地节省空间,并且使得各器件可以更好地发挥其特有功能。
为了减轻机器人重量,同时能够承受其相应的行驶速度所带来的最大冲击,选择用铝板作为分层基板,同时,在装载各电气元件时,在铝板上留足空间,防止在撞击时损坏元器件。我们通过三维建模,通过3 代机器人结构的改进,得到了一套完整可靠的机器人结构。设计和试制的全向移动机器人如图1 所示。整车尺寸为长330mm,宽387mm,高238mm,重量为3.7kg。
图1 移动机器人实物图
移动机器人的控制系统包含上位机和下位机,上位机采用Ubuntu16.04 系统搭载ROS Kinetic 机器人操作系统,借助开源功能包slam_gmapping 和navigation 实现机器人的即时定位与地图构建以及机器人的定点导航功能。
为了保证程序处理速度,为后续加入更多模块打下基础,同时兼顾体积、重量、成本、可靠性等因素,选用i5 4200U 工业工控机来运行ROS 系统,配合4G 运行内存,能轻松完成计算任务。在工控机上运行ROS 节点,获取下位机上传的机器人传感器信息,以及激光雷达环境信息,通过move_base功能包实现路径规划,发布速度信息。
采用STM32F103 处理芯片来获取和处理底层运动控制及传感器信息,该芯片搭载FreeRTOS 实时处理系统,通过任务调度机制,可实现多任务高效稳定运行。下位机主要功能是实现机轮运动速度闭环控制。麦克纳姆轮对于各个轮子之间的速度控制精度要求较高,故采用高精度500 相光电编码器,通过STM32 正交解码获取运动速度,使用增量式PID 控制,处理周期为10ms。在突遇急刹时,利用加速度限幅控制机器人逐渐减速,运动过程更加平稳。采用500 相光电编码器积分得来的里程计信息准确,有利于实现精确的自主导航。惯性测量单元(IMU)测出机器人的加速度、角速度和三轴磁场偏角,使用卡尔曼滤波器对这些数据进行融合,最终得到加速度ax、ay 和姿态角θ。对ax 和ay 进行两次积分,获得了欧拉角[2]。底层控制主板上使用PH2.54 排线,接线可靠,便于更换。上下位机之间通信采用USB-TYPEB 接口,结构紧凑,能够保证上下位机的通信质量。
移动机器人在地图中的定位以及各个节点(joint)之间的关系是通过TF-Tree 建立起来的。TF 是一个用户随时间跟踪多个坐标系的包,机器人不同部位和世界的坐标系以tree structure 的形式存储起来,TF 管理一系列的树状结构坐标系之间的关系,允许用户在各个坐标系中进行点、向量的变换;将各种信息的发布者位置与base_link(小车底盘中心坐标)联系,在运动过程中实现各个关节的坐标转化。图2 是TF-Tree 所管理发布的TF坐标系转换关系。图3 是各个节点之间的通信关系,发布控制信息,在节点之间实现数据的交互。
图2 TF坐标系转换图
图3 节点通信图
移动机器人的自主导航需要地图信息,在位置确定的情况下通过自身携带的激光雷达、里程计和IMU 来获取周边信息进行自主定位。SLAM 是指机器人在陌生环境中通过获取自身传感器数据,实现在陌生环境中的自主定位与环境地图构建。机器人依据SLAM 构建的室内环境地图进行路径规划,同时利用机载传感器数据自主避障到达目标点[3]。
Gmapping 算法[4]是基于粒子滤波RBPF(Rao-Blackwellized Particle Filter) 的SLAM 算法。RBPF 将 SLAM 分为两个问题,一是机器人的位姿估计,二是基于位姿估计进行环境特征估计。前者使用粒子滤波算法进行递归运算,后者使用扩展卡尔曼滤波估计得到环境特征的路标。Gmapping 可以实时构建室内地图,有效利用车轮里程计信息[5],对激光雷达频率要求低、鲁棒性高,不需要太多的粒子,没有回环检测,故在构建小场景地图的精度较高且计算量较小。
amcl 蒙特卡洛定位使用粒子滤波来进行定位。粒子滤波方法在地图空间均匀地撒一把粒子,通过获取机器人的移动信息来移动粒子。将每个粒子所处位置模拟的传感器信息与观察到的传感器信息作对比,赋予每个粒子一个概率,并利用这个概率来重新生成粒子,概率越高,生成的概率越大。经过多次迭代,所有粒子会逐渐收敛到一起,机器人的确切位置就被推算出来了[6]。
调用move_base 作为导航过程运动控制的最终执行机构,订阅用户发布的导航目标位置点,并将实时运动控制信号cmd_vel 下发给底盘以实现最终运动控制。move_base 中的各种导航算法模块都是以插件的形式进行调用,有利于替换不同的算法以适应不同的应用。move_base 节点通信机制如图4 所示。图中global_planner 用于全局路径规划,local_planner 用于局部路径规划,golobal_costmap 是全局代价地图用于描述全局环境信息,localcostmap 是局部代价地图用于描述局部环境信息,recovery_behaviors 是恢复策略用于机器人碰到障碍后自动进行逃离恢复。
图4 move_base节点通信机制
通过SLAM 和move_base 的结合,在没有得到地图的情况下,通过在rviz 上给定目标点,发布给move_base 节点计算出路径,在向目标点运动的同时,激光雷达扫描周边环境,完成探索式的地图构建。图5 显示了工作室地图构建的过程,L 型工作室面积约60 平方米,机器人经过4 个关键位置后地图基本建立起来了。房间地图的墙壁边缘清晰,图中桌子等障碍物位置与实际位置相吻合,为下一步实现自主定位导航提供了良好基础。
图5 地图构建过程
加载房间地图资源,并运行amcl 节点,设置初始地点和目标地点,机器人会根据全局代价地图计算出一条通向目标点的最佳路径。在运动过程中,如遇到突发情况,局部代价地图修正路线使其安全到达目标地。图6 中的绿线为机器人自主导航的实时路径情况。最佳路径选择比较合理,经过两次90°转向,绕开桌子障碍物,最终到达目标点。
图6 自主定位导航
从底层开始开发了一个基于ROS 的室内移动机器人,自主设计了机械结构,编写了嵌入式程序,完成了上下位机之间的通信协议,实现了机器人的定位导航功能;掌握了整套移动机器人开发机制,得到了一个性能可靠的移动机器人底盘,为接下来结合MoveIt 及双目视觉实现移动机器人装备6 自由度机械臂自由抓取物体打下基础。