ROS 2启动-launch-

举报
zhangrelay 发表于 2021/07/15 02:21:41 2021/07/15
【摘要】 啥,开了十几个窗口,机器人还没有动起来…… 是时候了解一下launch文件啦。 课程目标:使用启动文件运行复杂的ROS 2系统。 视频教程(Linux):https://www.bilibili.com/video/BV1dv411B7i9/ ROS 2启动launch 1. 什么是launch? 翻译为启动文件未必准确 到目前为止,在教程中,一直在为...

啥,开了十几个窗口,机器人还没有动起来……

是时候了解一下launch文件啦。

课程目标:使用启动文件运行复杂的ROS 2系统。

视频教程(Linux):https://www.bilibili.com/video/BV1dv411B7i9/

ROS 2启动launch

1. 什么是launch?

翻译为启动文件未必准确

到目前为止,在教程中,一直在为运行的每个新节点打开新终端。当创建越来越多的节点同时运行更复杂的系统时,打开终端并重新输入配置详细信息将变得乏味和低效。

启动文件launch可以同时启动和配置许多包含ROS 2节点的可执行文件。

使用命令ros2 launch运行一个启动文件将立即启动整个系统-包括所有节点及其配置。

这里,只讲一个最简单的案例。

2. 编写launch:

使用如下命令:
type nul > turtlesim_mimic_launch.py

具体代码如下:


      from  launch import LaunchDescription
      from launch_ros.actions import Node
      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'),
       ]
       )
       ])
  
 

3. 解释一下吧:

代码是python规范的。

导入模块:


      from launch import LaunchDescription
      from launch_ros.actions import Node
  
 

启动文件:


      def generate_launch_description():
         return LaunchDescription([
         ])
  
 

内部LaunchDescription是一个由三个节点组成的系统

启动描述中启动两个turtlesim窗口:


      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值。

唯一的名称空间使系统可以启动两个模拟器,而不会出现节点名或主题名冲突的情况。

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

可以试一下重名后问题在哪里???

然后是最后一个节点mimic:


      Node(
       package='turtlesim',
       node_executable='mimic',
       node_name='mimic',
       remappings=[
       ('/input/pose', '/turtlesim1/turtle1/pose'),
       ('/output/cmd_vel', '/turtlesim2/turtle1/cmd_vel'),
       ]
      )
  
 

该节点以重新映射的形式添加了配置详细信息。

4. 运行launch启动节点

ros2 launch turtlesim_mimic_launch.py
 

如果需要使用标准格式:

ros2 launch <package_name> <launch_file_name>
 

需要编写功能包中配置文件,此处不支持。

两个小龟同时运动命令如下:

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}}"
 

看到两只乌龟都走相同的路径。

如何实现标准命令格式呢?

需要在CMakeLists.txt加入:

install(DIRECTORY launch
  DESTINATION share/${PROJECT_NAME})

5. 小结

启动文件简化了具有许多节点和特定配置详细信息的复杂系统的运行。使用Python创建启动文件,然后使用命令ros2 launch运行它们。

该部分与ROS1差异比较大,需多查阅官网和源码。


 

文章来源: zhangrelay.blog.csdn.net,作者:zhangrelay,版权归原作者所有,如需转载,请联系作者。

原文链接:zhangrelay.blog.csdn.net/article/details/103498784

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。