U. ロボットアームの速度加速度解析 2004.10.05
作成
ソースファイル kineSource 実行ファイル kineexe
2−1.順運動学 analys_pose( )
2−2.速度加速度解析k analys_vel_acck( )
2−3.速度加速度解析A analys_vel_accA( )
2−4.ヤコビアン
Jacobian( )
の解析を行う.
1 .ロボット構造の設定
(1)関節・アームをベースから
B-J0-L0-J1-L1-……Jn-1-Ln-1-Jn-Ln(Hand/Work)
と名付ける.(n=NFREE-1)
(2)初期状態(関節変位=0の状態)を
基本とする.
(3)関節位置を各リンク座標の原点とする.
(4)回転関節軸をZ軸とする.
(5)直動関節の場合はその方向をX軸とする.
(6)逆運動学解析のためのロボット構造の入力は
以下のようにする.初期状態で
(6−1)静止座標系から見たロボットのベース
位置:B
(6−2)静止座標系から見た関節位置:Jk
(k=0,1,…..,n=NFREE-1)
(6−3)静止座標系から見た各アーム座標系:Σk
(k=0,1,….., n=NFREE-1)
(6−4)静止座標系から見たワークの位置:rw
(6−5)静止座標系から見たワークの姿勢:Σw
(6−6)関節種別(回転Rか直動Sか)
2.前準備
ロボット構造・動的パラメータを kinema.c へ受け渡す. ロボットの初期ポーズ
(RRSRRRの例)
[註]座標変換行列は静変換行列と動変換行列の積で表す.その配列順序に注意
,
()
⇒
:Σk-1から見たΣskの姿勢
:初期ポーズのアームベクトルのΣk-1表示
() ()
() ⇒
(2−1)初期形態から座標変換行列を計算するとき
図の初期状態を与えて座標変換行列を作る.
EtoA( NFREE, JTYPE,
BASP0, BASE0, rJ0, E0, As ) (2002-6-28, 2004-9-25 改訂)
●この関数に受け渡す変数
int NFREE:ロボットの自由度
char JTYPE[k-th]:Jkの関節タイプ (‘R’or ‘S’)(‘RRRRRR’,’RRSRSR’など)
double
BASP0[3]:ロボットベースの位置(ΣA表示)
double
BASE0[3][3]:ロボットベースの姿勢(ΣA表示)
double rJ0[k-th][3]:関節点Jkの初期ポーズの位置(ΣA表示)
double E0[k-th][3][3]:アームLkの初期ポーズの姿勢(ΣA表示)
●戻し値
double As[k-th][4]3[]:Σk→Σk-1への静座標変換行列
●kinema.cに作成する変数
NFREE:自由度
JTYPE[k-th]:Jkの関節タイプ(‘R’or ‘S’)
AB[4][3]:ΣB→ΣAの座標変換行列(一定)
AS[k-th][4][3]:静座標変換行列
WRKP0[3]:ワークのΣn表示の位置(AS[NFREE][3-th)[3]と同じ)
WRKXN[3],WRKYN[3],WRKZN[3]:ワークのΣn表示の姿勢(AS[NFREE][0,1,2][3]と同じ)
(2−2)既に座標変換行列が分かっているとき
setrobot( NFREE, JTYPE,
AB, As )
●この関数に受け渡す変数
int NFREE:ロボットの自由度(=6)
char JTYPE[k-th]:関節Jkのタイプ ‘R’または‘S’(‘RRRRRR’,’RRSRSR’など)
double
AB[4][3]:ΣB→ΣAの座標変換行列
double As[k-th][4][3]:Σk →Σk-1への静座標変換行列(k=0,1,2,…,NFREE-1)
double As[NFREE][4][3]:Σn表示のワークの位置と姿勢
●戻し値 なし
●kinema.cに作成する変数
NFREE:自由度
JTYPE[k-th]:関節タイプ
AB[4][3]:ΣB→ΣAの座標変換行列(一定)
AS[k-th][4][3]:静座標変換行列(As[k-th][4][3]と同じ)
WRKP0[3]:ワークのΣn表示の位置(As[NFREE][3-th)[3]と同じ)
WRKXN[3],WRKYN[3],WRKZN[3]:ワークのΣn表示の姿勢(As[NFREE][0,1,2][3]と同じ)
3.解析項目
(1)順運動学
関節変位Φを与えて各関節位置rJk・アーム姿勢Ek,ワーク位置rw姿勢Ewを求め
る.
analys_pose(
PHI, RJ, EARM, RW, EW )
●計算のために必要な既知変数(kinema.cへ既に受け渡している変数.前準備による)
NFREE:自由度
As[k-th][4][3]:静座標変換行列
As[NFREE-th][4][3]:ワークの位置姿勢のΣn表示(n=NFREE-1)
●関数への入力
double PHI[k]:関節変位(
rad or m )
●関数の出力
double RJ[k-th][3]:関節点Jkの位置(ΣA表示)(m)
double EARM[k-th][3][3]:アームLkの姿勢(ΣA表示)
double RW[3]:ワークの位置(ΣA表示)(m)
double EW[3][3]:ワークの姿勢(ΣA表示)
(2)速度加速度解析k
関節変位・速度・加速度,各アーム重心位置rGkを与えて,各関節点の速度vJk,加速度aJk,各アームの角速度ωk,角加速度αk,ワークの速度vw加速度aw,角速度ωw角加速度αw,および各アーム重心の速度vGk,加速度aGk,ワーク重心の速度vGw加速度aGwを,Σk座標系表示で求める.
analys_vel_acck(
PHI, DPHI, DDPHI, rg, OMEGA, ALPHA, VJ, AJ, VW, AW,
VG , AG, VGW, AGW )
●計算のために必要な既知変数(kinema.cへ既に受け渡している変数.前準備による)
NFREE:自由度
JTYPE[k-th]:Jkの関節タイプ(’R’ or ‘S’ )
As[k-th][4][3]:静座標変換行列
As[NFREE-th][4][3]:ワークの位置姿勢のΣn表示(n=NFREE-1)
●関数への入力
double PHI[k]:関節変位(rad
or m)
double DPHI[k]:関節速度(rad/s
or m/s)
double DDPHI[k]:関節加速度( or )
double
rg[k-th][3]:アームLkの重心位置(Σk表示)(m)
double
rg[n-th][3]:ハンド/ワークの重心位置(Σn表示)(m)(n=NFREE-1)
●関数の出力 (VW[], AW[]以外は全てΣk座標系表示)
double OMEGA[k-th][3]:アームLkの角速度(rad/s)
double ALPHA[k-th][3]:アームLkの角加速度()
double OMEGA[n-th][3]:ハンド/ワークの角速度(rad/s) (n=NFREE-1)
double ALPHA[n-th][3]:ハンド/ワークの角加速度()
double VJ[k-th][3]:関節点Jkの速度(m/s)
double
AJ[k-th][3]:関節点Jkの加速度()
double VW[3]:ワークWの速度(m/s)
double AW[3]:ワークWの加速度()
double VG[k-th][3]:アームLk重心の速度(m/s)
double
AG[k-th][3]:アームLk重心の加速度)
double VGW[3]:ハンド/ワークの重心の速度(m/s) (ΣA表示)
double AGW[3]:ハンド/ワークの重心の加速度()(ΣA表示)
(3)速度加速度解析A
(2)と同じ計算であるが,結果をΣA表示で出力する.
関節変位・速度・加速度を与えて,各関節点の速度vJk,加速度aJk,各アームの角速度ωk,角加速度αk,ワークの速度vw加速度aw,角速度ωw角加速度αwを,ΣA座標系表示で求める.
analys_vel_accA(
PHI, DPHI, DDPHI, OMEGA, ALPHA, VJ, AJ, VW, AW )
●計算のために必要な既知変数(kinema.cへ既に受け渡している変数.前準備による)
NFREE:自由度
JTYPE[k-th]:Jkの関節タイプ(’R’ or ‘S’ )
As[k-th][4][3]:静座標変換行列
As[NFREE-th][4][3]:ワークの位置姿勢のΣn表示(n=NFREE-1)
●関数への入力
double OMEGA[k-th][3]:アームLkの角速度(rad/s)
double ALPHA[k-th][3]:アームLkの角加速度()
double OMEGA[n-th][3]:ハンド/ワークの角速度(rad/s) (n=NFREE-1)
double ALPHA[n-th][3]:ハンド/ワークの角加速度()
double VJ[k-th][3]:関節点Jkの速度(m/s)
double
AJ[k-th][3]:関節点Jkの加速度()
double VW[3]:ワークWの速度(m/s)
double AW[3]:ワークWの加速度()
double VG[k-th][3]:アームLk重心の速度(m/s)
double
AG[k-th][3]:アームLk重心の加速度)
double VGW[3]:ハンド/ワークの重心の速度(m/s) (ΣA表示)
double AGW[3]:ハンド/ワークの重心の加速度()(ΣA表示)
(3)速度加速度解析A
(2)と同じ計算であるが,結果をΣA表示で出力する.
関節変位・速度・加速度を与えて,各関節点の速度vJk,加速度aJk,各アームの角速度ωk,角加速度αk,ワークの速度vw加速度aw,角速度ωw角加速度αwを,ΣA座標系表示で求める.
analys_vel_accA(
PHI, DPHI, DDPHI, OMEGA, ALPHA, VJ, AJ, VW, AW )
●計算のために必要な既知変数(kinema.cへ既に受け渡している変数.前準備による)
NFREE:自由度
JTYPE[k-th]:Jkの関節タイプ(’R’ or ‘S’ )
As[k-th][4][3]:静座標変換行列
As[NFREE-th][4][3]:ワークの位置姿勢のΣn表示(n=NFREE-1)
●関数への入力
double PHI[k]:関節変位(rad
or m)
double DPHI[k]:関節速度(rad/s
or m/s)
double DDPHI[k]:関節加速度( or )
double
rg[k-th][3]:アームLkの重心位置(Σk表示)(m)
double
rg[n-th][3]:ハンド/ワークの重心位置(Σn表示)(m)(n=NFREE-1)
●関数の出力 (VW[], AW[]以外は全てΣk座標系表示)
double OMEGA[k-th][3]:アームLkの角速度(rad/s)
double ALPHA[k-th][3]:アームLkの角加速度()
double OMEGA[n-th][3]:ハンド/ワークの角速度(rad/s) (n=NFREE-1)
double ALPHA[n-th][3]:ハンド/ワークの角加速度()
double VJ[k-th][3]:関節点Jkの速度(m/s)
double
AJ[k-th][3]:関節点Jkの加速度()
double VW[3]:ワークWの速度(m/s)
double AW[3]:ワークWの加速度()
double VG[k-th][3]:アームLk重心の速度(m/s)
double
AG[k-th][3]:アームLk重心の加速度)
double VGW[3]:ハンド/ワークの重心の速度(m/s) (ΣA表示)
double AGW[3]:ハンド/ワークの重心の加速度()(ΣA表示)
(3)速度加速度解析A
(2)と同じ計算であるが,結果をΣA表示で出力する.
関節変位・速度・加速度を与えて,各関節点の速度vJk,加速度aJk,各アームの角速度ωk,角加速度αk,ワークの速度vw加速度aw,角速度ωw角加速度αwを,ΣA座標系表示で求める.
analys_vel_accA(
PHI, DPHI, DDPHI, OMEGA, ALPHA, VJ, AJ, VW, AW )
●計算のために必要な既知変数(kinema.cへ既に受け渡している変数.前準備による)
NFREE:自由度
JTYPE[k-th]:Jkの関節タイプ(’R’ or ‘S’ )
As[k-th][4][3]:静座標変換行列
As[NFREE-th][4][3]:ワークの位置姿勢のΣn表示(n=NFREE-1)
●関数への入力
double PHI[k]:関節変位(rad
or m)
double DPHI[k]:関節速度(rad/s
or m/s)
double DDPHI[k]:関節加速度( or )
●関数の出力 (全てΣk座標系表示)
double OMEGA[k-th][3]:アームLkの角速度(rad/s)
double ALPHA[k-th][3]:アームLkの角加速度()
double OMEGA[n-th][3]:ハンド/ワークの角速度(rad/s) (n=NFREE-1)
double ALPHA[n-th][3]:ハンド/ワークの角加速度()
double VJ[k-th][3]:関節点Jkの速度(m/s)
double
AJ[k-th][3]:関節点Jkの加速度()
double VW[3]:ワークWの速度(m/s)
double AW[3]:ワークWの加速度()
(4)ヤコビアン
(4)ヤコビアン
関節速度とワーク上の点の速度角速度比を与える.
Jacobian(
PHI, rp, JCBNV, JCBNO )
●計算のために必要な既知変数(kinema.cへ既に受け渡している変数.前準備による)
NFREE:自由度
JTYPE[k-th]:Jkの関節タイプ(’R’ or ‘S’ )
As[k-th][4][3]:静座標変換行列
As[NFREE-th][4][3]:ワークの位置姿勢のΣn表示(n=NFREE-1)
●関数への入力
double PHI[k-th]:関節変位
( rad or m )
double rp[3]:ワーク上の点のΣn表示 (m)
●関数の出力
double JCBNV[3][NFREE]:=
double JCBNO[3][NFREE]:=
4 .使用の注意
(1)運動学の関数を使う前にEtoA( )またはsetrobot( )の予備計算を行う(座標変換行列を決めるため).
1度これを計算すれば,ロボット構造・ワークの位置姿勢が変わらない限り,その
後運動学の関数を何回でも使える.
(2)extern
int analys_pose( );
extern int analys_vel_acck( );
extern int analys_vel_accA( );
extern int EtoA( ); (または setrobot( ); )
を定義する.
(3)ベクトルの配列は[0],[1],[2],…,マトリクス[3][3]の成分は第1行 ([0][0] [1][0]
[2][0]),第2行([0][1] [1][1] [2][1]),第3行([0][2]
[1][2] [2][2]) の順で
(1)運動学の関数を使う前にEtoA( )またはsetrobot( )の予備計算を行う(座標変換行列を決めるため).
1度これを計算すれば,ロボット構造・ワークの位置姿勢が変わらない限り,その
後運動学の関数を何回でも使える.
(2)extern
int analys_pose( );
extern int analys_vel_acck( );
extern int analys_vel_accA( );
extern int EtoA( ); (または setrobot( ); )
を定義する.
(3)ベクトルの配列は[0],[1],[2],…,マトリクス[3][3]の成分は第1行 ([0][0] [1][0]
[2][0]),第2行([0][1] [1][1] [2][1]),第3行([0][2]
[1][2] [2][2]) の順で
ある.
(4) 関節J0 の変位はPHI[0],J1 の関節変位はPHI[1],J2 の変位はPHI[2],...で
ある.
(5)E[3][3] = (ex, ey, ez)は,E[0-th][3] = ex, E[1st][3] = ey, E[2nd][3] = ezである.
[参考]
使用例はktest.cを参照のこと.
[参考文献]
「詳説ロボットの運動学」,高野政晴,オーム社,2004.