587 lines
18 KiB
HTML
587 lines
18 KiB
HTML
<html><head><title>VRML Preparation for Robot Simulation/it</title><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><link type='text/css' href='wiki.css' rel='stylesheet'></head><body><h1>VRML Preparation for Robot Simulation/it</h1></div>
|
||
|
||
<div id="mw-content-text" lang="it" dir="ltr" class="mw-content-ltr"><hr/><div class="mw-parser-output"><table class="fcinfobox wikitable ct" style="width: 230px; float: right; margin-left: 1em">
|
||
<tr>
|
||
<td class="ctTitle">
|
||
<h3><span class="mw-headline" id="Tutorial"><a href="https://www.freecadweb.org/wiki/index.php?title=File:Base_ExampleCommandModel.png" class="image"><img alt="Base ExampleCommandModel.png" src="32px-Base_ExampleCommandModel.png" width="32" height="30" srcset="/wiki/images/thumb/9/93/Base_ExampleCommandModel.png/48px-Base_ExampleCommandModel.png 1.5x, /wiki/images/9/93/Base_ExampleCommandModel.png 2x" /></a> Tutorial</span></h3>
|
||
</td></tr>
|
||
<tr>
|
||
<th class="ctOdd">Argomento
|
||
</th></tr>
|
||
<tr>
|
||
<td class="ctEven">Robot
|
||
</td></tr>
|
||
<tr>
|
||
<th class="ctOdd">Livello di difficoltà
|
||
</th></tr>
|
||
<tr>
|
||
<td class="ctEven">Intermedio
|
||
</td></tr>
|
||
<tr>
|
||
<th class="ctOdd">Tempo di esecuzione
|
||
</th></tr>
|
||
<tr>
|
||
<td class="ctEven">
|
||
</td></tr>
|
||
<tr>
|
||
<th class="ctOdd">Autore
|
||
</th></tr>
|
||
<tr>
|
||
<td class="ctEven">
|
||
</td></tr>
|
||
<tr>
|
||
<th class="ctOdd">Versione di FreeCAD
|
||
</th></tr>
|
||
<tr>
|
||
<td class="ctEven">
|
||
</td></tr>
|
||
<tr>
|
||
<th class="ctOdd">File di esempio
|
||
</th></tr>
|
||
<tr>
|
||
<td class="ctEven">
|
||
</td></tr>
|
||
<tr>
|
||
<td class="ctToc"><br /><div id="toc" class="toc"><div class="toctitle"><h2>Contents</h2></div>
|
||
<ul>
|
||
<li class="toclevel-1"><a href="#Tutorial"><span class="tocnumber">1</span> <span class="toctext">Tutorial</span></a></li>
|
||
<li class="toclevel-1 tocsection-1"><a href="#Aprire_un_file_o_crearne_uno_con_FreeCAD"><span class="tocnumber">2</span> <span class="toctext">Aprire un file o crearne uno con FreeCAD</span></a></li>
|
||
<li class="toclevel-1 tocsection-2"><a href="#Misure_delle_caratteristiche_geometriche"><span class="tocnumber">3</span> <span class="toctext">Misure delle caratteristiche geometriche</span></a></li>
|
||
<li class="toclevel-1 tocsection-3"><a href="#Esportare_in_VRML"><span class="tocnumber">4</span> <span class="toctext">Esportare in VRML</span></a></li>
|
||
<li class="toclevel-1 tocsection-4"><a href="#Preparazione_del_file_VRML"><span class="tocnumber">5</span> <span class="toctext">Preparazione del file VRML</span></a></li>
|
||
</ul>
|
||
</div>
|
||
|
||
</td></tr></table>
|
||
<p><br />
|
||
</p><p><br />
|
||
Questo tutorial spiega come utilizzare FreeCAD e l'ambiente <b>Simulazione Robot</b> per simulare i movimenti dei robot a 6 assi.<br />Il tutorial si concentra sulla creazione del file <b>VRML</b> utilizzato per la visualizzazione.<br />La base del file VRML è un modello di FreeCAD.<br />La versione di FreeCAD utilizzata è la 0.11.4252ppa1 in Ubuntu 32 bit.
|
||
</p>
|
||
<h2><span class="mw-headline" id="Aprire_un_file_o_crearne_uno_con_FreeCAD">Aprire un file o crearne uno con FreeCAD</span></h2>
|
||
<p>Il tutorial si basa su un <b>file STEP</b> di un robot Stäubli TX40 (TX40-HB.stp).<br />È possibile scaricare il file file TX40-HB.stp da <a rel="nofollow" class="external text" href="https://secure.staubli.com/Intranet_Applications/Robotics/Group/RobDoc.nsf/ea05b3f4b301f597c1256d5f005665e8/bc3707ec036c9f6bc12576c700327958/$FILE/page.html">Stäubli</a>.<br />Anche se non ho ancora avuto tempo di controllare, il metodo dovrebbe valere anche per un modello realizzato completamente in FreeCAD.<br />Dopo aver aperto il file, si dovrebbe ottenere questo:
|
||
</p><p><a href="https://www.freecadweb.org/wiki/index.php?title=File:Staeubli_step_import.png" class="image"><img alt="Staeubli step import.png" src="1024px-Staeubli_step_import.png" width="1024" height="587" srcset="/wiki/images/f/f6/Staeubli_step_import.png 1.5x" /></a>
|
||
</p><p>Notare che, nell'importazione, il robot è composto di 8 forme, direttamente sulla radice dell'albero del documento.<br />La struttura del file VRML esportato può cambiare se sono utilizzati i gruppi. Le forme sono ordinate a partire dalla base allo strumento.<br />L'ultima forma contiene gli assi di rotazione di tutti gli assi del robot.<br />
|
||
I nomi delle forme sono attribuiti in modo correlativo da FreeCAD, (dato che per ora (marzo 2011) FreeCAD non importa i nomi inclusi nei file STEP):
|
||
</p>
|
||
<table class="wikitable">
|
||
|
||
<tr>
|
||
<th> nome FreeCAD
|
||
</th>
|
||
<th> nome STEP
|
||
</th></tr>
|
||
<tr>
|
||
<td> TX40_HB
|
||
</td>
|
||
<td>HORIZONTAL BASE CABLE OUTLET
|
||
</td></tr>
|
||
<tr>
|
||
<td> TX40_HB001
|
||
</td>
|
||
<td> SHOULDER
|
||
</td></tr>
|
||
<tr>
|
||
<td> TX40_HB002
|
||
</td>
|
||
<td> ARM
|
||
</td></tr>
|
||
<tr>
|
||
<td> TX40_HB003
|
||
</td>
|
||
<td> ELBOW
|
||
</td></tr>
|
||
<tr>
|
||
<td> TX40_HB004
|
||
</td>
|
||
<td> FOREARM
|
||
</td></tr>
|
||
<tr>
|
||
<td> TX40_HB005
|
||
</td>
|
||
<td> WRIST
|
||
</td></tr>
|
||
<tr>
|
||
<td> TX40_HB006
|
||
</td>
|
||
<td> TOOL FLANGE
|
||
</td></tr>
|
||
<tr>
|
||
<td> TX40_HB007
|
||
</td>
|
||
<td> ?
|
||
</td></tr></table>
|
||
<p>In questa importazione, cambiare la modalità di visualizzazione, “Display Mode”, di ogni forma, ad eccezione di TX40_HB007, da "Flat Lines" a "Shaded" per dare un buon aspetto all'esportazione VRML. Ho anche cambiato i colori in [245, 196, 0] e [204, 204, 204] per farli corrispondere meglio al giallo di Stäubli.<br />Nascondere TX40_HB007 perché contiene gli assi di tutti i giunti e non può essere smontato.
|
||
</p>
|
||
<h2><span class="mw-headline" id="Misure_delle_caratteristiche_geometriche">Misure delle caratteristiche geometriche</span></h2>
|
||
<p>Per costruire la tabella di <a rel="nofollow" class="external text" href="http://it.wikipedia.org/wiki/Denavit-Hartenberg">Denavit-Hartenberg</a> (vedere <a href="https://www.freecadweb.org/wiki/index.php?title=Robot_6-Axis/it" title="Robot 6-Axis/it">6-Axis_Robot</a> ) e per preparare il file <a rel="nofollow" class="external text" href="http://it.wikipedia.org/wiki/VRML">VRML</a>, è necessario ottenere le caratteristiche del Robot.<br />Per ora, lo strumento di misurazione di FreeCAD non è ancora pronto, è possibile utilizzare gli assi inclusi in TX40_HB007 (le coordinate sono indicate in basso a sinistra quando si punta un oggetto con il mouse), oppure si deve utilizzare la console Python per ottenere delle informazioni sulla geometria.<br />Notare che la <b>Tabella DH</b> è necessaria solo quando si ha bisogno di usare la cinematica inversa, ad esempio, per ottenere le coordinate cartesiane o guidare il robot con coordinate cartesiane.<br /><br />
|
||
La <b>Tabella DH</b> per questo robot è la seguente <b>(mm, gradi e gradi/s)</b> :
|
||
</p>
|
||
<table class="wikitable">
|
||
|
||
<tr>
|
||
<th> i
|
||
</th>
|
||
<th> d
|
||
</th>
|
||
<th> θ
|
||
</th>
|
||
<th> r
|
||
</th>
|
||
<th> α
|
||
</th>
|
||
<th> θmin
|
||
</th>
|
||
<th> θmax
|
||
</th>
|
||
<th> Axis velocity
|
||
</th></tr>
|
||
<tr>
|
||
<td> 1
|
||
</td>
|
||
<td> 320
|
||
</td>
|
||
<td> q1
|
||
</td>
|
||
<td> 0
|
||
</td>
|
||
<td> -90
|
||
</td>
|
||
<td> -180
|
||
</td>
|
||
<td> 180
|
||
</td>
|
||
<td> 555
|
||
</td></tr>
|
||
<tr>
|
||
<td> 2
|
||
</td>
|
||
<td> 35
|
||
</td>
|
||
<td> q2 - 90
|
||
</td>
|
||
<td> 225
|
||
</td>
|
||
<td> 0
|
||
</td>
|
||
<td> -125
|
||
</td>
|
||
<td> 125
|
||
</td>
|
||
<td> 475
|
||
</td></tr>
|
||
<tr>
|
||
<td> 3
|
||
</td>
|
||
<td> 0
|
||
</td>
|
||
<td> q3 + 90
|
||
</td>
|
||
<td> 0
|
||
</td>
|
||
<td> 90
|
||
</td>
|
||
<td> -138
|
||
</td>
|
||
<td> 138
|
||
</td>
|
||
<td> 585
|
||
</td></tr>
|
||
<tr>
|
||
<td> 4
|
||
</td>
|
||
<td> 225
|
||
</td>
|
||
<td> q4
|
||
</td>
|
||
<td> 0
|
||
</td>
|
||
<td> -90
|
||
</td>
|
||
<td> -270
|
||
</td>
|
||
<td> 270
|
||
</td>
|
||
<td> 1035
|
||
</td></tr>
|
||
<tr>
|
||
<td> 5
|
||
</td>
|
||
<td> 0
|
||
</td>
|
||
<td> q5
|
||
</td>
|
||
<td> 0
|
||
</td>
|
||
<td> 90
|
||
</td>
|
||
<td> -120
|
||
</td>
|
||
<td> 133.5
|
||
</td>
|
||
<td> 1135
|
||
</td></tr>
|
||
<tr>
|
||
<td> 6
|
||
</td>
|
||
<td> 65
|
||
</td>
|
||
<td> q6
|
||
</td>
|
||
<td> 0
|
||
</td>
|
||
<td> 0
|
||
</td>
|
||
<td> -270
|
||
</td>
|
||
<td> 270
|
||
</td>
|
||
<td> 1575
|
||
</td></tr></table>
|
||
<p>Il file csv è quindi:
|
||
</p>
|
||
<pre> 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
|
||
</pre>
|
||
<h2><span class="mw-headline" id="Esportare_in_VRML">Esportare in VRML</span></h2>
|
||
<p>Esportare il documento in un file VRML.
|
||
La struttura del file VRML è la seguente:
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre> #VRML V2.0 utf8
|
||
|
||
|
||
Group {
|
||
children
|
||
Group {
|
||
children [
|
||
Group {
|
||
…
|
||
|
||
},
|
||
|
||
Group {
|
||
…
|
||
|
||
},
|
||
|
||
Group {
|
||
…
|
||
|
||
},
|
||
|
||
Group {
|
||
…
|
||
|
||
},
|
||
|
||
Group {
|
||
…
|
||
|
||
},
|
||
|
||
Group {
|
||
…
|
||
|
||
},
|
||
|
||
Group {
|
||
…
|
||
|
||
},
|
||
|
||
Group {
|
||
…
|
||
|
||
} ]
|
||
|
||
}
|
||
|
||
}</pre></div>
|
||
<p>Si può notare che ci sono 8 gruppi indipendenti, corrispondenti alle 8 forme.
|
||
</p>
|
||
<h2><span class="mw-headline" id="Preparazione_del_file_VRML">Preparazione del file VRML</span></h2>
|
||
<p>Tutte le forme nel file VRML sono espresse nella struttura di base, indipendentemente le une dalle altre.<br />Per l'ambiente Simulazione Robot di FreeCAD, è necessario creare una struttura in cui un movimento di una forma induce un movimento di tutte le forme che sono situate successivamente nella struttura. Il posizionamento delle forme sarà relativo alla forma precedente, quindi è necessario includere alcune traduzioni dal sistema di riferimento assoluto a quello relativo.<br />Le traduzioni sono descritte nella figura seguente:
|
||
</p><p><a href="https://www.freecadweb.org/wiki/index.php?title=File:Staeubli_important_points.png" class="image"><img alt="Staeubli important points.png" src="Staeubli_important_points.png" width="177" height="418" /></a>
|
||
</p><p>Con:
|
||
</p>
|
||
<dl><dd> A=(0, 0, 168)</dd>
|
||
<dd>B=(0, 107.8, 320)</dd>
|
||
<dd>C=(0, 104.15, 545)</dd>
|
||
<dd>D=(0, 35, 601)</dd>
|
||
<dd>E=(0, 35, 770)</dd>
|
||
<dd>F=(0, 35, 835)</dd></dl>
|
||
<p>Prendiamo come esempio l'asse 4 tra ELBOW e FOREARM, situato in D=(xd, yd, zd). Il punto di ancoraggio per l'asse di FreeCAD è:
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre> "DEF FREECAD_AXIS4 Transform { rotation 0 1 0 0 children ["</pre></div>
|
||
<p>Questo corrisponde ad una rotazione intorno all'asse Y. Nel modello CAD, la rotazione è intorno all'asse Z.<br />Pertanto, è necessaria una rotazione intorno all'asse X di <math>\pi</math> prima della definizione dell'asse di FreeCAD e di -<math>\pi</math> dopo di essa.<br />Inoltre, è necessaria una translation di (-xd, yd-,-zd) immediatamente prima del gruppo corrispondente alla definizione di FOREARM e espressa nel frame di riferimento relativo centrato rispetto a D.<br />
|
||
Ciò significa che la translation di (xd, yd, zd) deve essere inserita prima della prima rotazione.<br />
|
||
Alla fine, il file VRML compreso tra la definizione di ELBOW e la definizione di FOREARM è simile al seguente:
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre> # 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
|
||
|
||
},</pre></div>
|
||
Alla fine del documento, si devono inserire le parentesi di chiusura appropriate: <div class="mw-highlight mw-content-ltr" dir="ltr"><pre> ]}}}},</pre></div>
|
||
<p>per ciascuno dei sei assi. Al termine, il documento si presenta così (non so se posso inserire un link al file a causa dei diritti d'autore):
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre> #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
|
||
}
|
||
}</pre></div>
|
||
<p>Ecco un patch per ottenere il file VRML adatto per la simulazione del robot:
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre> 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
|
||
< } ]
|
||
---
|
||
> }
|
||
> ]}}}},
|
||
> ]}}}},
|
||
> ]}}}},
|
||
> ]}}}},
|
||
> ]}}}},
|
||
> ]}}}},
|
||
> ]</pre></div>
|
||
<p><br />
|
||
</p>
|
||
<div style="clear:both"></div>
|
||
</div>
|
||
|
||
|
||
|
||
</div>
|
||
|
||
</div><div class="printfooter">
|
||
Online version: "<a dir="ltr" href="https://www.freecadweb.org/wiki/index.php?title=VRML_Preparation_for_Robot_Simulation/it&oldid=177703">http://www.freecadweb.org/wiki/index.php?title=VRML_Preparation_for_Robot_Simulation/it&oldid=177703</a>"</div>
|
||
<div id="catlinks" class="catlinks" data-mw="interface"></div><div class="visualClear"></div>
|
||
</div>
|
||
</div>
|
||
<div id="mw-navigation">
|
||
<h2>Navigation menu</h2>
|
||
|
||
</body></html> |