共享电单车的自动驾驶技术研究*
2023-10-23黄千骏郭的健孟宇博樊子尧覃玉梅孙豪阳蒋秋娥
黄千骏,郭的健,孟宇博,樊子尧,覃玉梅,孙豪阳,蒋秋娥,蔡 衍
(1.东北大学 机械工程与自动化学院,辽宁 沈阳 110819;2.东北大学 软件学院,辽宁 沈阳 110819;3.东北大学 信息科学与工程学院 辽宁 沈阳 110819;4.兵器627厂 技术中心,湖南 湘潭 411111)
自动驾驶是指通过赋予车辆装备智能软件和各种感应设备以实现车辆的自主驾驶,进而达到安全高效地到达目的地,避免交通事故的目标。自动驾驶的实现可以极大地减轻人们的驾驶压力,提高交通安全性。近年来,共享经济的发展模式受到了整个社会的广泛关注,作为共享领域的热门主题,共享单车也得到了快速发展。共享单车属于典型的“互联网+”式创新,有效地解决了人们出行“最后一公里”的难题。但其在给人们带来便利的同时,也带来了违规停放、管理混乱等问题[1]。
目前已有对于无人电单车在零速条件下自平衡的控制算法[2-3]、双驱无人电单车样机设计[4-5]等多项研究,电单车作为欠驱动系统要实现自动驾驶,自平衡是一大重点,双驱无人电单车采用的是添加配重结构调整重心以维持自平衡,但该结构质量大、占用体积多,导致无法实现载人。鉴于载人情况会对电单车结构、控制算法、安全性能等方面提出更高要求,需整合改进上述研究成果,尝试利用现有技术面向共享电单车进行转移应用研究。
本文将自动驾驶技术应用于共享电单车。相较于汽车,自动驾驶共享电单车具有占用道路资源少、对环境友好、无操作门槛等优势,同时为道路拥堵、尾气污染及违规停放等问题提供很好的解决方案,能在城市短距离出行中成为替代汽车的更优解。
下述将围绕电单车本体改造、传感与通信、电机驱动与控制、定位与建图、导航与避障5部分分别进行研究。
1 研究工作
1.1 电单车本体改造
对电单车的本体改造主要在普通电单车基础上安装舵机和动量轮,在车框中放置防水密封箱以保护上位机、下位机和电机驱动板,并装配相关传感器,进而达到自动驾驶的目的。舵机和动量轮选型方案研究如下。
1.1.1 舵机选型
为精准控制无人电单车转向,研究采用舵机与车叉通过焊接舵盘链接的技术方案(见图1)。无人电单车转向时,受到作用于轮胎的地面摩擦力的影响,且车叉倾角会导致共享电单车重心高度变化。因此,舵机的输出功率主要用来克服地面摩擦力和整车的重力矩。通过两方面的受力分析,计算转向所需的力矩。
图1 舵机安装示意图
地面与橡胶的摩擦因数约为0.3。设定整车最大质量为100 kg,转向时前轮受地面的阻力f约为147 N。轮胎与地面不是理想中的点接触,因此本研究假设接触面是一个半径r为0.01 m的小圆,圆心与轮心在同一竖直面内,接触面内摩擦力均匀分布,车叉倾角δ为17°,舵机所需克服的摩擦阻力矩为
(1)
无人电单车处于倾斜状态时,转向引起车子重心的改变。假定某时车体倾斜角为φb,当车叉转动角度φ时,单车重心高度变化为
(2)
式中,l为两轮基距,l=1.020 m;l1为车体质心与车轮触地点的距离,l1=0.283 m;R为车轮半径,R=0.183 m。
对式2车叉角度求导,得到转动单位角度车叉所引起的车体重心高度变化为
(3)
当无人电单车的车体倾斜角度最大时,所需克服的重力矩最大。假设车体倾斜角φa为10车,无人电动车为克服重力所需的转向力矩为
(4)
综上,估计舵机的负载转矩高达
M=Mf+MG=3.353 (N·m)
(5)
未载人时,整车质量m=40 kg,估计舵机的负载转矩可达M=Mf+MG=1.341(N·m)。考虑未载人时的情况,选用型号SM100、额定扭矩为4 N·m(此时安全系数为3)的舵机,保障了电机的响应速度。
1.1.2 动量轮电机选型
无人电单车的运动平面为水平面,定义地面坐标系为e0,定义车体与地面垂直时的x0轴沿着两车轮基线的方向,无人电单车的前进方向为正方向,垂直于无人电单车平面的坐标轴为y0轴,竖直向下的坐标轴为z0轴,后轮与地面的接触点为坐标原点e0,车体倾斜角为φ。车体最大倾斜角φm=10°,l1=0.283 m为车体质心与车轮触地点的距离,m=40 kg为无人时电单车及各种附加件的质量,J0=ml12,M为动量轮产生的力偶矩。以无人电单车前进相反方向建立图2所示的简化模型。
图2 简化倒立摆模型
无人电单车相对于O点的和力矩为:
∑MO=mgl1sinφ-M
(6)
由动量矩定理可得
(7)
欲使无人电单车恢复平衡状态,则
M>mgl1sinφ=40×9.8×0.283×sin10°=19.264 (N·m)
(8)
同时参照电机功率最终选定额定功率为100 W、电压为24 V、额定转矩为0.32 N·m、型号为57BL75S10-230TF9的无刷直流电机,为达到预定要求,电机选配减速比为8的一级减速器。
将电单车拆分成车叉、前轮、后轮、车架4部分,分别进行测绘,使用悬挂法找出各部分重心,并记录实验数据(见表1)。
表1 被试电单车的测绘数据
最终完成舵机、电机、动量轮的选型与装配,以及TX2、驱动板等模块的集成。
1.2 传感与通信
1.2.1 传感器的优选
按传感器来分,现在主流的SLAM(Simultaneous Localization and Mapping)方案包括激光SLAM和视觉SLAM两大类。在视觉SLAM方案中又可以根据定位与建模的需求选择使用单目相机、红外相机、TOF相机和双目相机等。激光SLAM在建模方面虽然具有较高的精度,但其成本是视觉SLAM方案的十多倍,甚至达上百倍。在众多相机方案中,单目相机无法获得确切的深度信息,红外相机和TOF相机在室外强光的环境下建模效果不理想。综合考虑系统定位和建模的精度、室外运动的场景和项目的成本,本研究采用双目相机的建模方案并确定使用ZED双目相机作为本研究的图像传感器。
为了提高定位与建模的质量,本研究在建模的过程中需要融合IMU获取的自身运动数据。本研究选择了高精度超小型姿态传感器LPMS-UES2,它能够高度满足在电单车位姿信息测量应用上的高精度计算要求。
除此之外,为了满足系统的计算需求,本研究选择具有出色的计算能力、准确性以及低能耗的NVIDIA Jetson TX2模组。为了获取高效的响应和控制,本研究选择具有高性能、低功耗的STM32系列的嵌入式单片机。
1.2.2 IMU、ZED双目相机与Jetson TX2的通信
惯性测量单元(Inertial Measurement Unit, IMU)与Jetson TX2的通信,通过USB3.0接口将IMU与Jetson TX2连接,使得在Jetson TX2可以访问IMU的状态和数据。研究是在Ubuntu16.04、ROS-kinetic环境下连接型号LMPS-URS2的IMU。首先需要配置连接的环境,在Jetson TX2的Ubuntu系统中安装必要库——LpSensor库,下载编译LMPS-URS2的ROS驱动tymesync和lpms_imu。然后使用相关命令连接,启动IMU和ROS并查看IMU状态。
ZED双目相机与Jetson TX2的通信,是将ZED双目相机通过USB3.0接口与Jetson TX2上位机连接,使得在Jetson TX2上位机系统上可以查看相机拍摄图像、深度信息等。对Jetson TX2完成JetPack包的下载和安装后,在Ubuntu系统中下载并安装对应的ZED SDK和ZED_ROS包,然后可使用命令启动相机,查看不同的摄像头画面、深度图像等。
1.2.3 IMU标定
IMU标定的目的是校准高斯白噪声和随机游走误差。首先需要在系统中安装ceres-solver库以及安装工具包code_utils和imu_utils;然后将IMU与TX2连接并录制数据集,录制过程中保持IMU静止2 h;最后配置launch文件,以200倍速播放数据集进行标定,得到标定结果。
1.2.4 双目相机标定
相机标定是基于相机成像原理,确定相机模型的内部参数和外部参数。本项目使用张正友黑白棋盘标定思想对ZED双目相机进行标定。张正友相机标定法只需要摄像机从不同角度对黑白棋盘格标定板进行拍摄,提取图片中角点像素坐标,建立空间点与像素点之间的对应关系,来对相机进行标定获得相机的内外参数[6]。
首先在系统中安装kalibr标定工具,生成并打印黑白棋盘标定。然后进行数据采集,使用相机从多角度对标定板进行拍摄,保证相机位姿足够充分。为了保证后续标定过程的计算速度,将相机在ROS环境下的消息发布帧率设置为4 Hz。数据录制完成后将录制文件打包为.bag格式的文件,并采用kalibr工具对数据进行处理获得标定结果。
1.2.5 IMU-双目相机联合标定
IMU与相机的融合,能够弥补视觉SLAM位姿估计的输出频率低的不足,从而使整个SLAM系统具有更好的精度和鲁棒性。联合标定的主要目的是获取IMU与双目相机之间测量位姿数据的转换矩阵。转换矩阵对视觉惯性融合的SLAM技术来说极为重要,如果精度较低将会导致系统不稳定。
进行联合标定时,需要将IMU与ZED双目相机固定在一起,从多角度对标定板进行拍摄。录制时需要充分激励IMU的各个轴,绕3个轴旋转和3个方向的平移。使用kalibr中的kalibr_calibrate_imu_camera方法对数据集进行处理标定,最终的标定结果中会给出相机和IMU之间的转换矩阵。
1.3 电机驱动与控制
1.3.1 FOC控制原理
FOC(Field Oriented Control)为磁场导向控制,通过精确的控制磁场的大小与方向,使得电机的运动具有高速的动态响应及稳定的稳态性能[7]。本研究在车身控制系统方面以FOC技术为基础,实现车身姿态、速度和方向的高效、精确控制。其原理图如图3所示。
首先,对电机的三相电流Ia、Ib、Ic进行采集,对其进行Clark变化,得到两相相位相差90°的电流Iα、Iβ。Clack变化规律为
(9)
然后经过Park变换将在静止坐标系下的交流电流Iα、Iβ转换为两个互相垂直、方向随着磁场变换的直流电流Iq、Id。Park变换规律为
(10)
在矢量控制中,Id代表了转子旋转径向力矩的输出,Iq代表了转子切向力矩的输出,在理想的FOC控制算法中,Id应该等于0。将Iq、Id与期望电流值进行比较获得的误差值经过PI控制器后得到直流电压信号Uq和Ud。再经过Park反变换将Uq和Ud分解至精致坐标系下的Uα和Uβ,最后将Uα和Uβ作为SVPWM模块的输入信号,获得作用于三相逆变电路的PWM信号,最终产生三相电流作为输入信号输入至电机。
1.3.2 电机控制实现
在自动驾驶过程中,电单车需要根据环境信息以及车身情况及时对车身运动状态进行调整,在本研究中电单车的驱动与控制研究集中于电单车车身平衡与方向控制上。本研究使用STM32F407单片机作为核心控制芯片,使用无刷直流电机驱动惯量盘的方式来控制车身的自平衡,使用舵机来控制电单车的运动方向。在控制策略方面,采用以FOC为基础的控制方法。通过使用FOC算法对无刷直流电机的速度进行控制,输入为阶跃信号时,得到无刷直流电机的实际速度响应曲线如图4所示。
图4 电机实际转速跟踪曲线
1.4 定位与建图
SLAM的主要任务是使电单车自动驾驶的过程中,能够在没有环境先验信息的情况下,利用携带的传感器于运动过程中建立环境的模型,同时估计自身的运动[8]。从功能原理上可以将SLAM分为传感器信息读取、视觉里程计、后端优化、回环检测和地图构建5部分[9](见图5)。
1)传感器信息读取主要是相机图像信息的读取和预处理,并将图像信息与其他传感器信息进行同步。
2)视觉里程计根据传感器获得的数据估计当前时刻单车的运动并恢复当前时刻场景的空间结构。将相邻时刻的运动衔接起来构成机器人的运动轨迹,从而解决定位问题;将每个时刻计算出来像素对应空间点的位置拼接起来构建地图。在视觉里程计中,使用ORB算法提取出图像中的特征点,并匹配双目相机左右相机之间、相邻帧之间的特征点(见图6),根据特征点之间的匹配关系可以计算出特征点相对于相机的位置关系,通过位置关系的变化可以计算获得单车的运动(见图7)。
图6 图像间特征点匹配
图7 基于双目相机的图像深度解算
在图7中,通过三角形相似可以获得:
(11)
对式11进行处理获得:
(12)
式中,z为像素深度信息;f为相机焦距;uL和uR为成像平面坐标;b为双目相机基线长度(即双目相机中左右摄像头的距离)。
3)后端优化主要处理SLAM过程中的噪声问题,减少噪声对单车自身轨迹和地图的影响,提高数据准确性。
4)回环检测解决位置估计随时间漂移问题,让单车具有识别到过场景的能力,显著减少累积误差,得到全局一致的轨迹和地图。
本研究采用双目视觉和惯性导航融合的SLAM方案,结合最新的ORB-SLAM3算法,使得定位与建图系统无论是在室内还是室外,宽阔场景还是狭窄场景下都能鲁棒实时地运行。
采用EuRoC数据集来测试算法程序,图8所示为双目视觉和惯性导航的ORB-SLAM3算法运行效果,并将输出的相机运动轨迹可视化显示出来。
a)ORB-SLAM3算法运行效果
1.5 导航与避障
导航与避障分别属于全局路径规划与局部路径规划。为实现电单车导航与避障功能,本研究主要使用ROS中的Navigation Stack功能包(见图9)。move_base节点作为其核心,主要能实现以下3个功能:全局路径规划(静态)、局部路径规划(动态)、处理异常行为。
图9 Navigation Stack功能结构
1.5.1 代价地图
要实现路径规划,获取代价地图是必要的条件。代价地图可看作一种构型空间:把障碍物进行膨胀,以忽略障碍物的棱角,把移动机器人看成一个质点,然后把障碍物和机器人放入栅格地图中,就形成了构型空间(Configuration Space)。
由图9可知,move_base节点中使用了两种代价地图:local_costmap用于局部路径规划,globle_costmap用于全局路径规划。两种代价地图都由以下4种图层构成,欲构建代价地图需完成各图层配置。
1)Static Map Layer(静态地图层):基本上不变的地图层,通常都是SLAM建立完成的静态地图。
2)Obstacle Map Layer(障碍地图层):用于动态地记录传感器感知到的障碍物信息。
3)Inflation Layer(膨胀层):在以上两层地图上进行膨胀(向外扩张),以避免机器人撞上障碍物。
4)Other Layers:还可通过插件的形式自主设计costmap,目前已有Social Costmap Layer、Range Sensor Layer等开源插件[10]。
现可将已有离线地图经过图像处理转化为灰度图像,并配置相关yaml文件参数,通过map_server节点作为先验代价地图发布给move_base节点,之后再通过SLAM方案基于先验代价地图进行更新与维护,以完成Static Map Layer的构建,并基于传感器信息流,配置相关参数完成Obstacle Map Layer和Inflation Layer的构建。
1.5.2 导航与避障
全局路径规划算法主要使用A*算法,局部路径规划主要使用DWA(Dynamic Window Approach)算法。现使用ROS提供的turtlrbot3功能包完成在gazebo搭建的实物仿真环境下,使用SLAM建图获取代价地图,以此使用对应算法完成全局路径规划。
1)基于gazebo完成实物仿真环境搭建。
2)通过键盘对机器人进行位置移动控制,使其在仿真物理环境中基于SLAM方案逐步完善构建代价地图。
3)通过在Rviz可视化工具中比对机器人在实物环境中位置,设置机器人初始化位姿,并给定终点位置与姿态,就可以获取一条最优路径并实现实时避障功能。
2 总结与展望
本研究针对面向自动驾驶的共享电单车进行了硬件改造;完成了上位机Jetson TX2的环境配置与JetPack包的下载和安装,以及ZED双目相机和IMU的联接与标定;以STM32F407作为下位机核心板,编写了FOC控制算法,采用RS-485进行了通信实验,实现了电机转速控制;利用相机与IMU数据进行了点云地图构建与路径规划。
目前已完成共享电单车自动驾驶的整体软硬件框架搭建及初步实现,后续会将ADRC控制器引入FOC控制方案,以获得更加稳定、鲁棒的控制效果;基于双目视觉和惯性导航的ORB-SLAM3完成稠密地图构建,融合YOLO算法,以实现环境信息的有效识别;基于实车测绘数据及其运行效果对代价地图各层参数进行配置,优化路径规划算法,以提高其安全性,获得更优的路径规划效果。
本文的研究工作为共享电单车的自动驾驶确立了思路框架与技术基础,对于自动驾驶共享电单车的工业实现和推广应用具有借鉴意义。