从零到一:在ROS2 Humble上部署NavRL避障策略实战

张开发
2026/4/9 11:54:18 15 分钟阅读

分享文章

从零到一:在ROS2 Humble上部署NavRL避障策略实战
1. 环境准备Ubuntu 22.04与ROS2 Humble基础配置在开始部署NavRL避障策略之前我们需要先搭建好基础运行环境。Ubuntu 22.04 LTS是目前ROS2 Humble官方推荐的操作系统版本我实测下来这个组合的稳定性最好。如果你还在用20.04建议直接重装系统避免后期出现各种依赖冲突的坑。安装ROS2 Humble其实非常简单官方文档已经给出了完整的步骤。但根据我的经验有几点需要特别注意一定要选择desktop版本安装而不是base版本否则会缺少很多可视化工具记得在安装完成后执行source /opt/ros/humble/setup.bash或者把这行代码加到~/.bashrc里建议安装ros-dev-tools后面编译代码时会用到# 官方安装命令整理版已加入国内用户需要的换源操作 sudo apt update sudo apt install curl gnupg sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg echo deb [arch$(dpkg --print-architecture) signed-by/usr/share/keyrings/ros-archive-keyring.gpg] https://mirrors.tuna.tsinghua.edu.cn/ros2/ubuntu jammy main | sudo tee /etc/apt/sources.list.d/ros2.list /dev/null sudo apt update sudo apt install ros-humble-desktop ros-dev-tools安装完成后建议立即测试ROS2核心功能是否正常。我习惯用以下命令快速验证ros2 run demo_nodes_cpp talker ros2 run demo_nodes_py listener如果能看到消息收发说明基础环境已经OK。接下来我们需要处理更复杂的Isaac Sim环境配置。2. Isaac Sim环境搭建与避坑指南Isaac Sim是NVIDIA推出的机器人仿真平台NavRL的部署依赖这个环境。官方提供了Docker和本地安装两种方式我强烈建议使用Docker方式因为可以避免污染主机环境。不过要注意Isaac Sim对显卡要求较高至少需要RTX 3060及以上显卡。2.1 Docker方式安装Isaac Sim首先确保你的Docker已经正确安装并支持NVIDIA GPU。这里有个小技巧在安装完Docker后一定要记得执行nvidia-docker测试否则后面运行Isaac Sim时会报错。# 验证NVIDIA Docker支持 docker run --rm --gpus all nvidia/cuda:11.8.0-base-ubuntu22.04 nvidia-smi拉取Isaac Sim镜像时务必使用2023.1.0-hotfix.1这个特定版本这是经过验证能与NavRL兼容的版本。我试过其他版本都会出现各种奇怪的兼容性问题。docker pull nvcr.io/nvidia/isaac-sim:2023.1.0-hotfix.1运行容器时挂载目录的配置很关键。建议按照以下方式设置卷映射这样可以持久化缓存和配置docker run --name isaac-sim --entrypoint bash -it --runtimenvidia --gpus all \ -e ACCEPT_EULAY --rm --networkhost \ -e PRIVACY_CONSENTY \ -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 \ nvcr.io/nvidia/isaac-sim:2023.1.0-hotfix.12.2 常见问题排查在安装过程中我遇到过几个典型问题EULA未接受错误必须设置ACCEPT_EULAY环境变量显卡驱动不兼容建议使用NVIDIA 525及以上版本驱动Docker权限问题记得将当前用户加入docker组缓存目录权限错误确保挂载的本地目录有写权限如果启动后Isaac Sim界面黑屏很可能是显卡驱动问题。可以尝试在容器内运行nvidia-smi查看GPU状态或者检查/var/log/nvidia-installer.log日志文件。3. NavRL训练环境配置有了基础环境后我们需要设置NavRL的专用训练环境。这里强烈建议使用conda创建独立的Python环境避免与系统Python或其他项目产生冲突。3.1 创建虚拟环境NavRL官方提供了setup.sh脚本来自动化环境配置但在运行前需要先设置ISAACSIM_PATH环境变量echo export ISAACSIM_PATH/path/to/isaac_sim-2023.1.0-hotfix.1 ~/.bashrc source ~/.bashrc git clone https://github.com/Zhefan-Xu/NavRL.git cd NavRL/isaac-training bash setup.sh这个脚本会自动创建名为NavRL的conda环境安装所有必要的Python依赖配置Isaac Sim相关路径3.2 验证安装安装完成后我们可以用官方提供的demo测试环境是否正常conda activate NavRL python training/scripts/train.py如果看到训练过程正常启动说明环境配置正确。第一次运行时可能会下载一些预训练模型需要保持网络畅通。4. 训练自定义避障策略NavRL支持自定义训练配置主要参数都在NavRL/isaac-training/train/cfg目录下。根据我的经验训练时需要注意以下几点4.1 训练参数调优对于Unitree Go2机器人建议使用以下参数组合env.num_envs: 1024 (并行环境数)env.num_obstacles: 200-350 (静态障碍物数量)env_dyn.num_obstacles: 50-80 (动态障碍物数量)headless: True (无界面模式节省资源)python training/scripts/train.py headlessTrue env.num_envs1024 \ env.num_obstacles300 env_dyn.num_obstacles604.2 训练监控建议使用Wandb来监控训练过程可以直观看到各项指标的变化pip install wandb wandb login python training/scripts/train.py wandb.modeonline训练时间取决于硬件配置在RTX 4090上大约需要6-8小时才能收敛。期间可以通过Wandb网页端实时观察训练进度。5. ROS2部署实战训练好的模型需要部署到ROS2环境中才能在实际机器人上运行。这部分是最容易出问题的环节下面我会详细说明每个步骤。5.1 部署环境准备首先需要将NavRL的ROS2包复制到你的ROS2工作空间cp -r NavRL/ros2 ~/ros2_ws/src cd ~/ros2_ws colcon build --symlink-install这里有个关键点--symlink-install参数非常重要它创建的是符号链接而非拷贝这样修改代码后不需要重新编译。5.2 启动仿真环境在运行导航前需要先启动Isaac Sim仿真环境conda activate isaaclab cd ~/isaac-go2-ros2 python isaac_go2_ros2.py如果遇到ModuleNotFoundError错误很可能是conda环境没有正确设置。可以尝试conda install -c conda-forge libstdcxx-ng5.3 运行导航节点新建终端依次启动以下节点# 感知模块 ros2 launch navigation_runner perception.launch.py # 安全模块(可选) ros2 launch navigation_runner safe_action.launch.py # Rviz可视化 ros2 launch navigation_runner rviz.launch.py # 导航主节点 ros2 launch navigation_runner navigation.launch.py启动成功后你可以在Rviz中使用2D Nav Goal工具设置目标点机器人就会自动规划路径并避开障碍物了。6. 常见问题解决方案在实际部署过程中我遇到过不少问题这里分享几个典型问题的解决方法6.1 地形着色错误错误信息ValueError: Included color maps are: dict_keys([magma, inferno, plasma, viridis])解决方法 修改~/IsaacLab/source/extensions/omni.isaac.lab/omni/isaac/lab/terrains/terrain_generator.py文件# 修改前 self.terrain_mesh color_meshes_by_height(self.terrain_mesh) # 修改后 self.terrain_mesh color_meshes_by_height([self.terrain_mesh], color_mapviridis)6.2 参数缺失错误错误信息TypeError: unsupported operand type(s) for *: _MISSING_TYPE and Tensor解决方法 修改~/isaac-go2-ros2/go2/go2_env.py文件补充缺失的参数base_vel_cmd mdp.UniformVelocityCommandCfg( asset_nameunitree_go2, resampling_time_range(1.0, 5.0), rel_heading_envs1.0, rel_standing_envs0.0, debug_visTrue, heading_control_stiffness0.0, rangesmdp.UniformVelocityCommandCfg.Ranges( lin_vel_x(0.0, 0.0), lin_vel_y(0.0, 0.0), ang_vel_z(0.0, 0.0), heading(0, 0) ) )6.3 环境数量未指定错误错误信息TypeError: randint() received an invalid combination of arguments解决方法 在~/isaac-go2-ros2/env/sim_env.py中添加num_envs参数prim_path/World/obstacleTerrain, num_envs1, # 添加这行7. 性能优化建议经过多次测试我总结出几个提升NavRL性能的小技巧降低渲染质量在Isaac Sim设置中将渲染质量从Ultra降到High可以显著提升帧率减少环境数量训练时可以用1024个环境但部署时减少到128或256个启用FP16在支持Tensor Core的显卡上启用半精度浮点计算关闭调试可视化设置debug_visFalse可以节省约15%的计算资源# 性能优化后的启动参数示例 python isaac_go2_ros2.py render_qualityhigh num_envs1288. 实际部署注意事项当准备将NavRL部署到真实机器人上时有几个关键点需要注意传感器校准确保IMU和视觉传感器的时戳对齐误差控制在10ms以内延迟测试测量从感知到控制的端到端延迟超过100ms就需要优化安全策略一定要启用safe_action.launch.py中的安全模块实时性保障建议使用Ubuntu实时内核(linux-rt)和PREEMPT_RT补丁我在Unitree Go2上的实测数据显示NavRL在动态环境中的避障成功率能达到92%比传统方法高出约20%。不过当障碍物移动速度超过1.5m/s时性能会明显下降这时需要考虑加入预测模块。

更多文章