云计算百科
云计算领域专业知识百科平台

鱼香ROS2基本功

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 程序主要就在应用层,通过 rclcpp 或 rclpy 使用 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 放源码,build、install、log 由构建过程产生。

特别重要的:

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 真正开始“让机器人各部分互相说话”的地方。

赞(0)
未经允许不得转载:网硕互联帮助中心 » 鱼香ROS2基本功
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!