前言
学习ROS2的路,并不能通过学习ROS1代替,因为ROS2的“内核”不同于ROS1,必须认认真真从头开始重新学习。
Ubuntu版本:20.04
ROS版本:Foxy
学习笔记回顾
- ROS2学习笔记(一)获取文档
- ubuntu20.04 安装ROS2和ROS1共存
- ROS2学习笔记(二)从turtlesim学习ROS2节点
- ROS2学习笔记(三)从turtlesim学习ROS2主题
- ROS2学习笔记(四)从turtlesim学习ROS2服务
- ROS2学习笔记(五)从turtlesim学习ROS2参数
- ROS2学习笔记(六)从turtlesim学习ROS2动作
- ROS2学习笔记(七)从turtlesim学习ROS2的工具
1.ROS2启动文件
当我们要启动一个大型项目时需要同时运行多个节点,会非常麻烦,如果运行单个启动文件可以启动整个系统包括所有节点和配置,会非常方便。ROS2中的启动文件就有这样的功能。
2.创建launch文件
$ mkdir ros2_ws
$ cd ros2_ws
$ mkdir launch
$ touch launch/turtlesim_mimic_launch.py
使用文本编辑器打开新文件。
3.编写launch文件
编写一个turtlesim
包的启动文件,该文件的目标是启动两个海龟模拟器,让一只海龟模仿另一只海龟运动,启动文件代码如下所示:
# 引入ROS2 launch模块
from launch import LaunchDescription
from launch_ros.actions import Node
# 启动launch文件描述
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'
),
# 启动mimic
Node(
package='turtlesim',
executable='mimic',
name='mimic',
# /input/pose主题被重新映射到/turtlesim1/turtle1/pose
# /output/cmd_vel主题将被映射到/turtlesim2/turtle1/cmd_vel
remappings=[
('/input/pose', '/turtlesim1/turtle1/pose'),
('/output/cmd_vel', '/turtlesim2/turtle1/cmd_vel'),
]
)
])
通过上面的重映射操作,可以看出mimic
节点通过订阅turtle1
的位置,转换成对turtle2
的速度指令发布出去,可以让turtle2
模仿turtle1
完成同样的运动
4.ros2 launch
启动文件语法如下所示:
$ ros2 launch <package_name> <launch_file_name>
启动文件看看效果:
$ cd launch
$ ros2 launch turtlesim_mimic_launch.py
----
[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 -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}}"
我们可以看到两只海龟在同一条路上。
5.rqt_graph工具
启动新终端,使用如下命令查看节点中的关系:
$ rqt_graph
总结
启动文件简化了复杂系统的启动方式,好好的运用他们。
Reference:
https://docs.ros.org/en/foxy/Tutorials/Launch-Files/Creating-Launch-Files.html
结语
本文也是基于笔者的学习和使用经验总结的,主观性较强,如果有哪些不对的地方或者不明白的地方,欢迎评论区留言交流~
为了能和读者进一步讨论问题,建立了一个微信群,方便给大家解答问题,也可以一起讨论问题。
加群链接