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

好,咱们正式开始动手了。这一章,说白了就是给你搭建一个能跑ROS的“工位”。没有这个环境,后面所有传感器数据采集、融合处理都是空谈。我个人习惯把这一步叫做“打地基”,地基不稳,楼盖得再高也得塌。

2.1 Ubuntu系统安装:选对版本,少走弯路

ROS Noetic 官方推荐的是 Ubuntu 20.04 LTS。为什么是 LTS?Long Term Support,长期支持版,稳定,省心。我见过不少新手图新鲜装最新版 Ubuntu,结果发现 ROS 包不全,折腾半天又重装,何必呢?

核心原则:ROS Noetic 只官方支持 Ubuntu 20.04。其他版本不是不能装,但你会遇到各种依赖问题,相信我,别给自己找麻烦。

安装方式有两种,我分别说说我的看法:

  • 双系统安装:性能最好,适合需要大量计算、跑仿真、或者用 GPU 的场景。我在做激光雷达点云处理时,就用的双系统,虚拟机扛不住那么大的数据量。
  • 虚拟机安装(VMware/VirtualBox):适合学习、测试、或者电脑配置一般的情况。优点是方便,随时快照,搞坏了恢复一下就行。缺点是性能有损耗,特别是 USB 设备透传有时会出问题。

我的建议:如果你是纯新手,先用虚拟机。等熟悉了,再考虑双系统。别一上来就格盘,万一搞砸了,连个上网查资料的环境都没了。

安装过程我就不一步步截图了,网上教程一大堆。我只提醒几个关键点:

  • 分区时,建议给 / 根目录至少 20GB,/home 目录尽量大,因为后面你会下载很多 ROS 包和数据集。
  • 语言选英文。为什么?因为终端报错信息是英文的,你复制到 Google 搜,更容易找到解决方案。中文环境有时会带来编码问题,我吃过这个亏。
  • 安装过程中不要断网,让它自动下载更新。

2.2 ROS Noetic 安装:一行命令搞定?没那么简单

装完系统,接下来就是装 ROS 了。官方教程上写的是几行命令,但实际执行起来,坑不少。我带你一步步走。

2.2.1 添加软件源和密钥

首先,打开终端(快捷键 Ctrl+Alt+T)。然后执行:

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

注意:如果这一步报错说密钥服务器连不上,别慌。可以试试用 hkp://pgp.mit.edu:80 或者直接去 ROS 官网下载密钥文件。我曾经在某个内网环境里折腾了半小时,最后发现是防火墙把端口封了。

2.2.2 安装 ROS Noetic

更新一下软件包列表:

sudo apt update

然后安装完整桌面版(推荐,包含 rviz、rqt 等常用工具):

sudo apt install ros-noetic-desktop-full

这个过程会比较长,取决于你的网速。去喝杯咖啡吧。如果中间报错,多半是依赖问题,试试 sudo apt --fix-broken install

2.2.3 初始化 rosdep

这一步很多人会卡住。rosdep 是用来解决依赖的工具,必须初始化。

sudo rosdep init
rosdep update

如果 sudo rosdep init 报错说“找不到命令”,那是因为你没装 python3-rosdep。先执行:

sudo apt install python3-rosdep

再试一次。如果 rosdep update 超时,嗯,这是中国特色网络环境下的常见问题。我曾经试过挂代理、换源、甚至手动下载更新文件。最简单的办法是换个时间再试,或者用国内的镜像源。

避坑指南:我曾经在一个项目里,因为 rosdep 没初始化成功,导致后面编译功能包时疯狂报错,查了半天才发现是依赖没解析。所以这一步,务必耐心搞定。

2.2.4 设置环境变量

每次打开终端都要能自动找到 ROS 命令,所以需要把环境变量写进 ~/.bashrc

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

验证一下:

roscore

如果能看到一堆日志输出,最后停在 started core service [/rosout],恭喜你,ROS 装好了!按 Ctrl+C 关掉它。

2.3 工作空间与功能包创建:你的第一个 ROS 项目

环境搭好了,接下来我们要创建一个“工作空间”。你可以把它理解成一个项目文件夹,里面放着你所有的代码、配置文件、launch 文件等等。

2.3.1 创建工作空间

我习惯在 ~/ 目录下创建一个 catkin_ws 文件夹:

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

然后编译一下空的工作空间:

cd ~/catkin_ws
catkin_make

你会看到 builddevel 两个文件夹被创建出来。别忘了 source 一下:

source devel/setup.bash

同样,把它写进 ~/.bashrc,免得每次都要手动 source:

echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc

2.3.2 创建功能包

工作空间是“房子”,功能包就是“房间”。每个功能包负责一个独立的功能,比如驱动摄像头、处理激光雷达数据等等。

我们创建一个名为 sensor_demo 的功能包,依赖 roscppstd_msgssensor_msgs

cd ~/catkin_ws/src
catkin_create_pkg sensor_demo roscpp std_msgs sensor_msgs

这条命令会生成一个 sensor_demo 文件夹,里面包含 CMakeLists.txtpackage.xml 两个关键文件。

小技巧:package.xml 里记得填上你的名字、邮箱和描述信息。虽然不填也能编译,但养成好习惯,以后发布包或者给别人看代码时,显得专业。

2.3.3 编译功能包

回到工作空间根目录,编译:

cd ~/catkin_ws
catkin_make --only-pkg-with-deps sensor_demo

加上 --only-pkg-with-deps 参数,只编译我们指定的包,省时间。如果编译成功,你会看到 [100%] Built target sensor_demo 之类的信息。

2.4 本章小结

嗯,到这里,你的 ROS 开发环境就彻底搭好了。我们做了三件事:

  • 安装了 Ubuntu 20.04 系统
  • 安装了 ROS Noetic 并初始化了 rosdep
  • 创建了工作空间和第一个功能包

下一章,我们就要开始真正接触传感器数据了。我会带你用 ROS 驱动一个摄像头,看看图像数据是怎么在 ROS 里流动的。准备好了吗?