忍者ブログ

明日の設計図

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

[PR]

×

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

コメント

現在、新しいコメントを受け付けない設定になっています。

wxMaximaにて列ベクトルの外積:備忘録

いろいろとあって、逆運動学するソフトがひつようになりました。
そこでフリーソフトの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
年齢:
34
性別:
男性
誕生日:
1989/09/17
職業:
会社員
趣味:
モチベーション探し
自己紹介:
ロボットつくるのが夢

ブログ内検索

アクセス解析