OpenHRP3講座(その1)

コントローラの説明


インストールはここを参考にしてOpenHRP-3.0.3をインストールしてください。
3.1系のインストールはできなかったので解説できません。なんで余計に難しくするんでしょうね?
(追記:3.1系のインストールは苦難の末できました。)
3.0系は解説を読めばインストールできます。実行するときはファイアーウォールをOFFにしないと動作しないかもしれません。
インストールが完了したら。OpenHRP-3.0.3\Controller\rtc\SamplePDのSamplePD.cppを見てください。
これはヒューマノイドロボットの歩行を操作するためのコントローラです。
このプログラムは見ての通りRTミドルウェアで書かれてます。つまりRTミドルウェアを知らないと理解できません。
というより、このプログラム自体がSamplePDコンポーネントです。つまり入力ポートと出力ポートを持っています。
入力はセンサから取得した現在の関節角度、出力はモータへのトルクの指令です。


RTC::ReturnCode_t SamplePD::onExecute(RTC::UniqueId ec_id)に制御側らしきものが書かれてます。
onExecuteとはSamplePD.cppと同じフォルダにあるrtc.confがありますが、exec_cxt.periodic.rate: 1000000とあるため、1[sec]に 1000000回実行するという意味です。


m_angleIn.update()でm_angleにセンサからの角度のデータを格納しているものと思われます。
そして、q_ref、dq_refにangle、velに94行目、98行目のangle.open(ANGLE_FILE);、vel.open(VEL_FILE);で読み込んでおいたetcフォルダのangle.dat、vel.datのデータのうち29個を読み込みます。
angle >> q_ref[0];はdatファイルの各行の最初が角度ではなく時間なので飛ばすようにしています。そして、その後のfor文で29個格納しています。
そして、 次のfor文で各関節にトルクを加えます。m_angle.data[i]は現在の角度なのでそれをqに格納します。
qold[i]はワンステップ前の角度で、これを現在の角度から引いてサンプリングタイムで割ることで速度が求まります。
そして、m_torque.data[i] = -(q - q_ref[i]) * Pgain[i] - (dq - dq_ref[i]) * Dgain[i];でトルクのデータを格納します。
Pgain、Dgainは107〜111行目でetcフォルダのPDgain.datから読み込んでます。
m_torqueOut.write();はRTミドルウェアの知識があればわかりますが、トルクのデータをモータのコンポーネントに送っています。


だいたいこんなところです。一体、datファイルをどうやって作ったんでしょうね?29個も関節を動かすのにどうやってるんでしょうね。疑問だらけだ。こういうサンプリング時間ごとの角度をすべて決めて制御するというのは嫌いだ。


SampleHGなんか、Inportなしで、角度、角速度、角加速度をOutportとしているみたいだ。それって制御になってるのか?センサ情報を利用しないのはロボットじゃないだろ。

SampleLFはヒューマノイドロボットが箱を持ち上げるのを操作するコントローラです。59行目のm_torqueInL("r_torque_out",m_torqueL)と60行目のm_torqueInR("l_torque_out",m_torqueR)はたぶん手先の圧力かその方向かなんかだとは思いますがよくわかりません。最終的にはPDでやっているようですが。


SVコントローラは車の制御です。ステアリングの角度と車輪の角速度をInportして、トルクをOutportしているようです。

PA10Sampleはマニピュレータで箱をつかむためのコントローラです。これもPDコントローラと同じで関節角度をInport、トルクをOutportでPD制御です。

最後にSampleControllerはヒューマノイドロボットが歩いて、机の上のビデオテープらしきものを把持するコントローラです。

というわけで、サンプルのコントローラは全てどうやって作ったかわからないdatファイルからデータから読み込んで制御しています。次回はモデルの読み込みをやって、その後、datファイルを使わずに制御を行います。


OpenHRP3講座に戻る

トップページへ戻る