狠狠撸

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

More Related Content

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