电流环控制,并实现简单的补偿控制,还差参数具体化。
This commit is contained in:
@@ -36,24 +36,66 @@
|
||||
#include "ins.h"
|
||||
#include "bmi088.h"
|
||||
#include "gimbal.h"
|
||||
#include "dr16.h"
|
||||
#include <stdio.h>
|
||||
#include <math.h>
|
||||
#include <string.h>
|
||||
|
||||
/* ===== 2026-10-15 台架调参临时遥测(已停用,保留备查) =====
|
||||
* 启用时把 #if 0 改 #if 1:本任务改为输出 5 列 CSV
|
||||
* setpoint_deg, actual_deg, out_current, ecd_deg, gyro_x_dps
|
||||
* (逗号分隔+换行,可被 Lissio FireWater 自动识别为 5 通道),采样率提到 200Hz,
|
||||
* 用于定量观测阶跃响应与判断"轴是否真的在转动"。 */
|
||||
#if 0
|
||||
#include "robot_param.h"
|
||||
#define DEBUG_PITCH_TUNE 1
|
||||
#if DEBUG_PITCH_TUNE
|
||||
#define DEBUG_OUT_PERIOD_MS 5 /* 200Hz:2ms 控制环的阶跃响应需 ≥100Hz 采样才量得准 */
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* 1-输出健康位(cvg/rdy/imu/an/gn); 0-只输出三个欧拉角 */
|
||||
#define DEBUG_ATT_HEALTH 1
|
||||
#define DEBUG_ATT_HEALTH 0
|
||||
/* 1-再附加原始陀螺/零偏/采样计数(排障用); 0-只留上面的通用健康位 */
|
||||
#define DEBUG_ATT_DIAG 1
|
||||
#define DEBUG_ATT_DIAG 0
|
||||
/* 1-仅输出 Pitch 调参行(便于用 VOFA+/串口示波器绘图); 0-同时输出姿态行与 Pitch 调参行 */
|
||||
#define DEBUG_PITCH_ONLY 0
|
||||
|
||||
/* 输出周期(ms)。姿态观测建议 100ms(10Hz) */
|
||||
#define DEBUG_OUT_PERIOD_MS 100
|
||||
|
||||
void debug_task(void const * argument)
|
||||
{
|
||||
char line[192];
|
||||
char line[384];
|
||||
char tail[112];
|
||||
char pitch_line[128];
|
||||
|
||||
for (;;)
|
||||
{
|
||||
#if 0
|
||||
/* ===== 2026-10-15 台架 Pitch 调参遥测(已停用,保留备查) =====
|
||||
* 5 列 CSV → Lissio FireWater 直接成 5 通道:
|
||||
* setpoint(位置环设定值含台架偏置), actual(-att_deg_roll),
|
||||
* out(最终电流), ecd_deg(编码器机械角), gyro_x_dps(陀螺 x 轴角速度) */
|
||||
const float tune_ecd_deg = ((float)motor_pitch_gimbal.fdb.raw_angle -
|
||||
(float)PITCH_GM6020_ENCODER_ZERO) * (360.0f / 8192.0f);
|
||||
const float tune_gyro_dps = bmi088_gyro[0] * 57.29578f;
|
||||
int len = snprintf(line, sizeof(line), "%.3f,%.3f,%.1f,%.3f,%.2f\n",
|
||||
gimbal_pitch_setpoint_deg(),
|
||||
-att_deg_roll,
|
||||
pitch_current,
|
||||
tune_ecd_deg,
|
||||
tune_gyro_dps);
|
||||
#endif
|
||||
#if DEBUG_PITCH_ONLY
|
||||
/* 仅输出 Pitch 调参数据(编码值、roll、PID最后输出值、遥控pitch杆量) */
|
||||
int len = snprintf(line, sizeof(line),
|
||||
"p_ecd=%u roll=%.2f p_out=%.1f rc_pitch=%u\r\n",
|
||||
(unsigned)motor_pitch_gimbal.fdb.raw_angle,
|
||||
att_deg_roll,
|
||||
pitch_current,
|
||||
(unsigned)dr16.rc_l_UD);
|
||||
#else
|
||||
const float an = sqrtf(bmi088_accel[0] * bmi088_accel[0] +
|
||||
bmi088_accel[1] * bmi088_accel[1] +
|
||||
bmi088_accel[2] * bmi088_accel[2]);
|
||||
@@ -79,9 +121,11 @@ void debug_task(void const * argument)
|
||||
(unsigned)INS.ConvergeFlag, (unsigned)att_ready,
|
||||
(unsigned)bmi088_online, an, gn, tail);
|
||||
#else
|
||||
int len = snprintf(line, sizeof(line), "ecd=%u yaw=%.2f pitch=%.2f roll=%.2f\r\n",
|
||||
(unsigned)motor_yaw_gimbal.fdb.raw_angle,
|
||||
att_deg_yaw, att_deg_pitch, att_deg_roll);
|
||||
int len = snprintf(line, sizeof(line), "%u,%.1f,%u\r\n",
|
||||
(unsigned)motor_pitch_gimbal.fdb.raw_angle,
|
||||
pitch_current,(unsigned)motor_yaw_gimbal.fdb.raw_angle);
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
if (len > 0)
|
||||
|
||||
Reference in New Issue
Block a user