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 …