5.2.3 灯带控制

胸前灯带控制接口提供了扩展的视觉交互功能。

核心特性

  • RGB分量独立控制

  • 多种显示模式支持

灯带控制服务

服务名称

数据类型

描述

/aimdk_5Fmsgs/srv/SetPmuLed

SetPmuLed

灯带控制

注意

灯带服务响应速度较慢, 应预期5秒左右时间完成调用。
多任务时可放在单独线程中控制或异步调用。

小心

ROS的服务(service)机制在跨板通信时存在一些待优化问题, 二次开发时请参考例程添加异常处理、快速重试等保护机制

机器人处于稳定站立 / 走跑模式时, 请勿批量快速启动 ROS 节点(建议不超过 2 个/秒), 短时间内大量节点参与 DDS 发现会造成通信拥塞、影响运控实时性, 存在机器人失稳摔倒风险

  • SetPmuLed ros2-srv @ hal/srv/SetPmuLed.srv

    # 灯带控制
    # 服务名称: /aimdk_5Fmsgs/srv/SetPmuLed
    
    # 请求
    CommonRequest request  # 请求头
    string trace_id        # 来源追踪
    
    uint8 led_strip_mode  # 灯带模式(0:常亮, 1:呼吸, 2:闪烁, 3:流水)
    uint8 r  # 红色分量(范围:0-255)
    uint8 g  # 绿色分量(范围:0-255)
    uint8 b  # 蓝色分量(范围:0-255)
    
    int32 priority        # 优先级(值越大优先级越高,初始门槛为0)
    bool reset_priority   # 为true时强制抢占,门槛重置为0
    
    ---
    
    # 响应
    ResponseHeader header  # 响应头
    uint16 status_code  # 状态码(0:成功, 0x1024:优先级不足, 其他:失败)
    

    led_strip_mode说明:

    值

    模式

    说明

    0

    常亮

    1

    呼吸

    4s周期, 亮度正弦变化

    2

    闪烁

    1s周期, 亮灭每0.5s切换

    3

    流水

    2s周期, 从左往右点亮,然后同时灭

    ≥4

    无效

    不支持的模式值,请求将被拒绝

优先级机制

  • 系统维护一个优先级门槛(初始为 0),新请求的 priority 大于等于门槛时才会被接受,并将门槛更新为该值

  • priority 小于门槛时,请求被拒绝,返回 status_code = 0x1024

  • reset_priority = true 表示强制抢占:跳过优先级判断,直接把门槛重置为 0 并执行请求(priority 字段被忽略,不会更新门槛)。适用于紧急场景(如 task_manager 在故障或开机时需要强制接管灯带)

注意

避免灯带控制冲突:

系统运行时,task_manager 模块会在开机过程、运行状态变化、故障诊断等场景下自动控制灯带,可能覆盖用户的灯带设置。如需持续控制灯带,请在运控计算单元(PC1)上执行以下命令关闭 task_manager 模块:

aima em stop-app task_manager

若不关闭 task_manager,用户仍可调用 SetPmuLed,但需注意:

  • 用户的灯带设置可能随时被 task_manager 的自动控制强制抢占(task_manager 使用 reset_priority=true 跳过优先级判断直接覆盖)

  • 可通过订阅 /aima/hal/pmu/led_state 话题监听灯带状态变化,发现被覆盖后重新设置

灯带状态话题

话题名称

数据类型

描述

QoS

频率

/aima/hal/pmu/led_state

PmuLedState

灯带当前状态

BEST_EFFORT+TRANSIENT_LOCAL

1Hz

  • PmuLedState ros2-msg @ hal/msg/PmuLedState.msg

    # PMU LedStrip 状态
    MessageHeader header             # 消息头(未启用,见下方说明)
    string trace_id                  # 来源追踪
    uint8 led_strip_mode             # 灯带模式(0 (LED_STRIP_MODE_CONSTANT 常亮), 1 (LED_STRIP_MODE_BREATH 呼吸), 2 (LED_STRIP_MODE_FLASH 闪烁), 3 (LED_STRIP_MODE_FLOW 流水))
    uint8 r                          # 红色分量0-255
    uint8 g                          # 绿色分量0-255
    uint8 b                          # 蓝色分量0-255
    int32 priority                   # 当前生效的优先级
    

备注

led_state 字段使用说明:

  • header:MessageHeader 字段当前未填充(stamp、frame_id、sequence 均为默认零值),不可用于时间同步

  • 语义:该话题发布的是最近一次通过优先级检查的 SetPmuLed 请求参数值,而非 LED 硬件回读的实际状态。优先级不足被拒(返回 0x1024)的请求不更新 mode/r/g/b;SDK 调用失败的请求仍会更新

编程示例

详细的编程示例和代码说明请参考: