Translate

2020年5月13日水曜日

Donkey Simulator(v3.1.2/)上でlinear/categorical/rnn/3d各モデルを同時に自動走行させてみた

Donkeycar v3.1.2 がリリースされて、Donkey Simulator自体も更新されシミュレータ上で自律走行レースができるようになった。

Donkey Simulator 上のコースで学習データを作成し、各モデルタイプでトレーニングを行いモデルファイル化し、myconfig.py

DEFAULT_MODEL_TYPE = 'categorical' # 'linear', 'rnn', '3d'
DONKEY_GYM = True
DONKEY_SIM_PATH = 'remote'
SIM_HOST = "127.0.0.1" # Donkey Simulatorが動いているマシンのIPアドレス

とかいてそれぞれ python manage.py drive --model <モデルファイルへのパス> で実行すると、以下の動画のように実行することができる。





..結果は、1つのPCで4つのDonkeycarプロセス+シミュレータなのでおそいおそい..
しかも、団子状になって3台自滅して終わり..


これじゃあ評価できないので、各モデルで1周自律走行させて、動画編集して横並びにしてみた。






3dやrnnモデルは複数件データを入力データとして扱うため、初期起動がどうしても遅くなる。

3dモデル以外はほぼほかのモデルと同じラップタイムで1周したが、3dモデルは1周するまで待ってられずに止めてしまった。3dモデルの名誉のために追記しておくと、動画ではにっちもさっちもだったが、運転モードをlocal_angleにするときちんと周回することができる。

結局はthrottle値をいかに高出力にしておくかだけど、機械学習のアウトプットにたよると学習データ収集時よりも速度がどうしても落ちてしまう。

..もっと学習データをクレンジングさせたほうがいいかもしれないなあ..

2020年5月12日火曜日

AVS SDK チュートリアル startsample.sh 実行中に GStreamer-CRITICAL が発生した件

以下の情報は2020/5/12時点のものです。

AVS SDK をためそうとRaspberry Pi 4B/Raspbean buster lite上でSDKを使ったプロトタイプを実行するチュートリアルの

Authenticate your device
https://developer.amazon.com/ja-JP/docs/alexa/alexa-voice-service/get-a-refresh-token.html

のなかで sudo bash startsample.sh を動かそうとしたら

(env) pi@heavensdoor:~/projects/avs $ sudo bash startsample.sh
2020-05-12 02:30:16.675 [  1] I sdkVersion: 1.19.1
configFile /home/pi/projects/avs/build/Integration/AlexaClientSDKConfig.json
Running app with log level: DEBUG9
2020-05-12 02:30:16.921 [  1] 0 ConfigurationNode:initializeSuccess
2020-05-12 02:30:16.933 [  1] 1 InMemoryEqualizerConfiguration:validateConfiguration::Validating Equalizer configuration
2020-05-12 02:30:16.933 [  1] 1 InMemoryEqualizerConfiguration:validateConfiguration::Validating default Equalizer state
2020-05-12 02:30:16.934 [  1] 1 InMemoryEqualizerConfiguration:validateConfiguration::Validating Equalizer configuration
2020-05-12 02:30:16.934 [  1] 1 InMemoryEqualizerConfiguration:validateConfiguration::Validating default Equalizer state
2020-05-12 02:30:16.964 [  1] 9 MediaPlayer:createCalled:name=SpeakMediaPlayer
2020-05-12 02:30:17.437 [  1] E MediaPlayer:setupPipelineFailed:name=SpeakMediaPlayer,reason=createAudioSinkElementFailed,audioSinkElement=alsasink
2020-05-12 02:30:17.437 [  1] E MediaPlayer:initPlayerFailed:name=SpeakMediaPlayer,reason=setupPipelineFailed
2020-05-12 02:30:17.437 [  1] 9 MediaPlayer:~MediaPlayer:name=SpeakMediaPlayer

(略)

(SampleApp:630):
GStreamer-CRITICAL **: 03:30:17.437: gst_object_unref: assertion 'object != NULL' failed
2020-05-12 02:30:17.437 [  1] 9 MediaPlayer:resetPipeline:name=SpeakMediaPlayer
2020-05-12 02:30:17.437 [  1] E RequiresShutdown:~RequiresShutdownFailed:reason=notShutdown,name=SpeakMediaPlayer
2020-05-12 02:30:17.438 [  1] C SampleApplication:Failed to create media player for speech!
2020-05-12 02:30:17.438 [  1] C SampleApplication:Failed to initialize SampleApplication
Failed to create SampleApplication!



というエラーメッセージが出て止まってしまった。

調べてみるとGStreamerプラグインが足りていないということで、以下のコマンドを実行して関連パッケージをインストールしてから  sudo bash startsample.sh を動かしたら..うまくいった。




sudo apt install -y libgstreamer1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-doc gstreamer1.0-tools gstreamer1.0-x gstreamer1.0-alsa gstreamer1.0-gl gstreamer1.0-pulseaudio

ちなみに使ったマイク・スピーカは SENNHEISER USB ヘッドセット PC 8 。

