概念
我们在前面的ROS 2体验过程中,一直拿小海龟这个例子来练手,过程比较轻松,因为只有两个节点(/turtlesim和/teleop_turtle),只需打开两个终端,ros2 run 节点就ok,但,现实中的节点数目一般都会比较多,如果闲的没事做,那可以一个终端一个终端的ros2 run下去,正常思维应该都不会这么干(即使真有人这么做了,也比较容易出现遗漏情况),那到底如何管理这众多的节点启动问题呢?launch就是干这个的,它会根据启动文件(.py或.launch文件,里面可以包含我们要启动的节点等相关信息)将整个ROS系统(相关的所有节点包括配置文件等内容)拉起来。
动动手
launch小海龟
本篇较为轻松,我们先感受下用launch方式启动两只小海龟:
$ros2 launch turtlesim multisim.launch.py
multisim.launch.py内容如下:
# turtlesim/launch/multisim.launch.pyfrom launch import LaunchDescription
import launch_ros.actionsdef generate_launch_description():return LaunchDescription([launch_ros.actions.Node(namespace= "turtlesim1", package='turtlesim', executable='turtlesim_node', output='screen'),launch_ros.actions.Node(namespace= "turtlesim2", package='turtlesim', executable='turtlesim_node', output='screen'),])
该份python写就的启动文件包含了命名空间(后面文章会涉及到)、功能包、节点等概念和内容,其会启动两个小海龟仿真节点(turtlesim,虽然名称一样,但因为是在不同的命名空间里面,所以允许这么干)。效果如下:
launch文件除了可以用python外,还可以用XML、YAML格式完成(关于launch文件内容我们后面文章会再次涉及,在rviz及gazebo中会在构造机器人结构中用到)。
控制小海龟(不要求)
下面我们再次打开两个终端,用来分别控制这两只小海龟游动(为了区分,我们让一个顺时针一个逆时针游动):
$ros2 topic pub /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}}"
$ros2 topic pub /turtlesim2/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}}"
本篇完。