DSimI - python

publicité
XDE
Simulation Engine
Juillet 2011
[email protected]
Ingénieur - Chercheur
Laboratoire de Simulation Interactive
CEA LIST
2
Plan
•
XDE: Aperçu général
•
Briques:
Simulation physique
Fluide
Humain Virtuel
•
Middleware:
DSimI
DIO
•
Exemple appliqué à la robotique
•
Roadmap
3
XDE: Overview
• XDE : Environnement logiciel dédié à la simulation physique
interactive
• Objectifs généraux
Environnement logiciel modulaire unique: polyvalence des
applications, par ex:
Retour d’effort pour le PLM en RV
Pilotage d’HV sur TV3D avec kinect
Serious game physique avec interfaces iPad
Implémentation logicielle à vocation industrielle
Intégration des algorithmes et résultats de recherche du LSI
Objectif de performance et d’interactivité
Objectif de facilité d’utilisation
4
XDE: Overview
• Qu’est-ce que ça peut faire ?
Simulation physique réaliste/interactive
Des corps rigides
Poutres 3D déformables (câbles)
Des fluides
Collision arbitraires (trimesh)) compatible avec haptique
Interaction multimodale dans le cadre de la RV
Multiples périphériques A.R.T, kinect,
kinect SpaceMouse, Virtuose, TV3D, iPad
Moteur sonore et vibratoire (simulation des contacts)
Tracking interactive de l’humain virtuel
…
Simulation et contrôle d’humain virtuel autonome réactif
Contrôle de l’humain virtuel par optimisation
Locomotion (Preview-control)
Path planning
5
XDE: Overview
• Qu’est-ce que c’est ?
Un ensemble de briques
logicielles spécialisées
indépendantes
Un middleware permettant
De les assembler
De les utiliser de façon
cohérente et unifiée
De les interfacer
XDE
Simulation
physique
Contrôle HV
Path Planning
2.5D
…
Kinect
(trackin
tracking)
Virtuose
(haptique)
Interface
utilisateur
(RV)
CATIA
SolidWorks
iPad
Browser
Interface
utilisateur
(GUI)
C++
Python
CORBA
…
Interface
Programmation
6
XDE: Overview
• Quelques données techniques
Développé par 10 personnes permanentes au LSI
300k lignes C++, 15k lignes de python
Compatible linux / windows - 32bits / 64bits
Basé sur des librairies Open Source (boost,
(
eigen, Orocos RTT, etc.)
Basé sur des standards (COLLADA, etc.)
Processus de développement (Git, CMake, redmine) et release
7
Plan
•
XDE: Aperçu général
XDE
•
•
Briques:
Simulation physique
Fluide
Humain Virtuel
Middleware:
DSimI
DIO
•
Exemple appliqué à la robotique
•
Roadmap
Simulation
physique
Contrôle HV
Path Planning
2.5D
…
Kinect
(trackin
tracking)
Virtuose
(
(haptique)
Interface
utilisateur
(RV)
CATIA
SolidWorks
iPad
Browser
Interface
utilisateur
(GUI)
C++
Python
CORBA
…
Interface
Programmation
8
Brique simulation physique (XDECore)
(
Objectif : Simulation physique réaliste interactive des corps
rigides et câbles
•
•
•
•
•
Simulation physique:
Physique du mouvement (lois de Newton)
Physique du contact (modèles de frictions, …)
Réaliste:
Basé sur les équations physiques réelles
Schéma de résolution efficace (stable, précis)
Interactive:
Formulation performante (groupes de Lie)
Schéma de résolution efficace (rapide)
Corps rigides:
Collision entre géométries tessellées arbitraires
Câbles:
Modèles déformable 3D généralisé (Reissner)
(
Simulation
physique
9
Structure: deux éléments
• Solveur (GVM)
Multi corps
Chaines articulées ouvertes/fermées
Réduction cinématique à la volée
Articulations usuelles et exotiques (splines)
(
Corps déformables (Poutre 3D)
• Détecteur de collisions (XCD)
Géométrie arbitraires (téssélations))
Proximité, contacts et intersections
Contacts réguliers
Différents types de moteurs
Simulation
physique
10
Structure: solveur(GVM)
• Formulation basé sur les groupes de Lie
Réduction Lagrangienne = prise en compte naturelle robuste et efficace des
non-linéarités géométriques (rotations finies)
Dynamique ou quasi-statique
• Schémas numériques « rapides »
Orientés temps interactif / temps réel
Schéma central : NSCD-MK = intégrateur numérique géométrique et
non-régulier (time-stepping)
Résolution par contrainte ou par pénalité
Algorithmes parallélisés sur CPU
• Validé par rapport à Adams
Simulation
physique
11
Structure: solveur(GVM)
Simulation
physique
12
Structure: détecteur de collisions (XCD)
• 2 méthodes
LMD++
« exact »
symétrique, robuste et détection de contacts exacts sur des complexes
simpliciaux : points, droites, etc. dilatés ou non.
CDDIF
« voxelisé »
Basé sur des interactions entre des champs de points et de distance
(asymétrique)
Complexité à
l’exécution
LMD
O(nlog(n))
Erreur
géométrique
Nb de
proximité
Empreinte
mémoire
Précalcul
offset
1
O(n)
Fast (+)
n: nb primitives
Arbre binaire
O(n^3)
Long (--)
n: voxelSize
0(n^3)
n: nb primitives
CDDIF
O(n)
n : nb de
points(voxelSize)
voxelSize +
offset
1.5 - 10
Simulation
physique
13
XCD (LMD)
Complexe simplicial
Généralisation des triangulations
Toutes dimensions topologiques
Bases théoriques de la topologie
algébrique
Complexe simplicial dilaté
Tout corps rigide est volumique
• Principe: Distances minimales
locales entre complexes simpliciaux
dilatés
LMDs définies à partir des complexes de
base
Surfaces en contact régulières
Profondeurs de pénétration
« astucieuses »
Conséquence: arrondissement des angles
Simulation
physique
14
XCD (LMD)
Propriétés
Tolérance intrinsèque aux « petits » défauts
Compatibilité avec le time-stepping
stepping
Traitement des contacts conformants
Efficacité sur des modèles de complexité
industrielle
Parallélisation : exploitation des multi-cœurs
multi
Simulation
physique
XCD (CDDIF)
•
Principe
Test d’interaction entre un champs de distance et un nuage de points
•
Propriétés
Complexité linéaire
Modèle de contact continu
Traitement des contacts conformant
Gourmand en mémoire
Grande rapidité
Simulation
physique
16
Brique simulation fluide (CFD)
Objectif : Simulation physique réaliste interactive des fluides
• Réaliste
Basé sur les équations de Navier-Stokes
Navier
/ Boussinesq
Quantification de l’erreur de simulation par rapport au modèle
• Interactive
Calcul optimisé multi-cœur
• Fluide
Fumée
Liquides
Simulation
fluide
17
CFD
Simulation
fluide
18
Brique: Humain Virtuel Autonome
Objectif : Contrôle dynamique d’humain virtuel autonome
• Contrôle:
Méthode par optimisation quadratique
Notion de tâches
• Dynamique:
Utilisation du modèle dynamique de la chaine articulée de l’HV pour
effectuer la commande
• Humain virtuel:
Chaine cinématique articulée actionnée
• Autonome
Posture / équilibre
Locomotion
…
Simulation
HV
19
Structure de base: ORC
•
Brique d’optimisation (ORC Optim)
Couche logicielle générique d’optimisation
Indépendant du problème de contrôle dynamique
•
Brique de contrôle dynamique (ORC Control)
Couche logicielle générique de contrôle dynamique
Basé sur la couche Optim
Notions de pile de tâches (priorités), modèle, contrôleur
τ
Simulation
ORC Control
ORC Optim
Modèle
dynamique
Calculatrice
dynamique
Simulation
HV
20
ORC Optim
•
Ecriture unifiée de problèmes d’optimisation
•
Notions
Variable
x
Fonction
f(x,t)
Objectif
min. f
Contrainte
f≥0, f=0…
Solveur
Simplicité d’écriture
Fonction
Solveur
Problème
Ensemble de fonctions prédéfinies
Optimisé
Pipeline d’update
Généricité
Présence explicite du temps
•
•
•
•
Simulation
HV
21
ORC Control
•
Interface unifiée de spécification de contrôleurs
•
Notions
Modèle
Tâche
Point de contrôle
Contrôleur
Différents types de contrôleurs
Accélération
Impédance
J transpose
Ensemble de fonctions pour la robotique
Equation de la dynamique
•
•
Efforts de consigne
Simulation
HV
22
Humain Virtuel autonome: Locomotion
Tâches
Locomotion
ORC Control
Simulation
ORC Optim
Simulation
HV
23
Humain virtuel autonome
Simulation
HV
24
Plan
•
XDE: Aperçu général
XDE (DSimI)
(
•
•
Briques:
Simulation physique
Fluide
Humain Virtuel
Middleware:
DSimI
DIO
•
Exemple appliqué à la robotique
•
Roadmap
Simulation
physique
Contrôle HV
Path Planning
2.5D
…
CATIA
SolidWorks
iPad
Browser
Interface
utilisateur
(GUI)
C++
Python
CORBA
…
Interface
Programmation
25
DSimI: Fonctions
Middleware
composants/réseau
• Basé sur Orocos/RTT
Orocos
v2.4
• Participation active du LSI au développement de
Orocos/RTT
/RTT
Core
Script et GUI
• Python (w/ winpdb, NumPy, PySide, IPython)
• Qt 4.7
Py
Déploiement
• Structure P2P dynamique
• Cohérence centralisée
• « Stateless »
• Repose le plus possible sur des formats standard
(COLLADA, etc.)
Deploy
26
DSimI: Fonctions
Modulaire
•Chaque
fonctionnalité est un
module logiciel
indépendant
•Modules branchables
et débranchables « à
chaud »
Exemple: Rendu
visuel, simulation
physique, moteur
de scénario, etc.
Distribué
Temps réel
•Exécution des
modules sur le
même PC ou PC
différents
• Communication
transparente entre
les modules
• Communication
synchrone/
asynchrone
•Implémentation
optimisée (local et
réseau)
• Conçu pour les
processus
interactifs (latence
faible)
Exemple: Déport
transparent de
calcul sur PC dédié,
de IHM sur iPad,
utilisation multi
poste, etc.
Exemple:
interaction temps
réel avec retour
d’effort (haptique),
MoCap, …
Ouvert
•Basé sur open
source Orocos RTT
• Utilisation de
formats ouverts
•Multi plateforme
Windows XP, Vista,
Seven 32bits, 64bits
/ Linux 32bits, 64bits
• API C++ Python…
• Intégration simple
de code extérieur
Exemple:
Format COLLADA
Interfaçage avec
des librairies
27
DSimI - Core
•
Système de composants (local/réseau) – Orocos/RTT v2.4
Tâches, agents (composant)
Noyaux de simulation
Activité propre
Communication - type
Synchrone (flux)
Asynchrone (RPC)
Communication - support
Local (no copy, lockfree)
Remote (CORBA IIOP, mqueue)
•
Intégration transparentes des librairies au niveau des composants
Accès RPC à une librairie /w RTT
Stubber automatique
Notion d’objet (références)
Notion d’héritage
Notion de surcharge
28
DSimI - Core
Composant RTT
LibFoo
LibFoo
LibFoo
API C/C++
API C/C++
stubber
API C/C++
RTT
API RTT
API RTT
Composant RTT
LibFoo
LibBar
API C/C++
API RTT
API C/C++
29
DSimI - Core
Composant RTT
Composant RTT
LibFoo
Boucle simu
LibBar
API C/C++
API RTT
Boucle simu
API C/C++
Flux
API RTT
Composant RTT
LibQuxx
Boucle simu
API C/C++
API RTT
Flux
Flux
30
DSimI - Core
•
Orocos RTT v2.4
Produit issu de la robotique, issu d’un projet regroupant académiques et
industriels
Communauté très active (onera, fnac,
fnac disney, etc.)
Base de code C++ (bonne qualité), utilisation de CORBA pour le réseau
Composant RTT
LibQuxx
Boucle simu
API C/C++
API RTT
Flux
31
DsimI - Core
Simulation
physique
Contrôle HV
graphAgent = new GraphicsAgent("graph");
graphAgent
graphAgent->getPort("body_pos_in")->
connectTo(phyAgent->
getPort("body_pos_out"));
graphAgent->
graphAgent
getOperation("SetPosition")("Body
1",
, Displacement());
Path Planning
2.5D
GraphWrap
GraphWrap(graphAgent)::setPosition(...)
Retour
haptique
Intf. graph.
(IHM)
32
DSimI - python
•
•
•
•
Scripting complet de DSimI core
Scripting inter composant
Scripting intra composant
Intégration native des types (courants, math, desc, etc.)
Intégration transparente des librairies mathématiques
Basée sur NumPy
Intégration d’une GUI
Basée sur PySide et Qt 4.7
Intégration des facilités de debug
Winpdb
IPython
33
DSimI – python: exemple
import
import
import
import
rtt_interface as rtt
dsimi.rtt
dsimi.interactive
lgsm
world = builder.desc.parseColladaFile('knob.dae'
'knob.dae')
phy = dsimi.rtt.Task(rtt.LocalTaskRepository
LocalTaskRepository.get("physic"))
graph = dsimi.rtt.Task(rtt.LocalTaskRepository
LocalTaskRepository.get("graph"))
smf = dsimi.rtt.Task(rtt.LocalTaskRepository
LocalTaskRepository.get("dio/factory/spacemouse"))
physic
graph
dio /
spmouse
34
DSimI – python: exemple
graph.s.Viewer.setup()
graph.s.Viewer.CreateScene("mainScene")
icb = graph.s.Connectors.IConnectorBody.
.new("icb", "bodyPosition", "mainScene")
graph.s.Interface("mainScene").SceneInterface
SceneInterface.MergeScene1(world)
oco = graph.s.Connectors.OConnectorObs.new
new("oco", "obsFrame", "mainScene")
35
PyDSimI - exemple
ms = phy.s.GVM.Scene.new("main")
ms.setIntegratorFlags(9)
ms.setUcRelaxationFactor(1.0)
ms.setFdvrFactor(0.2)
lmd = phy.s.XCD.Scene.new_LMD("lmd", 0.005
0.005, 0.005)
ms.setGeometricalScene(lmd)
ms.setTimeStep(0.1e-3)
knob = phy.s.GVM.RigidBody.new("knob")
free = phy.s.GVM.FreeJoint.new("free")
ms.addRigidBodyToGround(knob, free)
knob.setMass(0.1)
knob.setCenterOfGravity(zero3)
knob.setPrincipalMomentsOfInertia(np.ones((
((3,1)))
knob.setPrincipalInertiaFrame(lgsm.Displacementd
Displacementd(0,0,0,1,0,0,0))
free.configure(lgsm.Displacementd(0,0,0,1,
,0,0,0))
free.setTranslationDampingCoeff(0.0)
free.setRotationDampingCoeff(0.0)
ocb = phy.s.Connectors.OConnectorFrame.new
new("ocb", "bodyPosition")
ocb.addFrame(knob)
icis = phy.s.Connectors.IConnectorImpedanceSpeed
IConnectorImpedanceSpeed.new("icis", "smVelocity", "knob")
36
DSimI – python: exemple
smf.s.start()
d = smf.s.scan()
if not d: raise RuntimeException("Spacemouse
Spacemouse not found")
sm = dsimi.rtt.Task(smf.s.build(d[0], 'sm'))
))
sm.getPort('out_vel').connectTo(phy.getPort(
('smVelocity'))
phy.getPort('bodyPosition').connectTo(graph.
.getPort('bodyPosition'))
sm.getPort("obs_frame").connectTo(graph.getPort
getPort("obsFrame"))
phy.s.start()
sm.s.start()
graph.s.start()
physic
graph
sm
dio /
spmouse
37
DSimI – python: exemple (intra composant)
class BodyPosGenerator(dsimi.rtt.Task):
def __init__(self, task):
super(BodyPosGenerator, self).__init__
__init__(task)
self.p_out = self.addCreateOutputPort
addCreateOutputPort("output", "vector_pair_Displacementd_string")
self.angle = 0
self.vel = 0.01
def updateHook(self):
self.p_out.write([(lgsm.Displacementd
Displacementd(
lgsm.zero, lgsm.Quaternion
Quaternion(lgsm.vector(1,0,0), self.angle)),'knob')])
self.angle += self.vel
@dsimi.rtt.operation('param', 'void', ('double'
'double',))
def setVel(self, d):
self.vel = d
Body Pos
Generator
38
Plan
•
XDE: Aperçu général
XDE (DSimI)
(
•
•
Briques:
Simulation physique
Fluide
Humain Virtuel
Middleware:
DSimI
DIO
•
Exemple appliqué à la robotique
•
Roadmap
Simulation
physique
Contrôle HV
Path Planning
2.5D
…
Kinect
(trackin
tracking)
Virtuose
(
(haptique)
Interface
utilisateur
(RV)
DIO
CATIA
SolidWorks
iPad
Browser
Interface
utilisateur
(GUI)
C++
Python
CORBA
…
Interface
Programmation
39
DIO (Device
Device Input Output): Principe
•
•
•
Système de gestion de périphériques RV
Sous ensemble de DSimI
Construction de périphérique en plusieurs étapes :
factory
factory
hardware
filtres
filtres
hardware
filtres
DIO : Les périphériques intégrés
Space Mouse
Tracking optique ART
Caméra couleur Basler
Caméra Temps de Vol PMD
Centrale inertielle XSens
Centrale inertielle Movea
Microsoft Kinect
Sony Playstation Move
Haption Virtuose6D
41
Quelques exemples…
42
Plan
•
XDE: Aperçu général
•
Briques:
Simulation physique
Fluide
Humain Virtuel
•
Middleware:
DSimI
DIO
•
Exemple appliqué à la robotique
•
Roadmap
43
Deux « produits », XDECore et XDE
•
•
XDECore (brique)
Brique simulation physique
Librairie C++ classique (*.h, *.lib, *.dll/*.so)
*.dll/*.
XDE
Environnement complet de simulation (15 briques)
Interface Python et RTT déportée
Simulation
physique
XDE
Simulation
physique
Path
Planning
•
Roadmap
V1.0-beta2 : état actuel
V1.0-rc1: mi-août
Interface C++ locale
Début de documentation
Outils pour la robotique (calculatrice physique)
v1.0 : mi-novembre
•
Support
[email protected]
Contrôle
HV
…
Téléchargement