SSブログ

半自動運転をしてみる。 [江ノ島登山鉄道]

 KiCADが進まないという話は置いておいて、江ノ島登山鉄道(妄想)の自動運転の続きです。
 両側ループ線は、結構、ポイントの信頼性によるところが大きそうなので、特に三角形の部分はもう少し考えないとと思います。
 でも、それも置いておいて、次は「裏江ノ島駅(仮称)」部分(列車交換)の自動運転を列車基準のスクリプトで作ってみました。
 まずレイアウトです。
無題.png
 写真にすると以下です。
re_DSC00778.jpg
 今回は、自動運転後に半自動運転もやろうと思ったので、Nucky様の信号を配置しています。信号がないといつ発車していいかわかりませんので。でも、信号機は三つしか持っていないので、外側からの進入は二つとも付けときましたが、内側からの出発は真ん中に寂しく一個だけです。あと、3灯式は1個しかないので、進入は4灯式で代用しています。本当は両側の折り返し部分(各2個で計4個)にも信号を付けたいので、そのうち、信号を買おうと思います。つまり、現在は信号機が5個足りないということになります。というか、最終的なジオラマを考えると、信号機が全然足りません・・・。
 動画です。


 信号機アングルの動画です。


 なお信号機はの動きはあまりリアリティーを重視していません。まるで、交通信号機のような変わり方をします。
 また、信号機を横からも視認するために秋月の3mmLED用のLED光拡散キャップを使用しています。とても見やすくなりますが、ちょっと残念な見た目になります。
 そして、自動運転のスクリプトですが、下記のように3部分が平行して動きます。
(1)東海道線
(2)横須賀線
(3)真ん中の駅のポイント切り替えと信号切り替え
 各スクリプトのトリガーはFlag0=0としており、つまり、電源投入時に始まります。

まず、(1)東海道線ですが、下記のスクリプトになっています。
列車の進行方向は左がFwdです。
状態がstate1~state12まであります。1から番号順にステートが変わっていくだけです。
FlagはFlag1、Flag2の2個あり、中央の駅の出入りのために使用します。
Flag1 = 0,処理完了(駅側から通知する)
Flag1 = 1,電車が左から駅に進入できるよう要請
Flag1 = 2,電車が駅から右へ出発できるよう要請
Flag2 = 1,電車が右から駅に進入できるよう要請
Flag2 = 2,電車が駅から左へ出発できるよう要請
スクリプトですが、東海道線は画面左側のS88の1番を踏むと開始です。
長いように見えますが、結構読みやすいと思います。
state1:センサ1を踏むまで待って、踏んだら、速度を0にして、方向をRevに変えます。
Flag1を1に変えて、駅に進入可能を要請します。
state2:駅に進入可能になったら(進入可能になったらFlag1が0に戻る)、出発します。
state3:駅に進入して、センサ3をを踏むまで待って、踏んだら、止まるために減速します。
state4:駅の先端のセンサのセンサ4をを踏むまで待って、踏んだら、止まります。駅に出発要請をだすため、Flag1を2にします。
state5:Flag1=0になるまで待って、なったら(出発要請が通ったら)、出発します。
state6:右側の終端減速センサに近づきます。センサ7を踏むまで待って、踏んだら減速します。
state7:右側の終端に近づきます。センサ8を踏むまで待って、踏んだら停止して、方向をFwdにして、Flag2を1に変えて、駅に進入可能を要請します。
state8:駅に進入可能になったら(進入可能になったらFlag2が0に戻る)、出発します。
state9:駅に進入して、センサ6をを踏むまで待って、踏んだら、止まるために減速します。
state10:駅の先端のセンサのセンサ5をを踏むまで待って、踏んだら、止まります。駅に出発要請をだすため、Flag2を2にします。
state11:Flag2=0になるまで待って、なったら(出発要請が通ったら)、出発します。
state12:右側の終端減速センサに近づきます。センサ7を踏むまで待って、踏んだら減速します。
state12の実行が終わったらstate1に戻ります。
---
DESKTOPSTATION,SCRIPT,2013
LABEL,init,,0
SETFLAG,0,0,0
LABEL,state1,,0
WAIT,1,,0
JUMPS88,state1,0,0
SPEED,0,0,1
DIRECTION,0,2,0
SETFLAG,1,1,0
LABEL,state2,,0
WAIT,1,,0
JUMP,state2,1,1
SPEED,0,512,20
LABEL,state3,,0
WAIT,1,,0
JUMPS88,state3,2,0
SPEED,0,200,10
LABEL,state4,,0
WAIT,1,,0
JUMPS88,state4,3,0
SPEED,0,0,1
SETFLAG,1,2,0
LABEL,state5,,0
WAIT,1,,0
JUMP,state5,1,2
SPEED,0,512,20
LABEL,state6,,0
WAIT,1,,0
JUMPS88,state6,6,0
SPEED,0,200,10
LABEL,state7,,0
WAIT,1,,0
JUMPS88,state7,7,0
SPEED,,,0
DIRECTION,0,1,0
SETFLAG,2,1,0
LABEL,state8,,0
WAIT,1,,0
JUMP,state8,2,1
SPEED,0,512,20
LABEL,state9,,0
WAIT,1,,0
JUMPS88,state9,5,0
SPEED,0,200,10
LABEL,state10,,0
WAIT,1,,0
JUMPS88,state10,4,0
SPEED,0,0,1
SETFLAG,2,2,0
LABEL,state11,,0
WAIT,1,,0
JUMP,state11,2,2
SPEED,0,512,20
LABEL,state12,,0
WAIT,1,,0
JUMPS88,state12,1,0
SPEED,0,200,10
GOTO,2,,0
EXIT,,,0
---

