Immersive Virtual Reality verven met Robot-in-the-loop
Voor een Belgisch kennisinstituut heb ik in 2020 verschillende applicaties gemaakt rondom het thema virtual teaching van robots. Zo heb ik in Unity3D een applicatie gemaakt waarin een gebruiker in VR, middels Vive Pro headset en controller in de hand, een object kan verven. Zie hieronder in de video.
Het gaat er hierbij om, de beweging van het verfpistool te capteren en deze aan een robot te voeden, waarbij deze de beweging moet reproduceren. Op deze manier kan iemand in VR de bewegingen ‘voordoen’ aan een robot (teaching). De inverse-kinematica van de robot om de hand te volgen heb ik in dit geval gemaakt in Unity3D, waarbij gebruik is gemaakt van de package FinalIK).
De beschrijving van de robot is gemaakt in Inventor3D en ge-exporteerd als urdf voor gebruik in ROS2, alsmede voor gebruik in Unity3D via Blender. Dit is gedaan voor een ABB IRB1200-robot, en een Yaskawa Motoman-robot.
Voor de uitvoering van de beweging zijn er twee wegen bewandeld:
Alle verfbewegingen worden opgeslagen in een database (MongoDb) en deze wordt ingeladen in RoboDK om uit te laten voeren. Ik heb hiervoor de Unity omgeving gemaakt, de communicatie in Unity3D met de MongoDB (C#) en python-scripting in RoboDK. De inverse-kinematica van de robot-ledematen wordt door RoboDK berekend.
De verfbeweging wordt gecapteerd en over DDS gepubliceerd als een nav_msgs/Path-topic. Deze wordt door een ROS2-node vertaald in een MotionPlanRequest voor MoveIt2, en die genereert een plan als antwoord. De node maakt hiervan vervolgens een trajectory_msgs/JointTrajectory-topic die door Unity3D wordt gelezen. In Unity3D worden de joints van de robot bewogen. De inverse-kinematica van de robot-ledematen wordt door MoveIt2 berekend.
Ik heb een Jointstate-subscriber in Unity3D gemaakt zodat in ROS2-gepubliceerde jointstates direct in Unity3D worden gevisualiseerd. Dit is mogelijke omdat de robot-implementatie in Unity3D dezelfde joints heeft als de robot in MoveIt2.
Naast de VR applicatie heb ik de Vive tracking-technologie gebruikt buiten Unity3D, om de beweging van een ‘echt’ verfpistool te capteren. Op deze manier konden klanten echte objecten verven, en tegelijkertijd de beweging capteren. Ik heb dit concept bedacht en gerealiseerd (inclusief ontwikkeling van de mechanica en elektronica). Tevens heb ik een materiaalonderzoek gedaan naar een afdoende afscherming van de ‘lighthouses’ in de verfcabine, om te voorkomen dat de tracking-sensoren vervuilen met verf, en heb ik een standalone-applicatie gemaakt om die bewegingen te capteren voor klanten die het wilden toepassen (zie paintVRheadless in https://bitbucket.org/edhage/paintvr/).
Augmented Reality
Daarnaast heb ik een studie gedaan naar augmented reality, om te onderzoeken hoe het mogelijk is om een werkelijk object ‘virtueel’ te verven, en weer deze beweging te capteren. Het voordeel hiervan is dat de operator in een schone omgeving de verfbewegingen kan leren aan een robot. Hiertoe heb 2 technologieën bekeken, de Vive Pro (VR) met through-the-lens-camera (camera geïntegreerd in de Vive Pro, en ook een optie met ZED-diepte-camera), en de Microsoft Hololens. Zie hieronder de video met als voorbeeld van de Vive Pro met through-the-lens-camera. De latency en nauwkeurigheid van het plaatsen van VR-beeld op camera-beeld is niet erg goed. De hololens werkt zonder camera, maar projecteert het VR beeld direct op de bril, zodat het VR beeld relatief nog meer achterliep (latency). De hololens heeft geen hulp van een tracker dus de plaatsings-nauwkeurigheid is nog veel slechter. De technologie voor Augmented Reality voor deze toepassing is nog onvoldoende ontwikkeld.