def run(self, args): ''' Start a websocket SocketIO server to talk to a donkey simulator ''' import socketio from donkeycar.parts.simulation import SteeringServer from donkeycar.parts.keras import KerasCategorical, KerasLinear args, parser = self.parse_args(args) cfg = load_config(args.config) if cfg is None: return #TODO: this logic should be in a pilot or modle handler part. if args.type == "categorical": kl = KerasCategorical() elif args.type == "linear": kl = KerasLinear(num_outputs=2) elif args.type == "mxlinear": from donkeycar.parts.mxnetpart import MxnetLinear kl = MxnetLinear() else: print("didn't recognize type:", args.type) return #can provide an optional image filter part img_stack = None #load keras model kl.load(args.model) #start socket server framework sio = socketio.Server() top_speed = float(args.top_speed) #start sim server handler ss = SteeringServer(sio, kpart=kl, top_speed=top_speed, image_part=img_stack) #register events and pass to server handlers @sio.on('telemetry') def telemetry(sid, data): ss.telemetry(sid, data) @sio.on('connect') def connect(sid, environ): ss.connect(sid, environ) ss.go(('0.0.0.0', 9090))
def test_create_sim_server(self): import socketio kc = KerasCategorical() sio = socketio.Server() assert sio is not None ss = SteeringServer(_sio=sio, kpart=kc) assert ss is not None
def run(self, args): ''' Start a websocket SocketIO server to talk to a donkey simulator ''' import socketio from donkeycar.parts.simulation import SteeringServer from donkeycar.parts.keras import KerasLinear from donkeycar.parts.keras import KerasCategorical args, parser = self.parse_args(args) cfg = load_config(args.config) if cfg is None: return kl = get_model_by_type(args.type, cfg=cfg) #can provide an optional image filter part img_stack = None #load keras model kl.load(args.model) #start socket server framework sio = socketio.Server() top_speed = float(args.top_speed) #start sim server handler ss = SteeringServer(sio, kpart=kl, top_speed=top_speed, image_part=img_stack) #register events and pass to server handlers @sio.on('telemetry') def telemetry(sid, data): ss.telemetry(sid, data) @sio.on('connect') def connect(sid, environ): ss.connect(sid, environ) ss.go(('0.0.0.0', cfg.REMOTE_PILOT_PORT))
def sim(self, model_path=None, top_speed=0.0): ''' Donkey Simulatorへ独自モデルの結果を提供するために推論APIを提供します。 donkey simコマンドを使用する場合、KerasCategoricalもしくはKerasLinearクラス の実装モデルにしか対応していないため、manage.py上に機能を追加しました。 ポートは9090を使用します(変更不可)。 引数: model_path モデルファイルへのパス、指定無しの場合はロードしない top_speed トップスピード値(シミュレータではスロットル推論値は使用されない)、指定しない場合は速度は0.0となる ''' # このメソッドのみで使用するパッケージのインポート # モデルのロード if model_path: print("start loading trained model file") super().load(model_path) print("finish loading trained model file") # ソケットサーバフレームワークの開始 sio = socketio.Server() # Sim サーバハンドラの開始 ss = SteeringServer(sio, kpart=self, top_speed=top_speed, image_part=None) # イベントおよびハンドラ関数を登録 @sio.on('telemetry') def telemetry(sid, data): ss.telemetry(sid, data) @sio.on('connect') def connect(sid, environ): ss.connect(sid, environ) # リッスン開始 ss.go(('0.0.0.0', 9090))