次に、(2)横須賀線ですが、「(1)東海道線」とほぼ同じで、違う部分は、state7開始というだけです。(はじめに、GOTO,29,,0)を入れてstate7から開始しています。
---
DESKTOPSTATION,SCRIPT,2013
LABEL,init,,0
GOTO,29,,0
LABEL,state1,,0
WAIT,1,,0
JUMPS88,state1,0,0
SPEED,0,0,1
DIRECTION,0,2,0
SETFLAG,1,1,0
LABEL,state2,,0
WAIT,1,,0
JUMP,state2,1,1
SPEED,0,512,20
LABEL,state3,,0
WAIT,1,,0
JUMPS88,state3,2,0
SPEED,0,200,10
LABEL,state4,,0
WAIT,1,,0
JUMPS88,state4,3,0
SPEED,0,0,1
SETFLAG,1,2,0
LABEL,state5,,0
WAIT,1,,0
JUMP,state5,1,2
SPEED,0,512,20
LABEL,state6,,0
WAIT,1,,0
JUMPS88,state6,6,0
SPEED,0,200,10
LABEL,state7,,0
WAIT,1,,0
JUMPS88,state7,7,0
SPEED,,,0
DIRECTION,0,1,0
SETFLAG,2,1,0
LABEL,state8,,0
WAIT,1,,0
JUMP,state8,2,1
SPEED,0,512,20
LABEL,state9,,0
WAIT,1,,0
JUMPS88,state9,5,0
SPEED,0,200,10
LABEL,state10,,0
WAIT,1,,0
JUMPS88,state10,4,0
SPEED,0,0,1
SETFLAG,2,2,0
LABEL,state11,,0
WAIT,1,,0
JUMP,state11,2,2
SPEED,0,512,20
LABEL,state12,,0
WAIT,1,,0
JUMPS88,state12,1,0
SPEED,0,200,10
GOTO,2,,0
EXIT,,,0
---

最後に、「(3)真ん中の駅のポイント切り替えと信号切り替え」ですが、以下のようになっております。説明すると、
Flag1=1かつFlag2=1なら、(両方の電車から進入要請があったら)ポイントを進入側に変えて、Flag1=0、Flag2=0として、ポイント切り替えが完了したことを通知します。
あとは適当に進入用の信号機を赤→黄色→青と切り替えていきます。出発用信号は青→赤としておきます。
Flag1=2かつFlag2=2なら、(両方の電車から出発要請があったら)進入用信号を赤に切り替えて、数秒待ってから、ポイントを出発に切り替えて、出発信号も赤→青と切り替えます。
というのをループでずっとやり続けています。

進入用の信号は、アドレスで10番~、18番~で、出発用の信号機は、26番~です。

---
DESKTOPSTATION,SCRIPT,2013
LABEL,init,,0
SETFLAG,0,0,0
LABEL,if1,,0
WAIT,1,,0
JUMP,point1_pre,1,1
JUMP,point2_pre,1,2
GOTO,2,,0
LABEL,point1_pre,,0
JUMP,point1,2,1
GOTO,2,,0
LABEL,point2_pre,,0
JUMP,point2,2,2
GOTO,2,,0
LABEL,point1,,0
ACCESSORY,3,1,0
ACCESSORY,26,0,0
ACCESSORY,27,0,0
ACCESSORY,10,1,0
ACCESSORY,18,1,0
SETFLAG,1,0,0
SETFLAG,2,0,0
WAIT,20,,0
ACCESSORY,11,1,0
ACCESSORY,19,1,0
GOTO,2,,0
LABEL,point2,,0
ACCESSORY,3,0,0
ACCESSORY,10,0,0
ACCESSORY,11,0,0
ACCESSORY,18,0,0
ACCESSORY,19,0,0
WAIT,10,,0
ACCESSORY,26,1,0
ACCESSORY,27,1,0
WAIT,5,,0
SETFLAG,1,0,0
SETFLAG,2,0,0
GOTO,2,,0
EXIT,,,0
---

