V. ロボットアームの動力学解析                                       2004.10.05 作成

ソースファイル robdynamicsSource 実行ファイル robdynamicsexe

     3−1.逆動力学      inv_dynamics( )

     3−2.動力学各項     dynamics_term( )

     3−3.順動力学      direct_dynamics( )

     3−4.動的運動解析       dynamic_motion( )

      の解析を行う.

   また,速度・加速度解析(kinema.c)も含まれているので,U.速度加速度解析もできる.

 

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,…..,NFREE-1

(6−3)静止座標系から見た各アーム座標系:Σk       

k=0,1,…..,NFREE-1

(6−4)静止座標系から見たワークの位置:rw

(6−5)静止座標系から見たワークの姿勢:Σw   

(6−6)関節種別(回転Rか直動Sか)

 

2.前準備

                                            ロボットの初期ポーズ

 ロボット構造・動的パラメータを dynamics.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の関節タイプ (Ror 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への静座標変換行列

dynamics.cに作成する変数

NFREE:自由度

JTYPE[k-th]Jkの関節タイプ(Ror 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表示のワークの位置と姿勢

 ●戻し値 なし

dynamics.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]と同じ)

 

(2−3)動的ロボットパラメータの受け渡し

 

  setdynamics( rg, marm, Iarm )

 

 ●この関数に受け渡す変数

  double  rg[k-th][3]:アームL k の重心位置(m)(Σk 表示)

  double  m[k-th]:アームL kの質量(kg)

  double  Iarm[k-th][3][3]:アームLkの重心回りの慣性行列()

 ●戻し値 なし

 ●dynamics.cに作成する変数

  RG[k-th][3]= rg[k-th][3]

  MARM[k-th]= m[k -th]

  IARM[k-th][3][3]= Iarm[k -th][3][3]

 

3.解析項目

 

(3−1)逆動力学

   関節変位Φ,関節速度,関節加速度,外力/外モーメントを与えて,

各関節部に加わる力FJk,モーメントMJk,関節に必要な駆動トルク(力)τを求める.

 

inv_dynamics( PHI, DPHI, DDPHI, FEX, REXN, MEX, FJ, MJ, TJ )

 

●計算のために必要な既知変数(dynamics.cへ既に受け渡している変数.前準備による)

NFREE:自由度

As[k-th][4][3]:静座標変換行列

