第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 知识体系总览
下面这张图把本章的核心逻辑串起来了。你可以把它当作一个检查清单,看看自己哪一步还没做。
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包。嗯,吃一堑长一智吧。