feat: add 0xA9 feedforward frame and wire feedforward controller to motor output
- host 0xA9 frame → master_machine decode → robot_cmd publish via gimbal_feedforward topic → gimbal subscribe → yaw_motor.feed_input - add DM_Feedforward_Controller_s with Kp and feed_input fields - add feedforward term (Kp * feed_input) to motor control output - add DM_Feedforward_Kp to motor init config
This commit is contained in:
@@ -62,6 +62,13 @@ static void DecodeVision()
|
||||
memcpy(&vision_data.motor_pitch_Kd, p, 4);
|
||||
vision_data.debug_updated = 1;
|
||||
}
|
||||
else if (sof == VISION_SOF_FEEDFORWARD && len == VISION_FEEDFORWARD_LEN)
|
||||
{
|
||||
if (calc_checksum(buf, VISION_FEEDFORWARD_LEN) != buf[VISION_FEEDFORWARD_LEN - 1])
|
||||
return;
|
||||
memcpy(&vision_data.feedforward, buf + 1, 4);
|
||||
vision_data.feedforward_updated = 1;
|
||||
}
|
||||
else if (sof == VISION_SOF_CMD && len == VISION_CMD_LEN)
|
||||
{
|
||||
if (calc_checksum(buf, VISION_CMD_LEN) != buf[VISION_CMD_LEN - 1])
|
||||
|
||||
@@ -31,18 +31,24 @@
|
||||
* [motor_pitch_Kp:4][motor_pitch_Ki:4][motor_pitch_Kd:4][checksum:1]
|
||||
* 全部 float, 依次为视觉环 yaw/pitch 和电机角度环 yaw/pitch 的 PID 参数
|
||||
*
|
||||
* ---- 前馈输入帧 0xA9 (6 字节) ----
|
||||
* [SOF:0xA9][feedforward:4][checksum:1]
|
||||
* feedforward: float, 前馈输入值
|
||||
*
|
||||
* checksum: 帧头到数据末尾前一字节累加和取低8位
|
||||
*/
|
||||
|
||||
#define VISION_SOF_AUTO 0xA5
|
||||
#define VISION_SOF_MANUAL 0xA6
|
||||
#define VISION_SOF_CMD 0xA7
|
||||
#define VISION_SOF_DEBUG 0xA8
|
||||
#define VISION_SOF_DEBUG 0xA8
|
||||
#define VISION_SOF_FEEDFORWARD 0xA9
|
||||
|
||||
#define VISION_AUTO_LEN 18
|
||||
#define VISION_MANUAL_LEN 10
|
||||
#define VISION_CMD_LEN 3
|
||||
#define VISION_DEBUG_LEN 50
|
||||
#define VISION_AUTO_LEN 18
|
||||
#define VISION_MANUAL_LEN 10
|
||||
#define VISION_CMD_LEN 3
|
||||
#define VISION_DEBUG_LEN 50
|
||||
#define VISION_FEEDFORWARD_LEN 6
|
||||
|
||||
/* 命令码 */
|
||||
#define VISION_CMD_SWITCH_AUTO 0x01
|
||||
@@ -80,6 +86,10 @@ typedef struct
|
||||
float motor_pitch_Kp, motor_pitch_Ki, motor_pitch_Kd;
|
||||
uint8_t debug_updated;
|
||||
|
||||
/* 前馈输入 */
|
||||
float feedforward;
|
||||
uint8_t feedforward_updated;
|
||||
|
||||
/* 命令 */
|
||||
uint8_t cmd; // 最新命令码
|
||||
uint8_t cmd_pending; // 有待处理命令标志
|
||||
|
||||
Reference in New Issue
Block a user