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

27
Pythonによる4足歩行ロボットの制御と 強化学習による歩行動作獲得の実例 Beatrobo, Inc. 竹井英行 PyConJP2015 2015/10/10

Upload: hideyuki-takei

Post on 08-Jan-2017

5.901 views

Category:

Technology


7 download

TRANSCRIPT

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

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

Beatrobo, Inc. 竹井英行PyConJP2015 2015/10/10

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

自己紹介

• @HideyukiTakei • H/W: 回路設計、マイコン、外装設計、中国 • SW: フロントエンドJS、Android、AWS • かわいいロボットが好き

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

自己紹介

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

アジェンダ

• 盆栽ロボット • ロボットシミュレータGazeboの紹介 • GazeboをPythonからコントロールする • 簡単な機構のロボットの作成 • Q学習による前進動作の獲得 • 盆栽ロボを実機で動作させる • まとめ

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

形はできたが…

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

モーション作るのが面倒

• モータの角度情報を手打ちして、モーションを作らなければならない

• 非常に面倒! • 勝手にロボットが動いてくれたら良いのに

強化学習によるモーションの獲得を目指す!

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

強化学習の壁

• 数百回の試行回数… • 試行回数多いと、ロボット自体が壊れそうな心細い設計

• 実物で学習させるには気が引ける • 計測とかもめんどくさそう

シミュレーションでやっちゃおう!

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

Gazebo• http://gazebosim.org/ • オープンソースな3Dのロボット シミュレータ環境

• リアルタイム、見た目きれい • ODEやBulletなどの3D物理エンジンが切り替えられる

• よくROSといっしょに使われている • バージョンの問題などもあるので、今回はROSを使わず直接Gazeboとコミュニケーションする

• Gazeboはv6.1.0を利用

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

Gazeboの見た目

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

Gazeboの構成

GzServerシミュレーション空間

vGzClient

モデル

今回作る 強化学習プログラム

Protocol BuffersのPubSubでServer-Clientが通信

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

Gazebo Tips• Topic Visualizationツールを使うことで、現在流れているメッセージをリアルタイムで見ることができる

• コマンドラインからメッセージのpublish/subscribeができる

• Gazebo の単位系は SI に準拠 • 長さはメートル(meter) • 重さ(mass)はキログラム(kg) • 速度(velocity)は • revolute joints は rad/s • <pose> などで6つの数字が並んでいるのは「x y z roll pitch yaw」です

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

PythonでGazeboと通信

• PyGazebo • https://github.com/jpieper/pygazebo • ほぼProtoBufの *_pb2.py のファイル • 今回使う機能 • Subscribe • ロボットの座標、姿勢 • Publish • ロボットのモータの角度指定

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

@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サーバと通信する ためのマネージャの作成

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

モデルの表現• SDF(http://sdformat.org/)を利用 • ロボットシミュレーション向け • モデルや環境を定義するための XMLフォーマット

• モデルの形(STLかDAEを指定)、回転軸、表面の摩擦係数などの物理的な特性が定義できる

• モデルを動かす環境もSDFで定義する • https://bitbucket.org/osrf/gazebo_models/src こちらにGazeboで使えるSDFが集まっている

• WillowGarageのPR2などのSDFを参考にして モデルの定義をするのがオススメ

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

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が生成される

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

試しに簡単なロボットを作ってみよう• 本格的なロボットの前に板型ロボットに前進移動のモーションを獲得させる • 形は3DCADで作成 • CADデータからSDFを作成 • visualとcollisionのモデルは両方同じSTLを使用 • SDF-Converter(https://github.com/willstott101/SDF-Converter)を利用してSDFを作ろう

SDF

3DCADの Inventorで作成

SDF-Converter でInventorの アセンブリから SDFを生成

SDFをGazeboに インポートする

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

強化学習(Q学習)• ある状態stである行動atをとったとき、未来にわたってどのくらいの報酬が得られそうかを表す行動価値関数Q(st, at)を学習

• ε-greedy選択:定められた確率εでランダムに行動し,(1-ε)の確率で大きな方のQ値を持つ行動を選択をする

エージェントQ学習による 行動選択

環境行動at

状態st

環境の 変化

報酬rt rt+1st+1

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

状態sと行動aと報酬r• 状態数を減らすために制約を設ける • 各関節は-90度、0度、 90度の3パターンのみ • 行動は1つの関節しか動かせない • 同じ状態になる行動は選択不可

• 状態sは9パターン • 状態stで取ることができる行動atは4パターン • 前に進めば進むほど報酬が高い

1つの関節だけ動かす

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

プログラムの構成

Environment

Agent状態管理

アクション生成シミュレータ内の

ロボットのサーボ設定と 座標取得

GzServerロボットの

シミュレーションQLearning

Q学習部分

今回作ったところ

PyGazeboによる ProtoBufのやりとり

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

最初のころ

バタバタしかしてない

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

200試行目くらい

いつの間にか前に進むようになってる!

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

ついに盆栽に強化学習を!• 盆栽ロボ5つのサーボがある • 各足ごと1つの上下方向のサーボ4つ • 4つの足の横軸に動かすためのサーボ1つ • 獲得できた歩行を実機でデモします!!

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

歩行の様子

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

まとめ

• Q学習でロボットに前進動作の獲得をさせた • シミュレーションなら意外と簡単 • ソースコードはのちほど公開するので、 みなさん動かしてみてください!

• 盆栽は乞うご期待!

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

Beatroboエンジニア募集中!

docker好きな方 ハードウェア好きな方 アルバイト・社員募集中!

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

ロボット作りでよく使うツール• eagle http://www.cadsoftusa.com/ • プリント基板設計ソフトウェア • elecrow http://www.elecrow.com/ • 激安プリント基板製造サービス • Inventor • 3D CAD。Fusion360は無料で使える • Shapeways • ヨーロッパの3Dプリントサービス • AVR & GCC • 8bitマイコン(C言語で開発)