Table of Contents
Parametri inerziali
Il modello tridimensionale si può ottenere con blender come una figura solida chiusa e convessa.
Il modello tridimensionale si deve comportare realisticamente, secondo le leggi della fisica, quindi bisogna attribuire una massa, un baricentro (centro di massa) e un tensore di inerzia.
Vedere
Useremo Meshlab che fa la seguente ipotesi: i corpi sono di densità omogenea (è più semplice calcolare la posizione del baricentro)
qui un tutorial http://gazebosim.org/tutorials?tut=inertia&cat=build_robot
Calcolo automatico
Calcolo del del volume e del baricentro utilizzando:
- Aprire Meshlab
- View→Show Layer Dialog
- Filters→Quality Measure and Computations→Compute Geometric Measures
Transformation Scale
- Aprire Meshlab
- Filters→Normals, Curvatures and Orientation→Transform: Scale
Gazebo usa come unità di misura i metri, ma Meshlab cosa usa?
L'ingombro massimo è detto Mesh Bounding Box Size e confrontandolo con quello di Gazebo si può calcolare un rapporto da digitare nella finestra TRANSFORMATION SCALE di Meshlab. Dopo aver calcolato questo valore, va moltiplicato anche il baricentro (Center of Mass) per ottenere le nuove coordinate del baricentro. Si ingrandisce il modello inserendo il valore:
scala=“1/Mesh Volume”
Questo permette di evitare che vengano troncati i valori decimali inferiori alla sesta cifra decimale si può aumentare l'ingombro del modello ed ottenere i valori corretti del tensore inerziale. Poi si corregge il valore del tensore inerziali moltiplicandolo per (scala)-2
Tag nel modello
Come visto in ros struttura modello esistono i seguenti tag per ogni link che compone il modello .sdf.
- link
- inertial
- origin
- mass
- inertia
L'ultimo tag contiene la matrice del tensore di 3×3=9 elementi. Poiché è simmetrico bastano 6 elementi per descriverlo. Quella che segue è la mappa dell'output di Meshlab
| ixx ixy ixz | | ixy iyy iyz | | ixz iyz izz |
Test
Per controllare se il modello è riuscito bene avviare prima ROS e caricare il modello, aprire anche GAZEBO
roslaunch gazebo_ros empty_world.launch rosrun gazebo_ros spawn_model -sdf -file `rospack find my_robot_description`/urdf/my_robot.sdf -model MyRobot
Per migliorare il debug può essere utile rimuovere il pavimento (ground plane) mettendo in pausa il world.
Mostrare un box porpora intorno ad ogni link
- sulla finestra Gazebo
- View→Center of Mass / Inertia