赵伟成,毛恩兵,莫仁函,叶志毅,王嘉豪
(西南民族大学电气工程学院,四川成都 610225)
随着物流业务的不断发展和市场需求的不断提高,无人车配送系统可以极大地提高物流效率和降低成本,逐渐成为一个备受关注的领域,具有广泛的应用前景。然而,无人车配送系统的研发仍然面临着许多技术挑战,如何实现精准的自主导航和配送功能是一个关键问题。随着机器人技术和人工智能技术的快速发展,机器人操作系统(Robot Operating System,ROS)提供了一系列功能强大的工具和算法,帮助研究人员开展无人车自主导航、路径规划、环境感知和建图等功能的开发,被广泛应用于无人驾驶机器人的研究中。本文基于ROS 设计并实现了一种无人车配送系统,采用二维激光雷达感知环境信息,利用步定位与地图构建(Simultaneous Localization And Mapping,SLAM)技术进行自主建图,利用时间弹性带(Time Elastic Band,TEB)算法进行路径规划,实现无人车的运动控制、自主导航和配送功能。同时,为了实现与上位机的通信,本文采用C#编写了上位机客户端应用程序,并通过Socket接口实现上位机系统与无人车配送系统之间的通信,发布无人车启停、目标点位置指令,控制无人车自主将货物运动至目标位置。
无人车配送系统实际上是一个无人驾驶的移动机器人,从控制的角度看,其结构框图如图1所示,主要包括控制系统、驱动与执行机构和传感器系统。
图1 移动机器人系统结构
控制系统类似于人的大脑,主要实现任务及信息的处理,输出控制命令信号,实现机器人的算法处理、运动控制、人机交互、系统监督等功能。传感器系统包括内部传感器和外部传感器,相当于人体的感官和神经,主要完成信号的采集和反馈,实现机器人对所处环境的感知。驱动与执行机构包括驱动系统和执行机构,主要将控制系统下达的命令转化成执行机构需要的信号,驱动执行机构实现某种动作。移动机器人一般采用直流电机作为移动的执行机构,机械臂使用伺服系统作为执行机构。
无人车配送系统主要实现物品的无人配送,其系统硬件结构如图2 所示,主要包括ROS 主控制器、ROS 底层控制器、伺服电机、直流电机和相关传感器。ROS主控制器主要实现无人车的建图、路径规划与导航、控制命令的接收与输出;ROS 底层控制器实现无人车位姿状态参数的采集,并根据ROS主控制器下发的控制指令驱动直流电机或伺服电机进行行走;传感器主要用于感知环境信息,实现无人车的定位、路径规划与自主导航,包含轮式里程计、惯性测量单元IMU、位置编码器、超声波、激光雷达、深度相机。
图2 系统硬件框架图
本文设计的无人车配送系统采用阿克曼运动型[2]来描述机器人的转弯行为,其具有良好的机动性能和控制精度,能够适应复杂的室内环境。车体结构由两个驱动轮和两个转向轮组成,其中驱动轮通过电机驱动,转向轮通过伺服电机实现。阿克曼运动模型是指基于车辆底盘的特殊运动模型,用于描述车辆的转弯行为。在阿克曼运动模型中,车辆前轮和后轮转向角度不同,通过转弯半径和车辆的轴距、前后轮之间的距离等参数来描述车辆转弯过程。设车辆的前轮转向角度为δ,则车辆前进方向与车辆前轮转向角度之间的夹角为β,车辆转弯半径为r。根据车辆的运动学模型可得:
式中,L表示车辆轴距,W表示前后轮之间的距离。
根据关系式(1)可以计算出车辆在转弯时的前进方向与转弯半径之间的关系。通过阿克曼运动模型,可以设计出更加精确的路径规划和运动控制算法,以实现车辆的准确导航和控制。通过考虑机器人的阿克曼运动模型,利用激光SLAM 进行实时建图和路径规划,产生精确运动控制指令,实现无人车的自主导航和精准避障。在运动控制中,根据机器人的阿克曼运动模型,可实时计算出机器人的转弯半径和前进方向,实现更加准确地运动控制和转弯。
为了实现室内环境的感知和建图,无人车采用激光雷达和摄像头[3]等传感器进行数据采集,系统各感知装置的安装位置如图3所示。
图3 感知装置安装布局
二维激光雷达是无人车系统的主要感知装置,能够提供高精度的环境地图感知,为机器人的导航和路径规划提供重要支持。深度相机主要用于目标识别和定位,辅助机器人的导航。超声波传感器用于障碍物检测,用于路径规划和导航时的避障。IMU单元和编码器为激光SLAM 和路径规划算法提供参考数据,实现高精度的建图和最优路径规划。当二维激光雷达存在局限时,系统通过深度相机进行路标和环境障碍物识别,辅助无人车进行路径规划和控制,形成多传感器融合建图策略。同时,深度相机可以检测环境中的动态障碍物,从而进行避障操作,以提高系统的稳定性和可靠性,适应不同工作环境下的无人车运行。
ROS主控制器采用英伟达Jetson Nano 控制器,搭载四核Cortex-A57 处理器、128 核Maxwell GPU 以及4GB LPDDR内存,在ROS操作系统上运行激光SLAM建图和路径规划算法,实时依据激光雷达、深度相机产生无人车行驶指令。ROS 底层控制器负责执行ROS主控制器的控制指令,并为ROS主控制器提供辅助数据,协助实现无人车的自主导航和路径规划,是无人车中最为重要的部分之一。ROS 底层控制器采用STM32F103RCT6 作为控制微处理器,负责驱动电机控制无人车的行走和转弯[4]。STM32F103RCT6 的内核为ARM Cortex-M3,主频为72MHz,具有较强的计算能力和稳定性,支持SWD 和JTAG 调试。STM32F103RCT6 微处理器具有51 个I/O 引脚、8 个定时器、2 个I2C 接口、5 个串口、3 个SPI 接口、1 个CAN2.0,完全满足无人车运动控制所需的各种输入输出接口及各种传感器数据采集的需要。
ROS 底层控制器主要驱动直流电机实现小车行走,驱动伺服电机实现转弯,采集惯性测量单元IMU、位置编码器、超声波传感器,实现对无人车位置信息的实时采集,并为无人车的建图与自动导航提供数据依据。设计的ROS 底层控制器微处理器核心电路原理图如图4(a)所示,编码器和惯性测量单元IMU 接口电路原理图如图4(b)所,电机驱动电路原理图如图4(c)所示,与ROS主控制器通信的串口转换电路原理图如图4(d)所示。
图4 ROS 底层控制器电路原理图
ROS 底层控制器采用PID 控制算法,通过对速度、角速度、方向等参数的实时监测和调节,实现了无人车的精确运动控制。在实际控制过程中,还考虑了阿克曼运动模型的特点,通过合理地调整控制参数和控制方式,有效提高了运动控制的精度和稳定性。为了与ROS主控制器进行通信,ROS 底层控制器配备了一个TTL串口转USB接口电路,方便与ROS主控制器连接,实现与ROS 系统进行数据交换和控制指令传递。
无人车配送系统的软件主要是实现无人车的SLAM建图、路径规划和自主导航,其软件系统框架如图5所示。
图5 系统软件框图
激光SLAM算法是无人车配送系统中的重要组成部分,能够实现自主建图和定位。本设计由于使用的是二维激光雷达,支持Gmapping 算法的数据格式,因此本文采用激光Gmapping算法进行SLAM建图[5]。该算法可以同时实现建图和定位,并具有精度高和性能高效,占用的计算资源较少,能够满足实时性要求。通过Gmapping 算法可以获取地图信息,并利用地图信息实现路径规划和导航。实现Gmapping 算法流程如图6所示。
图6 Gmapping算法流程图
在无人车配送系统中,路径规划和控制是核心问题。本文采用了TEB 算法进行路径规划[6],该算法可以生成平滑的轨迹,并适应阿克曼车模的运动特性。TEB算法实现流程如图7所示。
图7 TEB算法实现流程图
在进行路径规划的同时,利用ROS 提供的Move-Base功能包实现路径控制和导航,通过发布目标点指令,无人车可以实现自主导航,运行到目标点完成配送功能。然而,由于每辆无人车的硬件配置不同,需要对路径规划配置文件进行修改和优化。鉴于考虑无人车运动模型和激光雷达测量存在误差、局部地图建立和更新频率因素的影响,需要对路径规划器的四个配置文件costmap_common_params.yaml、global_costmap_params.yaml、local_costmap_params.yaml和teb_local_planner_params.yaml进行了优化修改,使之不受测量误差和更新频率的影响。在进行优化时,需要调整无人车的最大速度、加速度、最小曲率半径和最大加速度等参数,以适应无人车的阿克曼运动模型。同时,需要根据激光雷达的扫描范围和测量精度,调整局部地图的分辨率和更新频率,以提高路径规划的精度和实时性。经过参数优化后,将路径规划TEB算法和控制策略在仿真环境和实验平台上进行了测试,测试结果表明,路径规划TEB算法和控制策略能够在复杂环境中实现较为稳定和高效的路径规划和运动控制,为无人车的自主导航提供了可靠的支撑。
远端操控PC主要实现无人车货物配送的初始设置、启动/停止控制和运行过程的监管。要实现与无人车的操控,需要与无人车的ROS 主控制器进行通信,实现控制命令及参数的交互。随着5G 技术的发展,大多场所均覆盖了5G信号,本文设计的无人车通过5G信号与远端操控PC成一个局域网络,通过无线网络进行连接,实现上位机与ROS之间的通信。为方便对无人车的操控,本文采用C#编写了PC客户端,其操作界面如图8所示。客户端程序通过Socket[7]编程,实现远端操控PC 与ROS 主控制器之间的网络通信,向ROS主控制器发布控制指令,实现机器人的远程控制和配送功能。同时,客户端程序还可以接收无人车发送的状态信息,实现对无人车状态的实时监测。
图8 远端操控PC客户端界面
远程控制和配送是通过订阅和发布不同的话题来实现的。具体而言,是利用ROS 提供的导航功能包、视觉功能包以及Socket通信包来实现与远端操控PC的通信,进而实现无人车的操控。首先,需要订阅amcl_pose 话题来获取小车在当前地图中的位姿,从而确定小车的当前状态;然后,通过上位机发布初始坐标(启动位置)、装货点坐标(货物位置)和卸货点坐标(目的地位置)等信息给MoveBase 功能包;最后,ROS主控制器根据接收到的位置点信息进行建图、定位,以实现无人车的自主导航和配送功能。
当二维激光雷达受到限制时,如遇到复杂的障碍物或无法准确检测到墙角等细节时,可以通过深度相机进行辅助导航。本文设计的无人车安装了深度相机,可通过OpenCV库进行图像处理,获取环境辅助信息,与激光雷达信息进行融合,辅助无人车的自主导航。首先在运行环境路径中预定义一些路标,例如不同形状和颜色的标志,如图9所示。通过预处理让深度相机可以识别出这些标志并提取其特征。然后通过模板匹配技术来检测这些标志,从而确定无人车的位置和姿态。
图9 路径上的导航路标示意图
在实际使用中,首先使用激光雷达进行建图和路径规划,当无人车遇到障碍物或无法准确检测到细节时,再通过深度相机获取周围环境信息,并将其与已有的地图信息结合起来进行决策,调整无人车的行驶方向。采用深度相机辅助导航策略能够提高系统的鲁棒性,使其能够适应更复杂的环境。但使用中需要注意的是,深度相机的安装位置和视野有限,不能完全依赖深度相机进行导航,因此在控制算法中需要合理安排激光雷达和深度相机的融合机制。
为验证所设计的无人车配送系统的可行性,在实验室环境下进行自主导航和配送实验验证。本文利用英伟达Jetson Nano控制器、自行设计的ROS底层控制器、二维激光雷达、深度相机、惯性测量单元IMU、位置编码器、超声波传感器、直流电机、伺服电机等硬件设备,搭建了如图3所示的无人车,并采用ROS作为主要的软件开发平台设计了软件系统。测试时通过远端操控PC客户端向无人车发送目标点指令,无人车根据接收到的指令进行路径规划和导航,并实时将无人车的当前状态反馈回远端操控PC客户端,包括位置、姿态、实时获取的激光雷达和深度相机数据等信息。
针对搭建的包括直线行驶、曲线行驶、障碍物避障等多个实验场景,来验证机器人系统的建图、路径规划和自主导航功能,测试结果如图10所示。
图10 无人车自主导航过程的路径规划图
在实验过程中,笔者对机器人的路径规划和运动控制进行了详细的分析和优化,并进行了参数调整和实时监测。经过多次实验验证了所设计的无人车配送系统的可行性和适用性,控制系统能够在复杂环境中实现较为稳定和高效的路径规划和运动控制。在直线行驶和曲线行驶实验中,无人车能够准确跟踪预设的轨迹,实现较为平稳的运动控制。在障碍物避难实验中,无人车能够实时检测障碍物并进行避让,保证了系统的安全性和可靠性。