Files
ASER/App/robot_params.h
2026-04-12 16:21:49 +08:00

588 lines
24 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* @file robot_params.h
* @brief ARES 机器人全局参数配置中心
*
* ============================================
* 实车调参前必读
* ============================================
* 1. 所有长度单位默认为 米 (m),角度为 弧度 (rad),速度为 m/s
* 2. 带"实测"标记的参数必须用卷尺/编码器实际测量后填写
* 3. 带"调优"标记的参数需要根据实车运行效果从小往大调整
* 4. 修改本文件后需要重新编译烧录
*
* 调参顺序建议:
* P0: 几何参数 (传感器位置、轮子尺寸) -> 必须实测
* P1: 里程计参数 -> 实车跑 10 米对比编码器/实际距离
* P2: 走廊滤波器 -> 从保守值开始逐步调优
* P3: 控制器增益 -> 实车走廊测试,从低增益开始
* P4: 安全阈值 -> 根据实际场地微调
*/
#ifndef ROBOT_PARAMS_H
#define ROBOT_PARAMS_H
#include <stdint.h>
#include <stdbool.h>
#ifdef __cplusplus
extern "C" {
#endif
/* =========================================================
* 【P0】机械/几何参数 (必须实测,开机前填写!)
* ========================================================= */
/* ------------------- 车体几何 ------------------- */
/** @brief [实测] 车体外轮廓宽度 [m] (左右方向,含外壳)
* 测量方法:卷尺测量车体最宽处
* 典型值20cm -> 0.20
* 用途:侧向安全裕量计算,传感器偏移补偿
*/
#define PARAM_ROBOT_WIDTH 0.200f
/** @brief [实测] 车体外轮廓长度 [m] (前后方向,含外壳)
* 测量方法:卷尺测量车体最长处
* 典型值20cm -> 0.20
* 用途:前后安全距离补偿
*/
#define PARAM_ROBOT_LENGTH 0.200f
/** @brief [实测] 驱动轮标称直径 [m]
* 测量方法:卷尺测量轮胎外径 (非轮毂)
* 典型值60mm 轮胎 -> 0.060
*/
#define PARAM_WHEEL_DIAMETER 0.080f
/** @brief [实测] 左右轮中心距 [m]
* 测量方法:卷尺测量左右驱动轮中心之间的距离
* 典型值:车体 20cm 宽,轮胎每边厚 3cm -> 约 0.14m
*/
#define PARAM_WHEEL_TRACK 0.130f
/** @brief [实测] 同侧前后 VL53L0X 雷达纵向间距 [m]
* 测量方法:卷尺测量同侧前后两个 VL53L0X 的中心距离
* 典型值:根据机械安装,约 0.10~0.15m
* 影响:航向观测精度 z_eth = atan2((d_back-d_front), L_s)
*/
#define PARAM_SENSOR_BASE_LENGTH 0.0755f
/** @brief [实测] 比赛走廊标准宽度 [m]
* 测量方法:卷尺测量赛场垄沟实际宽度 (规则 40cm允许±5% 误差)
* 典型值0.40 (但建议实测后填写)
*/
#define PARAM_CORRIDOR_WIDTH 0.40f
/** @brief [实测] 前向激光雷达安装中心偏置 [m]
* 测量方法:雷达发射面到车头最前端的距离 (内缩为正)
* 典型值:根据机械安装,若与车头齐平则为 0
* 用途:前向到端距离补偿 d_body_front = d_sensor - offset
* 注意:这里定义的是传感器到车头前缘的距离,不是到几何中心
*/
#define PARAM_FRONT_LASER_OFFSET 0.0f
/** @brief [实测] 后向激光雷达安装中心偏置 [m]
* 测量方法:雷达发射面到车尾最后端的距离 (内缩为正)
* 典型值:根据机械安装,若与车尾齐平则为 0
* 用途:后向到端距离补偿 d_body_rear = d_sensor - offset
*/
#define PARAM_REAR_LASER_OFFSET (-(0.018f))
/** @brief [实测] 侧向 VL53L0X 传感器内缩距离 [m]
* 测量方法VL53L0X 发射面到车体侧面最外边缘的距离 (向内为正)
* 典型值:传感器与外壳齐平则为 0嵌入 1cm 则为 0.01
* 用途侧向测距补偿d_actual_to_wall = d_sensor - sensor_inset
* 即传感器测到的距离减去这个内缩量才是车体边缘到墙的真实距离
* ⚠ 极其重要沟道40cm - 车体20cm = 每边仅10cm1cm的偏差就是10%的误差!
* 注意:此值作为未分侧设置时的默认值。建议使用下面的分侧参数。
*/
#define PARAM_VL53_SIDE_INSET (-(0.018f))
/** @brief [改进A][实测] 左侧 VL53L0X 传感器内缩距离 [m]
* 测量方法:将机器人精确放在走廊正中央(卷尺确认)
* 理论值 = (走廊宽-车宽)/2 = (0.40-0.20)/2 = 0.10m
* left_inset = 理论值 - 实测左侧前后平均读数
* 用途:消除左右安装不对称引起的系统性横向偏置(解决"持续偏右/偏左"问题)
* ⚠ 标定后请填入实测值!当前为 0.0 表示未标定。
*/
#define PARAM_VL53_LEFT_INSET 0.0f
/** @brief [改进A][实测] 右侧 VL53L0X 传感器内缩距离 [m]
* 测量方法同上right_inset = 理论值 - 实测右侧前后平均读数
* ⚠ 标定后请填入实测值!当前为 0.0 表示未标定。
*/
#define PARAM_VL53_RIGHT_INSET 0.0f
/** @brief [调优] 侧向 VL53 近墙退化阈值 [m]
* 含义:当侧向 VL53 读数小于该值时,认为已进入最小量程附近,数据不再可信。
* 处理策略:预处理层直接将该侧观测判为无效,让上层退化为主要信另一侧。
* 典型值0.05~0.06
*/
#define PARAM_VL53_SIDE_SAT_NEAR_M 0.03f
/* ------------------- 编码器参数 ------------------- */
/** @brief [实测] 编码器每转脉冲数 (CPR)
* 测量方法:查阅 F407 固件配置,或实车转动一圈数脉冲
* 典型值500 (F407 默认固件)
*/
#define PARAM_ENCODER_CPR 3680
/* =========================================================
* 【P1-EXT】VL53 驱动切换
* ========================================================= */
/** @brief 侧向 ToF 驱动选择
* 0 = VL53L0X
* 1 = VL53L1X
*/
#ifndef PARAM_VL53_USE_L1X
#define PARAM_VL53_USE_L1X 1
#endif
/* =========================================================
* 【P1】里程计参数 (实车标定)
* ========================================================= */
/** @brief [调优] 里程计过程噪声 [m²/s²]
* 含义:对里程计信任程度,越小越信任
* 调优方法:实车直线跑 10 米,对比 EKF 输出的 s 与实际距离
* 典型值0.01~0.1
* 过大EKF 过度依赖里程计,轮滑时误差累积
* 过小EKF 不信任里程计,沿程 s 估计不准
*/
#define PARAM_ODOM_PROCESS_NOISE 0.1f
/** @brief [调优] 里程计速度低通滤波系数
* 含义alpha=0.8 表示新采样占 20%,历史值占 80%
* 典型值0.7~0.9
*/
#define PARAM_ODOM_LOWPASS_ALPHA 0.8f
/* =========================================================
* 【P2】走廊 EKF 滤波器参数 (调优)
* ========================================================= */
/* --- EKF 过程噪声 Q (对模型信任度) --- */
/** @brief [调优] 横向偏差 e_y 过程噪声方差 [m²]
* 含义:横向状态的自然发散速度,越小表示横向越稳定
* 调优方法:从 0.001 开始,逐步增大直到走廊跟踪平滑
* 典型值0.001~0.02
* 过大EKF 认为横向很不稳定,过度依赖观测 -> 震荡
* 过小EKF 不信任观测,响应慢
*/
#define PARAM_EKF_Q_EY 0.02f
/** @brief [调优] 航向偏差 e_th 过程噪声方差 [rad²]
* 含义:航向状态的自然发散速度
* 调优方法IMU 短时漂移小,可以设很小
* 典型值0.0001~0.005
* 过大EKF 认为航向不稳定IMU 作用被削弱
* 过小EKF 过度信任 IMU雷达观测不起作用
*/
#define PARAM_EKF_Q_ETH 0.002f
/** @brief [调优] 沿程进度 s 过程噪声方差 [m²]
* 含义:里程估计的不确定度
* 调优方法:地毯轮滑严重时调大
* 典型值0.05~0.2
*/
#define PARAM_EKF_Q_S 0.1f
/** @brief [改进] 横向-航向耦合过程噪声 [m·rad]
* 含义e_y 和 e_th 的动力学耦合强度
* 物理意义:横向偏差会导致航向修正,航向偏差会导致横向漂移
* 调优方法:从 0 开始,如果发现横向和航向震荡相关可适当增大
* 典型值0~0.005
* 设为 0 则退化为对角 Q 矩阵
*/
#define PARAM_EKF_Q_EY_ETH 0.0f
/* --- EKF 观测噪声 R (对传感器信任度) --- */
/** @brief [调优] 横向观测噪声方差 [m²]
* 含义VL53L0X 测距的可靠程度
* [改进B] 从 0.002 提高到 0.015,适配 VL53 可信度不高的实际表现
* 调优方法VL53 噪声越大,此值越大
* 典型值0.005~0.02
* 过大EKF 不信任侧向雷达,横向响应慢
* 过小EKF 过度信任雷达,对跳变敏感
*/
#define PARAM_EKF_R_EY 0.007f
/** @brief [调优] 航向观测噪声方差 [rad²]
* 含义:同侧前后雷达差分测角的可程靠度
* 调优方法:从 0.001 开始
* 典型值0.0005~0.003
*/
#define PARAM_EKF_R_ETH 0.001f
/** @brief [调优] IMU 航向观测噪声方差 [rad²]
* 含义IMU yaw 作为 EKF 航向观测时的噪声
* [改进C] 从 0.01 降低到 0.002,充分利用 IMU yaw 的高精度。
* IMU 是航向 e_th 的唯一观测源侧墙航向已取消R 值应小。
* 调优方法IMU yaw 越稳定,此值可越小
* 典型值0.001~0.01
* 过大IMU 航向观测作用弱e_th 靠 wz 积分漂移
* 过小IMU 航向主导过强,短时抖动可能传入
*
* [修正] 如果场地本身是歪的过度信任IMU会导致车持续擦墙
* 增加到0.01让EKF更多依赖VL53传感器判断相对航向
*/
#define PARAM_EKF_R_ETH_IMU 0.01f
/* --- EKF 初始状态 --- */
/** @brief [调优] e_y 初始不确定度 [m²]
* 含义:开机时横向位置的先验不确定度
* 典型值0.01~0.1 (对应 10~30cm 不确定)
*/
#define PARAM_EKF_P0_EY 0.1f
/** @brief [调优] e_th 初始不确定度 [rad²]
* 含义:开机时航向的先验不确定度
* 典型值0.05~0.2 (对应 13°~26°不确定)
*/
#define PARAM_EKF_P0_ETH 0.1f
/* --- χ² 检验门限 (鲁棒拒绝) --- */
/** @brief [固定] 1 自由度 χ² 检验门限 (95% 置信度)
* 含义:单路观测的马氏距离超过此值则拒绝
* 理论值3.84 (95%), 6.63 (99%)
* 建议:不要修改,除非传感器质量极差
*/
#define PARAM_CHI2_1DOF 3.84f
/** @brief [固定] 2 自由度 χ² 检验门限 (95% 置信度)
* 理论值5.99
*/
#define PARAM_CHI2_2DOF 5.99f
/* =========================================================
* 【P3】走廊控制器参数 (实车调优)
* ========================================================= */
/** @brief [调优] 航向比例增益 kp_theta [1/s]
* 含义:航向偏差 1 rad 时产生的角速度
* 调优方法:从 0.5 开始逐步增加,直到走廊跟踪响应快但不震荡
* 典型值1.0~3.0
* 过大:车头左右摆动 (震荡)
* 过小:纠偏太慢,容易撞墙
*/
#define PARAM_CTRL_KP_THETA 2.5f /* 适度增加,提高航向纠偏速度 */
/** @brief [调优] 航向微分增益 kd_theta [s]
* 含义IMU 角速度阻尼项,抑制车头转动速度
* 调优方法:从 0.05 开始
* 典型值0.05~0.2
* 过大:车头转动被过度抑制,响应迟钝
* 过小:阻尼不足,容易超调震荡
*/
#define PARAM_CTRL_KD_THETA 0.4f
/** @brief [调优] 横向比例增益 kp_y [1/(m·s)]
* 含义:横向偏差 1m 时产生的角速度修正
* 调优方法:从 1.0 开始
* 典型值1.5~4.0
* 过大:横向纠偏过猛,引起震荡
* 过小:偏了拉不回来
*/
#define PARAM_CTRL_KP_Y 7.0f /* 提高横向回中速度,适配更高巡航速度 */
/** @brief [调优] 走廊巡航速度 [m/s]
* 含义:走廊内正常行驶速度
* 调优方法:从 0.1 m/s 开始逐步增加
* 典型值0.15~0.4 m/s
* 注意:速度越高,对滤波器带宽和控制器增益要求越高
*/
#define PARAM_CTRL_V_CRUISE 0.15f
/** @brief [调优] 角速度输出限幅 [rad/s]
* 含义:最大允许转角速度
* 典型值1.0~2.0 (约 57°/s ~ 115°/s)
*/
#define PARAM_CTRL_W_MAX 1.5f
/** @brief [调优] 线速度输出限幅 [m/s]
* 含义:最大允许线速度
* 典型值0.3~0.5
*/
#define PARAM_CTRL_V_MAX 0.3f
/** @brief [调优] 弯道减速系数 [0~1]
* 含义:角速度大时线速度打折程度
* 公式v = v_cruise * (1 - k * |w/w_max|)
* 典型值0.3~0.5
*/
#define PARAM_CTRL_SPEED_REDUCTION 0.4f
/** @brief [调优] 弯道减速死区 [0~1]
* 含义:当 |w|/w_max 小于该比例时,不做减速。
* 目的:小幅修正时保持巡航,不要长期因为轻微纠偏而慢速运行。
*/
#define PARAM_CTRL_SPEED_RED_DB 0.35f
/** @brief [调优] 角速度变化率限幅 [rad/s^2]
* 含义:限制相邻控制周期之间角速度变化,防止一帧突然猛打方向。
*/
#define PARAM_CTRL_W_SLEW_RATE 6.0f
/** @brief [调优] 入沟软启动距离 [m]
* 含义:进入沟内后的前一小段距离,降低回中力度,避免一入沟就猛打一把。
*/
#define PARAM_CTRL_STARTUP_DIST 0.15f
/** @brief [调优] 入沟起始横向增益缩放 [0~1]
* 含义state->s=0 时 kp_y 的缩放比例,随后随距离线性恢复到 1。
*/
#define PARAM_CTRL_STARTUP_KPY_SCALE 0.45f
/** @brief [调优] 入沟起始角速度限幅缩放 [0~1]
* 含义state->s=0 时 w_max 的缩放比例,随后随距离线性恢复到 1。
*/
#define PARAM_CTRL_STARTUP_W_SCALE 0.45f
/** @brief [调优] 出沟检测距离 [m]
* 含义:前激光小于此值时禁用左右激光控制,避免出沟时数据突变导致大幅转向
* 典型值0.40 (40cm)
* 过大:提前禁用控制,可能导致出沟前偏离
* 过小:禁用太晚,出沟时仍可能受左右激光突变影响
*/
#define PARAM_CTRL_EXIT_FRONT_DIST 0.40f
/** @brief [调优] 近墙脱离阈值 [m]
* 含义:任一侧平均距离小于此值时,直接叠加远离墙面的保护转向
* 目的:不等 EKF 慢慢回中,先把车从擦墙状态拉开
*/
#define PARAM_CTRL_WALL_ESCAPE_DIST 0.05f
/** @brief [调优] 近墙脱离增益 [rad/s per m]
* 含义:近墙保护的附加角速度增益
*/
#define PARAM_CTRL_WALL_ESCAPE_KP 6.0f
/** @brief [调优] 近墙脱离角速度限幅 [rad/s]
* 含义:近墙保护项自身的最大角速度,避免一把打太猛
*/
#define PARAM_CTRL_WALL_ESCAPE_WMAX 0.25f
/* =========================================================
* 【P4】安全阈值与状态机参数
* ========================================================= */
/* --- 到端检测 --- */
/** @brief [调优] 前向停车距离阈值 [m]
* 含义:前向雷达 (传感器到墙的距离) 低于此值强制停车
* 计算方法PARAM_FRONT_LASER_OFFSET (传感器内缩) + 安全裕量 (2~5cm)
* 示例:传感器与车头齐平(offset=0) + 3cm安全裕量 = 0.03m
* 传感器内缩5cm(offset=0.05) + 3cm安全裕量 = 0.08m
* ⚠ 此阈值应 >= PARAM_FRONT_LASER_OFFSET否则传感器到墙的距离
* 还没到阈值,车体前端就已经撞墙了!
* 过小:可能撞墙
* 过大:离墙很远就停车,走不完走廊
*/
#define PARAM_SAFE_D_FRONT_STOP 0.10f
/** @brief [调优] 前向减速预警距离 [m]
* 含义:前向雷达低于此值开始线性减速
* 典型值0.20~0.40
*/
#define PARAM_SAFE_D_FRONT_APPROACH 0.25f
/** @brief [调优] 减速区最低速度 [m/s]
* 含义:到端前爬行速度
* 典型值0.03~0.08
*/
#define PARAM_SAFE_APPROACH_MIN_V 0.05f
/* --- 置信度降级 --- */
/** @brief [调优] E-Stop 置信度阈值
* 含义EKF 置信度低于此值触发紧急停车
* 典型值0.05~0.15
*/
#define PARAM_SAFE_CONF_ESTOP 0.1f
/** @brief [调优] 单侧退化置信度
* 含义:单侧 VL53L0X 失效时,置信度降为多少
* 典型值0.6~0.8
*/
#define PARAM_SAFE_CONF_DEGRADED 0.7f
/* --- 入口/退出 --- */
/** @brief [调优] 入口对准速度 [m/s]
* 含义:从启动区进入走廊的慢速对准速度
* 典型值0.05~0.10
*/
#define PARAM_SCRIPT_ENTRY_V 0.08f
/** @brief [调优] 入口对准超时 [ms]
* 含义:超过此时间强制进入走廊模式 (保护)
* 典型值20000~40000 (20~40 秒)
*/
#define PARAM_SCRIPT_ENTRY_TIMEOUT 30000U
/** @brief [调优] 原地转向角速度 [rad/s]
* 含义:到端 180 度转向的角速度
* 典型值0.8~1.5
*/
#define PARAM_SCRIPT_TURN_OMEGA 1.0f
/** @brief [调优] 退出场地后冲距离 [m]
* 含义:检测到离开垄沟后再往前冲的距离
* 典型值1.5~2.5
*/
#define PARAM_SCRIPT_EXIT_RUNOUT 2.0f
/** @brief [调优] 退出场地直线冲出速度 [m/s]
* 含义:检测到离开垄沟后直线冲出的速度
* 典型值0.3~0.5
* 注意:与 turn_omega (转向角速度) 无关,两者独立
*/
#define PARAM_SCRIPT_EXIT_V 0.3f
/* =========================================================
* 【P5】传感器驱动参数
* ========================================================= */
/* --- VL53L0X --- */
/** @brief [实测] VL53L0X 测距预算 [μs]
* 含义:单次测距的时间预算,越大精度越高但频率越低
* 选项20000(20ms, 高速), 33000(33ms), 100000(100ms), 200000(200ms, 高精度)
* 典型值33000 (33ms折中)
* 调优:本车实测稳定上限按 33ms 配置,若噪声偏大再逐步提高
*/
#define PARAM_VL53_TIMING_BUDGET 33000U
/** @brief [调试] 是否启用 VL53L0X 端EMA滤波
* 1: 使用滤波后的 range_mm_filtered
* 0: 直接输出原始测距到 range_mm_filtered便于做 A/B 对比
*/
#define PARAM_VL53_USE_EMA_FILTER 0
/** @brief [调优] VL53L0X EMA滤波平滑系数 alpha
* 含义:新测量值的权重 (0.0~1.0)
* - 越大响应越快,延迟越低,但抖动越大
* - 越小输出越平滑,但延迟越高
* 典型值:
* 0.3 - 平滑优先 (延迟约100ms)
* 0.4 - 折中 (延迟约60ms推荐)
* 0.5 - 快速响应 (延迟约40ms)
* 0.6 - 极速响应 (延迟约25ms抖动较大)
*/
#define PARAM_VL53_EMA_ALPHA 0.6f
/* --- IMU --- */
/** @brief [实测] HWT101 IMU 安装偏置 (航向) [rad]
* 含义IMU 零位与车头方向的偏差
* 测量:车头对准正北,读取 IMU 航向作为偏置
* 典型值:需要通过校准确定
*/
#define PARAM_IMU_YAW_OFFSET 0.0f
/* =========================================================
* 【P6】赛道级导航参数 (混合导航方案)
* ========================================================= */
/** @brief 编译开关1=赛道模式(6沟S型遍历) 0=单沟测试模式(原nav_script) */
#define USE_GLOBAL_NAV 1
/** @brief 上电后导航启动延迟 [ms]
* 用于等待 IMU 清零、VL53 连续测距和前后激光任务稳定,
* 避免刚上电时用到脏数据导致错误入场或异常转向。
*/
#define PARAM_NAV_STARTUP_DELAY_MS 5000U
/** @brief 导航主循环周期 [ms]
* 保留为参数形式,当前使用 20ms与 411 稳定版本一致。
*/
#define PARAM_NAV_TASK_PERIOD_MS 20U
/* --- 入场段 --- */
/* 启动区入口(Y=40)距第一条垄沟(Y=36~39)极近,入场距离仅约 10~40cm */
#define PARAM_GNAV_ENTRY_V 0.08f /* m/s — 入场速度 (沿左端纵向通道向北) */
#define PARAM_GNAV_ENTRY_DISTANCE 0.30f /* m — 入场里程上限 (启动区到C1入口约10~30cm) */
#define PARAM_GNAV_ENTRY_TIMEOUT 10000U /* ms — 入场超时 */
/* --- 转向 --- */
#define PARAM_GNAV_TURN_OMEGA 1.0f /* rad/s — 转向角速度 */
#define PARAM_GNAV_TURN_TOLERANCE 0.052f /* rad — 转向完成容差 (~3°) */
#define PARAM_GNAV_TURN_DECEL_ZONE 0.70f /* rad — 接近目标时减速区 (~40°) */
#define PARAM_GNAV_TURN_MIN_OMEGA 0.18f /* rad/s — 减速区最低角速度 */
#define PARAM_GNAV_TURN_TIMEOUT 8000U /* ms — 单次转向超时 */
/* --- 重捕获 --- */
#define PARAM_GNAV_REACQUIRE_V 0.1f /* m/s — 重捕获入沟速度 */
#define PARAM_GNAV_REACQUIRE_CONF 0.4f /* — 重捕获置信度阈值从0.6降到0.4,更容易成功) */
#define PARAM_GNAV_REACQUIRE_WIDTH_TOL 0.08f /* m — 走廊宽度容差从5cm放宽到8cm */
#define PARAM_GNAV_REACQUIRE_MIN_ODOM 0.06f /* m — 最小入沟里程,快捕获后尽快停车 */
#define PARAM_GNAV_REACQUIRE_TICKS 5 /* 拍 — 连续确认次数,取更稳的 100ms */
#define PARAM_GNAV_REACQUIRE_TIMEOUT 5000U /* ms — 重捕获超时 */
/* --- 对齐 --- */
#define PARAM_GNAV_ALIGN_KP_TH 2.0f /* — 对齐航向P增益 (rad/s per rad) */
#define PARAM_GNAV_ALIGN_KP_Y 4.0f /* — 对齐横向P增益 (rad/s per m) */
#define PARAM_GNAV_ALIGN_TH_TOL 0.05f /* rad — 对齐航向容差 (~3°) */
#define PARAM_GNAV_ALIGN_Y_TOL 0.02f /* m — 对齐横向容差 (2cm) */
#define PARAM_GNAV_ALIGN_TICKS 5 /* 拍 — 对齐确认次数 (5×20ms=100ms) */
#define PARAM_GNAV_ALIGN_TIMEOUT 3000U /* ms — 对齐超时 */
#define PARAM_GNAV_REACQUIRE_MIN_BACK 0.38f /* m — 重捕获最小后激光距离,判断是否真正进沟 */
/* --- 沟内 --- */
#define PARAM_GNAV_CORRIDOR_MAX_LEN 2.70f /* m — 沟内里程保护上限 */
#define PARAM_GNAV_CORRIDOR_END_DIST 0.10f /* m — 到端检测距离 */
/* --- 连接段 --- */
/* 在纵向端部通道里北行,从一条垄沟入口到下一条入口,距离=垄沟宽40cm+垄背宽30cm=70cm */
#define PARAM_GNAV_LINK_V 0.10f /* m/s — 连接段速度 (纵向通道内IMU航向保持) */
#define PARAM_GNAV_LINK_DISTANCE 0.70f /* m — 连接段标称距离 (沟间距中心到中心) */
#define PARAM_GNAV_LINK_TIMEOUT 8000U /* ms — 连接段超时 */
#define PARAM_GNAV_LINK_GAP_RUNOUT 0.08f /* m — 看到下一个沟口后继续前冲距离 */
#define PARAM_GNAV_LINK_WALL_TARGET 0.10f /* m — 连接段最小离墙距离小于10cm才触发保底修正 */
#define PARAM_GNAV_LINK_WALL_KP 3.0f /* — 连接段离墙保底增益 */
#define PARAM_GNAV_LINK_WALL_HEADING_KP 1.2f /* — 连接段单边墙平行修正增益 */
#define PARAM_GNAV_LINK_WALL_BLEND 0.5f /* — 预留给其他通道状态,连接段本身不再使用融合 */
/* --- 出场 --- */
/* C6完成后在左端通道左转朝南沿纵向通道南行回到入口距离约390cm */
#define PARAM_GNAV_EXIT_V 0.15f /* m/s — 出场速度 (沿左端通道向南) */
#define PARAM_GNAV_EXIT_RUNOUT 1.50f /* m — 出场侧向丢失后冲刺距离 */
#define PARAM_GNAV_EXIT_MAX_DIST 4.50f /* m — 出场里程保护 (通道全长约3.9m) */
#define PARAM_GNAV_EXIT_TIMEOUT 30000U /* ms — 出场超时 (距离长,给足时间) */
/* --- 回停 --- */
#define PARAM_GNAV_DOCK_V 0.05f /* m/s — 回停速度 */
#define PARAM_GNAV_DOCK_DISTANCE 0.50f /* m — 回停推进距离 */
/* --- 航向保持 --- */
#define PARAM_GNAV_HEADING_KP 0.03f /* — — 航向保持P增益 (输入°输出rad/s) */
/* =========================================================
* 宏工具函数
* ========================================================= */
#define PARAM_RAD2DEG(rad) ((rad) * 57.2957795131f)
#define PARAM_DEG2RAD(deg) ((deg) * 0.01745329252f)
/* =========================================================
* 快速参考表
* =========================================================
*
* 调参流程:
* 1. 实测几何参数 (P0 组) -> 卷尺测量
* 2. 里程计标定 (P1 组) -> 跑 10 米对比
* 3. 原地测试控制器 -> 只调 kp_theta, kd_theta
* 4. 走廊低速测试 -> 调 kp_y, v_cruise
* 5. 逐步提速 -> 微调各增益
* 6. 安全阈值 -> 根据实际场地
*
* 常见问题诊断:
* 车头左右摆 -> 减小 kp_theta 或增大 kd_theta
* 横向纠偏慢 -> 增大 kp_y
* 到端刹车不住 -> 减小 d_front_stop 或增大 approach 距离
* 出口冲不出 -> 减小 exit_runout 或增大 v_cruise
* EKF 发散 -> 增大 Q 或减小 R
*
* =========================================================
*/
#ifdef __cplusplus
}
#endif
#endif /* ROBOT_PARAMS_H */