1. ROS 2 是什么?

ROS 2 是一套用来搭建机器人软件系统的框架和工具集合。

它名字叫 Robot Operating System,但不要把它理解成 Windows、Ubuntu 那种完整操作系统。ROS 2 是运行在 Ubuntu 上面的机器人软件平台

机器人通常不是一个程序干所有事情,而是很多模块:

雷达程序
   ↓
SLAM建图
   ↓
定位
   ↓
Nav2导航
   ↓
底盘控制
   ↓
STM32
   ↓
电机

ROS 2 最大的价值,就是让这些不同程序可以规范地通信、组合和调试

ROS 2 架构分为操作系统层、DDS 实现层、DDS 接口层、ROS 2 客户端层和应用层;C++/Python ROS 2 程序主要就在应用层,通过 rclcpprclpy 使用 ROS 2。

通俗的类比:

Ubuntu = 地基
ROS 2  = 机器人软件框架
你的代码 = 真正完成任务的程序

2. Node 是什么?

Node = 节点。

节点就是 ROS 2 中承担某个具体功能的程序单元。

比如机器人可以有:

/lidar_node
负责读激光雷达

/slam_node
负责建图

/navigation_node
负责导航

/base_controller
负责底盘控制

/imu_node
负责IMU

不是做一个几万行代码的“超级程序”,而是把机器人拆成很多节点。

书里的海龟例子就是两个节点:

/teleop_turtle
键盘控制节点

/turtlesim
海龟模拟器节点

键盘控制节点把命令发给海龟节点,因此你按方向键,海龟才会运动。

用 Node Graph 显示了两个节点之间的通信关系:

特别说明:节点除了发布和订阅话题,还可以使用服务、参数和动作等功能。

比如说做一个STM32 小车,可以出现一个:

/base_controller_node

它负责:

接收 /cmd_vel
        ↓
计算左右轮速度
        ↓
发给 STM32

这就是一个 Node。

查系统现在有哪些节点:

ros2 node list

查某个节点:

ros2 node info /节点名

检查自己创建的 Python/C++ 节点是否成功启动。


3. Package 是什么?

Package 中文叫:

功能包

这个概念非常重要。

Package 不是 Node。

可以这样理解:

Package
│
├── Node A
├── Node B
├── 配置文件
├── launch文件
├── 头文件
├── 参数
└── 其他资源

也就是说:

Node 是实际干活的功能单元,Package 是组织这些程序和资源的文件夹/工程单元。

功能包(Package)是 ROS 2 中组织和管理节点的工具,可以把相关节点放在同一个功能包中,方便编译、安装、分享和使用。

比如自己做:

my_robot_base/

这个 Package 里面可以有:

my_robot_base/
├── src/
│   ├── base_controller.cpp
│   └── serial_node.cpp
│
├── launch/
│   └── robot.launch.py
│
├── config/
│   └── params.yaml
│
├── CMakeLists.txt
└── package.xml

其中:

base_controller.cpp

运行后可能产生:

/base_controller

这个 Node。

所以:

.cpp 是源代码 → 编译成可执行程序 → 启动以后成为 ROS 2 Node。


4. Workspace 是什么?

Workspace 中文就是:

工作空间

这是比 Package 再高一级的东西。

关系一定要记住:

Workspace
    │
    └── src
         │
         ├── Package A
         │      ├── Node A
         │      └── Node B
         │
         ├── Package B
         │      └── Node C
         │
         └── Package C

大小关系:

[
Workspace > Package > Node
]

真实机器人通常由很多不同的功能模块组成,因此需要把多个功能包组织起来,Workspace 就是 ROS 2 推荐的多功能包开发组织方式

比如可以创建:

mkdir -p ~/robot_ws/src

得到:

robot_ws/
└── src/

然后把所有自己的功能包放进去:

robot_ws/
└── src/
    ├── robot_base/
    ├── robot_description/
    ├── robot_bringup/
    └── robot_navigation/

进入工作空间:

cd ~/robot_ws

编译:

colcon build

编译后就会出现:

robot_ws/
├── src/
├── build/
├── install/
└── log/

Workspace 例子采用的结构:src 放源码,buildinstalllog 由构建过程产生。

特别重要的:

source install/setup.bash

为什么?

因为你刚刚编译出来的新 Package,当前终端不一定知道它在哪里。source install/setup.bash 后,ROS 2 才能找到你的新功能包。例子也是在 colcon build 后执行这个步骤。

这两个命令以后会无数次输入:

colcon build
source install/setup.bash

这两个命令可以先眼熟。


把前四个东西一次串起来

假设以后你做自己的机器人:

robot_ws                       ← Workspace
│
└── src
    │
    ├── robot_base             ← Package
    │   ├── base_controller    ← Node
    │   └── serial_bridge      ← Node
    │
    ├── robot_lidar            ← Package
    │   └── lidar_node         ← Node
    │
    └── robot_navigation       ← Package
        └── navigation_node    ← Node

所以一句口诀:

ROS 2 是整个平台,Workspace 是项目工作区,Package 是功能模块,Node 是真正运行干活的单元。

这个关系你如果记住,ROS 2 已经入门一半了。


5. Linux 基本操作到底要学哪些?

你不需要先学成 Linux 运维工程师。

从终端开始,机器人开发常用的那些操作,包括查看目录、切换目录、创建文件夹和文件、编辑、查看、删除、安装软件、环境变量等。

现在先熟练这些就够:

命令 含义 例子
pwd 我现在在哪 pwd
ls 看当前目录有什么 ls
cd 切换目录 cd ~/robot_ws
cd .. 回上一级 cd ..
cd ~ 回用户主目录 cd ~
mkdir 创建文件夹 mkdir test
mkdir -p 连续创建目录 mkdir -p robot_ws/src
touch 创建空文件 touch test.txt
cat 查看文本 cat test.txt
nano 编辑文本 nano test.txt
rm 删除文件 rm test.txt
rm -r 删除目录 rm -r test
cp 复制 cp a.txt b.txt
mv 移动/重命名 mv old.txt new.txt
sudo 管理员权限运行 sudo apt install xxx
apt 安装软件 sudo apt install git
source 在当前终端加载环境 source install/setup.bash

pwd → cd → ls → mkdir → touch → nano → cat → rm 这一套开始学。


现在马上可以做一个 5 分钟练习

打开 Ubuntu 终端,亲手输入:

cd ~
pwd

mkdir -p ~/ros2_test/src
cd ~/ros2_test

pwd
ls

cd src
touch hello.txt
ls

nano hello.txt

进去以后写:

hello ros2

保存退出,再:

cat hello.txt

应该显示:

hello ros2

然后:

cd ..
pwd

如果这些命令你能不看答案自己做出来,那么 Linux 基础第一关就够了

下一步就应该正式进入 Node → Topic。其中 Topic 是最关键的,因为你以后会直接看到:

Nav2
  │
  │ /cmd_vel
  ▼
底盘节点
  │
  ▼
STM32

这正是 ROS 2 真正开始“让机器人各部分互相说话”的地方。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