数値計算で逆運動学を解く
Denavit-Hartenberg parametersでマニピュレータを記述し、数値計算で逆運動学を解いた。パラメータさえ書けば色々なマニピュレータに対応できるので便利そう。運動学はにわかなので違うところあったら教えてください。
Notebook
実装の例と式はJupyter Notebookに書いた。だからこのブログは参考にしたサイトの紹介だけ。
Denavit-Hartenberg parametersと同次変換行列
Denavit-Hartenberg parametersはマニピュレータの関節角やリンクの長さを表現する際によく用いられている記法。このパラメータから同次変換行列を求め、順運動学を解く。
こちらのサイトが図や式が豊富で大変わかりやすかったです。
今回はこんな感じの3DoFなマニピュレータを考える。
Denavit-Hartenberg parametersは多分こんな感じ。
0 | 0 | 0 | ||
0 | 0 | |||
1 | 0 | 0 | ||
1 | 0 | 0 | 0 |
同次変換行列はこれに代入していく。この式をJupyter Notebookに書いてもGitHubで見るとレイアウトが崩れるから発狂しそうだった。ここに書いておく。SやCはそれぞれsin、cosの略。
同次変換行列を順にかけていくと、ベースから見たエンドエフェクタの位置姿勢がわかる。つまりこれで順運動学が解ける。
数値計算
まず関節角ベクトル, 手先位置ベクトルを下記のように定義する。
するとヤコビ行列はこんな感じ。
初期値を適当に設定して、下記式を繰り返し計算すると解ける。ちなみにが順運動学。
計算してみるとこんな感じ。水色の棒がマニピュレータで、赤い丸が目標手先位置。計算を繰り返すごとに手先位置と赤い丸の位置が近づいていくのがわかる。
使用例
書いたコードをそのまんまROSパッケージに入れてアームを動かしてみた。PythonなのでC++と比べて遅いけど、とりあえず動くしわかりやすいのでいいかなと思ってる。
参考
マニピュレータの描画方法を参考にさせていただきました。