第2章 开发环境搭建:Ubuntu系统安装、ROS Noetic安装、工作空间与功能包创建

说实话,很多初学者把环境搭建想得太简单了。我见过太多人卡在这一步,一卡就是好几天。不是装不上,就是装上了跑不起来。嗯,咱们今天就把这事彻底捋清楚。

本章核心目标:在一台干净的机器上,从零搭建起完整的ROS Noetic开发环境。包括操作系统、ROS本体、工作空间和第一个功能包。

2.1 操作系统选型:为什么是Ubuntu 20.04?

ROS Noetic是最后一个支持Python 2的版本,但它官方只认Ubuntu 20.04(Focal Fossa)。你可能会问:我用22.04行不行?我试过,能装,但依赖冲突会让你怀疑人生。我个人习惯是:ROS版本和Ubuntu版本严格绑定,别自作聪明。

ROS版本 对应Ubuntu 支持周期 Python版本
ROS Noetic 20.04 (Focal) 2020 - 2025 Python 3
ROS Melodic 18.04 (Bionic) 2018 - 2023 Python 2
ROS2 Foxy 20.04 (Focal) 2020 - 2023 Python 3

避坑指南:我曾经在Ubuntu 22.04上强行安装Noetic,结果rosdep init那一步就报了一堆SSL证书错误。折腾了两天,最后老老实实重装了20.04。别走弯路。

2.2 Ubuntu 20.04 安装要点

安装方式有两种:双系统或虚拟机。做机器人开发,我强烈建议双系统。虚拟机在访问USB设备(比如雷达、舵机控制板)时会有延迟和权限问题,调试起来很痛苦。

安装时注意这几点:

  • 分区建议:至少给根目录/分配40GB,/home分配20GB以上。我一般给根目录60GB,因为后面装各种库、编译代码,空间很快就吃掉了。
  • 语言选择:选English。中文支持可以后面加,但终端和系统路径用英文能避免很多编码问题。
  • 网络配置:安装时连上网络,勾选“安装第三方软件”,这样显卡驱动和WiFi固件会自动装好。

小技巧:安装完成后,先跑一遍sudo apt update && sudo apt upgrade -y,把系统包更新到最新。这一步能避免后面很多依赖版本不匹配的问题。

2.3 ROS Noetic 完整安装流程

ROS的安装其实就三步:添加源、安装核心包、初始化。但每一步都有坑,我一个个说。

2.3.1 添加软件源与密钥

# 1. 设置sources.list
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

# 2. 添加密钥
sudo apt install curl
curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -

# 3. 更新索引
sudo apt update

这里有个常见问题:密钥添加失败。我记得有一次在公司内网环境,curl连不上raw.githubusercontent.com。解决办法是用代理,或者手动下载密钥文件再导入。

2.3.2 安装ROS Noetic

我建议安装桌面完整版,包含ROS、rviz、gazebo等常用工具。别省那点空间,后面你都会用到的。

sudo apt install ros-noetic-desktop-full

这个命令会下载大约1.5GB的包,取决于你的网速,可能要等10-30分钟。趁这个时间,你可以去泡杯咖啡。

2.3.3 初始化rosdep

rosdep是ROS的依赖管理工具,用来安装功能包所需的系统依赖。这一步很多人会卡住。

sudo rosdep init
rosdep update

常见错误:sudo: rosdep: command not found。这是因为rosdep还没安装。执行sudo apt install python3-rosdep即可。我曾经遇到rosdep init报网络错误,原因是raw.githubusercontent.com被墙。解决方案是手动下载20-default.list文件放到/etc/ros/rosdep/sources.list.d/目录下。

2.3.4 设置环境变量

每次打开终端都要能自动加载ROS环境,所以要把source命令写到bashrc里。

echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc

验证是否成功:

roscore

如果看到ROS master启动的日志信息,恭喜你,ROS安装成功了。

2.4 工作空间与功能包创建

工作空间(workspace)是ROS开发的基本组织单元。说白了,就是一个文件夹,里面按特定结构存放你的代码、依赖和编译产物。

2.4.1 创建工作空间

mkdir -p ~/catkin_ws/src
cd ~/catkin_ws
catkin_make

执行完catkin_make后,你会看到build和devel两个目录自动生成。其中devel/setup.bash就是工作空间的环境变量文件。

重要:每次新建工作空间后,都要source一下:source ~/catkin_ws/devel/setup.bash。我建议把这个也加到bashrc里,但要注意顺序——先source ROS系统环境,再source工作空间环境。

2.4.2 创建功能包

功能包(package)是ROS代码的最小单元。一个功能包可以包含节点、配置文件、消息定义等。

cd ~/catkin_ws/src
catkin_create_pkg my_robot_pkg std_msgs rospy roscpp

这条命令会生成一个名为my_robot_pkg的文件夹,里面包含CMakeLists.txt和package.xml两个核心文件。后面三个参数是依赖项:std_msgs(标准消息类型)、rospy(Python客户端库)、roscpp(C++客户端库)。

2.4.3 编译功能包

cd ~/catkin_ws
catkin_make

如果编译成功,你会看到[100%] Built target ...的提示。这时候你的功能包就可以被ROS系统识别了。

检查功能包是否被识别:rospack list | grep my_robot_pkg。如果输出了路径,说明一切正常。

2.5 知识体系总览

下面这张图把本章的核心逻辑串起来了。你可以把它当作一个检查清单,看看自己哪一步还没做。

ROS Noetic 开发环境搭建流程 Ubuntu 20.04 安装 ROS Noetic 安装(desktop-full) rosdep init & update source setup.bash → ~/.bashrc 创建 catkin_ws → catkin_make 验证命令 roscore

2.6 常见问题与排查

环境搭建过程中,我总结了几条高频问题,你遇到了可以直接对照排查。

问题现象 可能原因 解决方案
roscore启动报错 ROS环境变量未加载 检查~/.bashrc中是否有source命令
catkin_make找不到包 工作空间未source 执行source devel/setup.bash
rosdep update超时 网络问题 使用代理或手动下载配置文件
Python包导入失败 Python版本不对 确认使用的是Python 3,python3 --version

最后提醒:如果你在安装过程中遇到任何报错,先别急着重装系统。把错误信息复制到搜索引擎,加上“ROS Noetic”关键词,90%的问题都能找到答案。我曾经花了一下午重装系统,结果发现只是少装了一个python3-catkin-pkg包。嗯,吃一堑长一智吧。