10
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ROS講座 109 逆運動学を解く

Last updated at Posted at 2020-03-01

環境

この記事は以下の環境で動いています。

項目
CPU Core i5-8250U
Ubuntu 16.04
ROS Kinetic

インストールについてはROS講座02 インストールを参照してください。
またこの記事のプログラムはgithubにアップロードされています。ROS講座11 gitリポジトリを参照してください。

概要

ロボットアームの制御ではアームの先端をある地点に移動させるという制御が良く行われます。しかしロボットアームへの入力として、各軸の角度を渡します。この2つを変換するのがアームの制御の基本になります。

  • 「各軸の角度」->「先端の位置」に変換するのを「運動学」
  • 「先端の位置」->「各軸の角度」に変換するのを「逆運動学」

と呼びます。これらをプログラムしていきます。

対象となるアーム

特に逆運動学はアームが複雑になると、そもそも解析解がなく反復法で解く必要がありますし、そこまで複雑にならなくてもベアで書くのには限界があります。ここではよくつかわれる4軸のアームを例にとります。
下の図のように根元から、yaw回転をする軸が1つ、pitch回転をする軸が3つあります。この構成だと先端の角度を水平などに指定したまま、先端のxyzの位置を指定できるために簡易的なロボットアームでよく使われる形式です。

arm_link図.png

計算の原理

運動学

たいそうな名前がついていますが、ただ三角関数の計算をするだけです。
x,y,zの座標系に、第1関節の向いているほうの向きにL軸を取ります。

arm_link図2.png

L軸: L3sin(a2) + L4sin(a2+a3) + L5sin(a2+a3+a4)\\
Z軸: L1 + L2 + L3cos(a2) + L4cos(a2+a3) + L5cos(a1+a2+a3)\\

\left(
  \begin{array}{ccc}
    x \\
    y \\
    z 
  \end{array}
\right)
=
\left(
  \begin{array}{ccc}
    L軸 cos(a1) \\
    L軸 sin(a1) \\
    Z軸 
  \end{array}
\right)

逆運動学

こちらは少々複雑です。最終的に2軸で余弦定理を使うところまで追い込みます。
出力は(a1,a2,a3,a4)の4変数になるので一意な入力を得るには先端の(x,y,z)位置と選択の角度(φ)を入力とします。φ=0は先端が真上を向いている。φ=π/2は真横を向いているを表します。

arm_link図3.png

問題設定から第1リンクの先と第3リンクの先の(L,Z)面での座標が求まります。

arm_link図3.png

ここで第3、第4リンクだけを切り抜くと以下のようになります。ここでできる三角形の3辺の長さが分かるので、余弦定理から角度を求められます。
arm_link図4.png

ソースコード

逆運動学を解くプログラムはarm_lecture/src/arm_ik.hにあります。
arm_ik_nodeでこれを使って動かします。

ビルド

cd ~/catkin_ws
catkin_make

実行

 roslaunch arm_lecture arm4d_ik.launch 

逆運動学の入力となる入力のx,y,z位置を赤の球で表示します。その場所に移動するアームの角度を算出して移動します。

arm_ik.gif

目次ページへのリンク

ROS講座の目次へのリンク

10
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?