ROS2-4-Launch文件

Catalogue
  1. 1. ROS2-Launch
  2. 2. 编写Launch文件
  3. 3. 启动Launch文件
  4. 4. 使用rqt_graph

ROS2-Launch

ros2里面的launch是基于python的,与ros1的不一样。

编写Launch文件

turtlesim_mimic_launch.py通过在终端中输入以下命令来创建启动文件:

1
touch launch/turtlesim_mimic_launch.py

使用turtlesim软件包及其可执行文件将ROS 2启动文件放在一起。

复制完整的代码并将其粘贴到turtlesim_mimic_launch.py文件中:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#引入launch模块
from launch import LaunchDescription
from launch_ros.actions import Node

#开始:
#LaunchDescription是一个由三个节点组成的系统,
#它们全部来自该turtlesim程序包
def generate_launch_description():
return LaunchDescription([
Node(
package='turtlesim',
node_namespace='turtlesim1',
node_executable='turtlesim_node',
node_name='sim'
),
Node(
package='turtlesim',
node_namespace='turtlesim2',
node_executable='turtlesim_node',
node_name='sim'
),
Node(
package='turtlesim',
node_executable='mimic',
node_name='mimic',
remappings=[
('/input/pose', '/turtlesim1/turtle1/pose'),
('/output/cmd_vel', '/turtlesim2/turtle1/cmd_vel'),
]
)
])

该系统的目标是启动两个turtlesim窗口,并让其中一只乌龟模仿另一只乌龟的运动。

启动描述中的前两个动作将启动两个turtlesim窗口:

1
2
3
4
5
6
7
8
9
10
11
12
Node(
package='turtlesim',
node_namespace='turtlesim1',
node_executable='turtlesim_node',
node_name='sim'
),
Node(
package='turtlesim',
node_namespace='turtlesim2',
node_executable='turtlesim_node',
node_name='sim'
),

注意,两个节点之间的唯一区别是它们的node_namespace值。唯一的名称空间使系统可以启动两个模拟器,而不会出现节点名或主题名冲突的情况。

该系统中的两个海龟都接收有关同一主题的命令,并在同一主题上发布其姿势。如果没有唯一的名称空间,就无法区分用于一只乌龟或另一只乌龟的消息。

最后一个节点也来自turtlesim程序包,但是是一个不同的可执行文件:mimic

1
2
3
4
5
6
7
8
9
Node(
package='turtlesim',
node_executable='mimic',
node_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/simpose主题,并将其重新发布以供/turtlesim2/sim速度指令主题订阅。换句话说,turtlesim2将模仿turtlesim1的动作。

启动Launch文件

要启动turtlesim_mimic_launch.py,请运行以下命令:

1
ros2 launch turtlesim_mimic_launch.py

将打开两个turtlesim窗口,您将看到以下[INFO]消息,告诉您启动文件已启动了哪些节点:

1
2
3
4
[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]

启动效果:

要查看运行中的系统,请打开一个新终端,然后在主题上运行命令以使第一个乌龟移动:ros2 topic pub``/turtlesim1/turtle1/cmd_vel

1
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}}'

看到两只乌龟都遵循相同的路径:

使用rqt_graph

当系统仍在运行时,打开一个新终端并运行rqt_graph以更好地了解启动文件中节点之间的关系。

运行命令:

1
rqt_graph

一个隐藏的节点(您运行的命令)正在将数据发布到该节点已预订的左侧主题。图的其余部分显示了先前描述的内容:订阅的位姿主题,并发布到的速度命令主题。ros2 topic pub``/turtlesim1/turtle1/cmd_vel``/turtlesim1/sim``mimic``/turtlesim1/sim``/turtlesim2/sim