As[NFREE-th][4][3]:ワークの位置姿勢のΣn表示(n=NFREE-1

m[k-th] :アームL kの質量(kg)

rg[k-th][3]:アームL kの重心位置(Σk表示)(m)

Iarm[k-th][3][3]アームL kの重心回りの慣性行列 ()(Σk表示)

     (k=NFREE-1のときはハンド・ワーク込みの質量・重心・慣性行列)

●関数への入力

double  PHI[k]Jk関節の変位φk( rad or m )

double  DPHI[k]Jk関節の速度( rad/s or m/s )

double  DDPHI[k]Jk関節の加速度(  or  )

   double  FEX[3]:外力(ΣA表示)(N)

   double  REXN[3]:外力のワーク上の作用位置(Σn表示)(m)

   double  MEX[3]:外モーメント(ΣA表示)(

●関数の出力

   double  FJ[k-th][3]:関節点J k に加わる力(Σk表示)(N)

   double  MJ[k-th][3]:関節点J k に加わるモーメント(Σk表示)(Nm)

   double  TJ[k-th]:関節J k に必要な駆動トルク(力)(Nm or N)

   

(3−2)動力学各項目の個別計算

   

   の動力学式の,(慣性項),(コリオリ項),(重力項)、(外

力項)の各項を,関節変位・速度を与えて求める.

 

   dynamics_term( PHI, DPHI, FEX, REXN, MEX, INERTIA, CORIOLIS, GRAVITY,

EXTORQUE, NMAX )

 

    ●計算のために必要な既知変数(dynamics.cへ既に受け渡している変数.前準備による)

NFREE:自由度

As[k-th][4][3]:静座標変換行列

As[NFREE-th][4][3]:ワークの位置姿勢のΣn表示(n=NFREE-1

m[k-th] :アームL kの質量(kg)

rg[k-th][3]:アームL kの重心位置(Σk表示)(m)

Iarm[k-th][3][3]アームL kの重心回りの慣性行列 ()(Σk表示)

     (k=NFREE-1のときはハンド・ワーク込みの質量・重心・慣性行列)

●関数への入力

double  PHI[k]:関節変位(rad or m

double  DPHI[k]:関節速度(rad/s or m/s)

   double  FEX[3]:外力(ΣA表示)(N)

   double  REXN[3]:外力のワーク上の作用位置(Σn表示)(m)

   double  MEX[3]:外モーメント(ΣA表示)(

int  NMAX:慣性項の次数(通常は=NFREE

  ●関数の出力 (VW[], AW[]以外は全てΣk座標系表示)

   double  INERTIA[NMAX][NMAX]:慣性項(NFREE×NFREE)

   double  CORIOLIS[k -th]:関節J k に関するコリオリ項(Nm or N)

   double  GRAVITY[k-th]:関節J k に関する重力項(Nm or N)

   double  EXTORQUE[k-th]:関節J k に関する外力項(Nm or N)

 

(3−3)順動力学解析

   

   の順動力学式において,関節変位Φ,関節速度を与えて関節加速度を求める.

 

   direct_dynamics( PHI, DPHI, DDPHI, TJ, FEX, REXN, MEX )

 

    ●計算のために必要な既知変数(dynamics.cへ既に受け渡している変数.前準備による)

NFREE:自由度

As[k-th][4][3]:静座標変換行列

As[NFREE-th][4][3]:ワークの位置姿勢のΣn表示(n=NFREE-1

m[k-th] :アームL kの質量(kg)

rg[k-th][3]:アームL kの重心位置(Σk表示)(m)

Iarm[k-th][3][3]アームL kの重心回りの慣性行列 ()(Σk表示)

     (k=NFREE-1のときはハンド・ワーク込みの質量・重心・慣性行列)

●関数への入力

double  PHI[k]:関節変位(rad or m

double  DPHI[k]:関節速度(rad/s or m/s)

   double  FEX[3]:外力(ΣA表示)(N)

   double  REXN[3]:外力のワーク上の作用位置(Σn表示)(m)

   double  MEX[3]:外モーメント(ΣA表示)(

  ●関数の出力

double  DDPHI[k]:関節Jkの加速度( or )

 

(3−4)順動力学式の微分方程式の解(時系列)

   

   の順動力学式を初期条件関節変位Φ0,初期関節速度0関節駆動トルク(力)の時

系列を与えて,時間関数を求める.

 

dynamic_motion( t0, dt, nf, PHI0, DPHI0, FEXSERIES, REXNSERIES,

MEXSERIES, TJSERIES, PHISERIES, DPHISERIES, NF )

 

    ●計算のために必要な既知変数(dynamics.cへ既に受け渡している変数.前準備による)

NFREE:自由度

As[k-th][4][3]:静座標変換行列

As[NFREE-th][4][3]:ワークの位置姿勢のΣn表示(n=NFREE-1

m[k-th] :アームL kの質量(kg)

rg[k-th][3]:アームL kの重心位置(Σk表示)(m)

Iarm[k-th][3][3]アームL kの重心回りの慣性行列 ()(Σk表示)

     (k=NFREE-1のときはハンド・ワーク込みの質量・重心・慣性行列)

●関数への入力

   double  t0:運動の初期時間(s)

   double  dt:時間刻み(s)

   int      nf:時間刻みの数(tf=t0+nf*dt

      double  PHI[k -th]Jk関節の変位 ( rad or m )

      double  DPHI[k -th]Jk関節の速度 ( rad/s or m/s )

   double  FEXSERIES[NF][3]:外力の時系列(ΣA表示)(N)

   double  REXNSERIES[NF][3]:外力作用点の時系列(Σn表示)(m)

   double  MEXSERIES[NF][3]:外モーメントの時系列(ΣA表示)(Nm)

   double  TJSERIES[NF][k-th]Jk関節の駆動トルク(力)の時系列(Nm or N)

      int      NF :時系列の次数(nfNF)

●関数の出力

   double  PHISERIES[NF][k-th]Jk関節変位の時系列(rad or m)

   double  DPHISERIES[NF][ k -th]Jk関節速度の時系列(rad/s or m/s)

     

4 .使用の注意

 

(1)運動学の関数を使う前にEtoA( )またはsetrobot( )の予備計算を行う(座標変換行列を決めるため).

1度これを計算すれば,ロボット構造・ワークの位置姿勢が変わらない限り,その

後運動学の関数を何回でも使える.

(2)extern int  analys_vel_acck( );

   extern int  inv_dynamics( );

      extern int  dynamics_term( );

      extern int  direct_dynamics( );

      extern int  dynamic_motion( );

      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である.

 

[参考]

 使用例はdtest.cを参照のこと.

 

[参考文献]

「詳説ロボットの運動学」,高野政晴,オーム社,2004