This commit is contained in:
2026-04-05 11:23:18 +08:00
parent f13d7eb686
commit f829fa6bb7
3 changed files with 18 additions and 31 deletions

View File

@@ -164,11 +164,10 @@ void Chassis_Diagnostics_10ms_Tick(void);
/* /*
* 20ms 周期调用: * 20ms 周期调用:
* - 发送 0x181 状态帧 * - 发送 0x181 状态帧每次20ms
* - 发送 0x182 实际轮速帧 * - 发送 0x200 里程计帧每次20ms
* - 发送 0x183 目标轮速帧 * - 轮流发送 0x182 实际轮速帧 / 0x183 目标轮速帧(各 40ms
* - 发送 0x200 里程计帧 * - 内部每 5 次额外发送 1 次 0x184 通信诊断帧100ms
* - 内部每 5 次额外发送 1 次 0x184 通信诊断帧
*/ */
void CAN_Send_Telemetry_20ms(void); void CAN_Send_Telemetry_20ms(void);

View File

@@ -18,7 +18,7 @@ volatile uint32_t g_dbg_valid_accept = 0U;
/* ================= 机器人底盘物理参数 ================= */ /* ================= 机器人底盘物理参数 ================= */
#define WHEEL_RADIUS_M 0.04f #define WHEEL_RADIUS_M 0.04f
#define WHEEL_TRACK_M 0.30f #define WHEEL_TRACK_M 0.25f
#define PI_F 3.14159265358979323846f #define PI_F 3.14159265358979323846f
/* ================= CAN 协议参数 ================= */ /* ================= CAN 协议参数 ================= */
@@ -929,32 +929,20 @@ void CAN_Send_Telemetry_20ms(void)
/* 状态帧最重要,固定每 20ms 发一次 */ /* 状态帧最重要,固定每 20ms 发一次 */
CAN_Send_StatusFrame(); CAN_Send_StatusFrame();
/* 第二帧轮换发送,避免同一拍挤爆 3 个 TX mailbox */ /* 里程计帧实时性关键,固定每 20ms 发一次 */
switch (s_telem_slot) CAN_Send_OdomFrame();
/* 轮速帧轮换发送,降低瞬时总线负载 */
if (s_telem_slot == 0U)
{ {
case 0: CAN_Send_ActualRpmFrame(); /* 0x182 - 40ms 周期 */
CAN_Send_ActualRpmFrame(); /* 0x182 */ }
break; else
{
case 1: CAN_Send_TargetRpmFrame(); /* 0x183 - 40ms 周期 */
CAN_Send_TargetRpmFrame(); /* 0x183 */
break;
case 2:
CAN_Send_OdomFrame(); /* 0x200 */
break;
default:
s_telem_slot = 0U;
CAN_Send_ActualRpmFrame();
break;
} }
s_telem_slot++; s_telem_slot = 1U - s_telem_slot; /* 在 0 和 1 之间切换 */
if (s_telem_slot >= 3U)
{
s_telem_slot = 0U;
}
/* 通信诊断帧保持 100ms 一次 */ /* 通信诊断帧保持 100ms 一次 */
s_comm_diag_divider++; s_comm_diag_divider++;

View File

@@ -7,11 +7,11 @@
/* 这组只是保守起始值b0 仍建议后续辨识 */ /* 这组只是保守起始值b0 仍建议后续辨识 */
#define LADRC_DEFAULT_WC 12.0f #define LADRC_DEFAULT_WC 12.0f
#define LADRC_DEFAULT_WO 25.0f #define LADRC_DEFAULT_WO 25.0f
#define LADRC_DEFAULT_B0 0.80f #define LADRC_DEFAULT_B0 0.60f
#define LADRC_DEFAULT_OUT_MAX 1000.0f #define LADRC_DEFAULT_OUT_MAX 1000.0f
/* 把目标爬坡放到控制循环内部,避免依赖外部调用频率 */ /* 把目标爬坡放到控制循环内部,避免依赖外部调用频率 */
#define LADRC_TARGET_SLEW_RPM_PER_S 100.0f #define LADRC_TARGET_SLEW_RPM_PER_S 400.0f
static float LADRC_Abs(float x); static float LADRC_Abs(float x);
static float LADRC_Clamp(float x, float min_value, float max_value); static float LADRC_Clamp(float x, float min_value, float max_value);