SSブログ

自動運転スクリプトの構想 [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)


などと、列車のIDtrain)列車の場所(basho)信号現示(genji)の3つを引数としてコールしてやれば速度を変えてくれます。

(この文はリスナーの動作のところに書いておきます)

bashoは今は使ってませんが、将来場所ごとに動作を変えたり出来るように考えています。

#例えば出発信号機と閉塞信号機で動作を変えるなど。


 


 


自動と手動の切り換えは、スロットルのファンクション4(F4)のオンオフでやります。


self.syudo = self.throttle.getF4()


F4の状態をself.syudoに格納、これが0、ファンクションがオフの時にはスピードを信号現示に合わせて変えます。

つまり自動運転です。

これが1、オンのときはスピード調節はしません。つまり手動運転となります。

 

いつまでも手動だと、忘れて事故を起こすので、

手動でスロットル速度を80%以上にすると、一旦手動を解除します。

黄現示などで速度が低下した場合に、ファンクション4をオンにすると手動に変更できます。

閉塞信号機で赤現示でもファンクション4を押して侵入できます。本物っぽい?

 

まだ、このスロットル制御のクラスだけしか出来てませんので、リスナーからコールして上手く動くかは分かりませんけど、構想だけはなんとか出来つつあります。



タグ:DCC Python
nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

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

トラックバック 0

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