Giter Site home page Giter Site logo

bve-autopilot's People

Contributors

magicant avatar susline2320 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

bve-autopilot's Issues

非常ブレーキを使うとクラッシュする?

非常ブレーキを使うと制動力推定関係で死ぬっぽい? 後で調べる。非常ブレーキを拡張ブレーキ指令と混同しているのかもしれない。

 	bve-autopilot.dll!autopilot::制動特性::pressure_rates::割合と丸め閾値(double ノッチ) 行 202	C++
 	bve-autopilot.dll!autopilot::制動特性::pressure_rates::割合(double ノッチ) 行 228	C++
 	bve-autopilot.dll!autopilot::制動特性::割合(autopilot::制動指令 ノッチ) 行 162	C++
>	bve-autopilot.dll!autopilot::制動特性::経過(const autopilot::共通状態 & 状態) 行 153	C++
 	bve-autopilot.dll!autopilot::共通状態::経過(const ATS_VEHICLESTATE & 状態) 行 106	C++
 	bve-autopilot.dll!autopilot::Main::経過(const ATS_VEHICLESTATE & 状態, int * 出力値, int * 音声状態) 行 177	C++
 	bve-autopilot.dll!Elapse(ATS_VEHICLESTATE state, int * panelValues, int * soundStates) 行 112	C++

急な上り勾配で低速で駅に近付くとき手前に止まってしまう

急な上りになっている駅に低速度で進入するとき、十分に再加速をしないので手前に止まってしまうことがある。

惰性で走り続けると手前で止まってしまうような場合では再加速しなければならないが、現在の実装ではどうせすぐにブレーキをかけることになるから加速しなくてよいという風に判断してしまう。正確な位置に止めるには停止時に多少なりともブレーキをかけさせなければいけないので、そのためにはあえて先に加速する必要がある。

メトロ総合プラグインの停止位置目標表示とのずれ

メトロ総合プラグイン互換モードを使用している時、17 番地上子は常に 11 メートル先に停止位置を設定する。実際、trant9123 さん & csp2206 さんの東横線データでは 11 メートル先に Station 命令がある。しかし、うさおさんの作った東急 5050 系では、運転台パネル上の停止位置目標は約 10.5 メートル先で揃うように表示されるので、ずれる。

  • 他の路線や車両ではどのようになっているのか?
  • bve-autopilot としてはどのような動作にすべきか? (オプションで選べるようにする?)

微速前進の方法改善

停止信号で停止した後、発進キーを押すと今は 10 km/h まで信号速度を緩めて再加速するが、メトロ総合プラグインの ORP 再発進時の照査が 7.5 km/h だったりするのを鑑みるともっと低い速度の方が良くないだろうか。

また、こういうときは全速力ではなく弱い力行ノッチで発進すべきではないだろうか。

Alternative ATO behavior

Some ATO implementions, such as Trainguard MT by Siemens, has a behavior that is only a little bit different from that of bve-autopilot.
That is, the ATO turns off once the mascon leaves the neutral position, and will not resume operation automatically until the driver pushes the ATO start button again.
Is it possible to implement this, as a selectable behavior from the configuration file?

下り勾配試験で停止位置直前に止まった状態から発進できない

強い下り勾配の途中に駅があり、勾配設定地上子で勾配が設定されているとき、停止位置の直前数メートルにいったん列車が停止した状態から再発進 (インチング) しようとしても発進しない。

下り勾配のため発進直後からブレーキをかける必要があるが、これが発進可能かどうかの判定に引っ掛かってしまい、すぐに停止状態 (強制ブレーキ) になってしまう。

制限速度/勾配地上子の順序によって制限速度/勾配区間が無視される

制限速度地上子が設定する制限速度区間は、隣り合う区間の制限速度が同じ場合は一つの区間に統合して計算を行うようになっている。この統合は制限速度地上子を通過するたびに直ちに行われるので、その後に途中に新たな制限速度区間を追加すると統合前の区間が無視されてしまう場合がある。

例えば地上子を以下のように設置すると

0;
Beacon.Put(1006, -1, 100050);
Beacon.Put(1006, -1, 200060);
Beacon.Put(1006, -1, 300050);

