目录
- 0 专栏介绍
- 1 ROS2的启动脚本优化
- 2 ROS2多节点启动案例
- 2.1 C++架构
- 2.2 Python架构
- 3 其他格式的启动文件
- 3.1 `.yaml`启动
- 3.2 `.xml`启动
0 专栏介绍
本专栏旨在通过对ROS2的系统学习,掌握ROS2底层基本分布式原理,并具有机器人建模和应用ROS2进行实际项目的开发和调试的工程能力。
🚀详情:《ROS2从入门到精通》
1 ROS2的启动脚本优化
在ROS从入门到精通1-3:ROS运行管理与常用配置文件中我们介绍到ROS1的.launch
文件是待启动节点的管理容器,优化了多个节点的启动流程,其本质上是一个.xml
文件。
在ROS2中,launch
文件依然用于启动多个ROS节点以及它们之间的通信,不同在于:
-
组织架构:在ROS1中,
.launch
文件使用.xml
格式编写,定义了节点、参数、命名空间等信息,具有较为静态的结构;在ROS2中,launch
文件使用Python
编写,通过Python
脚本的方式来启动节点和设置参数,因此可以编写复杂的逻辑,支持条件语句、循环等,提供了更高的扩展性和可定制性;
组织结构: -
启动速度:ROS1的
.launch
文件在启动时可能会有一定的延迟,特别是在启动大型系统时;ROS2的launch
文件相对更快速,启动时间更短,这得益于ROS2架构的一些优化。
总的来说,经过ROS2的启动脚本优化,使得系统的启动和管理更加便捷和高效,也更适合复杂系统的部署和管理。
2 ROS2多节点启动案例
实验目标:一次性启动以下节点:
turtlesim
仿真器turtlesim
生成节点
2.1 C++架构
文件结构如下所示
<pkg>
├── build
├── install
├── log
└── src└── pkg_name├── CMakeLists.txt├── launch├── package.xml└── src
按以下步骤设置启动脚本
-
添加
package
依赖关系:在package.xml
清单文件中,添加对依赖项的声明<exec_depend>ros2launch</exec_depend>
-
添加
CMakeLists
编译信息:在CMakeLists.txt
文件的ament_package()
之前添加# Install launch files. install(DIRECTORYlaunchDESTINATION share/${PROJECT_NAME}/ )
目的是把
launch
目录添加到运行时的share
文件夹 -
在
launch
目录编写launch.py
文件,本例为from launch import LaunchDescription from launch_ros.actions import Nodedef generate_launch_description(): return LaunchDescription([ Node( package='launch_lab', executable='launch_lab_client', ),Node(package='turtlesim',executable='turtlesim_node',name='turtle_sim',),])
其中最关键的
Node
对象用于在启动文件中定义一个节点。它的参数包括:package
:<str>,表示节点所在的ROS2功能包的名称;executable
:<str>,表示在给定包中的可执行文件的名称,在CMakeLists.txt
中由install
定义,在setup.py
中由entry_points
定义,详情请复习ROS2从入门到精通0-5:CMakeLists与setup.py编写(附常用配置文件语法);name
:[str],用于指定节点的名称。如果未指定将使用可执行文件的名称;namespace
:[str],用于指定节点的命名空间。命名空间是一种组织节点的方式,可以帮助避免节点名称的冲突;output
:[str],用于指定节点的输出应该如何处理。例如,可以将其设置为screen
,以便将节点的输出打印到屏幕上;parameters
:[list],用于指定节点的ROS2参数。每个参数都是一个字典,其中包含参数的名称和值;remappings
:[list],用于指定话题的重映射。每个重映射都是一个元组,其中包含原始主题的名称和新主题的名称;arguments
:[list],用于指定传递给可执行文件的命令行参数。
-
运行
launch.py
文件ros2 launch <pkg_name> <launch.py>
2.2 Python架构
文件结构如下所示
<pkg>
├── build
├── install
├── log
└── src└── launch_lab_py├── launch├── launch_lab_py├── package.xml├── resource├── setup.cfg└── setup.py
按以下步骤设置启动脚本:
- 添加
setup.py
安装信息:在setup.py
文件的data_files
入口添加
目的是把data_files=[('share/ament_index/resource_index/packages',['resource/' + package_name]),('share/' + package_name, ['package.xml']),(os.path.join('share', package_name, 'launch'), glob(os.path.join('launch', '*.launch.py'))), ],
launch
目录添加到运行时的share
文件夹 - 在
launch
目录编写launch.py
文件,与2.1节相同 - 运行
launch.py
文件ros2 launch <pkg_name> <launch.py>
3 其他格式的启动文件
ROS2也支持其他文件格式的启动方式,如下所示,对这些格式语法不熟悉的请看ROS2从入门到精通0-5:CMakeLists与setup.py编写(附常用配置文件语法)
3.1 .yaml
启动
编写以下启动文件
launch:- node: pkg: launch_lab_pyexec: node_launch_clientname: launch_client_py- node:pkg: turtlesimexec: turtlesim_nodename: turtle_sim
运行启动脚本
ros2 launch launch_lab_py launch_lab.launch.yaml
3.2 .xml
启动
编写以下启动文件
<launch><node pkg="launch_lab_py" exec="node_launch_client" name="launch_client_py" /><node pkg="turtlesim" exec="turtlesim_node" name="turtle_sim" />
</launch>
运行启动脚本
ros2 launch launch_lab_py launch_lab.launch.xml
完整代码通过下方博主名片联系获取
🔥 更多精彩专栏:
- 《ROS从入门到精通》
- 《Pytorch深度学习实战》
- 《机器学习强基计划》
- 《运动规划实战精讲》
- …