机器人编程趣味实践12-启动工具(launch)

举报
zhangrelay 发表于 2021/07/15 00:30:53 2021/07/15
【摘要】 之前大部分案例,每输入一条指令就需要新开一个窗口,如何开启大工程…… launch 目标 创建启动文件以运行复杂的 ROS 2 系统。简单的launch,功能强大细节知识点后续介绍。 基础知识 在到目前为止的教程中,一直需要给运行的每个新节点打开新终端。 随着创建具有越来越多同时运行的节点的更复杂的系统,打开终端和重新输入配置细节变得乏味。 启动文件允许同时启动和配...

之前大部分案例,每输入一条指令就需要新开一个窗口,如何开启大工程……

  • launch

目标

创建启动文件以运行复杂的 ROS 2 系统。简单的launch,功能强大细节知识点后续介绍。

基础知识

在到目前为止的教程中,一直需要给运行的每个新节点打开新终端。 随着创建具有越来越多同时运行的节点的更复杂的系统,打开终端和重新输入配置细节变得乏味。

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

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

功能包要点

  1. rqt_graph
  2. turtlesim
  3. source

实践

1 配置

新建turtlesim_mimic_launch.py,使用终端或者图形化都可以的。

复制如下代码到其中,然后保存。


  
  1. from launch import LaunchDescription
  2. from launch_ros.actions import Node
  3. def generate_launch_description():
  4. return LaunchDescription([
  5. Node(
  6. package='turtlesim',
  7. namespace='turtlesim1',
  8. executable='turtlesim_node',
  9. name='sim'
  10. ),
  11. Node(
  12. package='turtlesim',
  13. namespace='turtlesim2',
  14. executable='turtlesim_node',
  15. name='sim'
  16. ),
  17. Node(
  18. package='turtlesim',
  19. executable='mimic',
  20. name='mimic',
  21. remappings=[
  22. ('/input/pose', '/turtlesim1/turtle1/pose'),
  23. ('/output/cmd_vel', '/turtlesim2/turtle1/cmd_vel'),
  24. ]
  25. )
  26. ])

如下图所示:

2 代码注解

这些导入语句会引入一些 Python 启动模块。类似C++的头文件功能。


  
  1. from launch import LaunchDescription
  2. from launch_ros.actions import Node

接下来,启动描述正式开始:


  
  1. def generate_launch_description():
  2. return LaunchDescription([
  3. ])

LaunchDescription 内是一个由三个节点组成的系统,全部来自turtlesim 包。 该系统的目标是启动两个机器人窗口,让一只机器人模仿另一只机器人的运动。

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


  
  1. Node(
  2. package='turtlesim',
  3. namespace='turtlesim1',
  4. executable='turtlesim_node',
  5. name='sim'
  6. ),
  7. Node(
  8. package='turtlesim',
  9. namespace='turtlesim2',
  10. executable='turtlesim_node',
  11. name='sim'
  12. ),

请注意,两个节点之间的唯一区别是它们的命名空间值。 唯一的命名空间允许系统启动两个模拟器而不会发生节点名称或主题名称冲突。

该系统中的两只机器人都接收关于同一主题的命令,并在同一主题上发布它们的姿势。 如果没有唯一的命名空间,就无法区分针对一只机器人或另一只机器人的消息。

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


  
  1. Node(
  2. package='turtlesim',
  3. executable='mimic',
  4. name='mimic',
  5. remappings=[
  6. ('/input/pose', '/turtlesim1/turtle1/pose'),
  7. ('/output/cmd_vel', '/turtlesim2/turtle1/cmd_vel'),
  8. ]
  9. )

此节点以重新映射的形式添加了配置详细信息。模拟的 /input/pose 主题被重新映射到 /turtlesim1/turtle1/pose,它的 /output/cmd_vel 主题被重新映射到 /turtlesim2/turtle1/cmd_vel。 这意味着 mimic 将订阅 /turtlesim1/sim 的姿势主题并重新发布它以供 /turtlesim2/sim 的速度命令主题订阅。 换句话说,turtlesim2 将模仿turtlesim1 的动作。

3 启动launch

如果没有将此文件添加到功能包中,则需要到对应文件夹手动启动:

  1. cd launch
  2. ros2 launch turtlesim_mimic_launch.py

详细细节后续讲解。

可以直接启动启动文件(如上面所做的那样),或由包提供。 当它由包提供时,语法为:ros2 launch <package_name> <launch_file_name>

在后面的教程中了解有关创建包的更多信息。

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

使用速度指令查看效果如下:

  • ros2 topic pub -r 1 /turtlesim1/turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 1.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: -1.8}}"

可以修改速度。

4 查看系统节点信息

使用rqt_graph。

总结

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


-Fin-


 

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

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

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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