以下の三つの制限速度区間がプラグインに設定される。

  • 100 メートル地点から始まる 50 km/h の制限
  • 200 メートル地点から始まる 60 km/h の制限
  • 300 メートル地点から始まる 50 km/h の制限

しかし地上子の順序を変えて以下のようにすると

0;
Beacon.Put(1006, -1, 100050);
Beacon.Put(1006, -1, 300050);
Beacon.Put(1006, -1, 200060);

以下の二つの制限速度区間しか設定されない。

  • 100 メートル地点から始まる 50 km/h の制限
  • 200 メートル地点から始まる 60 km/h の制限

値が 300050 の地上子を通過した時点では 200 メートル地点からの制限はまだプラグインに設定されていないため、100 メートル地点からの制限と 300 メートル地点からの制限は統合され、結果として 100 メートル地点からの 50 km/h の制限だけが残る。
その後、値が 200060 の地上子を通過すると 200 メートル地点から始まる 60 km/h の制限が追加されるが、既に 300 メートル地点からの 50 km/h の制限の情報は失われているため 60 km/h の制限が 300 メートル地点以降も続いてしまう。


勾配地上子が設定する勾配も、隣り合う区間の統合に関して同様の問題がある。

Autopilot will not start if no door is opened at initial station

I tried to use this plugin with openBVE. It turned out that if the first station is set with no door opening, in this case:

.Sta (DemoStart;;;;0;;1;;30;;)

Then, the plugin will not consider the doors are closed, and it will not be possible for ATO to depart. The traction will only be enabled by opening and then closing the door again.

ノッチ戻し

制御器がノッチ戻しに対応している車両では、それを活かすようにしたい。

  • パターン 1: 強い上り勾配で力行をやめるとすぐに速度が低下してまた強い力行で再加速しなければならなくなるような状況で、力行を完全にやめるのではなくてノッチを下げるだけにすることで速度の低下幅を少なくしてより滑らかな動きになることが期待される。
    • これはたぶん「力行をやめた直後には再力行しない」「一度力行ノッチを上げたら中途半端に下げない」といった現行の制約を外せばできそうな気がする。ただし、ノッチ戻しに対応していない車両でこれをやると速度超過するので動作を分ける仕組みが必要。
  • パターン 2: #91 に関連して、強い力行から段々とノッチを下げていって加速をやめることで、いきなり力行をやめるよりも衝撃を抑えることが期待される。
    • これをやるには、段々とノッチを下げていくという動作を実現するための基準目標 (ノッチの下げていき方) のうまい定義が必要。

力行の多段制御 (全速力でない力行)

今の bve-autopilot は (低速域で弱く加速するとき以外は) 常に最大の力行ノッチで加速するようになっているが、現実の ATO では全てのノッチを使って加速度を調節しているし、実際そうした方がより滑らかに速度を変化させることができそうに思われる。

どのようなアルゴリズムにすればよいだろうか?

自動発進が有効だと信号待ちでも転動防止ブレーキが効かない

自動発進を有効にしているとき、自動発進する条件が整うと、信号待ちで停車している時でも転動防止ブレーキが解除され、信号待ちのためのブレーキ (信号順守が出力する、信号待ち用停止位置に停まるためのブレーキ) の分しかブレーキがかからない。

発進できないのであれば、自動発進の条件が整っていても転動防止ブレーキをかけ続けるべき。

「停車場へ移動」時の地上子の位置

「停車場へ移動」のとき、制限速度地上子や目標時刻設定地上子は無視する (あるいは少なくとも誤った位置を使用しないように補正する) べきでは? しかし通過駅に移動するときでも正しく判定できる?

勾配を考慮する

  • 計算した勾配影響の強さを実態に合わせて弱める
  • 進路上の勾配を考慮する
    • 前方の勾配情報を地上子から受け取る
    • パターン生成用の勾配影響を目標地点までの平均から求める

制限速度設定地上子をより自由に置きたい

