Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ブレーキ出力計算式の改良 #105

Open
magicant opened this issue Jun 13, 2024 · 2 comments
Open

ブレーキ出力計算式の改良 #105

magicant opened this issue Jun 13, 2024 · 2 comments
Labels
enhancement New feature or request

Comments

@magicant
Copy link
Owner

今の計算式では「現在地点での減速パターンの速度を求め、それと実際の速度との差に基づいてブレーキ出力を決める」という感じになっている。これを「現在速度での減速パターンの位置を求め、それと実際の位置との差に基づいてブレーキ出力を決める」という感じに変えるとどうだろうか。
この方式だと、列車が停止位置目標を行き過ぎた場合に「現在地点での減速パターンの速度」が未定義になる問題をよりエレガントに解決できるかもしれない。

@magicant magicant added the enhancement New feature or request label Jun 13, 2024
@magicant magicant moved this from To do to In progress in bve-autopilot Jun 13, 2024
@magicant
Copy link
Owner Author

これまでの速度差ベースの計算式は大雑把に書くと

  • V = 現在速度
  • L = 現在位置
  • Ve(L) = 減速パターン上の地点 L における目標速度
  • D = 目標減速度
  • T = 適当な時間定数 (実際には 2 秒程度)
  • 出力減速度 = D - (Ve(L) - V) / T

となっていた。新しい位置ベースの計算式は

  • Le(V) = 減速パターン上の速度 V における目標位置
  • 出力減速度 = D * (1 - (Le(V) - L) / V / T)

となる。 Ve(L) は目標停止位置よりも先の L では定義されないのに対し、Le(V) は全ての速度 V で定義されている。

とはいえ、V が極小の時は V と (Le(V) - L) / V はほぼ反比例するので、目標停止位置を行き過ぎて止まろうとする場合 (つまり Le(V) < L のとき) は停止直前のわずかな瞬間に急激な出力減速度の上昇が起きる。逆に目標停止位置の手前に止まりそうになった場合 (つまり Le(V) > L のとき) は停止直前に急激に出力減速度が下がり、車両が「流れる」原因になる。
停止直前に速度が十分に下がった状況では出力減速度を変化させても精々数センチメートルしか最終的な停止位置は変わらないので、期待動作としては出力減速度の変化を抑えてそのまま停止させるべきである。

とりあえず思い付いた (まだ試していない) アイディアとしては、分母が 0 に近付きすぎないように適当な「下駄」を履かせる。

  • Vo = 適当な速度定数 (例えば 0.05 m/s 程度)
  • 出力減速度 = D * (1 - (Le(V) - L) / (V + Vo) / T)

こうすると、例えば停止位置を 0.05 メートル行き過ぎて停止する瞬間の出力減速度は T = 2 秒の場合 0.5 D となり比較的妥当な範囲である。オーバーランした距離が Vo * T を超えると出力減速度が目標減速度を超える。

@magicant
Copy link
Owner Author

そうは言っても、停止直前は L の変化速度よりも V の変化速度の方が大きくなるので (L の変化速度つまり V はどんどん小さくなるのに対し V の変化速度つまり D は一定なのだから当たり前)、結局 (Le(V) - L) / (V + Vo) は停止直前に急に変化し、あまり本質的な解決にはなっていない。

停止直前に速度が十分に下がった状況では出力減速度を変化させても精々数センチメートルしか最終的な停止位置は変わらないので、期待動作としては出力減速度の変化を抑えてそのまま停止させるべきである。

このことについてもう少し深く考えてみる。

初速度 1 [m/s] のとき、減速度 1 [m/s^2] だと 0.5 [m] 先に停車するのに対し減速度 1.1 [m/s^2] だと 0.454545... [m] 先に停車する。つまり減速度が 10% 変化することで停止位置が 0.0454545... [m] ずれた。
一方で初速度 10 [m/s] だと、減速度 1 [m/s^2] と 1.1 [m/s^2] とでは停止位置は 4.54545... [m] ずれる。
このように、初速度が n 倍になると、同じ減速度の変化に対して停止位置は n^2 倍ずれる。

つまり、速度が高いうちは減速度のずれに対して停止位置も大きくずれるので、列車の動きが減速パターンから外れていてもまだまだリカバリーをする余裕がある (が、最終的な停止位置に対する細かい微調整はしにくい)。速度が下がってくると大きなズレのリカバリーがしにくくなる一方で段々と微調整がしやすくなってくる。さらに速度が下がって停止直前 (最後の 0.5 秒程度) までくると停止位置はもうほぼ確定していて調整の余地は少ない。

停止位置の調整の余地は現在速度の自乗に比例する。(車両の動きが減速パターンに十分近いときは、それは現在位置から停止位置までの残距離にも比例する。)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
Status: In progress
Development

No branches or pull requests

1 participant