1.0
This commit is contained in:
@@ -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);
|
||||||
|
|
||||||
|
|||||||
@@ -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++;
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user