v1.1 現在の仕様では、制限速度設定地上子の設置順序は、地上子が指示する制限速度変化地点の順になっていないといけない。順序が誤っていると、より後の区間の制限速度の情報が上書きされてしまう。この制限を緩和して、自由な順序で (あるいは、同じ制限速度変化地点に対して複数) 地上子を設置してよいようにできないだろうか。

cf. magicant/bve-random-map#8 (comment)

目標速度に近付いたらノッチを緩めて衝撃を抑えるのをもっと賢くする

#5#18 で既にいろいろ試しているが、現在の問題は

  • 衝撃を抑えるためのブレーキの弱め方が等加加速度**になっていないため初速によって結果にばらつきがある
  • 停止位置目標に止めるために必要なブレーキの強さ加減よりも停止時の衝撃を抑える動作を優先しているため、低速時に抑速ノッチ等の弱いノッチを出力して十分にブレーキが利かず過走する (あるいは止まるまで時間がかかる) ことがある
    • これは最初のブレーキノッチが抑速ブレーキになっている車両や、京成 3500 形のように非常に弱いブレーキノッチがある車両で起こる

ATO/TASC の切り替え方を柔軟にする

現在、モード切替ボタンは「ATO 有効 → TASC のみ有効 → 両方無効」の順にループするようになっている。切り替え方をもっと柔軟にできないか?

  • ATO 有効を選べなくする設定 (TASC しか搭載していない車両のシミュレーション)
  • ループしない設定 (レバー/鍵による切り替えのシミュレーション)
  • 切り替え順序の変更

力行の急動作抑制

いきなり力行を最大ノッチまで入れると衝撃が大きい (車両もある) ので、段階的にノッチを上げていくようにしたい。

任意の type の地上子から閉塞の位置と現示を読み取る

今は特定の type を持つ地上子を (それに合う互換モードで) 通過したときにだけ地上子から閉塞の位置と信号を読み取っている。しかし Beacon.Put 文では常に閉塞を指定する必要があるので、どの type の地上子を通過するときにも何らかの閉塞の位置と信号がプラグインには伝わってきている。それを積極的に利用するようにすれば、プラグインが知らない type の地上子からも閉塞の位置と信号を読み取れるのではないか? そうすれば互換モードでいちいち対応しなくてもいろいろな type の地上子に対応できるのでは?

最大目標減速度の計算方法

プラグインの仕様として、目標減速度設定地上子で高い目標減速度を設定しても、設定ファイルに設定した最大減速度の 95% までしか目標減速度は上がらないようにリミッターをかけている。しかし pressurerates に設定された最大常用ブレーキの減速度割合が 0.95 以下の場合にはリミッターをすり抜けてしまい、結果として減速が間に合わないことがある。

制限速度を守る

  • 両数から列車の長さを計算する

  • 制限速度区間を地上子から受け取って共通状態に保存する

  • 減速パターンに基づく制動出力計算を TASC から抽出する

  • 加速し過ぎないように力行を制御する

  • 列車の長さを設定ファイルから読み込む

路線の途中で ATS↔ATC が切り替わるときの動作

現在分かっている課題:

  • ATS → ATC 切替時、一つ先の閉塞が停止 (ATS) から進行 (ATC) に変わっても、信号インデックスの桁数の制約のために「閉塞に対する信号インデックス設定」で信号の変化を先読みすることができないので、閉塞の手前でずっと停止してしまう。
    • 現時点で行える回避策としては、1012 番地上子で本来の ATC 用信号インデックスの代わりに適当な ATS 用信号インデックスを送信して、進路が開通したことを bve-autopilot に知らせればよい。
    • 先の閉塞ではなく現在閉塞の信号が ATC に切り替わる場合、切り替わった時にその先の閉塞の受信済み現示は忘れるはずだから問題ないはず

Feature request: Coasting

On some older metro system, trains do not coast at its target speed.
That means once it reaches the target speed. The train stops accelerating until the train falls below the minimum speed.
(The minimum speed is different depending on track section. But usually 5-10km/h less than target speed)
Can this be a feature, and minimum speed defined with beacon? Thanks!
(Sorry if this got implemented already, I've read the wiki a few times but I still can't find it)