マイクのミュートボタンをOFFにしてから startsample.sh を実行すると、コンソール上に以下のようなメッセージがでてくるので


2020-05-12 04:18:38.481 [  2] 5 CBLAuthDelegate:setAuthError:authError=SUCCESS
2020-05-12 04:18:38.481 [  2] 5 CBLAuthDelegate:handleRequestingToken
2020-05-12 04:18:38.481 [  2] 5 CBLAuthDelegate:requestToken
##################################
#       NOT YET AUTHORIZED       #
##################################

################################################################################################
#       To authorize, browse to: 'https://amazon.com/us/code' and enter the code: XXXX9Z       #
################################################################################################

#################################################
#       Checking for authorization (1)...       #
#################################################

2020-05-12 04:18:38.555 [  1] 9 ThreadPool:obtainWorker:created=15,obtained=15,releasedToPool=0,releasedFromPool=0,outstanding=15
:


PC などからブラウザで https://amazon.com/us/code へアクセスし developer.amazon.com にログインしたときと同じアカウントでログインした後認証コード(上記メッセージ例だと XXXX9Z )をサイトに入力すると、発話待機状態になるので、ヘッドセットマイクから「Alexa, what time is it?」と英語で発話すると、ヘッドセットスピーカに時刻が音声で(もちろん英語で)かえってくる。

なおコマンドライン上の操作は以下の通り。終了する場合は「q」を入力してEnterキーを押せば良い。

Wake word:
"alexa"と発話し、クエリを開始する

Tap to talk:
「t」を押してEnterを押してからクエリを実行します( "alexa"は必要ありません)。

Hold to talk:
「h」を押してからEnterキーを押すと、ボタンの押しをシミュレートします。
次に、クエリを言います("alexa"は必要ありません)。
「h」を押してからEnterキーを押すと、ボタンの解放をシミュレートできます。

Stop an interaction:
「s」とEnterキーを押して、進行中の対話を停止します。

Privacy mode (microphone off):
マイクのオンとオフを切り替えるには、「m」とEnterキーを押します。

Firmware Version:
「f」キーを押してからEnterキーを押すと、いつでも別のファームウェアバージョンを報告できます。

Info:
「i」を押してからEnterキーを押すと、いつでもヘルプ画面が表示されます。

Reset device:
デバイスをリセットするには、「k」キーを押してからEnterキーを押します。 これにより、デバイスに保存されているデータがすべて消去され、デバイスを再登録する必要があります。
このオプションは、アプリケーションも終了します。

Reauthorize device:
「z」キーを押してからEnterキーを押すと、いつでもデバイスを再認証できます。 これにより、デバイスに保存されているデータがすべて消去され、再認証が開始されます。

Quit:
「q」を押してからEnterキーを押すと、いつでもアプリケーションを終了できます。



デバイス開発とあるからもっとロボティクス的な低レベルのAlexaフレームワーク開発ができるのかと期待していたが..Alexaの認証系を独自にできるとかしかバリエーションがなさそうだ..もっとSDKのコードをハックすればもっとふかいところまでできるかもしれないけど..たとえばDonkeycarにマイクとスピーカをつけてコントローラ不要にするとか..


..先は長そうだ...



p.s.

AVS プロトタイプを使う場合はマイクとスピーカをRaspberry Piに接続する必要がある。しかしRaspbery Piでオーディオ出力を使用する場合は注意が必要だ。

Raspberry Piの音声出力の選択肢としてはイヤホンジャック、HDMI出力の音声、USBデバイスがある。

イヤホンジャックやHDMI音声を使う場合sudo raspi-configでの有効化設定が必要だ。

さらにRaspberry Pi本体のイヤホンジャックは音声だけでなくマイク入力にもなっているので、有効化したら音声入出力はすべてこのジャック1本でまかわなくてなならない。スピーカだけイヤホンジャック、マイクをUSBデバイスで行いたい場合の対応方法は自分は未だ見つけられれいない。

USBデバイスを使う場合、自分はマイクとスピーカで2個のUSBコネクタを消費したくないので、結局テレワーク用に購入したUSB接続するヘッドセットをつないで使用した。テストレベルではこれでよいが、独立したスマートスピーカとして成立させる場合はヘッドセットではだめになる。USBコネクタを消費せずマイク・スピーカピンジャック化するデバイスを使えばよいのだけど、Amazonで売られているこの手のデバイスはジャック自体が箱状態になっているものが多く、消費コネクタは1つでも干渉して下や横のコネクタが使えなくなってしまう。

なので、プロトタイプであろうと、物理的なデバイス選択をしっかりシミュレートしておかないと、買っては失敗し、を繰り返すことになる。



..私のように...

AWS Glueジョブ(Python/Spark)にPythonパッケージを追加する方法

 AWS Glueジョブには2つの種類が存在します。 ETLジョブ(Spark) PySparkコードが実行できるジョブ。 最低でも10並列で実行するので、DynamicFrame/DataFrame操作以外の処理はPython Shellジョブを使ったほうがよい。 Python...