目標
Turtlebot2をPS3コントローラで操作しながら学習用のデータをオンラインで集め深層学習モデルを教師あり学習でトレインし自律走行にできるROSパッケージを5日間以内(ROS Advent Calendar 2017 25日目)でできるとこまで完成することでした。
ソースコード:turtlebot_auto_drive
結果
ROSパッケージは一応完成できましたが、ソフトウェアデザイン、学習モデルの構造、データのpreprocess/augementationなど全体のシステムデザインに関しての改善余地はいくらでもあると思います。現時点では学習しても安全に自律走行する自身はゼロとも言えるでしょう。今後は学習モデルと関係するパイプラインを改善していく予定です。アドバイスなどありましたら是非連絡ください。今回は完成したとこまでポストします。
環境
マシーン
- Raspberry Pi 3 B Model + Camera Module + Ubuntu 16.04.1MATE + ROS Kinetic
- Turtlebot 2 (Clearpath Robotics) + Ubuntu 14.04.2 LTS + ROS Indigo
- Lenovo PC (Master) + Ubuntu 16.04.1 LTS + ROS Kinetic
ライブラリ
- Tensorflow 1.4
- OpenCV 3.2.0
- ROS Kinetic+Indigo
現時点でできる事
機動中にRaspiカメラから得た画像データをDiskに保存し画像ファイルパスとTwistコマンドで学習用のデータを整理し保存する。
ある程度のデータがたまれば(config.yaml
で設定)学習は始まります。学習は定期的に実装され、ROSサービスを通してDiskに保存されてるデータからランダムサンプリングでBatchを作り学習モデルに入力する。
Inferenceが可能になった時点でpredict_twist
サービスが機動します。Raspiカメラから得た画像を入力しライブでTwistコマンドが/mobile_base/commands/velocity
トピックへpublishされTurtlebotはその指示に従います。
システムを機動する
流れ
- まずは
config.yaml
とtrain_config.yaml
でファイルパスとパラメターを設定する。 次に今回開発した
turtlebot_auto_drive
パッケージにあるautobot.launch
ファイルをローンチする。(もしテスティング用の.bag
ファイルが必要でしたらautobot.launch off_line:=true
でローンチしてください。.bag
ファイルはturtlebot_auto_drive/bags
に保存されます。)Raspberry Piから
video_stream_opencv
のパッケージにあるwebcam.launch
をローンチする。/webcam/image_raw/compressed
にpublishされる480x640の画像が必要されます。Turtlebot2をコントロールしているPCから
turtlebot_bringup
にあるminimal.launch
をローンチする。同じくTurtlebot2のPCからturtlebot_teleop
にあるps3_teleop.launch
をローンチする。
多少の調整が必要
これで必要されるノードとサービスは機動するはずです。PS3コントローラでteleopをしますとデータがたまり、ある程のデータがたまれば学習がはじまります。その後にservice_get_prediction
を呼べる事も可能になります。現時点ではpredictionは/mobile_base/commands/velocity/predicted
へpublishされます。Turtlebotへ直接にコマンドを流したければpredict_twist.py
にある
self._cmd_topic + '/predicted'
をself._cmd_topic
に訂正する必要があります。
すべてのノードとサービスがうまく起動すればアウトプットはこんな感じ:
core service [/rosout] found
process[data_buffer-1]: started with pid [26166]
process[util_topic_stamper-2]: started with pid [26167]
process[model_trainer-3]: started with pid [26168]
process[predict_twist-4]: started with pid [26169]
[INFO] [1514185923.510318]: Topic stamper ready...
[INFO] [1514185923.580780]: Subscribers initialized...
[INFO] [1514185923.581317]: ApproximateTimeSync initialized...
[INFO] [1514185923.584422]: Train batch service initialized...
[INFO] [1514185923.584862]: ---------Params loaded----------
[INFO] [1514185923.585178]: Buffer path: home/catkin_ws/src/turtlebot_auto_drive/data/images
[INFO] [1514185923.585394]: Buffer threshold: 10000
[INFO] [1514185923.585582]: Image topic: /webcam/image_raw/compressed
[INFO] [1514185923.585757]: Twist command topic: /mobile_base/commands/velocity/stamped
[INFO] [1514185940.295102]: ----------Model Params------------
[INFO] [1514185940.295567]: Batch size: 32
[INFO] [1514185940.295888]: Mini batch size: 8
[INFO] [1514185940.296165]: # of Epochs: 5
[INFO] [1514185940.296442]: Checkpoint directory: /home/catkin_ws/src/turtlebot_auto_drive/data/models
[INFO] [1514185940.300038]: Service 'service_train_batch' is available...
[INFO] [1514185940.320639]: Waiting for data to populate...
[INFO] [1514185955.412366]: Train data to populated...
[INFO] [1514185955.416035]: Data received.
2017-12-25 16:12:35.470300: I tensorflow/core/platform/cpu_feature_guard.cc:137] Your CPU supports instructions that this TensorFlow binary was not compiled to use: SSE4.1 SSE4.2 AVX AVX2 FMA
[INFO] [1514185958.060898]: Graph built...
[INFO] [1514185962.001560]: Get prediction service initialized...
[INFO] [1514185962.069614]: Service 'service_get_prediction' is available...
[INFO] [1514185962.889941]: Data iterator initialized...
[INFO] [1514186030.176313]: Epoch 0, Loss: 42.002532959
[INFO] [1514186093.322655]: Epoch 1, Loss: 9.709400177
今後やること
- Testを書く。
- 学習モデルを本格的に開発する。
- 学習までのプレプロセスを真剣に考える。
- 全体のROSデザインを再検討する。
- などなど。。。
お知らせ
もし深層学習/強化学習と自動運転/自律走行ロボットなどに興味ありましたら是非DIYRobocarsのMeetupへ参加してください。インターナショナルなグループで最近できたMeetupです。参加をお待ちしております。
1. DIY Robocars Japan Meetup
2. DIY Robocars Japan Connpass