2022年 / 第7期  物联网技术
97
0 引 言
ROS (Robot Operating System )是一种开源的操作系统,使用该系统可以减轻工作量,其主要功能是便于智能小车研发过程中的代码复用;它提供了与操作系统类似的各种各样功能,比如程序间信息的传递、底层驱动程序管理、程序发行包管理等,方便了人们对智能小车的研究和使用;同时,它还提供了一些用于获取、建立、编写和运行多机整合的程序,使得开发者更容易使用ROS 系统[1-5]。
机器人想要在未知的环境中实现自主移动、自主避障,就必须知道自己的位置、环境中障碍物情况以及
周围环境情况等。SLAM 技术可以帮助机器人获得自身定位和周围环境状况。在智能小车中使用激光雷达作为环境感知的传感器,再配合SLAM 技术,能够达到同时定位和地图构建的 目的。
1 ROS 小车构造
如图1所示,本文智能小车的主要硬件结构分别为:ORBBRC 深度相机、激光雷达、Nano 无线网卡6 dB 增益天线、NVIDA Jetson Nano 、扭力悬挂装置、520编码器减速电机、双腔体音响输出和麦克纳姆车轮,并且以STM32F405RGT6单片机作为控制板和开发板。在该结构下可以完成智能小车的ROS 串口传输、电机和电池数据反馈、多传感器数据融合、SLAM 定位建图导航和路径规划等多个功能。在此基础上,还可以对小车进行二次深度开发,使小车更加完善、功能更加强大
图1 小车系统结构
1.1 驱动功能的实现
本智能小车采用STM32F405RGT6芯片作为中央控制器的最小系统模块,主要用于实现驱动功能以及控制功能。该芯片的特征是配备了FPU 的ARM32位Cortex-M4 CPU ,采用自适应实时Acelector ,允许从闪存执行0等待状态,频率高达168 MHz ,性能十分优良。
STM32机器人驱动板是一款适用范围非常广的ROS 雷达车机器人驱动板,具有稳压、驱动、传感器数据采集等功能,其稳压功能可以将7~12 V 的直流输入电压降压到5 V 或改变成其他形式的电压,可用于给主芯片供电或驱动马达等外部设备。
STM32所具有的驱动功能分为马达驱动、舵机驱动和传感器驱动三种。其中,马达驱动是通过马达驱动芯片来驱动马达正转、反转、停止、加速、减速,从而实现小车的行进功能。采用舵机驱动时,驱动板带有8路舵机驱动输出接口,在使用内部电压给舵机供电的情况下可以同时驱动8个额定电压为5 V 、最大电流不超过100 mA 的舵机。采用传感器驱动时,驱动板上未被占用的GPIO 都被直接连接到了树莓派上,并在树莓派上用黄插针表示,每组GPIO 均有VCC-5 V 和GND 供电插针,分别以红和黑标示。
STM32驱动板接口如图2所示。
赵 威,李振华
(北京信息科技大学 信息与通信工程学院,北京 100101)
摘 要:
文章研究了一种具有同时定位与地图构建功能的智能小车。该小车的构建是基于ROS 操作系统和Ubuntu 操作系统,并采用C++设计语言完成的;主要由激光雷达、麦克纳姆车轮、深度相机等器件组成,可以实现三维建图、室内自主定位导航、动态避障、视觉巡线等功能。重点分析了智能小车的物理构造,并对小车的部分结构件以及SLAM 技术的硬件和软件实现做了重点介绍。最终通过多次实验,实现了小车的位姿估计和地图构建功能。
关键词:
智能小车;ROS 系统;SLAM 技术;麦克纳姆车轮;激光雷达;导航;三维建图中图分类号:TN03      文献标识码:A      文章编号:
2095-1302(2022)07-0097-03收稿日期:2021-09-17  修回日期:2021-10-15
物联网技术  2022年 / 第7期
98图2 STM32驱动板接口
STM32的传感器数据采集功能的实现依赖于马达和陀螺仪等器件,可采集到马达转速以及IMU 陀螺仪的关键数据。
STM32F405RGT6驱动板既可作为控制器,又可作为开发板,方便操作,也使得小车的外观更加简洁明了;STM32F405RGT6的各个引脚功能十分具体,使小车的功能更加完善。
1.2 行进功能的实现
在智能小车的轮式底盘结构中,一般以差速两轮式和四轮式结构为主。差速两轮式的结构拥有较高的能量利用率,但是当小车速度较快时很难控制小车的转向。四轮式的结构可以分为阿克曼转向式、全向四轮结构、麦克纳姆轮结构等。其中麦克纳姆车轮结构虽然成本比较高,但是这种结构可以朝全方向移动、摩擦力小、精度高,因此本文选择了最有保障的麦克纳姆车轮作为小车行进装置的一部分。
麦克纳姆车轮的两个重要组成部分是轮毂和围绕轮毂的辊子,辊子分布在轮毂的轮缘上,可以实现横向滑移的功能。当轮子转动时,分布在轮子边缘上的各个辊子的包络线可以形成一个圆柱面,从而可以使小车不断向前滚动。麦克纳姆车轮底座如图3所示。
假设A
轮可以向右前方、
左后方运动,那么B 轮就会向左前方以及右后方移动。当A 轮的速度分量可以分解为水平向右和水平向前时,B 轮可以分解为水平向左和水平向前。这样,水平向左和水平向右的速度分量互相抵消,只剩下两个水平向前的速度分量,从而实现小车的前进。当A 轮的速度分量被分解为水平向左和水平向后时,B 轮被分解为水平向右和水平向后。由此,A 轮和B 轮之间某一方向的速度相互抵消后,可以获得相同的另一个方向的速度分量,从而实现自主前进。
通过对比普通的车辆能够发现,普通的车辆在移动时,轮子都是向同一个方向转动的;而使用麦克纳姆轮的车辆在进行任意方向运动时,每个轮子的运动方向都是不同的,因此麦克纳姆轮实现了真正意义上的任意角度移动。麦克纳姆车轮如图4所示。
1.3 环境感知和测距功能的实现
经过反复的比较和研讨,本文最后选择了激光雷达作为环境感知和测距的传感器。相比于摄像头和基本的微波雷达,
速版激光雷达,最高频率可达16 Hz ,使得导航动态性能提升非常明显,同时可以用开关来控制启动和停止。
图3 麦克纳姆车轮底座展示        图4 麦克纳姆车轮展示
常用的激光测距方法有激光飞行时间法和三角法,其中激光飞行时间法又可以分为脉冲测距和相位测距。本文采用激光时间飞行法(TOF )中的脉冲测距法,满足高速度和远距离测量需要。如图5所示,脉冲测距法的原理为:先由一端的发射仪器发出测试脉冲,这束测试脉冲中的一小部分作为参考脉冲,直接被仪器接收端接收,剩余的测试脉冲被反射回来后进入接收端;然后测出参考脉冲与反射脉冲之间的时间差t ,可求出距离D =1/2ct ,式中c 为光速。此方法实行起来较为简单,且可快速得到数据;再结合公式,可直接得出结果。
图5 脉冲测距原理
2 SLAM 技术的实现
SLAM 也称为同步定位与地图构建。SLAM 可以描述为:移动的物体借助自身拥有的传感器等设备,智能地感知周围环境,从而获得自身定位,并不断地获取周围环境信息,从而得到周围环境的地图[6-9]。激光雷达SLAM 算法基于Python 语言,且具有自己独特的算法函数,使用起来十分方便、容易上手。
2.1 导航与建图功能的物理实现
本小车使用激光雷达作为测距传感器来获知空间物体的角度和距离信息,利用SLAM 技术即可获得占据栅格地图,以概率的形式表示每个栅格被占用的概率,从而进行路径规划,实现动态避障。
2.2 导航与建图功能的算法实现
导航与建图功能的算法主要是为了完成小车位移增量与角度是否符合要求的判断,以及实时更新激光数据和小车在
2022年 / 第7期  物联网技术
99
ChangeToNew_Pose = (mRep->mData(pose_World , data_Contain , lastScanMatch_Cov));
}else{
ChangeToNew_Pose = pose_World;lastScanMatch_Pose = ChangeToNew_Pose;
if(util::poseDifferenceLargerThan(ChangeToNew_Pose , lastPose , paramMinDistance_DiffForMapUpdate
, paramMinAngle_DiffForMapUpdate) || map_without_matching){
mRep->updateByScan(data_Contain , ChangeToNew_Pose);mRep->onMapUpdated();lastPose = ChangeToNew_Pose;}
Eigen::Matrix3f& covMatrix){
size_t size = mapContainer.size();Eigen::Vector3f tmp(beginEstimateWorld);for (int index = size - 1; index >= 0; --index){if (index == 0){
tmp  = (mapContainer[index].mData(tmp , dataContainer , covMatrix , 5));
}else{
dataContainers[index-1].setFrom(dataContainer , static_cast<float>(1.0 / pow(2.0, static_cast<double>(index))));
tmp  = (mapContainer[index].mData(tmp , dataContainers[index-1], covMatrix , 3));
return tmp;}
小车的地图构建过程默认三层地图,分辨率分别为 0.1 m 、0.05 m 和0.025 m ,从0.1 m 层开始处理。该算法使用分层地图进行计算,即小车可以获得当前环境状况下不同分辨率的地图。首先从获得的最低分辨率地图进行分析,与周围环境进行匹配;然后将得到的数据代入精度更高的地图
图6 建图过程演示
3 结 语
本文基于ROS 平台,运用SLAM 导航、OpenCV 图像识别、深度学习等算法,设计出了一款可以实现三维建图、室内自主定位导航、动态避障、视觉巡线等功能的智能小车。该小车配备有STM32驱动板、Jetson Nano 芯片、激光雷达等高级硬件设备,使用Ubuntu 文件系统和C/C++/Python 语言,具有很强的适应性,且使用起来十分方便。
[1]项嵘.基于ROS 系统的智能小车[D].南京:南京航空航天大学,
2017.
[2]程姜荣.基于ROS 系统的智能车设计[D].上海:上海工程技术大学,2020.
[3]陶满礼. ROS 机器人编程与SLAM 算法解析指南[M].北京:人民邮电出版社,2020.
[4]恩里克·费尔南德斯,路易斯·桑切斯·克雷斯波. ROS 机器人程序设计[M].北京:机械工业出版社,2017.
[5]张建伟,张立伟.开源机器人操作系统—ROS [M].北京:科学出版社,2012.
[6]王杨喜.激光雷达与视觉融合的SLAM 算法研究[D].甘肃:兰州交通大学,2020.
[7]黄通交.基于激光雷达的移动机器人SLAM 技术研究与系统实现[D].浙江:浙江农林大学,2020.
[8]杨海程,邓达强.基于激光雷达和SLAM 定位的麦克纳姆轮小车研究[D].广州:华南理工大学,2018.
[9]董秀娟,丰彬,王保坤.基于激光雷达和SLAM 的自主行使小车设计[D].湖北:湖北汽车工业学院,2020.
[10]危双丰,庞帆,刘振彬,等.基于激光雷达的同时定位与地图
构建方法综述[D].北京:北京建筑大学,2020.
[4]毛彤,周开宇. 可穿戴设备综合分析及建议[J]. 电信科学,2014,30(10):134-142.[5]  B OXALL J. Arduino-workshops [M]. Berlin :Dpunkt Verlag ,2013.[6]严新忠,杨静,郭略. 人体血氧饱和度监测方法的研究[J]. 医疗装备,2005,18(12):1-4.
[7]张海涛,阎贵平. MEMS 加速度传感器的原理及分析[J]. 电子工艺技术,2003,24(6):260-262.
[8]刘凯,陈志东,邹德福,等. MEMS 传感器和智能传感器的发展
[J].仪表技术与传感器,2007,44(9):9-10.
车168汽车网
[9]戴国华,余骏华. NB-IoT 的产生背景、标准发展以及特性和业务研究[J].移动通信,2016,40(7):31-36.
[10]李娜,侯义斌,黄樟钦.基于人体加速度特征的实时跌倒识别
算法[J].小型微型计算机系统,2012,33(11):2410-2413.
作者简介: 操德文(1989—),男,安徽安庆人,博士,讲师,主要研究方向为无线传感网、智能控制。
刘桂江(1971—),男,安徽安庆人,硕士,副教授,主要研究方向为无线通信、物联网和区块链技术及应用。
(上接第96页)