Skip to main content

学习动态环境中的安全飞行

Python ROS1 ROS2 艾萨克·西姆 Linux 平台

欢迎来到 NavRL 代码库!此代码库提供NavRL框架的实现,旨在使机器人能够利用强化学习安全地在动态环境中导航。虽然原始论文侧重于无人机导航,但 NavRL 可以扩展到任何采用基于速度的控制系统的机器人。

有关更多详细信息,请参阅此处的相关论文:

Zhefan Xu、Xinming Han、Haoyu Shen、Hanyu Jin 和 Kenji Shimada,“NavRL:在动态环境中学习安全飞行”,IEEE 机器人与自动化快报 (RA-L),2025 年。[IEEE Xplore] [预印本] [YouTube] [BiliBili]

消息

  • **2025-04-06:**我们发布易于运行的 Python 脚本,允许用户快速运行演示。
  • **2025-02-23:**我们的 NavRL 框架的 GitHub 代码、视频演示和相关论文已发布。作者将积极维护和更新此代码库!

目录

3分钟内完成 NavRL 快速演示

我们提供预训练模型和易于运行的 Python 脚本,以便快速演示 NavRL 框架。

首先,请按照部署虚拟环境中的步骤设置 Conda 环境。设置完成后,您可以使用以下命令运行以下三个演示:

conda activate NavRL
cd NavRL/quick-demos

# DEMO I: Navigating to a predefined goal point
python simple-navigation.py

# DEMO II: Navigating to dynamically/randomly assigned goal points
python random-navigation.py

# DEMO III: Multi-robot navigation
python multi-robot-navigation.py

一、在 NVIDIA Isaac Sim 中进行训练

本节介绍使用 Isaac Sim 中的 NavRL 框架训练您自己的 RL 代理的步骤。如果您不想亲自训练代理,请跳过本节,直接跳至部署部分。

Isaac Sim 安装

本项目使用Isaac Sim 版本 2023.1.0-hotfix.1开发,该版本发布于 2023 年 11 月。**请确保下载并使用正确的版本,因为使用其他版本可能会因版本不兼容而导致错误。**另外,请确保您已安装conda

如果您已经下载了 Isaac Sim 2023.1.0-hotfix.1 版本,则可以跳过以下步骤。否则,请按照以下说明下载旧版 Isaac Sim,因为官方安装程序不支持旧版下载。

要下载 Isaac Sim 版本 2023.1.0-hotfix.1:

a.首先,按照此链接上的步骤完成 Docker 容器设置。

b.然后,将 Isaac Sim 下载到您的 docker 容器中:

docker pull nvcr.io/nvidia/isaac-sim:2023.1.0-hotfix.1

docker run --name isaac-sim --entrypoint bash -it --runtime=nvidia --gpus all -e "ACCEPT_EULA=Y" --rm --network=host \
-e "PRIVACY_CONSENT=Y" \
-v ~/docker/isaac-sim/cache/kit:/isaac-sim/kit/cache:rw \
-v ~/docker/isaac-sim/cache/ov:/root/.cache/ov:rw \
-v ~/docker/isaac-sim/cache/pip:/root/.cache/pip:rw \
-v ~/docker/isaac-sim/cache/glcache:/root/.cache/nvidia/GLCache:rw \
-v ~/docker/isaac-sim/cache/computecache:/root/.nv/ComputeCache:rw \
-v ~/docker/isaac-sim/logs:/root/.nvidia-omniverse/logs:rw \
-v ~/docker/isaac-sim/data:/root/.local/share/ov/data:rw \
-v ~/docker/isaac-sim/documents:/root/Documents:rw \
nvcr.io/nvidia/isaac-sim:2023.1.0-hotfix.1

c. 将下载的 Isaac Sim 从 docker 容器移动到本地计算机:

bash docker ps # check your container ID in another terminal

# Replace <id_container> with the output from the previous command
docker cp <id_container>:isaac-sim/. /path/to/local/folder # absolute path

Isaac Sim 版本 2023.1.0-hotfix.1 现已安装在您的本地计算机上。

要设置 NavRL 框架,请克隆存储库并按照以下步骤操作(此过程可能需要几分钟):

# Set the ISAACSIM_PATH environment variable
echo 'export ISAACSIM_PATH="path/to/isaac_sim-2023.1.0-hotfix.1"' >> ~/.bashrc

cd NavRL/isaac-training
bash setup.sh

安装完成后,您应该已经创建了一个名为的虚拟环境NavRL

验证安装并运行训练示例

使用默认参数运行有 2 个机器人的训练示例来验证安装。

# Activate NavRL virtual environment
conda activate NavRL

# Run a training example with default settings
python training/scripts/train.py

如果 repo 安装正确,您应该能够看到如下所示的 Isaac Sim 窗口:

isaac 训练窗口

训练你自己的 RL 代理

训练环境设置和超参数可以在中找到NavRL/isaac-training/training/cfg

