| 问题 | 说明 | 改进方向 |
|---|---|---|
| 插值时间固定 | 0.3 s 对小速度变化(如 0.05→0)也走完整 S 曲线,可能显得"迟钝" | 动态插值时间:根据速度差 |Δv| 自适应调整 accel_time |
| 无紧急制动 | 按 k 停止也是 0.3 s 减速,不是立即归零 |
单独增加"急停"逻辑,绕过 S 曲线直接归零 |
| 键盘无并发 | 不支持同时按 w 和 a(对角前进),因为 read(1) 只读单字符 |
改用 select + 多键位状态机 |
| 循环频率不稳 | spin_once + select 的组合实际周期可能有抖动 |
引入定时器锁相,或改用 MultiThreadedExecutor |
本项目目的是从零理解导航闭环,而非调用现成框架。A* 规划器、PI 控制器、差速模型全部手写,便于理解数据流与控制逻辑。后续如需生产级导航,可平滑迁移至 Nav2。
差速底盘航向控制中,微分项对噪声敏感(Gazebo 里程计有抖动),且角速度本身已是"速度"概念,微分意义不大。PI 足够消除稳态误差,同时避免高频噪声放大。
梯形规划加速度突变,在仿真中会导致轮速指令跳变,Gazebo 关节约束下易产生滑移。五次多项式 S 曲线起点/终点加速度为 0,力矩连续,更适合仿真环境。
| 参数 | 初始值 | 最终值 | 调整原因 |
|---|---|---|---|
kp |
1.5 | 2.5 | 初始响应太慢,转向迟钝 |
ki |
0.5 | 0.3 | 积分过高导致航点附近振荡 |
integral_separation_threshold |
0.1 rad | 0.2 rad | 阈值过小,积分频繁启停 |
position_tolerance |
0.1 m | 0.15 m | 容差过小导致在航点附近反复调整 |
accel_time |
0.5 s | 0.3 s | 加速太慢,键盘手感迟滞 |