技術
6軸ロボットの逆運動学をsympyで解いてみよう
2021/10/05
SHARE
TechMagic ロボット担当の但馬です。
ロボットアームの逆運動学とは
ロボットアームの重要な技術として逆運動学があります。これは、ロボット手先の望みの位置と姿勢を実現するような、ロボットの関節変位(回転関節の場合は角度、直動関節の場合は位置)を求める計算のことです。ちなみに「逆」があるということは「順」もあり、順運動学は、ロボットの関節変位からロボットの手先の位置と姿勢を求める計算です。
順運動学はとても簡単に計算できる反面、逆運動学はなかなか難しい問題です。逆運動学には大別して以下の2つの解き方があります。
・解析的に閉じた解を求める方法
・数値手法を使って近似解を求める方法
今回は6軸のロボットを対象に、解析的に閉じた解を求める手順を紹介したいと思います。計算が非常に複雑になるのでMathematicaやMapleのような数式処理ソフトウェアを使うことが多いのですが、今回は個人的には初めて、Pythonのsympyモジュールを使ってみました。
対象ロボット
今回対象とするロボットは、デンソーウェーブ社のVS060としました。小型でキビキビと動くかわいいヤツです。
※画像をクリックするとデンソーウェーブ社のサイトへ飛びます。
順運動学、逆運動学を解く前に、このような図を描いてロボットの自由度配置をきちんと定義しておくことが重要です。定義の仕方は一意ではないですが、ここでは以下のように定義しておきます。
回転関節は軸方向に長い円筒形で描かれていて、根本から関節1, 関節2, …,関節6,と6つの関節があります。すべての関節角度は図の姿勢で0度であるとします。
Σ0をベースリンク(根本)の座標系とします。ベース座標系は、ロボットの前方向がx軸、左方向がy軸、上方向をz軸と定義しています。Σtをツールリンク(手先)の座標系として定義し、原点位置はツールの先端とします。
ここに図示はしていませんが、各関節の回転後の子リンクにも座標系Σ1〜Σ6が定義されているとしましょう。各座標系はベース座標系と同じ向きを向いていて、各関節の回転中心に原点があるとします。ただし、点線で囲まれた関節は軸が直交していて、それらの座標系は同じ位置に原点位置が存在するものとします。
つまり関節1と2の座標系の原点は同じ位置(Σ0の真上にd1の高さの位置)にあるとします。関節4,5,6も直交しているので、それらの座標系の原点も同じ位置(関節5の回転中心上の位置)にあるとします。
以上のように定義すると、このロボットの座標変換は関節の角度theta1〜theta6と、関節間の距離のパラメータd1〜d5で定義できることが分かります。
ここで大事なことは、手首の関節4,5,6が直交していることです。この性質により比較的簡単に逆運動学を解くことができます。産業用ロボットアームの手首の3軸が直交していることが多いのはそのためです。
Sympyで解いてみる
さて、ロボットの自由度の定義が終わったら、早速解いてみましょう…といっても、手で解くのはとても大変です。昔はMathematicaなどの有料の数式処理ソフトを使うか、頑張って手で解くかしかなかったのですが、現代ではPythonに無料で使える数式処理モジュール sympyがあります。今回はsympyを使うのは個人的に初めてに近いのですが、問題なく解くことができました。良い時代になったものです…
ここにjupyter notebookのインタラクティブコードを書いておきました。Googleアカウントをお持ちであれば、Google Colabでも実行できます。
SympyでVS-060の逆運動学を解くNotebook
おわりに
式は複雑ですが、あとはこれをC++やPythonなど、必要な言語に実装すれば、ロボットに使うことができます。逆運動学はロボットアームや脚式ロボットで非常に頻繁に使いますし、自分で解いてみると理解が深まります。ぜひ、自分のロボットについて一度、解いてみることをお勧めします。
ただし、3軸が直交していない場合など、自由度配置によっては解析的な解を求めることが非常に難しい場合もあるので注意が必要です。そういう場合はもう一つの、数値手法を使って近似解を求める方法が有効となるでしょう。
TechMagicでは食産業の未来を創造する仲間を募集しています!
随時採用イベントも行っておりますので、ご興味のある方はぜひ下記リンクよりお申し込みください。
【採用イベント申込フォーム】
https://forms.gle/x4GePAw3eaGMRvbF7
その他、募集ポジションの確認やオフィス見学・カジュアル面談の希望など、お気軽にHPからご連絡ください!