以下示例演示了如何使用 1024 个机器人、350 个静态障碍物和 80 个动态障碍物(需要 RTX 4090)进行训练。我们建议使用Wandb来监控您的训练和评估统计数据。

python training/scripts/train.py headless=True env.num_envs=1024 env.num_obstacles=350 \
env_dyn.num_obstacles=80 wandb.mode=online

经过足够时间的训练后,您应该观察到机器人学会了避免碰撞:

 isaac-训练.mp4 

二、部署虚拟环境

本节提供部署所需的最低 conda 环境设置NavRL(包括在真实机器人上运行)。如果您已经 在Isaac 训练步骤NavRL中创建了 conda 环境,则可以跳过本节。要创建 conda 环境,请运行以下命令:

cd NavRL/isaac-training
bash setup_deployment.sh

安装完成后,NavRL将创建一个名为 的 conda 环境。您可以通过激活该环境来验证安装是否成功:

conda activate NavRL

III. NavRL ROS1部署

本节演示了如何使用 ROS1 和 Gazebo 在四轴飞行器机器人上部署 NavRL。请确保您的系统满足以下要求:

  • Ubuntu 20.04 LTS
  • ROS1 认知

首先,安装依赖项并将ros1文件夹从此存储库复制到您的 catkin 工作区。

sudo apt-get install ros-noetic-mavros*

cp -r ros1 /path/to/catkin_ws/src
catkin_make

然后,为 Gazebo 模型设置环境变量。

echo 'source /path/to/ros1/uav_simulator/gazeboSetup.bash' >> ~/.bashrc

注意,环境变量应该在 catkin_ws 中设置。例如,正确的~./.bashrc脚本应该是 source ~/catkin_ws/src/ros1/uav_simulator/gazeboSetup.bash而不是source path/to/NavRL/ros1/uav_simulator/gazeboSetup.bash

最后,启动模拟并部署 NavRL 导航。

# Launch the gazebo simulator
roslaunch uav_simulator start.launch

# Start the perception and safety module
roslaunch navigation_runner safety_and_perception_sim.launch

# Run the navigation node
conda activate NavRL
rosrun navigation_runner navigation_node.py

Gazebo 窗口将显示环境,而 RViz 窗口则显示数据。使用 RViz 的2D Nav Goal工具设置导航目标,如下方视频所示(注意:默认环境和设置可能与视频不同):

 ros1-部署.mp4 

要更改环境设置,请查看启动文件ros1/uav_simulator/launch/start.launch。每个模块的参数位于ros1/navigation_runner/cfg/*.yaml配置文件中。

四、NavRL ROS2部署

本节演示了如何使用 Unitree Go2 四足机器人部署 NavRL、ROS2 和 Isaac Sim。请确保您的系统满足以下要求:

  • Ubuntu 22.04 LTS
  • ROS2 谦卑

开始之前,请根据此链接安装模拟器。

首先,ros2将此存储库中的文件夹复制到您的 ros2 工作区。

cp -r ros2 /path/to/ros2_ws/src
colcon build --symlink-install

然后,启动模拟并部署 NavRL 导航。

# Launch Isaac Go2 simulator
conda activate isaaclab
cd /path/to/isaac-go2-ros2
python isaac-go2-ros2.py

# Start the perception and safety module
ros2 launch navigation_runner perception.launch.py
ros2 launch navigation_runner safe_action.launch.py # optional

# Turn on Rviz2 visualization
ros2 launch navigation_runner rviz.launch.py

# Run the navigation launch
conda activate NavRL
ros2 launch navigation_runner navigation.launch.py

Isaac Sim 窗口将显示环境,而 RViz 窗口将显示数据。使用 RViz 的2D Nav Goal工具设置导航目标。导航示例如下视频所示:

 go2-导航.mp4 

请注意,如果您想在真实机器人中部署ros2 foxy,请切换到ros2-foxy分支。

git checkout ros2-foxy

五、引用与参考

如果我们的工作对您的研究有用,请考虑引用我们的论文。

@ARTICLE{NavRL,
author={Xu, Zhefan and Han, Xinming and Shen, Haoyu and Jin, Hanyu and Shimada, Kenji},
journal={IEEE Robotics and Automation Letters},
title={NavRL: Learning Safe Flight in Dynamic Environments},
year={2025},
volume={10},
number={4},
pages={3668-3675},
keywords={Navigation;Robots;Collision avoidance;Training;Safety;Vehicle dynamics;Heuristic algorithms;Detectors;Autonomous aerial vehicles;Learning systems;Aerial systems: Perception and autonomy;reinforcement learning;collision avoidance},
doi={10.1109/LRA.2025.3546069}}

六、致谢

作者谨向 Kenji Shimada 教授的大力支持以及所有为这项研究的发展做出贡献的 CERLAB 无人机团队成员表示诚挚的感谢。

NavRL 框架的 Isaac Sim 训练组件建立在OmniDrones之上。