5.2.3 灯带控制
胸前灯带控制接口提供了扩展的视觉交互功能。
核心特性
RGB分量独立控制
多种显示模式支持
灯带控制服务
服务名称 |
数据类型 |
描述 |
|---|---|---|
|
|
灯带控制 |
注意
灯带服务响应速度较慢, 应预期5秒左右时间完成调用。
多任务时可放在单独线程中控制或异步调用。
小心
ROS的服务(service)机制在跨板通信时存在一些待优化问题, 二次开发时请参考例程添加异常处理、快速重试等保护机制
机器人处于稳定站立 / 走跑模式时, 请勿批量快速启动 ROS 节点(建议不超过 2 个/秒), 短时间内大量节点参与 DDS 发现会造成通信拥塞、影响运控实时性, 存在机器人失稳摔倒风险
SetPmuLedros2-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 = 0x1024reset_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 |
频率 |
|---|---|---|---|---|
|
|
灯带当前状态 |
|
1Hz |
PmuLedStateros2-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 调用失败的请求仍会更新
编程示例
详细的编程示例和代码说明请参考: