欢迎光临
我们一直在努力

【ROS2】动作通信机制 Action

在这里插入图片描述

ROS1 系列教程(总目录) ROS2 系列教程(总目录) ROS2 系列教程源码、学习群

目录

  • 一、通信框架
    • 1.1 基本介绍
    • 1.2 基本通信流程
  • 二、Action 与 Topic 、 Service
    • 2.1 场景适用对比
    • 2.2 通信机制特性对比
  • 三、Action 消息定义

一、通信框架

1.1 基本介绍

Action 是 ROS2 中专为长时间运行的任务设计的,它结合了 Service 的请求-响应模式和 Topic 的持续数据流,提供了:

  • Goal(目标):客户端发送的任务请求
  • Feedback(反馈):执行过程中的实时进度
  • Result(结果):任务最终完成状态

Action 基于 Topic 和 Service 构建,功能与Service类似,但Action可以取消。此外,它提供持续的反馈,而Service只返回一次响应。

Action 底层由 5 个通信通道组成:3 个 Service + 2 个 Topic。

通道类型方向用途
/send_goal Service Client → Server 提交目标,Server 返回是否接受
/cancel_goal Service Client → Server 取消目标
/get_result Service Client → Server 最终结果(含状态)
/feedback Topic Server → Client 任务执行中的周期性反馈
/status Topic Server → Client 所有 Goal 的状态变更通知

Action 服务启动后,可以使用如下指令查看底层通道(默认隐藏,需要加参数显示):

ros2 service list –include-hidden-services
ros2 topic list –include-hidden-topics

查看结果示例(其中 fibonacci 为 Action 名字):

$ ros2 service list –include-hidden-services
/fibonacci/_action/cancel_goal
/fibonacci/_action/get_result
/fibonacci/_action/send_goal

$ ros2 topic list –include-hidden-topics
/fibonacci/_action/feedback
/fibonacci/_action/status

1.2 基本通信流程

Actions 使用客户端-服务器模型,类似于发布者-订阅者模型。“Action 客户端”节点向“Action 服务器”节点发送目标,后者确认目标并返回反馈流和结果。

在这里插入图片描述

通信流程底层逻辑:

  • Client 调用 async_send_goal(goal) → 发出 Goal Request
  • Server 收到 Goal Request 后,判断是否可以执行,通过后返回 Goal Response = Accepted
  • Client 收到 Goal Response = Accepted 后,内部自动调用 async_get_result() 发送 Result Request
  • Server 收到 Result Request,不会立刻回应,而是把"有人在等结果"这件事记下来
  • 同时,Server 返回 Goal Response = Accepted 后,开始处理 Goal 的任务,期间发 Feedback、更新 Status
  • Server 执行完成后,用之前缓存的 Result Request 返回 Result Response
  • 如果任务耗时且需要实时进度,则适合使用Action。

    Action 典型应用场景:

    机器人导航 → "去厨房" (Goal)"距离5m…" (Feedback)"已到达" (Result)
    机械臂控制 → "转到90°" (Goal)"当前45°…" (Feedback)"到位" (Result)
    图像处理 → "识别物体" (Goal)"处理50%…" (Feedback)"结果" (Result)
    系统校准 → "校准传感器" (Goal)"第3/5步…" (Feedback)"完成" (Result)
    任务调度 → "执行任务A" (Goal)"子任务2/5…" (Feedback)"完成" (Result)

    二、Action 与 Topic 、 Service

    2.1 场景适用对比

    场景TopicServiceAction
    传感器数据流 × ×
    一次性查询 × ×
    导航到目标点 × 无进度
    机械臂运动 × 无进度
    文件下载/处理 × 无进度

    2.2 通信机制特性对比

    特性TopicServiceAction
    通信模式 发布-订阅 请求-响应 目标-反馈-结果
    方向 单向(多对多) 双向(一对一) 双向(一对一)
    同步/异步 异步 同步 异步
    持续性 持续数据流 一次性 持续到完成
    进度反馈 × ×
    可取消 × ×
    执行时间 无限制 应短(<1s) 可长
    典型频率 10~1000Hz 按需 按需

    三、Action 消息定义

    Action 消息定义在 .action 文件中,三个部分用 — 分隔:

    # Goal —— 客户端发送的目标内容
    <类型> <字段名>

    # Result —— 服务端返回的最终结果
    <类型> <字段名>

    # Feedback —— 服务端发布的实时反馈
    <类型> <字段名>

    一个控制机械臂的action示例:

    # Goal
    float64 target_angle # 目标角度 (弧度)
    float64 speed # 速度因子 (0.1~2.0)

    # Result
    bool success # 是否成功
    float64 final_angle # 最终角度
    float64 elapsed_time # 耗时(秒)
    string message # 描述信息

    # Feedback
    float64 current_angle # 当前角度
    float32 progress_percent # 进度百分比
    string status # 状态描述

    赞(0)
    未经允许不得转载:171主机测评 » 【ROS2】动作通信机制 Action
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址