文章目录

 
    • ① 背景
    • ② 前提
    • ③ 任务
      • Ⅰ准备
      • Ⅱ 使用actions
      • actions 命令
        • ros2 action list
        • ros2 action info
        • ros action show(ros2 interface show--eloquent 这个版本有)
          • dashing 版本
          • eloquent 版本
        • ros2 action send_goal
    • ④ 总结
 

① 背景

  动作是ROS 2中用于长时间运行任务的通信类型之一。它们由三部分组成:目标,结果和反馈。   动作基于主题和服务。它们的功能与服务相似,但动作是可抢占的(您可以在执行时将其取消)。与返回单个响应的服务相反,它们还提供稳定的反馈。   操作使用类似于发布者-订阅者模型(在主题教程中进行描述)的客户端-服务器模型。“动作客户端”节点将目标发送到“动作服务器”节点,该节点确认目标并返回反馈和结果流。   意思就是topic是没有反馈的,action是有反馈的长连接  

② 前提

 
  • 装ros2
  • 配置环境
  • 装小乌龟
 

③ 任务

 

Ⅰ准备

  启动小乌龟 命令:  
ros2 run turtlesim turtlesim_node
ros2 run turtlesim turtle_teleop_key
 

Ⅱ 使用actions

  键盘控制节点这个地方就是action,使用f键周围的来控制小乌龟到指定方向,F键取消作用   微信图片_20210220193504   演示:   微信图片_20210220193517   是通过这个action 发送的   微信图片_20210220193531  

actions 命令

 

ros2 action list

  列出 action   微信图片_20210220193546  

ros2 action info

  看详细信息   微信图片_20210220193559  

ros action show(ros2 interface show–eloquent 这个版本有)

  详细信息  
dashing 版本
 
ros2 action show turtlesim/action/RotateAbsolute
  微信图片_20210220193630  
eloquent 版本
 
ros2 interface show turtlesim/action/RotateAbsolute.action
  微信图片_20210220193651  

ros2 action send_goal

  命令行发送action ros2 action send_goal <action_name> <action_type> <values> 例子:
  • 没有feedback
 
ros2 action send_goal /turtle1/rotate_absolute turtlesim/action/RotateAbsolute {'theta: 1.57'}
 
  • 有 feedbaxk
 
ros2 action send_goal /turtle1/rotate_absolute turtlesim/action/RotateAbsolute {'theta: -1.57'} --feedback
  微信图片_20210220193724  

④ 总结

  动作就像服务,可让您执行长时间运行的任务,提供定期反馈并可以取消。   机器人系统可能会使用动作进行导航。一个行动目标可以告诉机器人去某个位置。当机器人导航到该位置时,它可以沿途发送更新(即反馈),一旦到达目的地,便发送最终结果消息。   Turtlesim有一个动作服务器,动作客户端可以将目标发送给旋转的乌龟。在本教程中,您对动作进行了自省/turtle1/rotate_absolute,以更好地了解什么是动作以及它们如何工作。