Acrobot

Acrobotとは

Acrobot

体操競技の大車輪を真似たロボットです.倒立振子のように,制御の分野においてスタンダードな課題の一つとして用いられています.多変数であり非線形性が強い課題の一つです.

検索すればWebにたくさん出てきますが,たとえば強化学習の課題として使われているのはここが有名です.

ロボットは二つのリンクからなり,4変数(リンク1の角度と角速度,リンク2の角度と角速度)でロボットの状態が決まります.トルクを出せるのはリンク1とリンク2の間のところだけで(2つめの間接),リンク1の根本のところ(第一関節)はぷらぷらしています.

時系列変化
図:Acrobotの時系列的な状態の遷移




デモプログラム

Acrobotの制御を体感できるプログラムが置いてあります.Javaアプレットを使える環境が必要です.また,RBFNで構成した関数近似器を用いて行動評価を表わす関数を学習するプログラムも置いてあります.

どれも,プログラムが重いので注意してください.軽いバージョンも作ろうとは思いますが,なかなか暇もないのでいつになるか分かりません.私はCore2Duoでメモリ1ギガ位のスペックです.


設計

設計図

フリーハンドでイメージを描いてみました.本当はCAD等で正確に設計するべきなんでしょう.しかし,使ったことがないので良く分かりません.

また,特にこだわりはなく,長さや材質なども適当なものを選びます.ただし唯一こだわったのは,パソコンとUSBで接続するという点です,インタフェースがRC232Cだったり拡張ボードが必要だったりする場合は面倒だからです.

ロボットを作るのは素人なのでよく分からない部分が多かったです.特に,角度センサやモータ(回転軸)とリンク(回転体)をどのように接合するのかよく分かりませんでした.とりあえず,軸をやすりでO型からD型に削って,回転体との接合部分も同じように穴をあけて,軸が滑らないようにしました.


準備

簡単にそろえるものを挙げておきます.




ハードウェア試作

Acrobotの正面
Acrobotの側面

直線に切ろうとしても曲がってしまったり,曲げの誤差や穴をあけるにも微妙にずれてしまったりします.また,切ったり穴をあけた後の凸凹や歪みも出ます.また,特にアルミ板における複雑な曲線の加工は至難の業です.

こういうのは業者の人か,技官さんかのプロの人に任せた方が良いと思います.ただし,今回は強化学習によって制御するので,精度は気にせずに作ることにしました.


プログラミング

今回は普通の制御ではなくて,試行錯誤しながら様々な状態での最適な行動を獲得していく強化学習を行うことにしました.強化学習によるAcrobotの制御もよくやられている研究テーマですが,最適な行動に行きつくまでに学習時間がかかることが知られています.

まず簡単のために,行動はモータの最大トルクを左右に出すという2つにします.状態は,リンク1の角度と角速度,リンク2の角度と角速度の4変数で決まります.

行動の選択は,その状態における行動の価値を表す値を左右で比較して大きな方を選択するという方法をとります.ただし,たまに選択を間違えたりします(epsilon-greedy法).

学習はこの行動価値を表す関数を学習することになります.試行錯誤しながらこの関数をQ学習という方法で学習します.

このような学習においては関数近似の能力が鍵となります.まずは,放射状基底関数ネットワーク(RBFN)によって関数近似器を構成します.


デモンストレーション

現在,学習初期のAcrobotの行動についてのデモムービーがあります.

945kB, 0.14, WMV形式, 2008