
🎬 渡水无言 :个人主页渡水无言
❄专栏传送门 : 《linux专栏》《嵌入式linux驱动开发》《linux系统移植专栏》
❄专栏传送门 : 《freertos专栏》 《STM32 HAL库专栏》《linux裸机开发专栏》
❄专栏传送门 :《产品测评专栏》 《Ai智能体专栏) 《ROS开发专栏》
⭐️流水不争先,争的是滔滔不绝
📚博主简介:第二十届中国研究生电子设计竞赛全国二等奖 |国家奖学金 | 省级三好学生
| 省级优秀毕业生获得者 | csdn新星杯TOP18 | 半导纵横专栏博主 | 211在读研究生
在这里主要分享自己学习的linux嵌入式领域知识;有分享错误或者不足的地方欢迎大佬指导,也欢迎各位大佬互相三连
目录
[一、ROS2 系统架构](#一、ROS2 系统架构)
[1.1、 宏观组成:四大核心模块](#1.1、 宏观组成:四大核心模块)
[1.2、ROS2 从底层到应用层分为三层](#1.2、ROS2 从底层到应用层分为三层)
[二、ROS2 工作空间创建](#二、ROS2 工作空间创建)
[三、wpr_simulation2 开源仿真项目环境搭建及测试](#三、wpr_simulation2 开源仿真项目环境搭建及测试)
[3.1、安装 Git](#3.1、安装 Git)
[3.6、启动Gazebo 仿真](#3.6、启动Gazebo 仿真)
[四、必备工具安装(Terminator 多窗口终端)](#四、必备工具安装(Terminator 多窗口终端))
前言
上一期博客我们完成了ros2的安装,本期博客我们来搭建一套完整可运行的 ROS2 仿真环境为后续 SLAM、导航、视觉等进阶学习打下坚实基础。
一、ROS2 系统架构
ROS2 的架构可以从两个维度理解:宏观组成模块 和 三层分层架构,两者结合就能完整理解 ROS2 的设计逻辑。
1.1、 宏观组成:四大核心模块
ROS2 整体由四大模块构成,这也是 ROS2 生态的基础:
ROS2 = 通信层(Plumbing) + 工具层(Tools) + 功能层(Capabilities) + 社区(Community)
| 模块 | 核心作用 | 典型例子 |
|---|---|---|
| 通信层(Plumbing) | 负责节点间数据传输,是 ROS2 的 "血管系统" | 话题(Topic)、服务(Service)、动作(Action)、DDS 通信 |
| 工具层(Tools) | 提供开发、调试、可视化工具,提升开发效率 | rviz2、rqt、ros2 cli 命令行工具 |
| 功能层(Capabilities) | 提供机器人通用功能的可复用软件包 | 导航栈(Nav2)、SLAM 建图、机械臂控制、传感器驱动 |
| 社区(Community) | 提供生态支持,包括文档、开源包、技术交流 | ROS 官方仓库、第三方开源包、开发者社区 |
1.2、ROS2 从底层到应用层分为三层

操作系统层(OS Layer)
位于架构最底层,是 ROS2 的运行基础,支持 Linux、Windows、Mac、RTOS(实时操作系统)等多平台。ROS2 对操作系统做了抽象,上层应用无需关注底层平台差异,实现了跨平台兼容性。
中间层(Middleware Layer)
这是 ROS2 通信能力的核心,也是与 ROS1 差异最大的部分,分为 3 个关键部分:
DDS (数据分发服务):底层通信中间件,提供去中心化、实时、可靠的分布式通信能力,是 ROS2 通信的基石;
Abstract DDS Layer(DDS 抽象层):对不同 DDS 实现(如 Cyclone DDS、Fast DDS)做了统一封装,让上层应用可以灵活切换 DDS 后端;
Client Library(客户端库):提供 C++/Python 等语言的 API,开发者通过它调用 ROS2 的通信功能,无需直接操作 DDS;
Intra-process API(进程内通信接口):优化同一进程内节点的通信效率,避免跨进程通信的性能损耗。

应用层(Application Layer)
这是开发者的主要工作区域,核心是编写节点(Node)程序。开发者通过节点实现机器人的感知、决策、控制等功能,比如:
激光雷达节点读取传感器数据并发布话题;
导航节点订阅传感器数据,输出控制指令;
机械臂控制节点接收指令,驱动硬件执行动作。
二、ROS2 工作空间创建
安装好ROS2以及应用程序后,因为应用程序都是一些二进制的可执行文件,如果需要从源代码开始构建ROS2应用程序,就需要建立一个工作空间。标准结构:ros2_ws/src。
cpp
mkdir -p ~/ros2_ws/src
三、wpr_simulation2 开源仿真项目环境搭建及测试
3.1、安装 Git
先安装git,这样我们便能去github上拉取项目,指令如下:
cpp
sudo apt install git
3.2、下载仿真包
cpp
cd ~/ros2_ws/src
git clone https://gitee.com/s-robot/wpr_simulation2.git
下载完,就能看到多了个文件夹,这就是源码

3.3、一键安装依赖
下载好源码之后,我们得先安装依赖
cpp
cd wpr_simulation2/scripts
./install_for_humble.sh

3.4、编译工作空间
安装好依赖之后,我们就可以进行编译了
cpp
cd ~/ros2_ws
colcon build --symlink-install
编译完之后,会多出以下三个文件夹
| 文件夹 | 编译时是否生成 | 核心作用 | 能否安全删除 |
|---|---|---|---|
src |
❌(手动创建) | 存放源码 | ❌(删了就没代码了) |
build |
✅ | 存放编译中间文件 | ✅(删了可重新编译) |
install |
✅ | 存放最终安装产物 | ✅(删了可重新编译,需重新 source) |
log |
✅ | 存放编译日志 | ✅(删了不影响编译,只是丢了历史日志) |
3.5、加载环境
编译好了之后,我们还是不能启动仿真项目,此时我们得加载环境
cpp
source install/setup.bash
3.6、启动Gazebo 仿真
之前的步骤完成之后,我们就可以启动Gazebo 仿真了
cpp
ros2 launch wpr_simulation2 wpb_simple.launch.py
仿真软件如下图所示:

3.7、测试机器人控制
首先我们得安装rqt_robot_steering工具包,输入以下命令:
cpp
sudo apt update
sudo apt install ros-humble-rqt-robot-steering
启动成功后,新开终端,输入以下命令:
cpp
ros2 run rqt_robot_steering rqt_robot_steering
此时我们可以拖动滑块进行机器人的控制了,如下图所示:

四、必备工具安装(Terminator 多窗口终端)
Terminator 多窗口终端安装,输入以下命令:
cpp
sudo apt install terminator
安装完之后,可以按快捷键直接启动:
cpp
Ctrl + Alt + T
比如我水平分割之后,如下图所示,这样便可以方便的多窗口终端操作了。

这样便能方便的进行多端开发了!!

常用快捷建:
垂直分屏(左右):Ctrl + Shift + E
水平分屏(上下):Ctrl + Shift + O
关闭一个屏:Ctrl + Shift + W
全屏一个屏:Ctrl + Shift + X
我们这里再修改一下复制粘贴的快捷键,在 Terminator 窗口里 右键 → 首选项,然后找到快捷键设置,修改快捷键的按键即可,如下图所示:

总结
本期博客我们成功部署 wpr_simulation2 开源仿真项目,启动 Gazebo 并实现机器人可视化控制,为后续 SLAM、导航、视觉等进阶学习打下坚实基础。
