3. ROS环境搭建:从零开始,让你的机器人“说话”

说实话,ROS环境搭建这件事,我见过太多人在这里卡壳了。明明代码逻辑都对,就是编译不过,或者节点跑不起来。嗯,别急,今天我就带你一步步搞定ROS Noetic的安装、工作空间创建、Catkin编译系统,还有那些你一定会用到的命令行工具。

核心要点:ROS环境搭建是整个SLAM系统的基础。就像盖房子要先打地基,ROS就是你的“机器人操作系统地基”。

3.1 ROS Noetic安装:选对版本,少走弯路

ROS有很多版本,比如Melodic、Noetic、Foxy等等。我个人强烈建议你使用ROS Noetic,它是ROS1的最后一个长期支持版本,稳定性和兼容性都很好。我在项目中遇到过不少因为版本不匹配导致的奇怪问题,后来统一用Noetic,省心多了。

安装前,先确认你的Ubuntu版本。ROS Noetic只支持Ubuntu 20.04 (Focal Fossa)。如果你用的是其他版本,要么换系统,要么换ROS版本。

安装步骤其实很简单,就几条命令:

# 1. 设置sources.list(添加ROS软件源)
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-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654

# 3. 更新软件包列表
sudo apt update

# 4. 安装完整桌面版ROS(包含rviz、gazebo等常用工具)
sudo apt install ros-noetic-desktop-full

# 5. 初始化rosdep
sudo rosdep init
rosdep update

# 6. 设置环境变量(每次打开终端自动生效)
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc

# 7. 安装一些常用工具(我习惯顺手装上)
sudo apt install python3-rosinstall python3-rosinstall-generator python3-wstool build-essential

小技巧:安装过程可能会比较慢,尤其是第4步。建议换用国内的镜像源,比如中科大或清华的源,速度会快很多。我曾经在客户现场用默认源安装,等了快一个小时……后来学乖了,先换源再装。

安装完成后,验证一下:

roscore

如果能看到类似“started core service [/rosout]”的信息,恭喜你,ROS Noetic安装成功了!

3.2 工作空间创建:你的代码“根据地”

工作空间(Workspace)说白了就是你存放ROS项目代码的地方。我习惯把它叫做“catkin_ws”,当然你也可以叫别的名字。

创建步骤:

# 1. 创建工作空间目录
mkdir -p ~/catkin_ws/src

# 2. 进入src目录
cd ~/catkin_ws/src

# 3. 初始化工作空间(生成CMakeLists.txt)
catkin_init_workspace

# 4. 回到工作空间根目录
cd ~/catkin_ws

# 5. 编译整个工作空间
catkin_make

# 6. 设置环境变量(让系统知道你的工作空间在哪)
echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc

注意:每次新建终端,或者修改了工作空间里的代码,都要记得source ~/catkin_ws/devel/setup.bash。不然系统找不到你新写的节点,会报“找不到包”的错误。我曾经因为这个排查了半天,结果就是忘了source……

编译成功后,你会看到builddevel两个文件夹自动生成。build是编译中间文件,devel里放着编译好的可执行文件和库。

3.3 Catkin编译系统:ROS的“建筑工人”

Catkin是ROS的官方编译系统,它基于CMake,但比CMake更智能。你想想看,一个SLAM系统可能有几十个包,每个包又有不同的依赖关系,手动编译会疯掉的。Catkin就是帮你自动处理这些依赖的。

Catkin的核心概念就三个:

  • package.xml:每个包的“身份证”,描述包名、版本、依赖等信息
  • CMakeLists.txt:编译规则文件,告诉Catkin怎么编译这个包
  • catkin_make:编译命令,一键编译整个工作空间

创建一个新包:

cd ~/catkin_ws/src
catkin_create_pkg my_slam_pkg roscpp rospy std_msgs sensor_msgs

这条命令会创建一个名为my_slam_pkg的包,并自动生成package.xmlCMakeLists.txt。后面的roscpprospy等是依赖项,也就是这个包要用到的其他库。

编译时,Catkin会按照依赖关系自动排序。比如你的包依赖cv_bridge,Catkin会先编译cv_bridge,再编译你的包。这就是为什么我们只需要一条catkin_make命令就能搞定一切。

避坑指南:我曾经在编译一个大型SLAM项目时,发现编译到一半就卡住了。排查了半天,发现是某个包的package.xml里写错了依赖版本号。所以,写package.xml时一定要仔细,版本号别写错,依赖别漏掉。

3.4 常用命令行工具:你的“瑞士军刀”

ROS提供了很多命令行工具,能让你像玩积木一样操作机器人系统。下面这几个是我最常用的:

命令 作用 我的使用场景
roscore 启动ROS主节点(所有节点通信的基础) 每次开始工作前,先跑这个
rosrun 运行一个节点 rosrun turtlesim turtlesim_node
roslaunch 批量启动多个节点 启动SLAM系统时,一个launch文件搞定所有节点
rostopic 查看/发布话题数据 调试时看摄像头数据有没有发出来
rosservice 调用服务 比如让机器人重置位置
rqt_graph 可视化节点和话题的关系图 排查通信问题时,一眼就能看出谁连谁
rviz 3D可视化工具 显示点云、地图、机器人模型等

举个例子,调试时我经常这样用:

# 先启动主节点
roscore

# 再开一个终端,启动摄像头节点
rosrun usb_cam usb_cam_node

# 第三个终端,查看摄像头话题数据
rostopic echo /usb_cam/image_raw

# 如果看到数据在刷,说明摄像头工作正常
# 如果没数据,用rqt_graph看看节点是不是连上了
rqt_graph

我的习惯:我会把常用的命令写成别名,比如alias cw='cd ~/catkin_ws'alias cm='cd ~/catkin_ws && catkin_make'。这样每次编译只需要敲cm两个字母,省时省力。

3.5 知识体系总览

下面这张图,是我自己总结的ROS环境搭建知识体系。你可以把它当作一个“地图”,随时回来看看自己走到哪一步了。

ROS环境搭建知识体系 ROS Noetic安装 工作空间创建 Catkin编译系统 安装步骤 • 添加软件源 • 安装desktop-full • 初始化rosdep 目录结构 • src/ 源码目录 • build/ 编译中间文件 • devel/ 编译输出 核心文件 • package.xml • CMakeLists.txt • catkin_make命令 常用命令行工具 roscore | rosrun | roslaunch | rostopic | rosservice | rqt_graph | rviz 目标:搭建一个稳定、可扩展的ROS开发环境

嗯,到这里,ROS环境搭建的核心内容就讲完了。你可能会觉得步骤有点多,但相信我,只要按顺序来,一次就能搞定。以后每次新建项目,只需要创建新包、写代码、catkin_make,一气呵成。

最后提醒一句:环境搭建是基础中的基础。如果这一步没做好,后面跑SLAM算法时会遇到各种莫名其妙的问题。所以,别着急,慢慢来,把每一步都走扎实了。


公众号:蓝海资料掘金营,微信deep3321