第一部分:什么是 ROS 2?
ROS 并不是像 Windows 或 Linux 那样的传统"操作系统",而是一个中间件(Middleware)。它提供了一套通信机制,让不同的程序(比如控制摄像头的程序、规划路径的程序、驱动电机的程序)能够像搭积木一样协同工作。
ROS2(Robot Operating System 2)是一个开源的机器人操作系统框架,它为开发机器人应用程序提供了一整套工具和库。与 ROS 1 相比,ROS2 在许多方面进行了改进,特别是在分布式系统、实时性、跨平台支持等方面。ROS2 支持多种编程语言,最常用的是 C++ 和 Python。
为什么选择 ROS 2 而不是 ROS 1?
-
去中心化:ROS 2 取消了 ROS 1 中的 "Master" 节点,基于 DDS(数据分发服务)协议。这意味着更强的实时性和稳定性。
-
支持多平台与微控制器:更好的跨平台支持,甚至可以运行在嵌入式芯片上。
-
生命周期管理:可以更好地控制节点的启动、暂停和配置。
ROS2 主要包括以下几个部分:
-
通信中间件(DDS) :ROS2 采用了 DDS(Data Distribution Service)作为其通信基础,具有更高的可靠性和实时性,适合多机器人系统或分布式系统。
-
模块化设计:ROS2 强调了模块化设计,可以根据需求选择所需的功能模块,适应各种机器人应用。
-
跨平台支持:ROS2 支持 Linux、Windows、macOS 和嵌入式系统。
-
实时支持:ROS2 提供了对实时系统的更好支持,能够确保实时任务的执行。
ROS2 的应用非常广泛,尤其在机器人仿真、自动驾驶、工业机器人、无人机等领域。
核心概念(必读)
在开始之前,你需要理解以下四个概念,它们构成了 ROS 2 的世界:
-
Node (节点):一个执行特定任务的独立进程。例如:一个节点负责读取雷达数据,另一个节点负责控制机械臂运动。
-
Topic (话题) :节点之间传输数据的"管道"。这是一种发布/订阅模型(类似于广播)。
- 例子 :摄像头节点发布
/image_raw话题,显示屏节点订阅这个话题来显示图像。
- 例子 :摄像头节点发布
-
Service (服务) :请求/响应模型。
- 例子:你向机械臂发送一个"抓取"请求,机械臂执行完后给你返回"成功"或"失败"。
-
Action (动作):用于长时间运行的任务,带有反馈机制。
- 例子:控制机械臂从 A 点移动到 B 点。这个过程需要几秒钟,期间机械臂会不断反馈"我走到一半了"、"还差一点",直到最后反馈"到达"。
ROS2 的主要组件
-
rclcpp / rclpy:分别是 ROS2 C++ 和 Python 的客户端库,提供了创建节点、发布消息、订阅话题等功能。
-
Gazebo:用于模拟机器人的环境和运动。
-
RViz:用于可视化机器人状态、传感器数据等。
-
ROS 2 命令行工具(CLI):通过命令行交互与 ROS2 系统进行通信,控制机器人。
第二部分:在 Ubuntu 22.04 上安装 ROS 2 (Humble Hawksbill)
Ubuntu 22.04 对应的 ROS 2 长期支持版本 (LTS) 是 Humble Hawksbill。这是目前最稳定、社区支持最好的版本。
请打开终端(Terminal),依次执行以下命令:
1. 设置语言环境 (Locale)
ROS 2 依赖 UTF-8 编码。即使你平时用中文,也建议先确保系统支持 UTF-8。
bash
locale # 检查当前编码
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
2. 启用 Ubuntu Universe 仓库
bash
sudo apt install software-properties-common
sudo add-apt-repository universe
3. 添加 ROS 2 的 GPG 密钥和源
这一步是为了让 Ubuntu 信任 ROS 的官方软件源。
bash
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
接着,将仓库地址添加到系统中:
bash
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
4. 安装 ROS 2 Humble
先更新缓存,然后安装。对于你的需求(仿真+机械臂),强烈建议安装 Desktop 版,因为它包含了可视化的工具(如 RViz 和 演示程序)。
bash
sudo apt update
sudo apt upgrade
sudo apt install ros-humble-desktop
(注意:这个过程可能需要几分钟到十几分钟,取决于网速。)
5. 安装开发工具
你需要安装构建工具 colcon,这在以后编译你自己的代码时必不可少。
bash
sudo apt install python3-colcon-common-extensions
6. 配置环境变量(非常重要!)
每次打开新终端,你需要告诉系统 ROS 2 安装在哪里。为了省事,我们把它写入启动脚本 .bashrc 中。
bash
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
source ~/.bashrc
第三部分:如何验证及基本使用
安装完成后,我们来运行经典的"小海龟"仿真,验证系统是否正常,并体验如何控制。
1. 启动小海龟模拟器
打开一个新的终端,输入:
bash
ros2 run turtlesim turtlesim_node
你应该会看到一个蓝色的窗口,中间有一只海龟。
-
ros2 run:运行节点的命令。 -
turtlesim:包名(Package)。 -
turtlesim_node:节点名(Node)。
2. 控制海龟移动
保持上面的窗口不关,打开第二个终端,输入:
Bash
ros2 run turtlesim turtle_teleop_key
现在,确保你的鼠标焦点在第二个终端上,使用键盘的方向键(上下左右),你会发现第一只窗口里的海龟动起来了!
3. 理解发生了什么(可视化节点关系)
这是理解 ROS 最直观的一步。打开第三个终端,输入:
Bash
rqt_graph
这会弹出一个流程图。你会看到:
-
一个圆圈叫
/teleop_turtle(键盘节点)。 -
一个圆圈叫
/turtlesim(显示节点)。 -
中间有一条箭头线
/turtle1/cmd_vel(话题)。
这说明:键盘节点通过 /turtle1/cmd_vel 这个话题,把速度指令(Data)发送给了仿真器节点。
第四部分:针对你的目标(仿真与机械臂)的建议
既然你的目标是机械臂和仿真,安装完基础 ROS 2 后,你必须关注以下两个生态系统:
-
MoveIt 2 (机械臂控制核心) MoveIt 是 ROS 中最强大的运动规划框架(避障、路径规划、抓取计算)。
-
安装命令:
Bash
sudo apt install ros-humble-moveit
-
-
Gazebo (仿真环境) ROS 2 Humble 通常搭配 Gazebo Fortress 或 Gazebo Classic (版本 11) 使用。这允许你在物理引擎中创建真实的机器人模型,在不依赖硬件的情况下测试算法。
-
安装 ROS-Gazebo 接口:
Bash
sudo apt install ros-humble-ros-gz
-
总结
你现在已经拥有了一个功能完备的机器人开发环境。
-
基础:ROS 2 Humble 已安装。
-
工具:构建工具 Colcon 已就绪。
-
验证:通过 Turtlesim 验证了通信。