VRML Preparation for Robot Simulation/jp

このチュートリアルではFreeCADと6軸のシリアルロボットの動作をシミュレートするためのロボットシミュレーションワークベンチの使い方を説明します。このチュートリアルでは可視化に使用されているVRMLファイルの作成に焦点を絞っています。VRMLファイルの基盤はFreeCADのモデルです。使用しているFreeCADのバージョンはUbuntu32ビット版用の0.11.4252ppa1です。

FreeCADを使用してファイルを開く、または作成する

このチュートリアルではStäubli TX40のSTEPファイル(TX40-HB.stp)を使用しています。このファイルは https://secure.staubli.com/Intranet_Applications/Robotics/Group/RobDoc.nsf/ea05b3f4b301f597c1256d5f005665e8/bc3707ec036c9f6bc12576c700327958/$FILE/page.html からダウンロードすることができます。ただしチェックするための時間がなかったためチェックを行っていませんが、ここで説明する方法は完全にFreeCADで作成されたモデルに対しても適用できるはずです。 ファイルを開くと次の様になります:

Staeubli step import.png

インポートするとこのロボットがドキュメントツリーのルートに直接置かれた8つの形状で構成されていることに気がついたかと思います。グループが使用されている場合、エクスポートされたVRMLファイルの構造は異なっていることがあります。形状はベースからツールの順に並べられています。最後の形状には全てのロボットの軸の回転軸が保持されています。形状名とパーツ名の対応関係は以下の通りです(現在(2011年3月)の所、FreeCADはSTEPファイルに含まれている名前をインポートしません):

FreeCADでの名前 STEPでの名前
TX40_HB HORIZONTAL BASE CABLE OUTLET
TX40_HB001 SHOULDER
TX40_HB002 ARM
TX40_HB003 ELBOW
TX40_HB004 FOREARM
TX40_HB005 WRIST
TX40_HB006 TOOL FLANGE
TX40_HB007  ?

このインポート時にTX40_HB007を除いた“Flat Lines”から“Shaded”までの各形状の“Display Mode”を変更してVRMLエクスポート時の見栄えが良くなる様にしておいて下さい。また色を[245, 196, 0]と[204, 204, 204] に変更してStäubliの黄色と対応させておくといいかもしれません。TX40_HB007に保持されているのは全ての関節の軸であり、分解することはできないのでTX40_HB007は非表示にしておいて下さい。

幾何特性の計測

