Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Pythonによる4足歩行ロボットの制御と強化学習による歩行動作獲得の実例 #pyconjp

8,969 views

Published on

2015年10月10日に開催された PyConJP2015 で発表したスライドです。
Gazeboによる4足歩行ロボットのシミュレーションを行い、強化学習(Q-Learning)で歩行動作を獲得する試みです。
また、その学習成果を実機のロボットに適用し、4足ロボットを実際に歩かせてみました。

Published in: Technology
  • Be the first to comment

Pythonによる4足歩行ロボットの制御と強化学習による歩行動作獲得の実例 #pyconjp

  1. 1. Pythonによる4足歩行ロボットの制御と 強化学習による歩行動作獲得の実例 Beatrobo, Inc. 竹井英行 PyConJP2015 2015/10/10
  2. 2. 自己紹介 • @HideyukiTakei • H/W: 回路設計、マイコン、外装設計、中国 • SW: フロントエンドJS、Android、AWS • かわいいロボットが好き
  3. 3. 自己紹介
  4. 4. アジェンダ • 盆栽ロボット • ロボットシミュレータGazeboの紹介 • GazeboをPythonからコントロールする • 簡単な機構のロボットの作成 • Q学習による前進動作の獲得 • 盆栽ロボを実機で動作させる • まとめ
  5. 5. 形はできたが…
  6. 6. モーション作るのが面倒 • モータの角度情報を手打ちして、モーション を作らなければならない • 非常に面倒! • 勝手にロボットが動いてくれたら良いのに 強化学習によるモーションの獲得を目指す!
  7. 7. 強化学習の壁 • 数百回の試行回数… • 試行回数多いと、ロボット自体が壊れそうな 心細い設計 • 実物で学習させるには気が引ける • 計測とかもめんどくさそう シミュレーションでやっちゃおう!
  8. 8. Gazebo • http://gazebosim.org/ • オープンソースな3Dのロボット シミュレータ環境 • リアルタイム、見た目きれい • ODEやBulletなどの3D物理エンジン が切り替えられる • よくROSといっしょに使われている • バージョンの問題などもあるので、 今回はROSを使わず直接Gazebo とコミュニケーションする • Gazeboはv6.1.0を利用
  9. 9. Gazeboの見た目
  10. 10. Gazeboの構成 GzServer シミュレーション空間 v GzClient モデル 今回作る 強化学習プログラム Protocol BuffersのPubSubでServer-Clientが通信
  11. 11. Gazebo Tips • Topic Visualizationツールを使うこと で、現在流れているメッセージをリア ルタイムで見ることができる • コマンドラインからメッセージの publish/subscribeができる • Gazebo の単位系は SI に準拠 • 長さはメートル(meter) • 重さ(mass)はキログラム(kg) • 速度(velocity)は • revolute joints は rad/s • <pose> などで6つの数字が並んでいる のは「x y z roll pitch yaw」です
  12. 12. PythonでGazeboと通信 • PyGazebo • https://github.com/jpieper/pygazebo • ほぼProtoBufの *_pb2.py のファイル • 今回使う機能 • Subscribe • ロボットの座標、姿勢 • Publish • ロボットのモータの角度指定
  13. 13. @trollius.coroutine def publish_loop(): manager = yield From(pygazebo.connect()) publisher = yield From( manager.advertise('/gazebo/default/model/joint_cmd', 'gazebo.msgs.JointCmd')) message = pygazebo.msg.joint_cmd_pb2.JointCmd() message.name = 'robot::joint_name' message.axis = 0 message.force = 1.0 while True: yield From(publisher.publish(message)) yield From(trollius.sleep(1.0)) loop = trollius.get_event_loop() loop.run_until_complete(publish_loop()) ジョイント操作用コマンド ロボットの関節を動かすサンプルコード 操作するロボット名と関節名を指定 力を加える方向と強さを指定 コマンドをパブリッシュ Gazeboサーバと通信する ためのマネージャの作成
  14. 14. モデルの表現 • SDF(http://sdformat.org/)を利用 • ロボットシミュレーション向け • モデルや環境を定義するための XMLフォーマット • モデルの形(STLかDAEを指定)、回転軸、表面の摩 擦係数などの物理的な特性が定義できる • モデルを動かす環境もSDFで定義する • https://bitbucket.org/osrf/gazebo_models/src こちらにGazeboで使えるSDFが集まっている • WillowGarageのPR2などのSDFを参考にして モデルの定義をするのがオススメ
  15. 15. SDF-Converterの使い方 • 3DCADのInventorのアセンブリからSDFを生成 • https://github.com/willstott101/SDF- Converter からコードをダウンロードして VisualStudioでexeをビルドする • Inventorでアセンブリ ファイル.iamを開く • SDF-Converterアプリを 同時起動する • Save to file とAlso save STLsにチェックをつけて、 STL Scaleは0.01のまま • Generate SDFを押すと SDFが生成される
  16. 16. 試しに簡単なロボットを作ってみよう • 本格的なロボットの前に板型ロボットに前進移動の モーションを獲得させる • 形は3DCADで作成 • CADデータからSDFを作成 • visualとcollisionのモデルは両方同じSTLを使用 • SDF-Converter(https://github.com/willstott101/SDF-Converter) を利用してSDFを作ろう SDF 3DCADの Inventorで作成 SDF-Converter でInventorの アセンブリから SDFを生成 SDFをGazeboに インポートする
  17. 17. 強化学習(Q学習) • ある状態stである行動atをとったとき、未来に わたってどのくらいの報酬が得られそうかを 表す行動価値関数Q(st, at)を学習 • ε-greedy選択:定められた確率εでランダ ムに行動し,(1-ε)の確率で大きな方のQ値 を持つ行動を選択をする エージェント Q学習による 行動選択 環境 行動at 状態st 環境の 変化 報酬rt rt+1 st+1
  18. 18. 状態sと行動aと報酬r • 状態数を減らすために制約 を設ける • 各関節は-90度、0度、 90度の3パターンのみ • 行動は1つの関節しか動 かせない • 同じ状態になる行動は選 択不可 • 状態sは9パターン • 状態stで取ることができる 行動atは4パターン • 前に進めば進むほど報酬が 高い 1つの関節だけ動かす
  19. 19. プログラムの構成 Environment Agent 状態管理 アクション生成 シミュレータ内の ロボットのサーボ設定と 座標取得 GzServer ロボットの シミュレーション QLearning Q学習部分 今回作ったところ PyGazeboによる ProtoBufのやりとり
  20. 20. 最初のころ バタバタしかしてない
  21. 21. 200試行目くらい いつの間にか前に進むようになってる!
  22. 22. ついに盆栽に強化学習を! • 盆栽ロボ5つのサーボがある • 各足ごと1つの上下方向のサーボ4つ • 4つの足の横軸に動かすためのサーボ1つ • 獲得できた歩行を実機でデモします!!
  23. 23. 歩行の様子
  24. 24. まとめ • Q学習でロボットに前進動作の獲得をさせた • シミュレーションなら意外と簡単 • ソースコードはのちほど公開するので、 みなさん動かしてみてください! • 盆栽は乞うご期待!
  25. 25. Beatroboエンジニア募集中! docker好きな方 ハードウェア好きな方 アルバイト・社員募集中!
  26. 26. ロボット作りでよく使うツール • eagle http://www.cadsoftusa.com/ • プリント基板設計ソフトウェア • elecrow http://www.elecrow.com/ • 激安プリント基板製造サービス • Inventor • 3D CAD。Fusion360は無料で使える • Shapeways • ヨーロッパの3Dプリントサービス • AVR & GCC • 8bitマイコン(C言語で開発)

×