Files
Chassis/project/code/Command.h
T
SkyLiCoder 022e3424da 实现完整串口指令协议:模式切换、手动控制、PID在线调参
- 新增 PIDClear() 仅清运行时状态,保留 Kp/Ki/Kd 等配置
- 命令帧 0xA7 (3B): 自动/手动/调试三模式切换,带模式状态追踪
- 手动控制帧 0xA6 (8B): 解析 motor_speed_base(int16) + angle_velocity(float)
- 调试调参帧 0xA8 (38B): 在线更新全部9个 Kp/Ki/Kd 参数
- Command 解析纳入 Task_50ms (20Hz) 定时执行
- 添加通信协议文档 docs/通信协议.md
2026-06-07 16:23:10 +08:00

45 lines
1.5 KiB
C

#ifndef __COMMAND_H
#define __COMMAND_H
#define COMMAND_FIFO_BUFFER_SIZE 64
#include "zf_common_typedef.h"
/*
---- 手动控制数据帧 0xA6 (10 字节) ----
[SOF:0xA6][motor_speed_base:2][angle_velocity:4][checksum:1]
motor_speed_base:int16_t 基础直行速度
angle_velocity:float 角度速率,单位度每秒
手动控制数据帧只有在手动模式下才起作用,其他模式不起作用
---- 命令帧 0xA7 (3 字节) ----
[SOF:0xA7][cmd:1][checksum:1]
cmd: 0x01=自动模式, 0x02=手动模式, 0x03=调试模式
---- 调试调参帧 0xA8 (x 字节) ----
包括左右电机速度环KpKiKd、角度环KpKiKd、位置环KpKiKd
调试调参帧只有在调试模式下才起作用,其他模式不起作用
*/
#define COMMAND_SOF_MANUAL 0xA6
#define COMMAND_SOF_MODE 0xA7
#define COMMAND_SOF_DEBUG 0xA8
#define COMMAND_MANUAL_LEN 8 // SOF(1)+motor_speed_base(2)+angle_velocity(4)+checksum(1)
#define COMMAND_MODE_LEN 3 // SOF(1)+cmd(1)+checksum(1)
#define COMMAND_DEBUG_LEN 38 // SOF(1)+9*4(KpKiKd)+checksum(1)
void command_init();
void command_task();
void command_send_angle_velocity(float* pointer_angle_velocity);
/* 工作模式 */
typedef enum
{
COMMAND_MODE_AUTO = 0, // 自动
COMMAND_MODE_MANUAL = 1, // 手动
COMMAND_MODE_DEBUG = 2, // 调试
} Vision_Mode_e;
extern volatile Vision_Mode_e current_mode;
void SwitchToAutoMode();
void SwitchToManualMode();
void SwitchToDebugMode();
#endif