RGB灯效控制器


Description

RGB灯效控制器用于控制整机所有可见RGB灯,包括TITA机器人前脸灯条、尾部灯条以及左右腿灯,能够实现任意部位任意灯珠的任意颜色。

由于本接口采用自定义消息,因此对此接口做详尽的说明。

其中前脸灯条由48个RGB灯珠组成,每个灯珠接受红色、绿色、蓝色和亮度共四个维度的共同控制,因此每个灯珠可以被uint32_t类型的数据控制,其中每个维度占据8位。整个灯条可以被含有48个元素的uint32_t类型的数组数据控制。

尾部灯条由36个RGB灯珠组成,每个灯珠接受红色、绿色、蓝色和亮度共四个维度的共同控制,因此每个灯珠可以被uint32_t类型的数据控制,其中每个维度占据8位。整个灯条可以被含有36个元素的uint32_t类型的数组数据控制。

左腿/右腿灯条分别由10个RGB灯珠组成,每个灯珠接受红色、绿色、蓝色共三个维度的共同控制,因此每个灯珠可以被uint32_t类型的数据控制,其中每个维度占据8位,剩余的八位数字无意义。整个灯条可以被含有10个元素的uint32_t类型的数组数据控制,左腿和右腿需要分开控制。

具体举例来说:

uint32_t head_rgb_light[48];
uint32_t tail_rgb_light[36];
uint32_t left_leg_rgb_light[10];
uint32_t right_leg_rgb_light[10];

head_rgb_light[0] = 0x12345678U;
tail_rgb_light[0] = 0x12345678U;
left_leg_rgb_light[0] = 0x12345678U;
right_leg_rgb_light[0] = 0x12345678U;

其中前脸灯条和尾部灯条的第一个灯被设置为0x12345678U, 
这意味着前脸灯和尾部灯的第一个灯的红色值为0x12U (18), 绿色值为0x34U (52), 
蓝色值为0x56U (86), 亮度值为0x78U (120)。具体灯效为上述混合后的效果。

左/右腿灯条的第一个灯被设置为0x12345678U,
这意味着左/右腿灯条的第一个灯的红色值为0x12U (18), 绿色值为0x34U (52),
蓝色值为0x56U (86), 0x78U这个值无意义。具体灯效为上述混合后的效果。

Usage

灯效控制器以服务的形式提供控制接口,用户有两种方法来实现控制。

第一种是直接调用调试指令,实现单次控制:

例如要控制前灯:
source /opt/tita/ros2/setup.bash # 加载ROS2环境
ros2 service call /tita_namespace/system/light_control/head_light_control_srv tita_system_interfaces/srv/HeadLightControlSrv "{is_control: true, light_rgbl_value: [0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff]}"

或者想控制尾灯:
ros2 service call /system/light_control/tail_light_control_srv tita_system_interfaces/srv/TailLightControlSrv "{is_control: true, light_rgbl_value: [0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff]}" 

或者想控制左/右腿部灯:
ros2 service call /system/light_control/leg_light_control_srv tita_system_interfaces/srv/LegLightControlSrv "{is_control: false, target_leg_light: 1, light_rgbl_value: [0xff00ffff, 0xff00ffff, 0xff00ffff, 0xff00ffff, 0xff00ffff, 0xff00ffff, 0xff00ffff, 0xff00ffff, 0xff00ffff, 0xff00ffff]}"

其中target_leg_light为1表示左腿,2表示右腿

放弃控制请将is_control设置为false

基于以上控制,提供了一种加载配置文件来一次性控制整机灯光的方法,该方法以时间细分,可控制整机任一时刻的任一灯光,同时提供了一个用于演示和测试的配置文件,配置文件位于/opt/tita/ros2/rgb_light_controller/share/rgb_light_controller/config/example.yaml

以下是对上上述的示例文件格式进行解释:

rgb_parameters:
  - parameters_config:
    is_head_control: true
    is_tail_control: true
    is_left_leg_control: true
    is_right_leg_control: true
    
  - serial_number: 1
    duration_ms: 1000
    head_light_rgb_parameters: [0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff]
    tail_light_rgb_parameters: [0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff]
    left_leg_light_rgb_parameters: [0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000]
    right_leg_light_rgb_parameters: [0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000]
  
  - serial_number: 2
    duration_ms: 1000
    head_light_rgb_parameters: [0x00ff00ff,0x00ff00ff,0x00ff00ff,0x00ff00ff,0x00ff00ff,0x00ff00ff,0x00ff00ff,0x00ff00ff,0x00ff00ff,0x00ff00ff,0x00ff00ff,0x00ff00ff,0x00ff00ff,0x00ff00ff,0x00ff00ff,0x00ff00ff,0x00ff00ff,0x00ff00ff,0x00ff00ff,0x00ff00ff,0x00ff00ff,0x00ff00ff,0x00ff00ff,0x00ff00ff,0x00ff00ff,0x00ff00ff,0x00ff00ff,0x00ff00ff,0x00ff00ff,0x00ff00ff,0x00ff00ff,0x00ff00ff,0x00ff00ff,0x00ff00ff,0x00ff00ff,0x00ff00ff,0x00ff00ff,0x00ff00ff,0x00ff00ff,0x00ff00ff,0x00ff00ff,0x00ff00ff,0x00ff00ff,0x00ff00ff,0x00ff00ff,0x00ff00ff,0x00ff00ff,0x00ff00ff]
    tail_light_rgb_parameters: [0x00ff00ff,0x00ff00ff,0x00ff00ff,0x00ff00ff,0x00ff00ff,0x00ff00ff,0x00ff00ff,0x00ff00ff,0x00ff00ff,0x00ff00ff,0x00ff00ff,0x00ff00ff,0x00ff00ff,0x00ff00ff,0x00ff00ff,0x00ff00ff,0x00ff00ff,0x00ff00ff,0x00ff00ff,0x00ff00ff,0x00ff00ff,0x00ff00ff,0x00ff00ff,0x00ff00ff,0x00ff00ff,0x00ff00ff,0x00ff00ff,0x00ff00ff,0x00ff00ff,0x00ff00ff,0x00ff00ff,0x00ff00ff,0x00ff00ff,0x00ff00ff,0x00ff00ff,0x00ff00ff]
    left_leg_light_rgb_parameters: [0x00ff0000, 0x00ff0000, 0x00ff0000, 0x00ff0000, 0x00ff0000, 0x00ff0000, 0x00ff0000, 0x00ff0000, 0x00ff0000, 0x00ff0000]
    right_leg_light_rgb_parameters: [0x00ff0000, 0x00ff0000, 0x00ff0000, 0x00ff0000, 0x00ff0000, 0x00ff0000, 0x00ff0000, 0x00ff0000, 0x00ff0000, 0x00ff0000]

  - serial_number: 3
    duration_ms: 1000
    head_light_rgb_parameters: [0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff]
    tail_light_rgb_parameters: [0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff]
    left_leg_light_rgb_parameters: [0x0000ff00, 0x0000ff00, 0x0000ff00, 0x0000ff00, 0x0000ff00, 0x0000ff00, 0x0000ff00, 0x0000ff00, 0x0000ff00, 0x0000ff00]
    right_leg_light_rgb_parameters: [0x0000ff00, 0x0000ff00, 0x0000ff00, 0x0000ff00, 0x0000ff00, 0x0000ff00, 0x0000ff00, 0x0000ff00, 0x0000ff00, 0x0000ff00]

    # 省略中间重复代码
    # ...
    # ...
    # ...
    # 省略中间重复代码
    
  - serial_number: 19
    duration_ms: 1000
    head_light_rgb_parameters: [0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff]
    tail_light_rgb_parameters: [0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff]
    left_leg_light_rgb_parameters: [0x0000ff00, 0x0000ff00, 0x0000ff00, 0x0000ff00, 0x0000ff00, 0x0000ff00, 0x0000ff00, 0x0000ff00, 0x0000ff00, 0x0000ff00]
    right_leg_light_rgb_parameters: [0x0000ff00, 0x0000ff00, 0x0000ff00, 0x0000ff00, 0x0000ff00, 0x0000ff00, 0x0000ff00, 0x0000ff00, 0x0000ff00, 0x0000ff00]

  - serial_number: 20
    duration_ms: 1000
    head_light_rgb_parameters: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff]
    tail_light_rgb_parameters: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff]
    left_leg_light_rgb_parameters: [0xffffff00, 0xffffff00, 0xffffff00, 0xffffff00, 0xffffff00, 0xffffff00, 0xffffff00, 0xffffff00, 0xffffff00, 0xffffff00]
    right_leg_light_rgb_parameters: [0xffffff00, 0xffffff00, 0xffffff00, 0xffffff00, 0xffffff00, 0xffffff00, 0xffffff00, 0xffffff00, 0xffffff00, 0xffffff00]

该表需要以rgb_parameters作为列表头,列表第一个元素是parameters_config,用来描述is_head_control is_tail_control is_left_leg_control is_right_leg_control这四个参数,当表示True时用于参与控制,并且需要用False来退出手动控制。列表后续元素是serial_number表示帧序列号,用于描述当前帧的灯效参数,需要描述的参数有duration_ms head_light_rgb_parameters tail_light_rgb_parameters left_leg_light_rgb_parameters right_leg_light_rgb_parameters,表示当前帧的持续时间、前灯灯效参数、后灯灯效参数、左腿灯灯效参数和右腿灯灯效参数,灯效参数的RGB值参考上面对各个部位灯的控制注释。


第二种是在程序构建Client向Service发送请求,实现更高效灵活的控制

相关例子:

https://github.com/lrz8080/Light_audio_ctrl_demo.git

备注

请不要为腿部灯条发送过高频率的请求,过高频率的请求可能会影响腿部电机通信。