自動運転スクリプトの構想 [python]
自動運転のスクリプトをいじっています。
自動で速度を制御しながら、場合によっては手動でもできる、という具合に改良中です。
ControlTrainというクラスの定義の部分だけお示しします。
import jarray
import jmri
class ControlTrain(jmri.jmrit.automat.AbstractAutomaton) :
def __init__(self, train, basho, genji):
print "OK"
def cont(self, train, basho, genji):
self.tr = int(train)
self.throttle = self.getThrottle(self.tr, False)
self.sp = self.throttle.getSpeedSetting()
self.syudo = self.throttle.getF4() #F4を読み込む
if self.syudo == 0: #F4がオフの時のみ速度調整をする
if genji == 'Red':
self.sp = 0
elif genji == 'Yellow':
self.sp = halfList[basho]
elif genji == 'Green':
self.sp = 1
else:
self.sp = 0
self.throttle.speedSetting = self.sp
if self.syudo == 1 and self.sp > 0.8:#手動でスピードが80%以上になったら手動を解除
self.throttle.setF4(0)
print self.tr, self.sp
train = ""
basho = ""
genji = ""
c = ControlTrain(train, basho, genji)
こんかいはstart()で回し続けるのではなく、リスナーからcontをコールするようにしてます。
最終行で
c = ControlTrain(train, basho, genji)
とすることで、インスタンスが出来ますので、(理解が正しいか怪しいですが。。。)
あとはリスナーで現示が動いたときに
c.cont(train, basho, genji)
などと、列車のID(train)列車の場所(basho)信号現示(genji)の3つを引数としてコールしてやれば速度を変えてくれます。
(この文はリスナーの動作のところに書いておきます)
bashoは今は使ってませんが、将来場所ごとに動作を変えたり出来るように考えています。
#例えば出発信号機と閉塞信号機で動作を変えるなど。
自動と手動の切り換えは、スロットルのファンクション4(F4)のオンオフでやります。
self.syudo = self.throttle.getF4()
でF4の状態をself.syudoに格納、これが0、ファンクションがオフの時にはスピードを信号現示に合わせて変えます。
つまり自動運転です。
これが1、オンのときはスピード調節はしません。つまり手動運転となります。
いつまでも手動だと、忘れて事故を起こすので、
手動でスロットル速度を80%以上にすると、一旦手動を解除します。
黄現示などで速度が低下した場合に、ファンクション4をオンにすると手動に変更できます。
閉塞信号機で赤現示でもファンクション4を押して侵入できます。本物っぽい?
まだ、このスロットル制御のクラスだけしか出来てませんので、リスナーからコールして上手く動くかは分かりませんけど、構想だけはなんとか出来つつあります。
コメント 0