启动阈值调整

This commit is contained in:
lmx
2025-11-12 13:57:59 +08:00
parent 58ad14691e
commit c88cb70bb1
32 changed files with 153681 additions and 153490 deletions

View File

@ -22,7 +22,7 @@
// 加速度模长与重力的差值大于此值,认为开始运动;降低阈值,让“油门”更灵敏,以便能捕捉到真实的慢速启动
#define START_SKIING_ACC_THRESHOLD 0.5f
// 陀螺仪方差阈值,以允许启动瞬间的正常抖动,但仍能过滤掉混乱的、非滑雪的晃动。
#define SKIING_GYR_VARIANCE_THRESHOLD 20.0f
#define SKIING_GYR_VARIANCE_THRESHOLD 15.0f
// --- 滑雪过程 ---
//加速度 模长,低于此值视为 在做匀速运动
@ -268,7 +268,7 @@ static void update_state_machine(skiing_tracker_t *tracker, const float *acc_dev
case STATIC:
//不break会往下执行判断是否进入非匀速状态
case ROTATING: // 从静止或原地旋转可以启动
if (fabsf(acc_magnitude - G_ACCELERATION) > START_SKIING_ACC_THRESHOLD && gyr_variance < SKIING_GYR_VARIANCE_THRESHOLD) {
if (fabsf(acc_magnitude - G_ACCELERATION) > START_SKIING_ACC_THRESHOLD && gyr_variance > SKIING_GYR_VARIANCE_THRESHOLD) {
tracker->state = NO_CONSTANT_SPEED;
} else if (gyr_magnitude > ROTATION_GYR_MAG_THRESHOLD && acc_variance < ROTATING_ACC_VARIANCE_THRESHOLD) {
tracker->state = ROTATING;
@ -357,7 +357,7 @@ void skiing_tracker_update(skiing_tracker_t *tracker, float *acc_g, float *gyr_d
float acc_horizontal_mag = sqrtf(tracker->acc_world_filtered[0] * tracker->acc_world_filtered[0] +
tracker->acc_world_filtered[1] * tracker->acc_world_filtered[1]);
// --- 根据状态进行计算 ---
if (tracker->state == NO_CONSTANT_SPEED) {
if (tracker->state == NO_CONSTANT_SPEED) { //非匀速
if (acc_horizontal_mag > ACC_DEAD_ZONE_THRESHOLD) {
// 只有当水平加速度足够大时,才进行速度积分
tracker->velocity[0] += tracker->acc_world_filtered[0] * dt;
@ -382,7 +382,7 @@ void skiing_tracker_update(skiing_tracker_t *tracker, float *acc_g, float *gyr_d
//保持上次的速度不变。只更新距离
tracker->distance += tracker->speed * dt;
}else if(tracker->state == WHEEL){ //匀速
}else if(tracker->state == WHEEL){ //转弯
//暂时:保持上次的速度不变。只更新距离
tracker->distance += tracker->speed * dt;
}else{
@ -520,8 +520,8 @@ BLE_send_data_t sensor_processing_task(signed short* acc_data_buf, signed short*
static float gyr_data_dps[3];
// const float delta_time = DELTA_TIME+0.01f;
// const float delta_time = DELTA_TIME + 0.005f;
const float delta_time = DELTA_TIME+0.01f;
const float delta_time = DELTA_TIME + 0.005f;
// const float delta_time = DELTA_TIME;
BLE_send_data_t BLE_send_data;
if (!initialized) {

View File

@ -10,6 +10,9 @@ typedef enum {
ROTATING, // 正在原地旋转
WHEEL, // 转弯
FALLEN, // 已摔倒
TAKING_OFF, // 起跳冲击阶段
IN_AIR, // 空中失重阶段
LANDING, // 落地冲击阶段
STOP_DETECTION, // 停止检测
UNKNOWN // 未知状态
} skiing_state_t;