当在具有较多节点同时运行的复杂的系统中,打开终端并重新输入配置细节将变得繁杂。
Launch文件允许同时启动和配置多个包含ROS2节点的可执行文件。
使用ros launch
命令运行单个启动文件将立即启动整个系统——所有节点及其配置。
1.准备
创建一个新文件家以存放launch文件:
mkdir launch
创建一个名为turtlesim_mimic_launch.py
的文件,可以通过以下命令实现:
touch launch/turtlesim_mimic_launch.py
还可以使用GUI进入系统的文件目录,并以这种方式创建一个新文件。
在文本编辑器中打开新文件。
2.写launch文件
通过launch文件启动turtlesim
包中的可执行程序,将下列代码粘贴到turtlesim_mimic_launch.py
中:
from launch import LaunchDescription
from launch_ros.actions import Node
def generate_launch_description():
return LaunchDescription([
Node(
package='turtlesim',
namespace='turtlesim1',
executable='turtlesim_node',
name='sim'
),
Node(
package='turtlesim',
namespace='turtlesim2',
executable='turtlesim_node',
name='sim'
),
Node(
package='turtlesim',
executable='mimic',
name='mimic',
remappings=[
('/input/pose', '/turtlesim1/turtle1/pose'),
('/output/cmd_vel', '/turtlesim2/turtle1/cmd_vel'),
]
)
])
2.1分析launch文件
这些import
语句会引入一些Pythonlaunch
模块:
from launch import LaunchDescription
from launch_ros.actions import Node
接下来,开始launch本身的描述:
def generate_launch_description():
return LaunchDescription([
])
在LaunchDescription
中有一个由三个节点组成的系统,它们都来自turtlesim
包。这个系统的目标是启动两个海龟窗口,让一只海龟模仿另一只海龟的动作。
launch描述中的前两个动作将启动两个turtlesim
窗口:
Node(
package='turtlesim',
namespace='turtlesim1',
executable='turtlesim_node',
name='sim'
),
Node(
package='turtlesim',
namespace='turtlesim2',
executable='turtlesim_node',
name='sim'
),
注意:这两个节点之间的唯一区别是它们的名称空间值(namespace values)。唯一的名称空间允许系统启动两个模拟器,而不存在节点名或主题名冲突。
最后一个节点也来自turturlesim
包,但是是一个不同的可执行文件:mimic
。
Node(
package='turtlesim',
executable='mimic',
name='mimic',
remappings=[
('/input/pose', '/turtlesim1/turtle1/pose'),
('/output/cmd_vel', '/turtlesim2/turtle1/cmd_vel'),
]
)
该节点以重映射的形式添加了配置细节。
mimic
的/input/pose
话题被重映射到/turtlesim1/turtle1/pose
,而它的/output/cmd_vel
话题被映射到/turtlesim2/turtle1/cmd_vel
。这意味着mimic
将订阅/turtlesim1/sim
的pose
话题,并将其重新发布为/turtlesim2/sim
的速度控制话题。换句话说,tuertlesim2
会模仿turtlesim1
的动作。
3.ros2 launch
为了启动turtlesim_mimic_launch.py
,进入刚才建立的文件夹并运行以下命令:
cd launch
ros2 launch turtlesim_mimic_launch.py
注意:可以直接启动launch文件(如上所示),或者由包提供。当launch文件由包提供时,语法是:
ros2 launch <package_name> <launch_file_name>
两个turtlesim窗口将打开,将看到以下[INFO]
消息,告知启动文件已经启动:
[INFO] [launch]: Default logging verbosity is set to INFO
[INFO] [turtlesim_node-1]: process started with pid [11714]
[INFO] [turtlesim_node-2]: process started with pid [11715]
[INFO] [mimic-3]: process started with pid [11716]
查看系统的运行情况,打开新终端,并在/turtlesim1/turtle1/cmd_vel
话题上运行ros2 topic pub
命令,让第一个海龟移动:
ros2 topic pub -r 1 /turtlesim1/turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: -1.8}}"
将会看到两只海龟沿着同一条路线运动:
4.使用rat_graph查看系统
当系统仍在运行时,打开一个新的终端并运行rqt_graph
以更好地了解launch文件中节点之间的关系。
执行命令:
rqt_graph
`n__rso2cli_12142`(执行的`ros2 topic pub`)正在将数据发布到左侧的`/turtlesim1/turtle1/cmd_vel`话题,`/turtlesim1/sim`节点订阅了该话题。图的其余部分显示了前面描述的内容:`mimic`订阅`/turtlesim1/sim`的`pose`话题,发布到`/turtlesim2/sim`的`cmd_vel`主题。
5.总结
launch文件通过许多节点和特定的配置细节简化了复杂系统的运行,可以使用Python创建launch文件,并使用ros2 launch
命令运行它们。
注意:
与ROS1一样,同样可以使用XML和YAML来创建launch文件,可以参考:
Using Python, XML, and YAML for ROS 2 Launch Files — ROS 2 Documentation: Foxy documentation
如果给您带来帮助,希望能给点个关注,以后还会陆续更新有关机器人的内容,点个关注不迷路~欢迎大家一起交流学习。
都看到这了,点个推荐再走吧~
未经允许,禁止转载。