Coder Social home page Coder Social logo

制限速度 about bve-random-map HOT 9 CLOSED

magicant avatar magicant commented on June 24, 2024
制限速度

from bve-random-map.

Comments (9)

magicant avatar magicant commented on June 24, 2024

ATO 用の制限速度設定地上子をどこに置くか? 以下の点を考慮する必要がある

  • 始発駅の停止位置より手前に設置すると、始発駅出発直後に制限速度区間がある場合に、ATO に伝わる制限速度区間位置がずれる
  • 地上子の位置と制限速度区間開始位置との間に停車駅の停止位置がある場合、その駅に「停車場へ移動」で移動した場合も同様に位置がずれる。
    • かといって常に停止位置の後に地上子を設置するようにすると、その駅を通過する場合に減速が間に合わない恐れがある。
  • bve-autopilot の仕様として、地上子の通過順に対して制限速度変化位置が昇順となるように設置しなければならない。(順序を間違えると後の区間の情報が上書きされて消える。)
    • 「路線最高速度から制限速度まで減速するのにかかる距離」によって地上子の位置を決める場合、ある制限速度区間の直後により速度の低い制限速度区間があると地上子の順序が入れ替わってしまうことがある。

そのため以下のようにする。

  • 始発駅出発直後の位置ずれを防ぐため、始発駅の停止位置より手前には地上子を設置しないようにする。
    • 途中駅については、「停車場へ移動」しないことを前提として、停止位置を考慮せずに地上子を設置する。
  • 地上子順序入れ替わり問題を避けるため、地上子を制限速度区間のどれだけ手前に設置するかは制限速度によらず一定とする。

from bve-random-map.

magicant avatar magicant commented on June 24, 2024

てか、bve-autopilot を改良してもっと自由に制限速度設定地上子を置けるようにできないものか

from bve-random-map.

magicant avatar magicant commented on June 24, 2024

magicant/bve-autopilot#58 が完了したら、次のようにできる:

  • 全ての制限速度区間に対して 1000 メートル前に地上子を置く。
  • 制限速度解除地上子は制限区間の終点に置く。
  • 「停車場へ移動」の時にその地点での制限速度を反映するため、駅の停止位置ぴったりに地上子を置いてその地点での制限速度が伝わるようにする。
  • 駅の停止位置の後にある制限区間のための地上子が駅の停止位置の手前にある場合、停止位置に設置する地上子が優先されて、既に通過済みの (その先にある制限区間に対する) 地上子は反映されない。これをリカバーするため、停止位置の 1 メートル先にも地上子を置いてこの先に制限区間があることを伝える。

from bve-random-map.

magicant avatar magicant commented on June 24, 2024
  • 停止位置の 1 メートル先にも地上子を置いてこの先に制限区間があることを伝える。

しかしこれをやるうまい方法が思い付かぬ。(特に、設置すべき地上子が複数ある場合)

from bve-random-map.

magicant avatar magicant commented on June 24, 2024

1000 メートル前だけじゃなくて 500, 250, 125... メートル手前にも置けばよいか。

加速度と減速度が等しいと大まかに仮定すると、駅を出て加速をやめるまでの距離は制限速度区間手前で減速に要する距離を超えないので、駅と制限速度区間始点の中点までに地上子があればその時点で制限速度区間を認識して減速が間に合う。

from bve-random-map.

magicant avatar magicant commented on June 24, 2024

メモ:

最大カント量を 105 mm、軌間を 1067 mm とすると、最大カント角度と最大遠心加速度は

  • 最大カント角度 = arcsin(105/1067) = 0.09856627 [rad]
  • 最大遠心加速度 = 重力加速度 * tan(最大カント角度) = 0.969747 [m/s^2] = 3.491089 [km/h/s]

ところで「遠心加速度 = 速度^2 / 半径」であるから

  • 最小半径 = 速度^2 / 最大遠心加速度
  • 最大速度 = sqrt(最大遠心加速度 * 半径)

単位を充てると

  • 最小半径 [m] = 0.079567 * (速度 [km/h])^2
  • 最大速度 [km/h] = sqrt(12.568 * 半径 [m])

カント量に余裕がある場合は、

  • 遠心加速度 = 速度^2 / 半径 = 重力加速度 * tan(カント角度)

単位を充てると

  • tan(カント角度) = 0.00786818 * (速度 [km/h])^2 / 半径 [m]

おおまかに sin = tan で近似すると、軌間 1067 mm でのカント量は

  • カント量 [mm] = 8.395348 * (速度 [km/h])^2 / 半径 [m]

from bve-random-map.

magicant avatar magicant commented on June 24, 2024

1000 メートル前だけじゃなくて 500, 250, 125... メートル手前にも置けばよいか。

bve-autopilot の 1006 番地上子はそれでよいが、snp や swp2 の 6 番地上子はうまくいかなそう。
(複数の制限速度区間がある場合にそれぞれの区間の地上子が交互に現れるようなことになってはいけない)

とりあえず 6 番地上子は以下の二箇所に置けばよいだろうか?

  • 制限速度区間の始点から 1000 メートル手前
  • 直前の駅の停止位置 (駅を出て 1000 メートル以内に制限速度区間がある場合のみ)

from bve-random-map.

magicant avatar magicant commented on June 24, 2024

頭がこんがらがってくるの嫌なので、以下のようにしてみる:

  • map_misc に speedlimitbegin.txt と speedlimitend.txt を用意。この二つは必ずペアで使う。(ある制限速度区間を終えずに新しい制限速度区間を始めるということはないようにする)
  • 制限速度区間開始を設定する地上子は最大 1000 メートル手前に置く。ただし 1000 メートル以内に別の制限速度区間の開始がある場合はそこより後に置く。
  • また、1000 メートル以内に駅の停止位置がある場合はそこにも置く。
  • 制限速度区間終了を設定する地上子は区間終了位置に置く。ただし一つ後の制限速度区間の開始を設定する地上子が現在の制限速度区間の中に設置される場合はその直前に置く。

最後の制約があるため、制限速度区間の終了を設定する地上子も制限速度区間の開始を処理するときに設置しないといけない。ということで map_misc/speedlimit.txt というファイル内でほぼ全部やることになりそう。

「停車場へ移動」の時にその地点での制限速度を反映するため、駅の停止位置ぴったりに地上子を置いてその地点での制限速度が伝わるようにする。

これだけ station.txt で直接地上子を設置することになるか。

from bve-random-map.

magicant avatar magicant commented on June 24, 2024

「停車場へ移動」の時にその地点での制限速度を反映するため、駅の停止位置ぴったりに地上子を置いてその地点での制限速度が伝わるようにする。

swp2 互換モードで 6 番地上子を認識してしまう (そして 6 番地上子は上記のように停止位置に置かない) ので結局 bve-autopilot が制限速度区間の始点を本来より手前にあるものと認識してしまうが、停止位置に置いたところで swp2.dll が問題なく動作するのか確証がないのでこのままとする。

from bve-random-map.

Related Issues (7)

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.