摘要
本文工作:
- 搭建了移动机器人实验平台;
- 设计了基于深度学习的自主导航方法 → \rightarrow → 输入RGB图像,直接输出控制信号,避免复杂的特征工程和规划策略;
关键词
- 移动机器人;
- 自主导航;
- 深度学习;
- 卷积神经网络
通常移动机器人系统通过传感器来感知周围环境,如激光传感器、超声波传感器、视觉传感器等,但由于携带传感器有限,大部分系统决策和控制能力不足。
硬件主要包括:树莓派4B上位机、STM32F103RC下位机、电机及其驱动、传感器
1 移动机器人平台
1.1 平台硬件系统
项目 | 内容 |
---|---|
传感器(编码器) | 具有增量式输出的霍尔编码器 |
传感器(摄像头) | LETMC-520摄像头 |
底盘 | 麦克纳姆轮,其轮毂轴与辊子转轴成 45 ° 45\degree 45°角,可保证机器人全向运动 |
电机 | GB37520直流减速电机 |
电机驱动 | TB6612FNG |
电源 | 航模电池 |
上位机 | 树莓派4B → \rightarrow → 算法实现运行、采集传感器信息、下位机通信 |
通信 | USB2.0双向、 数据帧格式、USB-TTL模块 |
下位机 | STM32F103RC → \rightarrow → 数据采集、底盘控制、通信 |
1.2 平台软件系统
项目 | 内容 |
---|---|
OS | Ubuntu Mate 18.04 |
底盘控制节点 | 订阅/cmd_vel话题 → \rightarrow → 提取底盘目标线速度和角速度信息 → \rightarrow → 逆运动学 → \rightarrow → 电机的目标转速 → \rightarrow → 下位机 |
底盘控制节点 | 获取底盘运动状态数据,并发布相应话题 |
下位机 | C语言编程、FreeRTOS进行任务调度 |
电机控制算法 | PID |
2 基于深度学习的自主导航方法
2.1 深度学习模型
四个分别为
(
128
,
64
,
64
,
16
)
(128,64,64,16)
(128,64,64,16)的全连接层
每层同样采用ReLU函数进行激活
定义:
- s ( k ) s(k) s(k) → \rightarrow → 转向控制信号
- i ( k ) i(k) i(k) → \rightarrow → 模型输入RGB图像
- i ( k ) = f ( s ( k ) ) i(k) = f\big( s(k) \big) i(k)=f(s(k)) 训练好的模型用 f f f表示
- ω ∗ \omega^{\ast} ω∗ → \rightarrow → 移动机器人目标角速度
- 该反归一化信号经过一阶低通滤波处理得到移动机器人的目标角速度:
ω ∗ = α β s ( k ) + ( 1 − α ) ω ∗ ( k − 1 ) \omega^{\ast} = \alpha\beta s(k)+(1-\alpha)\omega^{\ast}(k-1) ω∗=αβs(k)+(1−α)ω∗(k−1)
α = 0.9 \alpha = 0.9 α=0.9且 β = 1.4 \beta = 1.4 β=1.4
2.2 模型训练
控制机器人 → \rightarrow → 观察-动作对数据集
项目 | 内容 |
---|---|
包 | Keras、Tensorflow |
归一化(图像) | 是, [ 0 , 1 ] [0,1] [0,1] |
归一化(转向控制信号) | 是, [ − 1 , 1 ] [-1,1] [−1,1] |
数据比(转角) | 0.1494 |
数据比(直道) | 0.6304 |
数据比(障碍物) | 0.2202 |
数据集大小 | 106623 |
数据集划分比 | 3:1:1 |
数据集内容 | 80% → \rightarrow → 无障碍物 + 噪声;20% → \rightarrow → 躲避障碍物 + 未注入噪声 |
训练过程监控指标 | 均方误差MSE、平均绝对误差MAE |
训练损失函数 | 均方根 |
训练优化器 | RMSProp |
转向控制信号阈值 | 0.1 |
测试集上的均方误差和平均绝对误差分别为0.039和0.102
3 自主导航实验
- 自主导航节点预先使用Keras、Tensorflow读取训练好的模型
- 订阅/camera/rgb/image_raw话题以固定周期获取摄像头的RGB图像
- RGB图像输入模型,输出的转向控制信号
- 反归一化与一阶低通滤波处理得到移动机器人的目标角速度;发布**/cmd_vel**话题
- ROS中的底盘控制节点订阅**/cmd_vel**话题以控制移动机器人运动。
泛化实验:避开突然出现的障碍物
→
\rightarrow
→ 空水桶瓶子