Denavit-Hartenbergテーブル( http://www.freecadweb.org/wiki/index.php?title=6-Axis_Robot を参照)とVRMLファイルの作成を行うにはロボットの特性を取得する必要があります。今の所、FreeCADには計測ツールが用意されていませんがTX40_HB007に含まれている軸を使用するか(オブジェクトをマウスで指すと座標が左下に表示されます)、Pythonコンソールを使って幾何情報を取得することができます。DHテーブルが必要となるのはインバースキネマティクスを使用する場合だけであることに注意して下さい。つまりデカルト座標を取得するかロボットをデカルト座標で駆動する場合です。 このロボットのDHテーブルは以下の様になります(単位はmm、deg、deg/s):

i d θ r α θ最小値 θ最大値 軸速度
1 320 q1 0 -90 -180 180 555
2 35 q2 - 90 225 0 -125 125 475
3 0 q3 + 90 0 90 -138 138 585
4 225 q4 0 -90 -270 270 1035
5 0 q5 0 90 -120 133.5 1135
6 65 q6 0 0 -270 270 1575

CSVファイルは次の様になります:

a  , alpha, d  , theta, rotDir, maxAngle, minAngle, AxisVelocity
0  ,   -90, 320,     0,      1,      180,     -180, 555
225,     0,  35,   -90,      1,      125,     -125, 475
0  ,    90,   0,    90,      1,      138,     -138, 585
0  ,   -90, 225,     0,      1,      270,     -270, 1035
0  ,    90,   0,     0,      1,    133.5,     -120, 1135
0  ,     0,  65,     0,      1,      270,     -270, 1575

VRMLへのエクスポート

ドキュメントをVRMLファイルへエクスポートします。VRMLファイルの構造は次の様になっています:

#VRML V2.0 utf8


Group {
  children 
    Group {
      children [ 
        Group {
        …

        },
          
        Group {
        …

        },
          
        Group {
        …

        },
          
        Group {
        …

        },
          
        Group {
        …

        },
          
        Group {
        …

        },
          
        Group {
        …

        },
          
        Group {
        …

        } ]

    }

}

8つの形状に対応する8つの独立したグループがあることに気がついたかと思います。

VRMLファイルの作成

VRMLファイル内の形状は全てベースフレームで表現され、それぞれ独立しています。ロボットシミュレーションワークベンチではある形状の動きが構造の以降の形状全ての動きに影響を与えるような構造を作成することになります。形状の位置はそれに先行する形状に対して相対的なものになるので絶対基準系から相対基準系へのなんらかの変換を考慮する必要があるのです。この変換は以下の画像の様になります:

Staeubli important points.png

ここで各記号は以下の様になります

A=(0, 0, 168)
B=(0, 107.8, 320)
C=(0, 104.15, 545)
D=(0, 35, 601)
E=(0, 35, 770)
F=(0, 35, 835)

例としてELBOWとFOREARMの間にあり、D=(xd, yd, zd)に位置する軸4を見てみましょう。FreeCADでの軸のタグは以下の通りです。

"DEF FREECAD_AXIS4 Transform { rotation 0 1 0 0 children ["

これはY軸周りの回転と対応します。CADモデルではこの回転はZ軸周りのものになります。従ってFreeCADの軸を定義する前にX軸周りに<math>\pi</math>回転させ、定義後に<math>-\pi</math>回転させる必要があります。またFOREARMの定義と対応するグループの直前に(-xd, -yd, -zd)への平行移動が必要です。これはDの中心に位置する相対参照フレームでこのグループを表現するためです。これはつまり最初の回転の前に(xd, yd, zd)への平行移動が必要であるということです。s ELBOWからFOREARMまでの定義が行われたVRMLファイルは最終的に次の様になります:

      # ELBOW
      Group {
        … ここに未変更のELBOWの定義
  
      },
        
      Transform {
        translation 0 35 601
        rotation 1 0 0 1.5707963
        children
          DEF FREECAD_AXIS4 Transform { rotation 0 1 0 0 children
            Transform {
              rotation 1 0 0 -1.5707963
              children
                Transform {
                  translation 0 -35 -601
                  children [
      # FOREARM  
      Group {
        … ここに未変更のFOREARMの定義   
  
      },

ドキュメントの末尾には6軸のそれぞれに対応する適切な括弧閉じ 記号 “ ]}}}},”の挿入が必要です。最終的にドキュメントは次の様になります(著作権を考慮した場合にそのファイルをここにリンクしていいのか私にはわかりません):

#VRML V2.0 utf8
  
  
Group {
  children
  Group {
    children [ 
      # HORIZONTAL BASE CABLE OUTLET 
      Group {
        … ここに未変更のHORIZONTAL BASE CABLE OUTLETの定義   
   
      },
        
      Transform {
        translation 0 0 168
        rotation 1 0 0 1.5707963
        children
          DEF FREECAD_AXIS1 Transform { rotation 0 1 0 0 children
            Transform {
              rotation 1 0 0 -1.5707963
              children
                Transform {
                  translation 0 0 -168
                  children [
      # SHOULDER
      Group {
        … ここに未変更のSHOULDERの定義
  
      },
        
      Transform {
        translation 0 107.8 320
        #rotation 0 0 1 0
        children
          DEF FREECAD_AXIS2 Transform { rotation 0 1 0 0 children
            Transform {
              #rotation 0 0 1 0
              children
                Transform {
                  translation 0 -107.8 -320
                  children [
      # ARM  
      Group {
        … ここに未変更のARMの定義
  
      },
        
      Transform {
        translation 0 104.15 545
        #rotation 0 0 1 0
        children
          DEF FREECAD_AXIS3 Transform { rotation 0 1 0 0 children
            Transform {
              #rotation 0 0 1 0
              children
                Transform {
                  translation 0 -104.15 -545
                  children [
      # ELBOW
      Group {
        … ここに未変更のELBOWの定義
  
      },
        
      Transform {
        translation 0 35 601
        rotation 1 0 0 1.5707963
        children
          DEF FREECAD_AXIS4 Transform { rotation 0 1 0 0 children
            Transform {
              rotation 1 0 0 -1.5707963
              children
                Transform {
                  translation 0 -35 -601
                  children [
      # FOREARM  
      Group {
        … ここに未変更のFOREARMの定義
  
      },
        
      Transform {
        translation 0 35 770
        #rotation 0 0 1 0
        children
          DEF FREECAD_AXIS5 Transform { rotation 0 1 0 0 children
            Transform {
              #rotation 0 0 1 0
              children
                Transform {
                  translation 0 -35 -770
                  children [
      # WRIST
      Group {
        … ここに未変更のWRISTの定義
  
      },
        
      Transform {
        translation 0 35 835
        rotation 1 0 0 1.5707963
        children
          DEF FREECAD_AXIS6 Transform { rotation 0 1 0 0 children
            Transform {
              rotation 1 0 0 -1.5707963
              children
                Transform {
                  translation 0 -35 -835
                  children [
      # TOOL FLANGE
      Group {
        … ここに未変更のTOOL FRAMEの定義
  
      },
        
      Group {
        … ここに未変更のTX40_HB007の定義
  
      } # "]" はこの行から削除
    ]}}}},
    ]}}}},
    ]}}}},
    ]}}}},
    ]}}}},
    ]}}}},
    ] # 上の行から削除された "]" 
  }
}

以下はロボットシミュレーション用のVRMLファイルを取得するためのパッチです:

7a8
>         # HORIZONTAL BASE CABLE OUTLET 
95968a95970,95981
>         Transform {
>           translation 0 0 168
>           rotation 1 0 0 1.5707963
>           children
>             DEF FREECAD_AXIS1 Transform { rotation 0 1 0 0 children
>               Transform {
>                 rotation 1 0 0 -1.5707963
>                 children
>                   Transform {
>                     translation 0 0 -168
>                     children [
>         # SHOULDER
128428a128442,128453
>         Transform {
>           translation 0 107.8 320
>           #rotation 0 0 1 0
>           children
>             DEF FREECAD_AXIS2 Transform { rotation 0 1 0 0 children
>               Transform {
>                 #rotation 0 0 1 0
>                 children
>                   Transform {
>                     translation 0 -107.8 -320
>                     children [
>         # ARM  
206503a206529,206540
>         Transform {
>           translation 0 104.15 545
>           #rotation 0 0 1 0
>           children
>             DEF FREECAD_AXIS3 Transform { rotation 0 1 0 0 children
>               Transform {
>                 #rotation 0 0 1 0
>                 children
>                   Transform {
>                     translation 0 -104.15 -545
>                     children [
>         # ELBOW
267111a267149,267160
>         Transform {
>           translation 0 35 601
>           rotation 1 0 0 1.5707963
>           children
>             DEF FREECAD_AXIS4 Transform { rotation 0 1 0 0 children
>               Transform {
>                 rotation 1 0 0 -1.5707963
>                 children
>                   Transform {
>                     translation 0 -35 -601
>                     children [
>         # FOREARM  
417854a417904,417915
>         Transform {
>           translation 0 35 770
>           #rotation 0 0 1 0
>           children
>             DEF FREECAD_AXIS5 Transform { rotation 0 1 0 0 children
>               Transform {
>                 #rotation 0 0 1 0
>                 children
>                   Transform {
>                     translation 0 -35 -770
>                     children [
>         # WRIST
422053a422115,422126
>         Transform {
>           translation 0 35 835
>           rotation 1 0 0 1.5707963
>           children
>             DEF FREECAD_AXIS6 Transform { rotation 0 1 0 0 children
>               Transform {
>                 rotation 1 0 0 -1.5707963
>                 children
>                   Transform {
>                     translation 0 -35 -835
>                     children [
>         # TOOL FLANGE
435627c435700,435707
<         } ]
---
>         } 
>       ]}}}},
>       ]}}}},
>       ]}}}},
>       ]}}}},
>       ]}}}},
>       ]}}}},
>       ]
Online version: "http://www.freecadweb.org/wiki/index.php?title=VRML_Preparation_for_Robot_Simulation/jp&oldid=58332"

Navigation menu