ロボット開発記録

ロボット開発の進捗や記録をするブログ

[第7週] 逆運動学を解く 準備の準備編 [ヒューマノイド動歩行]

先週の振り返り

 先週の記事では、ROS2とWebotsの連携を、実際にプログラムを組むことで確認しました。
 これによって、ようやく開発環境が明確になりました。

今週からの概要

 今週からいよいよ、理論の話に入っていきます。最終目標である動歩行制御を達成するためのアプローチは様々ありますが、まずは運動学を解き、逆運動学に基づいてロボットの姿勢制御を行っていきます。
 現在の予定では、以下の流れで進めていきます。

   ・ロボットが持つ各リンクを繋ぐ関節の位置座標を得る。
 ・運動学を解くのに必要な座標変換を解く。ヤコビアン(Jacobian)を得る。
 ・理論に基づいて、数値解法による逆運動学を解く。
 ・解いた結果を元に、ロボットの姿勢を制御してみる。
 ・解いた逆運動学の解を元に、その場足踏みを達成する。

 逆運動学の最終目標である『その場足踏み』は、今後の動歩行に向けたタスクとなっています。
 なお、今後進めていくにあたって、主に『ヒューマノイドロボット 改訂2版』(編著:梶田 秀司)を参考にさせていただき、進めていきます。
 また理論のまとめ方に関して、このブログは活動を記録することを主としているので具体的にまとめることはせず、必要最低限のメモに近い書き方で記していきます。

今週の進捗

各リンクを繋ぐ関節の位置

 ロボットがもつ関節の位置座標を、以下にまとめる。
 今回のProjectで用いているロボット、『ROBOTIS OP2』。このロボットはオープンソースとなっているが、関節間の距離などの詳細な寸法は記録されていなかった。
 そこで、Webotsのソースコード内に存在するDARwIn-OP(ROBOTIS OPと同型のロボット)の.protoファイル(ソースコード: GitHubリンク)(シミュレーションモデルを記述したテキストファイル)に記載されている関節(HingeJoint)の位置座標を参考にする。

 以下に、ロボットの各関節のステータスを示す。
 なお、各関節の親子関係を元に階層的に記している。例えば、PelvYLはPlevLの親であり、LegUpperLはPlevLの子である。

<記載情報説明_関節名: DEF名, 座標系(正面-右-上), 位置座標(親を座標中心とした位置座標), ソースコードでの行番目>
Robot
- Neck: 19: DEF DNeck, x-y-z, axis (x0, y0, z1), anchor (x0, y-0, z0.051), line-213
- - Head: 20: DEF DHead, x-y-z, axis (x-1, y0, z0), anchor ( = Neck), line-261
- PelvYL: 8: DEF DPelvYL, x-y-z, axis (x0, y0, z-1), anchor (x-0.005, y0.037, z-0.1222), line-454
- - PlevL: 10: DEF DPelvL, z-x-y, axis (x0, y0, z-1), anchor ( = PelvYL), line-500
- - - LegUpperL: 12: DEF DLegUpperL, z-x-y, axis (x-1, y0, z0), anchor ( = PelvYL), line-548
- - - - LegLowerL: 14: DEF DLegLowerL, z-x-y, axis (x-1, y0, z0), anchor (x-0, y-0.093, z0), line-606
- - - - - AnkleL: 16: DEF DAnkleL, z-x-y, axis (x1, y0, z0), anchor (x0, y-0.093, z0), line-652
- - - - - - FootL: 18: DEF DFootL, z-x-y, axis (x0, y0, z1), anchor ( = AnkleL), line-698
- PelvYR: 7: DEF DPelvYR, x-y-z, axis (x0, y0, z-1), anchor (x-0.005, y-0.037, z-0.1222), line-899
- - PelvR: 9: DEF DPelvR, z-x-y, axis (x0, y0, z-1), anchor ( = PelvYR) line-945
- - - LegUpperR: 11: DEF DLegUpperL, z-x-y, axis (x1, y0, z0), anchor ( = PelvYR), line-989
- - - - LegLowerR: 13: DEF DLegLowerR, z-x-y, axis (x1, y0, z0), anchor (x-0, y-0.093, z0), line-1047
- - - - - AnkleR: 15: DEF DAnkleR, z-x-y, axis (x-1, y0, z0), anchor (x0, y-0.093, z0), line-1093
- - - - - - FootR: 17: DEF DFootR, z-x-y, axis (x0, y0, z1), anchor ( = AnkleR), line-1139
- ShoulderL: 2: DEF DShoulderL, x-y-z, axis (x0, y1, z0), anchor (x-0, y0.082, z0), line-1340
- - ArmUpperL: 4: DEF DArmUpperL, z-x-y, axis (x0, y0, z-1), anchor (x0, y-0.016, z0), line-1386
- - - ArmLowerL: 6: DEF DArmLowerL, z-x-y, axis (x1, y0, z0), anchor (x0, y-0.06, z0.016), line-1446
- ShoulderR: 1: DEF DShoulderL, x-y-z, axis (x0, y-1, z0), anchor (x0, y-0.082, z-0), line-1586
- - ArmUpperR: 3: DEF DArmUpperR, z-x-y, axis (x0, y0, z-1), anchor (x0, y-0.016, z0), line-1632
- - - ArmLowerR: 5: DEF DArmLowerR, z-x-y, axis (x-1, y0, z0), anchor (x0, y-0.06, z0.016), line-1692

 ロボットに搭載されている各関節の名前と位置は、公式ドキュメントに記載されている。ここから引用すると、ロボットの関節の位置は、以下のようになっている。

