4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ROSAdvent Calendar 2017

Day 25

自律走行Turtlebot:機動中に深層学習モデルを学習し自律走行までの道のり

Last updated at Posted at 2017-12-25

目標

Turtlebot2をPS3コントローラで操作しながら学習用のデータをオンラインで集め深層学習モデルを教師あり学習でトレインし自律走行にできるROSパッケージを5日間以内(ROS Advent Calendar 2017 25日目)でできるとこまで完成することでした。

ソースコード:turtlebot_auto_drive

結果

ROSパッケージは一応完成できましたが、ソフトウェアデザイン、学習モデルの構造、データのpreprocess/augementationなど全体のシステムデザインに関しての改善余地はいくらでもあると思います。現時点では学習しても安全に自律走行する自身はゼロとも言えるでしょう。今後は学習モデルと関係するパイプラインを改善していく予定です。アドバイスなどありましたら是非連絡ください。今回は完成したとこまでポストします。

##環境

マシーン

  1. Raspberry Pi 3 B Model + Camera Module + Ubuntu 16.04.1MATE + ROS Kinetic
  2. Turtlebot 2 (Clearpath Robotics) + Ubuntu 14.04.2 LTS + ROS Indigo
  3. Lenovo PC (Master) + Ubuntu 16.04.1 LTS + ROS Kinetic

ライブラリ

  1. Tensorflow 1.4
  2. OpenCV 3.2.0
  3. ROS Kinetic+Indigo

現時点でできる事

機動中にRaspiカメラから得た画像データをDiskに保存し画像ファイルパスとTwistコマンドで学習用のデータを整理し保存する。

ある程度のデータがたまれば(config.yamlで設定)学習は始まります。学習は定期的に実装され、ROSサービスを通してDiskに保存されてるデータからランダムサンプリングでBatchを作り学習モデルに入力する。

Inferenceが可能になった時点でpredict_twistサービスが機動します。Raspiカメラから得た画像を入力しライブでTwistコマンドが/mobile_base/commands/velocityトピックへpublishされTurtlebotはその指示に従います。

##システムを機動する

流れ

  1. まずはconfig.yamltrain_config.yamlでファイルパスとパラメターを設定する。

  2. 次に今回開発したturtlebot_auto_driveパッケージにあるautobot.launchファイルをローンチする。(もしテスティング用の.bagファイルが必要でしたらautobot.launch off_line:=trueでローンチしてください。.bagファイルはturtlebot_auto_drive/bagsに保存されます。)

  3. Raspberry Piからvideo_stream_opencvのパッケージにあるwebcam.launchをローンチする。/webcam/image_raw/compressedにpublishされる480x640の画像が必要されます。

  4. 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

今後やること

  1. Testを書く。
  2. 学習モデルを本格的に開発する。
  3. 学習までのプレプロセスを真剣に考える。
  4. 全体のROSデザインを再検討する。
  5. などなど。。。

お知らせ

もし深層学習/強化学習と自動運転/自律走行ロボットなどに興味ありましたら是非DIYRobocarsのMeetupへ参加してください。インターナショナルなグループで最近できたMeetupです。参加をお待ちしております。

  1. DIY Robocars Japan Meetup
  2. DIY Robocars Japan Connpass
4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?