で、すごい長かったような気もしますが、ここまでが、半自動運転部分のための準備になります。
 半自動とは、複数列車のうち、1列車だけ自分で運転するロールプレイするような遊び方になりますが、鉄道模型市の打ち上げの時に、確かY.Sさんから「自動運転の時に一列車だけ自分がなりきって運転するのって面白いと思う」というお話があり、アイディアは面白そうだけれども、当時の私のS88イベント基準のスクリプトの作り方だと、恐ろしく難易度が高いため、面白そうですね・・・。とお答えしていたのですが、やっとできました。

 で、どうするかですが、今回は、(1)から(3)のイベントスクリプトは役割ごとに分けてありますので、このうち、東海道線部分を自分が運転するように変えます。具体的には東海道線のスクリプトのうち、電車を動かす命令部分だけすべて削除します。これによって、自分が運転させつつ、センサを踏んだりして、ポイント切り替えなどはスクリプトが勝手に進めてくれることになります。スクリプトは以下になります。
---
DESKTOPSTATION,SCRIPT,2013
LABEL,init,,0
SETFLAG,0,0,0
LABEL,state1,,0
WAIT,1,,0
JUMPS88,state1,0,0
SETFLAG,1,1,0
LABEL,state2,,0
WAIT,1,,0
JUMP,state2,1,1
LABEL,state3,,0
WAIT,1,,0
JUMPS88,state3,2,0
LABEL,state4,,0
WAIT,1,,0
JUMPS88,state4,3,0
SETFLAG,1,2,0
LABEL,state5,,0
WAIT,1,,0
JUMP,state5,1,2
LABEL,state6,,0
WAIT,1,,0
JUMPS88,state6,6,0
LABEL,state7,,0
WAIT,1,,0
JUMPS88,state7,7,0
SETFLAG,2,1,0
LABEL,state8,,0
WAIT,1,,0
JUMP,state8,2,1
LABEL,state9,,0
WAIT,1,,0
JUMPS88,state9,5,0
LABEL,state10,,0
WAIT,1,,0
JUMPS88,state10,4,0
SETFLAG,2,2,0
LABEL,state11,,0
WAIT,1,,0
JUMP,state11,2,2
LABEL,state12,,0
WAIT,1,,0
JUMPS88,state12,1,0
GOTO,2,,0
EXIT,,,0
---
以下が半自動運転の時の動画です。初めに横須賀線が真ん中の駅で入れ替えを待ってる状態から始まります。自動運転の横須賀線やポイントと、私が適当に動かしている(と言っても決められた動作ですが)東海道線が、協調?しています。

 まあ、もちろん、これ以外にも自分も参加できる自動運転のやり方もあるとは思います。

コメント(3)  トラックバック(0) 

コメント 3

ラスカル

鉄道会社によって違うと思いますが、
私の地元のμ鉄の単線では、ホーム中ほどか、場内にYーYの信号機がないと同時に駅に進入出来ないようになっています。
同時でなく片側が入ってから、場内信号の現示に従って進入するのも面白いかなと思いました。(スクリプトの苦労も知らず書いています。ご容赦ください。)
by ラスカル (2016-06-22 20:42) 

Yaasan

規則正しく動くのが、ちょっと気になります。ランダムな動きが大事かもしれません。ファジーな考えを入れて、ランダムなウェイト機能が必要かなあと思ってます。
by Yaasan (2016-06-22 22:28) 

fujigaya2

コメントありがとうございます。

>単線の信号
私の家の近くの単線のホームの信号機は進入がYY、出発が二灯信号であること以外は知りません・・・。今度、もう少し注意深く見てみようと思います。

>規則正しく動く
今回は、単線の端っこまで行ったら真ん中の駅のポイントを切り替えてそのフラグを捕まえて、折り返し運転という、一糸乱れぬ動きのアルゴリズムになっております。ランダムウェイトは面白いと思います。ついでにアクセサリ起因のトリガーや分岐命令とか(Route機能じゃないのかという話もありますが)も欲しかったりします。S88スイッチデコーダと、ちょっとかぶりますが。
by fujigaya2 (2016-06-23 23:04) 

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。