https://raw.githubusercontent.com/cyberbotics/webots/released/docs/guide/images/robots/robotis-op2/robotis_op2_servo_map.png
title: Position of the Motors

 また、関節と同位置に関節の角度を取得する、PositionSensorが搭載されている。運動学には直接は関係ないが、このステータスも、以下に示す。

maxForce = maxTorque: 2.5 [N*m]=[kgf*m]=[kg*(m/(s^2))*m]
acceleration: 55 [rad/(s^2)]
maxVelocity: 12.26 [rad/s]
dampingConstant: 0.002
staticFriction: 0.025 [N*m]

Position: ~ [rad]

- Neck: 19: minPosition -1.81, maxPosition 1.81, line-213
- - Head: 20: minPosition -0.36, maxPosition 0.94, line-261
- PelvYL: 8: minPosition -0.69, maxPosition 2.5, line-454
- - PlevL: 10: minPosition -1, maxPosition 0.93, line-500
- - - LegUpperL: 12: minPosition -0.5, maxPosition 1.68, line-548
- - - - LegLowerL: 14: minPosition -2.25, maxPosition 0.03, line-606
- - - - - AnkleL: 16: minPosition -1.39, maxPosition 1.22, line-652
- - - - - - FootL: 18: minPosition -1.02, maxPosition 0.6, line-698
- PelvYR: 7: minPosition -2.42, maxPosition 0.66, line-899
- - PelvR: 9: minPosition -1.01, maxPosition 1.01, line-945
- - - LegUpperR: 11: minPosition -1.77, maxPosition 0.45, line-989
- - - - LegLowerR: 13: minPosition -0.02, maxPosition 2.25, line-1047
- - - - - AnkleR: 15: minPosition -1.24, maxPosition 1.38, line-1093
- - - - - - FootR: 17: minPosition -0.68, maxPosition 1.04, line-1139
- ShoulderL: 2: minPosition -3.14, maxPosition 2.85, line-1340
- - ArmUpperL: 4: minPosition -2.25, maxPosition 0.77, line-1386
- - - ArmLowerL: 6: minPosition -1.18, maxPosition 1.63, line-1446
- ShoulderR: 1: minPosition -3.14, maxPosition 3.14, line-1586
- - ArmUpperR: 3: minPosition -0.68, maxPosition 2.3, line-1632
- - - ArmLowerR: 5: minPosition -1.65, maxPosition 2.5, line-1692

 以上のように、ロボットが持つ関節の位置を得ることができた。
 ここで示したステータスは、開発リポジトリのこの.txtファイルにの同様に記している。

最後に・今後の予定

・今回で、関節の位置座標を得ることができました。
・次は予定通り、座標変換やヤコビアンなど、徐々に運動学に入っていきたいと思います。