一、ROS 2 机器人示例 - 海龟仿真器
1、启动海龟仿真器节点
执行以下命令,启动海龟仿真器节点:
ros2 run turtlesim turtlesim_node

2、启动控制节点
在另一个命令行终端运行以下命令,可以通过键盘方向键控制海龟旋转移动:
ros2 run turtlesim turtle_teleop_key
选中该命令行终端,使用左右箭头控制海龟方向,使用向上箭头控制前进,使用向下箭头控制后退。

3、ROS 节点分析工具 - rqt
在终端一启动了海龟模拟器节点,在终端二启动了控制节点。下面分析其中的控制过程。
在终端三输入 rqt 命令,这是 ROS 2 提供的节点分析工具。

选择 rqt 工具中的 "Plugins / Introspection / Node Graph" 选项,这是 ROS 2 的节点图。

如果打开后节点图内容太小,可以使用鼠标滚轮滚动放大显示。点击 Fit 键后面的按钮,可以让节点图自适应填充满整个界面。


鼠标左键点击节点图中的元素,会变成如下样式:
- 左侧的
/turtlesim是海龟模拟器节点 - 右侧的
/teleop_turtle是键盘控制节点,右侧节点通过话题向左侧节点发送了控制命令/turtle1/cmd_vel。

二、ros2 run 命令解析
1、设计理念
ros2 run 命令是 ROS 2 命令行工具中用于启动单个功能包内可执行文件节点的核心子命令,其格式设计严格遵循 ROS 2'功能包 - 可执行文件 - 参数分离'的设计理念。
ros2 run 分为基础格式(仅启动可执行文件)和完整格式(含可执行文件参数 + ROS 层面参数),完整格式覆盖所有场景。
ros2 run 的核心逻辑是'定位功能包 -> 找到可执行文件 -> 启动并接入 ROS 2 通信',其格式设计的关键是分离'可执行文件自身参数'和'ROS 层面参数'(通过 --ros-args 分隔)。
**掌握该格式的核心是:**明确必选部分的匹配规则、可选部分的顺序要求,以及参数解析的边界。
2、ros2 run 基础格式
ros2 run 基础格式命令格式如下:
ros2 run <package_name> <executable_name>
- **
ros2参数:**ROS 2 命令行入口,所有 ROS 2 终端操作的统一前缀(加载 ROS 2 核心工具链、DDS 通信层); - **
run参数:**ros2 的子命令,功能是:- 查找功能包:查找系统/本地工作空间中已安装的
<package_name>; - 定位可执行:定位该功能包内编译生成的
<executable_name>; - 启动执行:启动该可执行文件,并自动接入 ROS 2 通信系统(成为 ROS 2 节点);
- 查找功能包:查找系统/本地工作空间中已安装的
- **
<package_name>参数:**功能包名称;- 功能包来源:已通过 colcon build 编译(本地工作空间)或 apt install 安装(系统级);
- 命名规范:遵循 ROS 2 命名规范(小写字母 + 下划线,如 turtlesim、my_robot_pkg);
- **
<executable_name>参数:**是功能包下的编译生成的可执行文件名称;- 配置位置:是 CMakeLists.txt/setup.py 中声明的可执行目标名;
3、ros2 run 完整格式
ros2 run 完整格式命令格式如下:
ros2 run <package_name> <executable_name> [executable_args...] [--ros-args <ros_args...>]
- **
<>符号:**表示该参数是必选参数,需替换为实际值,最终不保留尖括号; - **
[]符号:**表示该参数是可选参数,可省略; - **
...符号:**表示该参数是可重复参数,多个值用空格分隔; - **
[executable_args...]参数:**该参数是传给可执行文件自身的参数,非 ROS 层面参数,由可执行文件的代码解析,ROS 2 CLI 不处理,一般都是自定义节点的配置文件路径、阈值、模式等; - **
[--ros-args <ros_args...>]参数:**该参数是 ROS 2 层面的参数配置(核心分隔符),--ros-args之后的所有参数均由 ROS 2 核心解析,而非传给可执行文件。常用子参数如下:--remap参数:重映射(节点名、命名空间、话题/服务名);--log-level参数:设置日志等级(DEBUG/INFO/WARN/ERROR/FATAL);--param参数:设置节点参数(需节点支持);--env参数:设置节点运行的环境变量;
4、启动海龟仿真器命令分析
以启动海龟模拟器的命令参数为例进行分析:
ros2 run turtlesim turtlesim_node
- **ros2 参数:**是 ROS 2 核心命令行入口,所有 ROS 2 终端操作均以该关键词开头(如 ros2 node/ros2 topic);
- **run 参数:**是 ros2 的子命令,功能是从指定功能包中找到并运行对应的可执行文件(本质是启动一个 ROS 2 节点);
- **turtlesim 参数:**是功能包名称(package name),turtlesim 是 ROS 2 内置的示例功能包,封装了海龟仿真器的所有代码(包括节点、话题、服务、动作等逻辑);
- **turtlesim_node 参数:**是可执行文件名称(executable name),turtlesim 功能包中编译生成的可执行文件,运行后会启动海龟仿真器的核心节点;