TASC制御状態の表示を点灯・消灯するタイミングを設定できるか?

 このプラグインが主に用いられる路線データといえば、東急東横線や目黒線・東京メトロ副都心線や南北線といったところであろう。特に前者に関しては動画サイト上で運転台計器類の動作も映った前面展望動画も多数ある。

 しかしながら、それらの動画を見る限り、運転台上の「TASC制御」灯は定位置に停車し開扉したタイミング(主に東急線内)、もしくは転動防止動作を手動で行うなどした一定のタイミング(主にメトロ線内)で消灯している。
 それに対し、現在の本プラグインの仕様上、上述の「TASC制御」灯に対応するbve運転台パネル出力の「tascmonitor」は閉扉しない限り点灯し続ける。
 また、絶対式停止位置設定地上子をmapファイルの0m地点などに一括で設定した場合、走行中・停車中は常時「tascmonitor」が点灯し続ける。

 というわけで、TASC制御状態の表示を点灯・消灯するタイミングを設定できないだろうか?
例えば、

  • 停止位置手前400mなどの指定した位置で点灯する
  • 開扉した場合などには消灯する

などである。

停止信号で停止後、発進時に ATS に引っ掛かる

停止信号で停止した後に再発進すると現在閉塞と次の閉塞の制限速度を 7.5 km/h に上げて進行するが、このとき信号前照査順守での照査が無効になるので、再発進位置から次の閉塞までの制限速度は単に現在閉塞に対する信号速度のみに制約され、ATS の照査よりも高い速度となることがある。すると他の保安装置プラグインと併用している場合にその照査に引っ掛かることがある。

減速パターンに対する勾配影響の反映をもっと賢くできるか

現在、強い下り勾配からほぼ平坦に変わるような線形で停車させようとすると、前半 (強い下り勾配部分) でブレーキが強すぎになりがちである。もう少し「攻めた」ブレーキングはできないだろうか。

  • 車両勾配加速度ではなく進路勾配加速度を使うべきでは
  • 制限グラフ: 進路勾配加速度は減速目標地点を基準に計算すべきでは
  • 進路勾配加速度の反映は減速パターンの中でやれないか
  • 急な上りから急な下りになった直後に駅がある場合の試験

The limit speed cannot be read correctly in a D-ATC route

I used this plugin in the BVE5 Yamanote line made by Tn_E235(with TASC beacon)
I also used the E235 series made by e233_kun, including the D-ATC plugin made by Mi5000, and manually added the autopilot plugin
When only TASC is enabled, the plugin works normally
But when I enabled ATO, the vehicle cannot run and will stop immediately

Then I used the "clearcar" to check the problem. I found that the speed limit read by the plugin is often 0km/h, sometimes to 25km/h, but it can hardly read the normal speed limit (for example, 65km/h in the Tokyo-Yurakucho section)
ATO often travels at a lower speed, I hope this problem can be fixed soon: D

(Sorry for my bad English, I am a user from China and using Google Translate: D)

目標速度到達直前のブレーキング改善

ブレーキの応答が速いか低速時に摩擦係数が上がらない車両では「目標速度に近付いたらノッチを緩めて衝撃を抑える」が効きすぎて過走してしまう。

目標速度に近付くにつれて目標減速度が下がるように減速パターンを変化させると良いか? あるいはブレーキの応答までのラグを考慮する (調整可能にする) ようにする?

ORP が動作すべきでないときに動作する

今は 12 番地上子を通過したときに必ず ORP を起動しているので、信号が ORP を現示していなくても ORP の動作が開始してしまう。

さて、次の場合の動作は?

  • 12 番地上子を通過したが信号が ORP を現示していない場合
    • 12 番地上子が ORP 対象の閉塞に対応している場合
    • 12 番地上子が ORP 対象の閉塞に対応していない場合
  • 31, 1012 番地上子で ORP 現示の前方予告を受けた後、対象の閉塞の現示が ORP 以外に変わった場合
    • ORP を現示している対象の閉塞に入った後に現示が ORP 以外に変わった場合
    • 対象の閉塞に入る前に対象の閉塞の現示が ORP 以外に変わった場合

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.