feat(ui): 新增裁判系统自定义UI(0x0301)并打通键鼠→底盘链路
键鼠控制(此前 WASD 无反应): - 云台 robot_cmd_task:0x0304 与 USART3 帧内键鼠合并为共享视图 keyboard_merged(0x0304 优先); 键鼠模式由帧内键鼠动作进入,动云台左摇杆退出 - c_comm_task/c_comm:键鼠在控时底盘摇杆由 WASD+鼠标合成,改读共享视图(此前只认 0x0304) - dr16/调试输出:新增帧内键鼠原始字节诊断(key_lo/key_hi/mouse_*/s1/frames) 自定义UI(底盘板经裁判系统 USART6 绘制到选手端): - 新增 底盘/modules/comms/referee_ui.c|h:15 字节图形组包(带编译期断言), v5 卡片式 HUD = 俯仰梯(pitch) + 罗盘刻度带(底盘朝向) + 预估底盘功率 + 超级电容 + 摩擦轮 L/R 转速 + 小陀螺状态,yaw 在刻度带右侧;5Hz 刷新,约 50 图元/8 包 - referee.c 新增 referee_send_frame()(cmd 0x0301 机器人交互数据,CRC8+CRC16,USART6 TX DMA) - 新增 CToC 0x1B9:云台把 pitch 与摩擦轮转速带给底盘(底盘本地没有这两个量) - 版式避开官方保留区:顶部比分条/左下小地图/右下战车模块/中部两块官方保留 验证:云台 Code=99540 RO=1764 RW=420 ZI=62572;底盘 Code=99452 RO=1928 RW=416 ZI=62584;均 0 错误 0 警告。 未做实机验证(当前无板/无图传);UI 协议常量(UI_RECEIVER_ID/UI_SEND_HZ)与版式坐标集中在 referee_ui.h 宏区,便于按协议 PDF 一处校正。
This commit is contained in:
@@ -23,6 +23,13 @@ static volatile uint32_t ctoc_att_last_tick = 0;
|
||||
/* 云台自检下发的编码器方向:+1=tick增向CCW -1=CW 0=未检测(0x1A9 flags) */
|
||||
volatile int8_t ctoc_encoder_ccw = 0;
|
||||
|
||||
/* ---- 0x1B9 自定义UI 专用量(云台提供,底盘本地没有) ---- */
|
||||
volatile float ctoc_ui_pitch_deg = 0.0f;
|
||||
volatile float ctoc_ui_fric_l_rpm = 0.0f;
|
||||
volatile float ctoc_ui_fric_r_rpm = 0.0f;
|
||||
volatile uint8_t ctoc_ui_spin_flag = 0;
|
||||
volatile uint32_t ctoc_ui_last_tick = 0;
|
||||
|
||||
/* 0x1A9 帧新鲜判定(两板公共:底盘跟随用它门控,云台留作诊断) */
|
||||
uint8_t ctoc_att_fresh(void)
|
||||
{
|
||||
@@ -179,11 +186,26 @@ static void c_comm_rx_0x1a9(uint32_t std_id, const uint8_t rx_data[8], uint32_t
|
||||
ctoc_att_last_tick = HAL_GetTick();
|
||||
}
|
||||
|
||||
/* 0x1B9 云台->底盘:自定义UI 需要而底盘本地没有的量
|
||||
* [0..1] pitch(0.01°) [2..3] 左摩擦轮(rpm/100) [4..5] 右摩擦轮(rpm/100)
|
||||
* [6] bit0=小陀螺使能 */
|
||||
static void c_comm_rx_0x1b9(uint32_t std_id, const uint8_t rx_data[8], uint32_t dlc)
|
||||
{
|
||||
(void)std_id;
|
||||
(void)dlc;
|
||||
ctoc_ui_pitch_deg = (float)(int16_t)(((uint16_t)rx_data[1] << 8) | rx_data[0]) * 0.01f;
|
||||
ctoc_ui_fric_l_rpm = (float)(int16_t)(((uint16_t)rx_data[3] << 8) | rx_data[2]) * 100.0f;
|
||||
ctoc_ui_fric_r_rpm = (float)(int16_t)(((uint16_t)rx_data[5] << 8) | rx_data[4]) * 100.0f;
|
||||
ctoc_ui_spin_flag = rx_data[6] & 0x01;
|
||||
ctoc_ui_last_tick = HAL_GetTick();
|
||||
}
|
||||
|
||||
void c_comm_init(void)
|
||||
{
|
||||
can_rx_register(&hcan2, CTOC_SLAVE_ID1, c_comm_rx_0x149);
|
||||
can_rx_register(&hcan2, CTOC_SLAVE_ID2, c_comm_rx_0x189);
|
||||
can_rx_register(&hcan2, CTOC_SLAVE_ID3, c_comm_rx_0x1a9);
|
||||
can_rx_register(&hcan2, CTOC_SLAVE_ID4, c_comm_rx_0x1b9);
|
||||
}
|
||||
|
||||
void c_comm_slave_send(uint8_t motor_fault)
|
||||
|
||||
Reference in New Issue
Block a user