一、ROS2概述与环境搭建

大家好,欢迎来到《基于ROS2的机器人平台搭建实战》课程。

我是你们这门课的老师。做了十几年机器人开发,从ROS1一路摸爬滚打过来。说实话,ROS2刚出来那会儿,我还有点抵触——毕竟ROS1用顺手了嘛。但后来真香了。为什么?今天咱们就聊聊这个话题。

1.1 ROS2的发展历史

ROS(Robot Operating System)最早是2007年斯坦福大学和Willow Garage公司搞出来的。初衷很简单:让机器人开发者别重复造轮子。

ROS1确实很成功。但用久了你会发现,它有一些硬伤:

  • 实时性差——机器人要紧急刹车,ROS1还在那慢悠悠地发消息
  • 网络依赖重——必须有个中心节点(roscore),它挂了整个系统就瘫了
  • 多机器人支持弱——你想让两台机器人协作?嗯,有点麻烦

所以2015年左右,Open Robotics开始搞ROS2。2017年发布了第一个测试版。到了2022年5月,ROS2 Humble正式发布,这也是咱们今天要装的版本。

核心变化:ROS2从ROS1的"中心化架构"变成了"去中心化架构"。说白了,就是每个节点都是独立的,谁也不用依赖谁。

1.2 核心概念:节点、话题、服务、动作

这几个概念是ROS2的基石。我一个个讲,你一个个记。

节点(Node)

节点就是ROS2里的一个进程。比如你有个摄像头驱动,它是一个节点;你有个导航算法,它也是一个节点。节点之间互相通信,协同工作。

我个人习惯,每个功能模块都单独写成一个节点。这样出了问题,只修那个节点就行,不用动整个系统。

话题(Topic)

话题是节点之间传递数据的"通道"。一个节点发布数据到话题上,另一个节点订阅这个话题,就能收到数据。

举个例子:摄像头节点发布图像数据到/camera/image话题上,显示节点订阅这个话题,就能看到画面。

小提示:话题是异步通信。发布者只管发,不管有没有人收。订阅者只管收,不管谁发的。这种设计让系统非常灵活。

服务(Service)

服务是同步通信。客户端发一个请求,服务端处理完返回一个响应。适合那种"你问我答"的场景。

比如:你让机器人抓取一个物体,它抓完了告诉你"抓到了"或者"没抓到"。

动作(Action)

动作是服务的升级版。它支持长时间的任务,还能中途取消或查看进度。

我在项目中遇到过一个场景:让机器人从A点走到B点。用服务的话,你得一直等它走完。用动作的话,你可以边走边看进度,还能随时叫停。

通信方式 特点 适用场景
话题 异步、一对多 传感器数据、状态信息
服务 同步、请求-响应 查询状态、执行简单命令
动作 异步、可取消、可反馈 导航、机械臂控制

1.3 ROS2与ROS1的区别

你可能会问:既然ROS1用得好好的,为什么要换ROS2?

我列几个关键区别你就明白了:

  • 通信协议:ROS1用TCPROS/UDPROS,ROS2用DDS(数据分发服务)。DDS是工业级标准,实时性、可靠性都强得多。
  • 去中心化:ROS1需要roscore,ROS2不需要。每个节点直接通过DDS通信。
  • 跨平台:ROS1主要支持Linux,ROS2支持Windows、macOS、嵌入式系统。
  • 安全性:ROS2内置了加密和权限控制,ROS1基本没有。
  • 实时性:ROS2支持实时内核,适合工业机器人、自动驾驶等场景。

注意:ROS1和ROS2不兼容。你不能把ROS1的包直接放到ROS2里用。不过有些工具可以帮你迁移代码。

1.4 在Ubuntu 22.04上安装ROS2 Humble

好,理论讲完了,咱们动手。我假设你用的是Ubuntu 22.04 LTS。如果你用的是其他版本,安装步骤会略有不同。

第一步:设置语言环境

sudo apt update
sudo apt install locales
sudo locale-gen en_US en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
export LANG=en_US.UTF-8

第二步:添加ROS2软件源

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

第三步:安装ROS2 Humble

sudo apt update
sudo apt upgrade
sudo apt install ros-humble-desktop

这里要注意:安装包大小大概2-3GB,取决于你的网络速度。我建议用有线网络,WiFi有时候会断。

节省空间小技巧:如果你不需要可视化工具(比如RViz、Gazebo),可以只安装ros-humble-ros-base,这个包小很多。

第四步:安装开发工具

sudo apt install python3-colcon-common-extensions
sudo apt install python3-rosdep
sudo rosdep init
rosdep update

1.5 配置环境变量

安装完了,但还不能直接用。你需要告诉系统:ROS2在哪。

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

我曾经遇到过一个问题:每次打开新终端都要手动source一遍,特别烦。后来发现是.bashrc文件没配置好。所以这一步千万别省。

避坑指南:如果你同时装了ROS1和ROS2,注意source的顺序。先source ROS1再source ROS2,或者反过来,都会导致冲突。我建议在.bashrc里只source一个版本,另一个用的时候手动source。

1.6 验证安装

装完了,怎么知道好不好使?跑个例子看看。

测试话题通信

打开第一个终端,启动一个发布者节点:

ros2 run demo_nodes_cpp talker

打开第二个终端,启动一个订阅者节点:

ros2 run demo_nodes_py listener

如果看到发布者不断发送"Hello World",订阅者不断收到消息,那就说明安装成功了。

测试服务通信

# 终端1:启动服务端
ros2 run demo_nodes_cpp add_two_ints_server

# 终端2:启动客户端
ros2 run demo_nodes_py add_two_ints_client

客户端会发送两个整数,服务端返回它们的和。你试试看。

验证结果:如果以上两个测试都通过了,恭喜你,ROS2 Humble已经成功安装并配置好了。你可以开始真正的机器人开发了。

本章小结

这一章我们讲了ROS2的发展历程、核心概念、与ROS1的区别,还亲手安装了ROS2 Humble并验证了安装。

说实话,安装这一步看着简单,但很多人会卡在这里。如果你遇到问题,别急。检查一下:

  • Ubuntu版本是不是22.04?
  • 网络是不是稳定?
  • 有没有按照步骤一步步来?

下一章,咱们会深入ROS2的节点和话题编程。到时候你会真正体会到ROS2的威力。

好,今天就到这里。有问题随时问我。


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