Przygotowanie VRML do symulacji robota
Ćwiczenie |
Temat |
---|
środowisko pracy Robot |
Poziom trudności |
średnio zaawansowany |
Czas wykonania |
dowolny |
Autorzy |
Wersja FreeCAD |
0.11.4252ppa1 |
Pliki z przykładami |
Zobacz również |
- |
Informacje ogólne
Ten samouczek wyjaśnia, jak korzystać z FreeCAD i środowiska symulacji Robot do symulacji ruchów 6-osiowego robota szeregowego. Samouczek skupia się na tworzeniu pliku VRML używanego jako wizualizacja. Podstawą pliku VRML jest model FreeCAD. Użyta wersja FreeCAD to 0.11.4252ppa1 na Ubuntu 32bit.
Otwórz plik lub utwórz go za pomocą FreeCAD
Samouczek opiera się na pliku STEP urządzenia Stäubli TX40 (TX40-HB.stp). Plik można pobrać ze strony Stäubli. Jednak, choć wciąż nie miałem czasu, aby to sprawdzić, metoda ta powinna mieć również zastosowanie do modelu wykonanego w całości w programie FreeCAD. Po otwarciu pliku powinieneś otrzymać:
Zauważ, że po zaimportowaniu obiekt robot składa się z 8 kształtów, bezpośrednio na korzeniu drzewa dokumentu. Struktura wyeksportowanego pliku VRML może ulec zmianie, jeśli używane są grupy. Kształty są uporządkowane od podstawy do narzędzia. Ostatni kształt zawiera osie obrotu wszystkich osi robota. Nazwa kształtu korelacji - nazwa części jest podana przez (na chwilę obecną (marzec 2011) FreeCAD nie importuje nazw zawartych w plikach STEP):
nazwa FreeCAD | nazwa 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 | ? |
W przypadku tego importu należy zmienić "Tryb wyświetlania" każdego kształtu, z wyjątkiem TX40_HB007, z "Cieniowany z krawędziami" na "Cieniowane", aby eksport VRML wyglądał dobrze. Zmieniłem również kolory na [245, 196, 0] i [204, 204, 204], aby lepiej odpowiadały żółtemu kolorowi Stäubli. Ukryj TX40_HB007, ponieważ zawiera on osie wszystkich połączeń i nie można go rozdzielić.
Pomiar charakterystyk geometrycznych
Aby zbudować tabelę Denavita-Hartenberga (patrz Robot: 6-osi) i przygotować plik vrml, musisz uzyskać charakterystykę robota. Na razie narzędzie pomiarowe FreeCAD nie jest gotowe, możesz użyć osi zawartych w TX40_HB007 (współrzędne są wskazywane w lewym dolnym rogu po wskazaniu obiektu myszą) lub musisz użyć konsoli Python, aby uzyskać informacje o geometrii. Należy pamiętać, że tabela DH jest wymagana tylko wtedy, gdy trzeba użyć kinematyki odwrotnej, tj. uzyskać współrzędne kartezjańskie lub sterować robotem za pomocą współrzędnych kartezjańskich. Tabela DH dla tego robota jest następująca (mm, stopnie i stopnie/s):
i | d | θ | r | α | θmin | θmax | Prędkość osi |
---|---|---|---|---|---|---|---|
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 |
Plik csv to:
a , alpha, d , theta, rotDir, maxAngle, minAngle, Prędkość osi 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
Export to VRML
Export the document to a VRML file. The structure of the VRML file is the following:
#VRML V2.0 utf8
Group {
children
Group {
children [
Group {
…
},
Group {
…
},
Group {
…
},
Group {
…
},
Group {
…
},
Group {
…
},
Group {
…
},
Group {
…
} ]
}
}
You can notice that we have 8 independent groups corresponding to the 8 shapes.
Preparation of the vrml file
All shapes in the VRML file are expressed in the base frame, independently from each other. For the Robot Simulation Workbench, we need to create a structure where a movement of a shape induces a movement of all shapes situated afterwards in the structure. The placement of the shapes will be relative to the preceding shape, so we need to include some translations from the absolute reference system to the relative one. The translations are described in the following picture:
With
- 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).
Let's take the example of axis 4 between ELBOW and FOREARM, situated at D=(xd, yd, zd). The anchor for the FreeCAD axis is
"DEF FREECAD_AXIS4 Transform { rotation 0 1 0 0 children ["
This corresponds to a rotation about the y-axis. In the CAD model, the rotation is about the z-axis. Thus, we need to a rotation about the x-axis of before the FreeCAD axis definition and of after it. Also, a translation of (-xd, -yd, -zd) is needed just before the Group corresponding to the definition of FOREARM to express it in the relative reference frame centered at D. This means that a translation of (xd, yd, zd) must be inserted before the first rotation.
At the end, the VRML file from the definition of ELBOW to the definition of FOREARM looks like this:
# ELBOW
Group {
… here comes the unmodified definition of 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 {
... here comes the unmodified definition of FOREARM
},
At the end of the document, the appropriate closing brackets must be inserted: ]}}}},
for each of the 6 axes. Eventually, the document looks like this (I don't know if I can link the file here because of copyrights):
#VRML V2.0 utf8
Group {
children
Group {
children [
# HORIZONTAL BASE CABLE OUTLET
Group {
... here comes the unmodified definition of 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 {
... here comes the unmodified definition of 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 {
... here comes the unmodified definition of 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 {
... here comes the unmodified definition of 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 {
... here comes the unmodified definition of 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 {
... here comes the unmodified definition of 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 {
... here comes the unmodified definition of TOOL FRAME
},
Group {
... here comes the unmodified definition of TX40_HB007
} # "]" was deleted from this line
]}}}},
]}}}},
]}}}},
]}}}},
]}}}},
]}}}},
] # this is the "]" deleted from the line above
}
}
Here is a patch to obtain the VRML file suitable for robot simulation:
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
< } ]
---
> }
> ]}}}},
> ]}}}},
> ]}}}},
> ]}}}},
> ]}}}},
> ]}}}},
> ]