路径规划是移动机器人领域主要研究内容之一,移动机器人路径规划即机器人在所处环境下选择一条从起点到终点的无碰撞路径。传统路径规划方法过分依赖环境地图,随着深度学习(Deep Learning,DL)和强化学习(Reinforcement Learning,RL)的快速发展,深度强化学习(Deep Reinforcement Learning,DRL)算法广泛应用于移动机器人路径规划和避障。
一、网络建立
1. 输入层 (input)
- 输入尺寸:10×10×1 图像,表示输入是一个 10×10 的灰度图像。
- 归一化:使用 “zerocenter” 归一化,即将输入数据的均值调整为零,通常用于加速训练和提高模型性能。
2. 卷积层 (con1)
- 卷积核:16 个 3×3 的卷积核,步幅为 [1, 1],填充为 [0, 0, 0, 0]。
- 输出尺寸:8×8×16。
- 可学习参数:
- 权重:3×3×1×16(每个卷积核有 3×3×1 个参数,共 16 个卷积核)。
- 偏置:1×1×16(每个卷积核有一个偏置)。
- 作用:提取图像的局部特征,如边缘、纹理等。
3. ReLU 激活函数 (relu1)
- 激活函数:ReLU(Rectified Linear Unit),将负值置零,保留正值。
- 输出尺寸:8×8×16。
- 作用:引入非线性特性,避免梯度消失问题。
4. 全连接层 (fc1)
- 输出尺寸:1×1×64。
- 可学习参数:
- 权重:64×1024(将 8×8×16 的特征映射到 64 个神经元)。
- 偏置:64×1。
- 作用:将卷积层提取的特征映射到更高维度的空间,用于更复杂的特征表示。
5. ReLU 激活函数 (relu3)
- 激活函数:ReLU。
- 输出尺寸:1×1×64。
- 作用:引入非线性特性。
6. 扁平化层 (flatten)
- 输出尺寸:64×1。
- 作用:将多维数据展平为一维,以便输入到后续的 BiLSTM 层。
7. 双向 LSTM 层 (BiLSTM)
- 隐藏单元:20 个隐藏单元。
- 输出尺寸:40×1。
- 可学习参数:
- 输入权重:160×…(具体取决于输入和隐藏单元的维度)。
- 循环权重:160×…(用于处理时间序列的循环连接)。
- 偏置:160×…。
- 作用:处理序列数据,捕捉时间序列的前后依赖关系。双向 LSTM 可以同时利用过去和未来的上下文信息。
8. ReLU 激活函数 (relu)
- 激活函数:ReLU。
- 输出尺寸:40×1。
- 作用:引入非线性特性。
9. 全连接层 (fc2)
- 输出尺寸:8×1。
- 可学习参数:
- 权重:8×40(将 40 个特征映射到 8 个输出)。
- 偏置:8×1。
- 作用:将 BiLSTM 的输出映射到最终的预测结果。
10. 输出层 (output)
- 输出类型:回归输出。
- 损失函数:均方误差(Mean Squared Error, MSE),响应为 “Response”。
- 输出尺寸:8×1。
- 作用:输出最终的回归结果,通常用于预测连续值。
这个网络结构结合了卷积神经网络(CNN)和双向 LSTM(BiLSTM),共包含79.6k个学习参数,用于近似Q值函数。网络输入是地图状态,输出是8个方向动作的Q值,用于指导机器人选择最优动作。
二、部分MATLAB代码及结果
close all
clear all;
clc;
%% 地图map
global map;
map=[0 0 0 0 0 0 1 0 0 0;
0 0 0 0 0 0 1 0 0 1;
0 0 0 0 0 0 0 0 0 1;
0 1 1 0 0 0 0 0 0 0;
0 1 0 0 0 1 0 0 0 0;
0 0 0 0 0 1 1 0 0 1;
1 0 0 0 0 0 1 0 0 1;
0 0 0 0 0 0 0 0 0 0;
0 0 0 0 0 0 0 0 0 0
0 1 1 1 0 0 0 0 0 0];
%% 画图
analyzeNetwork(dqn_net)
figure
plot(curve,'r-',LineWidth=2);
saveas(gca,'11.jpg')
figure
imagesc(~map)
hold on
plot(state_mark(:,2),state_mark(:,1),'c-',LineWidth=2);
colormap('gray')
scatter(start_state_pos(2) ,start_state_pos(1),'MarkerEdgeColor',[0 0 1],'MarkerFaceColor',[0 0 1], 'LineWidth',1);%start point
scatter(target_state_pos(2),target_state_pos(1),'MarkerEdgeColor',[0 1 0],'MarkerFaceColor',[0 1 0], 'LineWidth',1);%goal point
text(start_state_pos(2),start_state_pos(1),'起点','Color','red','FontSize',10);%显示start字符
text(target_state_pos(2),target_state_pos(1),'终点','Color','red','FontSize',10);%显示goal字符
title('基于DQN的机器人路径规划')
saveas(gca,'12.jpg')