2005/9/13

目指せ完全自動運転(7)−駅停車/発車には何が必要か  VRMスクリプト禅問答
本連載では、ここまでで以下のことが達成されました。

・想定しているトラックプランは、分岐のないエンドレスループ(これを二重或いはそれ以上に組めば複線・複々線になる)。
・列車の進行方向は一方通行(上下線完全分断)が前提。逆走列車があると異常動作となる。
・上記の条件を満たす限りにおいて、列車の動きにシンクロする閉塞信号。
・同じく、閉塞信号の現示に応じて加減速・停止・再発車を自動的におこなう編成。

これだけでも「列車が走りっ放し」で良いのであれば、つまり駅(厳密には停車駅)がない颯爽とした走行のみを楽しむレイアウトであれば、十分に作ることが出来ます。
が、それでは少し寂しいですね。そこで今回からは、自律的かつ自動的な駅における停車/発車を考えていくことにします。話を単純化するために、まずは上記のように「分岐のないエンドレスループ」上に停車駅があるものとして進めていきます。駅構内の分岐や追い越し等については、駅停車をクリアしてから改めて解説します。

まず、駅停車/発車を自動化するには何を実現しなければならないか、をまとめておくことにしましょう。大雑把に言えば以下のようになるでしょうか。

・停車位置に停止すること。
・停車位置の十分手前から減速を開始すること。
・停車後、一定時間(=停車時間)は停止し続けること。
・出発信号に連動して出発すること。

何を当たり前のことを・・・と思われるかも知れませんが、VRMスクリプトに限らず、プログラミングをする際はまず「自分が何を実現したいのか」を整理し、単純な部品に分解して考えることが、遠回りなようで最適解に近づくための最短ルートとなります。

それぞれについて、もう少し吟味してみましょう。
「停車位置に停止する」というのは、具体的には編成オブジェクトの「電圧(厳密には設定最高速度と現在速度の比)」をゼロにすることです。とは言え、いきなり SetVoltage 0.0 としてしまうと、VRM的には何の問題もないながら、乗客全員が進行方向に向かってスッ飛ばされることになり著しく実感を損ねます。
そこで「停車位置の十分手前から減速を開始する」が必要になります。本連載をご愛読していただいている皆様におかれては、既に SetTimerVoltage命令が頭に浮かんでおられると思います。同時に、この命令を使うには電圧(ここではゼロ)に加えて「時間(遷移時間)」が必要であることもご理解いただけているでしょう。
自律的(=予め決定された動きをするのではなく、状況に合わせて列車が自分で判断しているかのように振舞う)な自動運転を目指すからには、編成が駅構内に進入する際の速度は一定ではない、と考えなければなりません。すなわち、なんらかの方法で、編成が現在速度から速度ゼロへ減速した結果、停止位置まで走行する「時間」を計算し、これを SetTimerVoltage命令に(第2引数として)与えてやる必要があります。
ここまでで、とりあえず列車を駅に止めることは出来ます。止めたままにしてしまうと「自動運転」ではなくなってしまいますから、列車を再度出発させなければいけません。もちろん、出発するまでは「一定時間停止し続けること」と書いたように、停車時間を考えてやる必要があるでしょう。
停車時間が経過すれば列車は「出発信号に連動して出発する」ことになります。しかし、単に一定時間が経過したからといって出発させてしまうと、まずい場合があるかも知れません。少なくとも、実際の鉄道においてはこれから進入する経路が安全に確保されていない限り、出発信号はG現示にならないはずです。これは、前方の安全を確認して信号をG現示にする仕組み、と、その信号を受けて出発する仕組み、を作らなければならないことを意味しています。

今回は、基本的な考え方を示すのみに留めました。以降、数日をかけてこれらの仕組みを実現する具体的なスクリプトを紹介していきます。自身のVRMスクリプトスキルを高めたいと願う方は、まずこの時点でどんなスクリプトが出てくるのかを予想してみてください。その上で、翌日以降のサンプルスクリプトとご自身が想定されたものを比較すると、良いトレーニングになると思います。
なお、言うまでもありませんが、仮に私の示すサンプルコードとあなたの予想したコードが一致しなかったとしても、それはたいした問題ではありません。要は意図通りに動けばいいんですから。ひょっとするとあなたが考えたものの方が、よりスマートで高性能である場合もあるでしょう。そうお感じになった際は、私にご教示いただけると有難いです、よろしく。
0

2005/9/13  18:58

投稿者:ghost
その場合はですね、信号を地面の下に埋めちゃうんですよ(笑)。いや、これは冗談でも何でもなくて。VRMスクリプト内部の変数の動きは目に見えないので、信号灯火にフィードバックしておくとデバッグに役立つんですね。後日、実例を交えて紹介します。

2005/9/13  13:41

投稿者:Gallagher
待避線などのない単純な駅には、出発信号機のない駅も結構あるようです。
トリビアですが参考程度にどうぞ。

コメントを書く

この記事にはコメントを投稿できません




teacup.ブログ “AutoPage”
AutoPage最新お知らせ