在开始安装ROS Noetic和Gazebo 11之前,我们需要确保Ubuntu 20.04系统处于最佳状态。我建议使用全新安装的系统,这样可以避免各种依赖冲突问题。如果你是在现有系统上操作,建议先运行以下命令更新系统:
bash复制sudo apt update && sudo apt upgrade -y
这个命令会更新所有已安装的软件包到最新版本。在实际操作中,我发现很多安装问题都是由于系统未更新导致的。特别是对于LTS版本的系统,保持更新尤为重要。
接下来需要安装一些基础依赖。这些依赖包是后续安装ROS和Gazebo的基础:
bash复制sudo apt install -y curl gnupg2 lsb-release build-essential
其中curl用于下载文件,gnupg2用于密钥管理,lsb-release用于获取系统版本信息,build-essential则包含了编译工具链。我在多个项目中发现,缺少这些基础包往往会导致各种奇怪的编译错误。
ROS Noetic是专门为Ubuntu 20.04设计的版本,安装过程相对简单但有几个关键点需要注意。首先添加ROS官方软件源:
bash复制sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
然后添加官方GPG密钥:
bash复制curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -
这里有个小技巧:如果你在国内,可能会遇到下载速度慢的问题。可以考虑使用国内镜像源,比如清华或中科大的镜像。但要注意,镜像源有时会有同步延迟,可能导致某些包版本不一致。
更新软件包索引后,我们可以安装完整的ROS桌面版:
bash复制sudo apt update
sudo apt install -y ros-noetic-desktop-full
这个安装过程可能需要一些时间,取决于你的网络速度。安装完成后,建议立即初始化rosdep:
bash复制sudo rosdep init
rosdep update
我在实际使用中发现,rosdep update有时会因为网络问题失败。如果遇到这种情况,可以多试几次,或者换个网络环境。
为了让系统识别ROS命令,需要将ROS环境变量添加到bashrc中:
bash复制echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
这一步非常重要,我见过很多新手因为漏掉这个步骤而无法使用ROS命令。为了验证安装是否成功,可以尝试运行:
bash复制roscore
如果能看到ROS master启动的日志信息,说明安装基本成功。按Ctrl+C可以停止roscore。
Gazebo 11是Ubuntu 20.04的默认版本,但我们需要确保安装的是完整版本。首先添加Gazebo官方源:
bash复制sudo sh -c 'echo "deb http://packages.osrfoundation.org/gazebo/ubuntu-stable $(lsb_release -sc) main" > /etc/apt/sources.list.d/gazebo-stable.list'
然后添加密钥并安装:
bash复制wget https://packages.osrfoundation.org/gazebo.key -O - | sudo apt-key add -
sudo apt update
sudo apt install -y gazebo11 libgazebo11-dev
安装完成后,可以通过运行gazebo命令来测试。第一次启动可能会比较慢,因为它需要初始化一些资源。
Gazebo有时会因为各种原因无法正常启动。最常见的问题是之前的进程没有完全退出。可以通过以下命令检查并杀死残留进程:
bash复制ps aux | grep gzserver
killall gzserver
ps aux | grep gzclient
killall gzclient
另一个常见问题是模型加载缓慢或失败。这通常是因为Gazebo默认会从在线服务器下载模型。我们可以通过预先下载模型库来解决这个问题。
Gazebo的模型库包含了各种常用的仿真对象。我们可以直接从GitHub克隆:
bash复制mkdir -p ~/.gazebo
cd ~/.gazebo
git clone https://github.com/osrf/gazebo_models
这个仓库比较大,下载可能需要一些时间。完成后,我们需要将这些模型复制到Gazebo的搜索路径中:
bash复制sudo cp -r ~/.gazebo/gazebo_models/* /usr/share/gazebo-11/models/
注意这里的*号很重要,它确保复制的是模型文件而不是整个目录。我曾经犯过直接复制目录的错误,结果Gazebo无法识别这些模型。
除了系统路径,Gazebo还支持用户自定义模型路径。可以在~/.gazebo/gazebo.cfg中添加:
ini复制[model-paths]
paths=/home/your_username/.gazebo/gazebo_models
这样Gazebo就会同时搜索系统路径和你的自定义路径。在实际项目中,我通常会建立自己的模型库目录,与官方模型分开管理。
为了让ROS和Gazebo协同工作,需要安装一些桥接包:
bash复制sudo apt install -y ros-noetic-gazebo-ros-pkgs ros-noetic-gazebo-ros-control
这些包提供了ROS和Gazebo之间的通信接口。安装完成后,可以通过以下命令测试集成是否成功:
bash复制roslaunch gazebo_ros empty_world.launch
如果能看到Gazebo界面并且ROS节点正常运行,说明集成工作正常。
一个常见的问题是gazebo_ros包找不到Gazebo安装。这通常是因为环境变量设置不正确。可以检查GAZEBO_RESOURCE_PATH和GAZEBO_MODEL_PATH是否正确设置:
bash复制echo $GAZEBO_RESOURCE_PATH
echo $GAZEBO_MODEL_PATH
如果这些变量为空,可以在.bashrc中添加:
bash复制export GAZEBO_RESOURCE_PATH=/usr/share/gazebo-11
export GAZEBO_MODEL_PATH=/usr/share/gazebo-11/models:/home/your_username/.gazebo/gazebo_models
为了更方便地开发ROS和Gazebo应用,建议安装以下工具:
bash复制sudo apt install -y ros-noetic-rviz ros-noetic-robot-state-publisher ros-noetic-moveit
这些工具在机器人仿真中非常有用。特别是RViz,它是ROS的可视化工具,可以与Gazebo配合使用。
标准的ROS开发流程是从创建工作空间开始的:
bash复制mkdir -p ~/catkin_ws/src
cd ~/catkin_ws
catkin_make
source devel/setup.bash
这个工作空间将用于存放你的ROS包。我建议把这个source命令也添加到.bashrc中:
bash复制echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
Gazebo对图形性能要求较高,特别是在集成仿真时。可以尝试以下优化措施:
对于NVIDIA显卡用户,建议安装专有驱动:
bash复制sudo ubuntu-drivers autoinstall
大型仿真场景可能会消耗大量内存。可以通过以下命令监控资源使用情况:
bash复制htop
如果发现内存不足,可以考虑减少仿真复杂度或增加交换空间:
bash复制sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
为了验证整个环境是否配置正确,我们可以运行一个简单的机器人仿真示例。首先安装TurtleBot3仿真包:
bash复制sudo apt install -y ros-noetic-turtlebot3 ros-noetic-turtlebot3-simulations
然后设置默认机器人模型并启动仿真:
bash复制echo "export TURTLEBOT3_MODEL=burger" >> ~/.bashrc
source ~/.bashrc
roslaunch turtlebot3_gazebo turtlebot3_empty_world.launch
如果一切正常,你应该能在Gazebo中看到一个简单的机器人模型,同时在RViz中看到传感器数据。这个测试验证了从ROS到Gazebo的完整工具链是否正常工作。