AKAGI Rails

鉄道模型シミュレーターで遊んでいたはずが、気づいたらPythonなども。

編成側からセンサー間の距離測定ができるか

VRMNXpyで,2つのセンサー間の距離を,編成側から検測してみたいと思います。

単純な直線距離であれば,センサーの座標から簡単な計算で求めることができますが,線路に沿った距離はそう簡単には求められません。もちろん,丁寧に計算すれば求められますが,とても面倒です。ですので,Python処理を駆使して,線路上を走り回る編成オブジェクトから距離測定をしてみたいと思います。

フレームイベントを有効にしてデータを蓄積して距離を測るのですが,基本原理はおおまかに2つ考えられます。

  1. 毎フレームの座標  \vec{x} =trainobj.GetPosition() を記録する。1フレームで座標上を移動した距離  \sqrt{| \vec{x_t} - \vec{x_{t-1}}| ^2} を累積して距離とする。

  2. 毎フレームの描画時間  t と,編成の走行速度  v = trainobj.GetCurrentSpeed() を記録する。1フレームで座標上を移動した距離  v \Delta t を累積して距離とする。

1フレームの描画にかかる時間は必ずしも一定ではないので,時間積分を伴う 2. のやり方は誤差が出そうにも思われますが,かわりに実装上の演算が四則演算で済む(ルートの計算がいらない)ので計算コストが安そうです。

ということで,実装してみました。(コードは汚いので貼りませんw)

距離測定の結果

1周2851.48mmの変形オーバルコースに1個だけセンサーを設置しました。同じセンサーを2度踏むことになりますがで,コース長を繰り返し測ることができます。車両は雰囲気重視でDE10 + TOMIXクリーニングカー(USO800鉄道氏自作車両)です。East-iもってないので。

2回繰り返して測定し,このときは2回とも約2849mmという測定結果でした。若干短いですがこんなもんでしょう。

閉塞制御を実現する場合に,歓呼センサーと直下センサー間の距離を測定する用途などに使えるかなと思っています。

今回はセンサー間の距離測定を行いましたが,ほかにも,編成部品にレイアウト上のデータを色々集めさせることができるかもしれません。

  • センサーを通過する順序を記録する。
    • 閉塞の基本データを自動で生成する。
  • 線路上の走行位置をひたすら記録して走行経路の形状を取る。
    • 移動閉塞の基礎データに?

ATENXAでの閉塞式信号制御は,過去のレイコン作品で閉塞制御を組み込んだのが死ぬほど面倒くさかったことを教訓とし,組み込みの手順がさらに簡単になるようにしたいと思って,いろいろ考えています。それでは。