特異点低感度行列を用いた逆運動学 アルゴリズム編
運動学周りを一度ちゃんとまとめよう
Arduino(ESP32 only)と標準的なC++環境で併用できるKinematicライブラリを作っておきましたー
github.com
ESP32のコンパイルオプションで別れているので,コピペでPC環境でも使える
ESP32だと下記の線形代数ライブラリが必要
GitHub - tomstewart89/BasicLinearAlgebra: A library for using matrices and linear algebra on Arduino
Standard C++だとEigenが必要+Kinematicライブラリ内のAffine3d.cpp & Affine3d.hppを削除(アフィン変換)
順運動学
ロボット先端位置・姿勢,関節角度とすると下記のようになる
特異点
が存在するための条件はであるが
であるからが小さいと
関節変化が非常に大きくなり運動として実現できない
そこで数学的な厳密さと運動実現性を考慮した逆運動学がいくつも提案されている
Levenberg-Marquardt 法による可解性を問わない逆運動学[杉原 2011]
今回は特異点低感度運動分解を用いて逆運動学を解く
特異点低感度運動分解
微小関節角度変化を,それに伴う微小位置変化をとし,
最小二乗法より最小化する誤差関数を下記のように定義する
誤差関数の1項目で解の厳密さ,2項目で運動実現性を評価している
または重みを表す対角行列()
誤差が最小となるようなを求める
となるようなを計算すると
ベクトル・行列の微分は下記で復習
線形代数の基礎 — ディープラーニング入門:Chainer チュートリアル
簡単のため,とすると
となる
k は数学的な厳密さと運動実現性の比を表す
整理するととなるので,下記の更新式を用いる