DRL-robot-navigation
基于TD3深度强化学习算法,训练移动机器人在ROS Gazebo仿真环境中实现自主导航避障,论文发表
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
基于TD3深度强化学习算法,训练移动机器人在ROS Gazebo仿真环境中实现自主导航避障,论文发表
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象这样一个场景:一个机器人在一间复杂的仓库里,四周堆满障碍物,没有人给它画地图,也没有人在旁边指挥。它只能靠自己的"眼睛"——一个激光雷达——感知周围环境,然后不断尝试:撞墙了?扣分;离目标更近了?加分。就这样,它在模拟器里撞了几十万次墙之后,突然"开窍"了,知道怎么绕过障碍、到达目的地了。
DRL-robot-navigation 正是这样一个项目:它用深度强化学习(TD3算法)训练移动机器人在 ROS Gazebo 模拟器中完成自主导航任务。该项目相关成果已发表于机器人领域顶会 ICRA 2022 及 IEEE Robotics and Automation Letters。

图1:Gazebo 仿真环境,机器人需要在障碍物之间找到通往随机目标点的路径
该项目源于拉脱维亚研究团队的学术研究,由 Cimurs Reinis、Suh Il Hong、Lee Jin Han 三位作者共同完成,论文标题为《Goal-Driven Autonomous Exploration Through Deep Reinforcement Learning》(通过深度强化学习实现目标驱动的自主探索),发表于 IEEE RAL 2022。
与很多学术项目止步于论文不同,作者将完整的训练代码、仿真环境和模型参数开源到了 GitHub,并提供了详尽的中文 Medium 教程。这种"论文+代码+社区"的模式,使其他研究者可以轻松复现并在此基础上继续探索。
从 GitHub topics 可以看出项目的核心标签:deep-reinforcement-learning、robot-navigation、gazebo、ros、td3,形成了从算法到机器人操作系统的完整技术栈。
TD3,全称 Twin Delayed Deep Deterministic Policy Gradient,是 DDPG(Deep Deterministic Policy Gradient)算法的改进版本。它解决了一个 DDPG 中常见的"过估计 Q 值"问题——简单说,就是让价值评估更准确,从而让策略学习更稳定。
项目使用了 TD3 的三大核心技巧:
从 velodyne_env.py 可以看出,机器人的状态输入包含两部分:
动作输出为两个连续的电机控制信号:线速度(linear velocity)和角速度(angular velocity)。这种连续动作空间正是 TD3 擅长的领域——相比离散动作空间,机器人的移动更加平滑自然。
从 train_velodyne_td3.py 中可见网络结构:
这种"状态-动作联合输入"是连续控制任务的经典 Critic 设计。
GazeboEnv 类封装了整个仿真交互逻辑:每一步(TIME_DELTA = 0.1s),机器人接收激光雷达数据,根据动作指令移动,并获得奖励。奖励函数设计为:
障碍物检测完全依赖激光雷达数据,无需视觉输入,体现了纯传感器驱动导航的工程简洁性。
ROS(Robot Operating System)虽然名字叫"操作系统",实际上是机器人领域的标准中间件框架,提供了硬件抽象、设备驱动、消息传递等基础能力。Gazebo 则是与 ROS 无缝集成的物理仿真引擎。
本项目使用:
这个组合在机器人研究领域几乎是事实标准,大量论文和开源项目都基于此栈。
项目采用标准 ROS catkin 工作空间结构(catkin_ws/),包含多机器人仿真场景包 multi_robot_scenario。这种结构使项目可以方便地与现有 ROS 生态集成,也方便其他研究者将自己的包加入其中。
项目提供了专门的 Dockerfile,基于 osrf/ros:noetic-desktop-full 镜像,关键设计:
GAZEBO_HEADLESS_RENDERING=1 和 LIBGL_ALWAYS_SOFTWARE=1,无需 GPU 渲染,节省资源对于没有 ROS/Gazebo 环境的研究者,Docker 是最便捷的运行方式,但需要注意这仍然是一个命令行工具,没有 Web 界面。
# 构建镜像
sudo docker build -t drl_noetic .
# 运行容器
sudo docker run -it --rm drl_noetic
# 容器内启动训练
cd DRL-robot-navigation/TD3
python3 train_velodyne_td3.py
需要 Ubuntu 20.04 + ROS Noetic + Python 3.8+:
# 克隆代码
git clone https://github.com/reiniscimurs/DRL-robot-navigation
cd DRL-robot-navigation/catkin_ws
catkin_make_isolated
# 设置环境变量
export ROS_HOSTNAME=localhost
export ROS_MASTER_URI=http://localhost:11311
export GAZEBO_RESOURCE_PATH=~/DRL-robot-navigation/catkin_ws/src/multi_robot_scenario/launch
# 训练
cd TD3
python3 train_velodyne_td3.py
# TensorBoard 可视化
tensorboard --logdir runs
训练完成后,通过测试脚本验证模型效果:
python3 test_velodyne_td3.py
测试阶段会固定一些场景,评估机器人的导航成功率和平稳性。
训练和测试都在同一个 Gazebo 仿真环境中进行。真实世界(光照变化、地形不平、传感器噪声)与仿真环境的差距,可能导致训练好的策略泛化能力不足。这是 sim-to-real(仿真到现实)迁移问题的典型表现。
即便使用 Docker 无头模式,ROS + Gazebo 的仿真仍然需要相当的 CPU 资源。GPU 不是必须的(训练在 CPU 上也能跑),但有 GPU 可以显著加速 PyTorch 的张量运算。
障碍物位置是硬编码在仿真环境中的,无法动态更改地图。适合算法研究,但不适合需要 SLAM(同步定位与建图)的未知环境探索任务。
所有交互都在终端和 TensorBoard 中完成,对于非 ROS 开发者来说有一定门槛。
截至分析时,该项目:
robot-navigation 和 td3 下有较高曝光度这个项目为以下研究方向提供了良好的基准:
同类 DRL 机器人导航开源项目中,DRL-robot-navigation 的特点是:
DRL-robot-navigation 是一个难得的"从顶会论文到可直接运行代码"的完整项目。它用 TD3 算法解决移动机器人在障碍物环境中的目标导航问题,基于 ROS + Gazebo 仿真栈,并通过 Docker 实现了跨平台部署。对于研究强化学习机器人控制、工业 AGV 路径规划、或者 sim-to-real 迁移的开发者来说,这是一个值得深入研究的高质量基准项目。
虽然项目缺少 Web 可视化界面,且对 ROS 环境有一定依赖,但完整可复现的代码、与学术论文对应的实现、以及 Docker 无头训练的便捷性,使其成为该领域入门和进阶的优质选择。