基于ROS系统和SLAM技术的智能小车的研究

2022-07-21 06:10李振华
物联网技术 2022年7期
关键词:建图麦克激光雷达

赵 威,李振华

(北京信息科技大学 信息与通信工程学院,北京 100101)

0 引 言

ROS(Robot Operating System)是一种开源的操作系统,使用该系统可以减轻工作量,其主要功能是便于智能小车研发过程中的代码复用;它提供了与操作系统类似的各种各样功能,比如程序间信息的传递、底层驱动程序管理、程序发行包管理等,方便了人们对智能小车的研究和使用;同时,它还提供了一些用于获取、建立、编写和运行多机整合的程序,使得开发者更容易使用ROS系统。

机器人想要在未知的环境中实现自主移动、自主避障,就必须知道自己的位置、环境中障碍物情况以及周围环境情况等。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所示。

图2 STM32驱动板接口

STM32的传感器数据采集功能的实现依赖于马达和陀螺仪等器件,可采集到马达转速以及IMU陀螺仪的关键数据。

STM32F405RGT6驱动板既可作为控制器,又可作为开发板,方便操作,也使得小车的外观更加简洁明了;STM32F405RGT6的各个引脚功能十分具体,使小车的功能更加完善。

1.2 行进功能的实现

在智能小车的轮式底盘结构中,一般以差速两轮式和四轮式结构为主。差速两轮式的结构拥有较高的能量利用率,但是当小车速度较快时很难控制小车的转向。四轮式的结构可以分为阿克曼转向式、全向四轮结构、麦克纳姆轮结构等。其中麦克纳姆车轮结构虽然成本比较高,但是这种结构可以朝全方向移动、摩擦力小、精度高,因此本文选择了最有保障的麦克纳姆车轮作为小车行进装置的一部分。

麦克纳姆车轮的两个重要组成部分是轮毂和围绕轮毂的辊子,辊子分布在轮毂的轮缘上,可以实现横向滑移的功能。当轮子转动时,分布在轮子边缘上的各个辊子的包络线可以形成一个圆柱面,从而可以使小车不断向前滚动。麦克纳姆车轮底座如图3所示。

图3 麦克纳姆车轮底座展示

假设A轮可以向右前方、左后方运动,那么B轮就会向左前方以及右后方移动。当A轮的速度分量可以分解为水平向右和水平向前时,B轮可以分解为水平向左和水平向前。这样,水平向左和水平向右的速度分量互相抵消,只剩下两个水平向前的速度分量,从而实现小车的前进。当A轮的速度分量被分解为水平向左和水平向后时,B轮被分解为水平向右和水平向后。由此,A轮和B轮之间某一方向的速度相互抵消后,可以获得相同的另一个方向的速度分量,从而实现自主前进。

通过对比普通的车辆能够发现,普通的车辆在移动时,轮子都是向同一个方向转动的;而使用麦克纳姆轮的车辆在进行任意方向运动时,每个轮子的运动方向都是不同的,因此麦克纳姆轮实现了真正意义上的任意角度移动。麦克纳姆车轮如图4所示。

图4 麦克纳姆车轮展示

1.3 环境感知和测距功能的实现

经过反复的比较和研讨,本文最后选择了激光雷达作为环境感知和测距的传感器。相比于摄像头和基本的微波雷达,激光雷达具有单色性好、亮度高、方向性强、精度高、分辨力强、设备小而轻等优点。思岚科技的标准版激光雷达的频率为5.5 Hz,上电之后就可以旋转。本智能小车采用的是高速版激光雷达,最高频率可达16 Hz,使得导航动态性能提升非常明显,同时可以用开关来控制启动和停止。

常用的激光测距方法有激光飞行时间法和三角法,其中激光飞行时间法又可以分为脉冲测距和相位测距。本文采用激光时间飞行法(TOF)中的脉冲测距法,满足高速度和远距离测量需要。如图5所示,脉冲测距法的原理为:先由一端的发射仪器发出测试脉冲,这束测试脉冲中的一小部分作为参考脉冲,直接被仪器接收端接收,剩余的测试脉冲被反射回来后进入接收端;然后测出参考脉冲与反射脉冲之间的时间差,可求出距离=1/2,式中为光速。此方法实行起来较为简单,且可快速得到数据;再结合公式,可直接得出结果。

图5 脉冲测距原理

2 SLAM技术的实现

SLAM也称为同步定位与地图构建。SLAM可以描述为:移动的物体借助自身拥有的传感器等设备,智能地感知周围环境,从而获得自身定位,并不断地获取周围环境信息,从而得到周围环境的地图。激光雷达SLAM算法基于Python语言,且具有自己独特的算法函数,使用起来十分方便、容易上手。

2.1 导航与建图功能的物理实现

本小车使用激光雷达作为测距传感器来获知空间物体的角度和距离信息,利用SLAM技术即可获得占据栅格地图,以概率的形式表示每个栅格被占用的概率,从而进行路径规划,实现动态避障。

2.2 导航与建图功能的算法实现

导航与建图功能的算法主要是为了完成小车位移增量与角度是否符合要求的判断,以及实时更新激光数据和小车在世界坐标下的位姿。在算法实现过程中还需要开始寻找mRep->matchDate()函数。具体代码如下:

小车的地图构建过程默认三层地图,分辨率分别为0.1 m、0.05 m和0.025 m,从0.1 m层开始处理。该算法使用分层地图进行计算,即小车可以获得当前环境状况下不同分辨率的地图。首先从获得的最低分辨率地图进行分析,与周围环境进行匹配;然后将得到的数据代入精度更高的地图进行扫描匹配,重复几次之后,便可以得到高精度的地图,实现小车的位姿估计和地图构建。建图过程演示如图6所示。

图6 建图过程演示

3 结 语

本文基于ROS平台,运用SLAM导航、OpenCV图像识别、深度学习等算法,设计出了一款可以实现三维建图、室内自主定位导航、动态避障、视觉巡线等功能的智能小车。该小车配备有STM32驱动板、Jetson Nano芯片、激光雷达等高级硬件设备,使用Ubuntu文件系统和C/C++/Python语言,具有很强的适应性,且使用起来十分方便。

猜你喜欢
建图麦克激光雷达
手持激光雷达应用解决方案
1/2的魔法
小王子
视觉同步定位与建图中特征点匹配算法优化
生活很艰难,但你被爱着
法雷奥第二代SCALA?激光雷达
基于三轮全向机器人的室内建图与导航
基于激光雷达通信的地面特征识别技术
一种基于多传感融合的室内建图和定位算法
基于激光雷达的多旋翼无人机室内定位与避障研究