忍者ブログ
たまにロボットを考えるブログ・・・。
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

いろいろとあって、逆運動学するソフトがひつようになりました。
そこでフリーソフトのmaximaをチョイス!

いろいろをまず解説すると、
6軸マニの逆運動学を行う、、、には
ヤコビアンで数値計算がひつようぽい、、、ので
同次変換行列を計算して、、、
6軸分のヤコビアンを求める、、、となり
関節ごとの同次変換行列から、回転軸の単位ベクトルと関節位置を使いヤコビアンを求める、、、つまり
回転軸が分かって角速度を与えれば、後は腕のながさで次の関節の位置の速度と角速度が出ると、、、そういうわけで


腕の長さベクトルと回転軸周りの角速度ベクトルを外積しないといけません!

つまり同次変換行列から、列ベクトルを抜き出して外積してその結果から新たにヤコビアンの行列を生成します。

で、maximaには標準で外積の機能がりません←どうしてこうなってる?

調べるとべクトル用のパッケージがあってそれを使えばできるとかなんとか・・・

load(vect);

u:[a,b,c];

v:[x1,x2,x3];

express(u~v);

って書くとこうなる↓
[b*x3-c*x2,c*x1-a*x3,a*x2-b*x1]

いいじゃんねー。

だがしかし、これは行ベクトルというより、単なるリストなのです。

ちなみに1行しかないmatrixで宣言すると

load(vect);

u:matrix([a,b,c]);

v:matrix([x1,x2,x3]);

express(u~v);

って書くとこうなる↓
~ used with improper arguments: matrix([a,b,c])matrix([x1,x2,x3])
#0: express1(expn=matrix([a,b,c]) ~ matrix([x1,x2,x3]))(vect.mac line 166)
 -- an error. To debug this try: debugmode(true);

くそだ、なんだこれ


そんなわけで、関数を定義します。

cros(a,x):=matrix(a[2]*x[3]-a[3]*x[2],a[3]*x[1]-a[1]*x[3],a[1]*x[2]-a[2]*x[1]);
コレ、テストに出ル。

結果

あ、間違ってる、画像治すのめんどいけどプログラムはなおす。
u1v3-u3v2×
u2v3-u3v2○


はい、できました。

寝ましょう。

拍手[1回]

PR
この記事にコメントする
お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
プロフィール
HN:
Adel
年齢:
28
性別:
男性
誕生日:
1989/09/17
職業:
会社員
趣味:
モチベーション探し
自己紹介:
ロボットつくるのが夢
ブログ内検索
カウンター
君は何人目かな
カレンダー
09 2017/10 11
S M T W T F S
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
最新コメント
[09/06 ジョー]
[06/22 fake serpenti watch bvlgari]
[06/22 where to buy hermes clic clac bracelet faux]
[04/09 blacklab]
[02/16 オイルマン]
最新トラックバック
コガネモチ
忍者AdMax
アクセス解析
忍者ブログ [PR]