第1章 ROS基础与环境搭建:ROS核心概念、发行版选择与系统配置

大家好,我是你们这门课的老朋友。今天咱们正式开篇,聊聊ROS的基础和环境搭建。

说实话,我见过太多初学者,一上来就急着写代码,结果环境没配好,折腾一整天,连个节点都跑不起来。嗯,这其实是最亏的。磨刀不误砍柴工,今天这一章,咱们就把刀磨快。

1.1 ROS核心概念:节点、话题、服务、参数服务器

先说说ROS最核心的四个概念。你想想看,ROS本质上就是一个“机器人操作系统”的通信框架。它怎么让各个模块协同工作?靠的就是这四个东西。

1.1.1 节点(Node)

节点,说白了就是一个个独立的可执行程序。每个节点负责一个具体的功能,比如控制电机、处理激光雷达数据、发布里程计信息。

我个人习惯,一个传感器对应一个节点,一个算法模块也对应一个节点。这样出了问题,排查起来特别方便。我曾经在一个项目里,把所有功能都写在一个节点里,结果调试时差点崩溃——改一个地方,整个节点都得重启。

我的建议: 尽量让节点功能单一。一个节点只做一件事,并把它做好。

1.1.2 话题(Topic)

话题是节点之间通信的“总线”。一个节点可以往话题上发布数据,另一个节点可以从话题上订阅数据。这是一种异步通信方式,发布者和订阅者不需要知道对方的存在。

举个例子,激光雷达节点不断发布“/scan”话题,导航节点订阅这个话题,拿到数据做路径规划。这就是典型的发布-订阅模式。

我在项目中遇到过一个问题:两个节点同时往同一个话题发布数据,结果接收端的数据乱掉了。后来我才意识到,话题是一对多的,但发布者之间需要协调好,不然数据会打架。

1.1.3 服务(Service)

服务是一种同步通信方式。客户端发送请求,服务端处理并返回响应。它适合那些需要即时反馈的场景,比如“打开机械臂”、“查询当前状态”。

你想想看,如果你用话题去实现“打开机械臂”,你得一直监听一个话题,然后判断有没有指令过来,多麻烦。用服务就简单了,调用一次,等结果就行。

1.1.4 参数服务器(Parameter Server)

参数服务器就像一个全局的“黑板”。你可以在上面写参数,其他节点可以随时读取。比如机器人的轮子半径、PID参数、传感器IP地址等。

我记得有一次调试机器人,发现它走不直。查了半天,原来是参数服务器里的轮子半径写错了。从那以后,我每次启动前都会先检查一遍参数。

核心总结:
  • 节点:功能模块,独立运行
  • 话题:异步通信,发布-订阅
  • 服务:同步通信,请求-响应
  • 参数服务器:全局参数存储

1.2 ROS发行版选择

ROS有很多发行版,就像Ubuntu有不同版本一样。选错了,后面会非常痛苦。

发行版 对应Ubuntu 特点
ROS Noetic Ubuntu 20.04 最后一个ROS1版本,稳定,推荐新手
ROS2 Foxy Ubuntu 20.04 ROS2早期版本,适合学习
ROS2 Humble Ubuntu 22.04 当前主流,推荐生产环境

我个人建议,如果你是初学者,直接从ROS2 Humble开始。为什么?因为ROS1已经停止更新了,未来是ROS2的天下。你想想看,学一个即将淘汰的东西,多不划算。

避坑指南: 我曾经帮一个学生调试,他装了ROS Melodic,但系统是Ubuntu 22.04,结果死活装不上。记住,发行版和Ubuntu版本必须严格对应,否则你会陷入依赖地狱。

1.3 Ubuntu系统配置

装好Ubuntu之后,别急着装ROS。先做几件事,能省去后面很多麻烦。

1.3.1 更换软件源

默认的软件源在国外,下载速度慢得让人抓狂。换成国内镜像源,比如清华、阿里、中科大。

sudo sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list
sudo apt update

1.3.2 安装必要工具

有些工具是ROS安装的前置条件,比如git、vim、curl等。

sudo apt install -y git vim curl wget

1.3.3 设置语言和时区

确保系统语言是英文,避免一些奇怪的编码问题。时区设为上海。

sudo timedatectl set-timezone Asia/Shanghai
我的习惯: 每次装完系统,我都会先做一次快照。万一后面搞坏了,直接恢复,省得重装。

1.4 ROS完整安装与工作空间创建

好,到了最关键的环节。咱们以ROS2 Humble为例,一步步来。

1.4.1 添加ROS源

sudo apt install software-properties-common
sudo add-apt-repository universe
sudo apt update && sudo apt install curl -y
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
sudo apt update

1.4.2 安装ROS2 Humble

这里我建议安装完整版,省得后面缺包。

sudo apt install -y ros-humble-desktop

安装过程可能需要十几分钟,取决于你的网速。嗯,这时候可以去泡杯咖啡。

1.4.3 配置环境变量

每次打开终端都要source一下,太麻烦。直接写进.bashrc里。

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

1.4.4 创建工作空间

工作空间就是你存放ROS项目的地方。我习惯叫它“ros2_ws”。

mkdir -p ~/ros2_ws/src
cd ~/ros2_ws
colcon build

第一次编译会生成build、install、log三个文件夹。别慌,这是正常的。

验证安装:
ros2 run demo_nodes_cpp talker

如果能看到“Hello World”不断输出,恭喜你,安装成功了!

注意: 如果你用的是ROS1 Noetic,安装命令是 sudo apt install ros-noetic-desktop-full,工作空间编译用 catkin_make。别搞混了。

好了,这一章的内容就到这里。环境搭好了,后面咱们就能放开手脚写代码了。下一章,我会带你写第一个ROS2节点,咱们亲手让机器人“开口说话”。

记住,环境搭建是基础中的基础。别嫌麻烦,一步一个脚印,后面你会感谢今天耐心的自己。

课后练习:
  1. 在终端运行 ros2 node list,看看当前有哪些节点
  2. 创建一个名为“my_robot”的工作空间,并成功编译
  3. 尝试用 ros2 topic list 查看当前所有话题

有问题随时在群里问我。咱们下章见。