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……
编译成功后,你会看到build和devel两个文件夹自动生成。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.xml和CMakeLists.txt。后面的roscpp、rospy等是依赖项,也就是这个包要用到的其他库。
编译时,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环境搭建的核心内容就讲完了。你可能会觉得步骤有点多,但相信我,只要按顺序来,一次就能搞定。以后每次新建项目,只需要创建新包、写代码、catkin_make,一气呵成。
最后提醒一句:环境搭建是基础中的基础。如果这一步没做好,后面跑SLAM算法时会遇到各种莫名其妙的问题。所以,别着急,慢慢来,把每一步都走扎实了。
公众号:蓝海资料掘金营,微信deep3321