悠悠楠杉
ROS、OpenAI和Gazebo机器人与人工智能仿真与实践教研杂记(一):安装配置
ROS、OpenAI和Gazebo机器人与人工智能仿真与实践教研杂记(一):安装配置
关键词:ROS Noetic、OpenAI Gym、Gazebo仿真、机器人开发环境、Ubuntu 20.04
描述:记录在Ubuntu 20.04环境下搭建ROS+OpenAI+Gazebo联合开发环境时遇到的典型问题及解决方案,涵盖依赖管理、版本冲突处理等实战经验。
从零开始的机器人开发环境搭建
作为机器人实验室新晋的"环境配置工程师",我在过去两周里经历了从系统装机到环境调通的完整过程。当看到Gazebo里的小乌龟终于能通过强化学习算法自主避障时,那些被依赖关系折磨到凌晨三点的记忆突然有了意义。
一、系统选择与ROS安装陷阱
开发环境选择Ubuntu 20.04并非偶然。ROS Noetic作为最后一个支持Python2/3双版本的发行版,在过渡期展现出特殊的兼容性优势。但初次安装时,直接运行sudo apt install ros-noetic-desktop-full
却遇到了意想不到的问题:
bash
E: 无法定位软件包 ros-noetic-desktop-full
这个看似简单的报错背后,暴露的是新手常犯的三个错误:
1. 未添加ROS官方源
2. 未更新apt缓存
3. 忽略了地域性网络问题
解决方案是完整的四步走:
bash
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
sudo apt update
sudo apt install ros-noetic-desktop-full
二、Gazebo与ROS的版本耦合
当欣喜地运行roscore & gazebo
准备大展拳脚时,Gazebo 11却提示找不到ROS插件。这个问题源于Gazebo与ROS的深度集成机制:
必须安装桥接包:
bash sudo apt install ros-noetic-gazebo-ros-pkgs ros-noetic-gazebo-ros-control
环境变量配置玄机:
在.zshrc(或.bashrc)中需要特定顺序:
bash source /opt/ros/noetic/setup.zsh source /usr/share/gazebo/setup.sh
三、OpenAI Gym的定制化改造
标准版的gym==0.21.0
与ROS存在Python线程调度冲突。通过分析堆栈信息发现,Gazebo的物理引擎更新线程会与gym的渲染线程争夺GIL锁。
解决方案是使用改造版本:
bash
pip install git+https://github.com/openai/gym.git@0.21.0#egg=gym[all] --upgrade
同时需要打补丁:python
在gym/envs/classic_control/rendering.py中
import matplotlib
matplotlib.use('Agg') # 强制非交互式后端
四、联合调试的"死亡三角"
当三者同时运行时,会出现著名的"3G"问题(Gazebo+GPU+Gym):
- Gazebo占用显存不释放
- Gym的Atari环境需要CUDA
- ROS的可视化工具占用GL上下文
通过配置NVIDIA驱动参数解决:
bash
sudo nvidia-smi -pm 1 # 启用持久模式
sudo nvidia-smi -g 3 -c 0 # 设置计算模式为独占线程
环境验证的正确姿势
建议按以下顺序验证:
1. 单独启动roscore
检查ROS核心
2. 运行rosrun turtlesim turtlesim_node
测试基础功能
3. 启动Gazebo空场景gazebo --verbose /opt/ros/noetic/share/gazebo_plugins/worlds/empty.world
4. 最后执行Python测试脚本:
python
import gym
import rospy
env = gym.make('CartPole-v1')
obs = env.reset()
rospy.init_node('test_node')
print("交叉验证通过")
写在最后
环境配置从来不是简单的复制粘贴命令。每次遇到报错时,建议:
1. 先看日志的最后5行
2. 检查环境变量echo $ROS_PACKAGE_PATH
3. 使用ldd
检查动态库链接
下次我们将探讨如何在这个环境中搭建第一个强化学习控制的Turtlebot3仿真场景。当看到机器人在虚拟世界里学会自主导航时,你会明白这些配置时的痛苦都是值得的。