Closed magicant closed 5 years ago
https://github.com/magicant/bve-autopilot/compare/feature/friction_feedback に実装を置いてみた。
電気ブレーキなしで摩擦のみでブレーキをかけているときにだけ減速度を反映するようにしてある。(電気ブレーキ作動中は電流の強さから減速度を推定することは実用的でないと思われるのでやっていない)
ノッチを動かした直後はブレーキシリンダー圧力がブレーキ指令に追い付いていない可能性があるが、ブレーキシリンダー圧力と減速度はそれでも比例するので、予め推定しておいた最大ブレーキシリンダー圧力との比を見ることでフィードバックは可能である。
実際にやってみた結果としては、電気ブレーキを搭載しない摩擦ブレーキのみの車両ではうまく働くが、低速度まで電気ブレーキが作動する車両では停止直前の挙動がよくなったとも言い難い。
現状の目立つ問題としては、
仮説: 弱いノッチのブレーキはより弱くする方向に丸めているので、ブレーキを強くするタイミングが遅れている? https://github.com/magicant/bve-autopilot/blob/1c008c3d19104bdfee8eeb812aa0c4b916211048/bve-autopilot/%E6%B8%9B%E9%80%9F%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3.cpp#L111
仮説: 弱いノッチのブレーキはより弱くする方向に丸めているので、ブレーキを強くするタイミングが遅れている?
中くらいの強さの制動に誘導するように丸める代わりに常に std::round
するようにしてみると、若干マシにはなる。
しかし、停止直前ギリギリまで電気ブレーキが作動する車両にはどのみち効果がないという問題は残っている。
推定した最大減速度をすぐに適用するのではなくて、ゆっくりめに変化させることで停止直前の挙動を安定化できそう
フィードバックをゆっくり適用するようにすればうまくいくのでは? というアイディア