Simulación de Robots en Unity usando Ros

Con el auge del Machine Learning y la necesidad de un simulador capaz de ofrecer gráficos “fotorealistas” para el entrenamiento de dichos modelos, y siendo que el rendering no es el fuerte de simuladores conocidos como Gazebo, motores de videojuegos preparados para exprimir esta característica se posicionan como una opción relevante a la hora de generar simulación. Con esto en vista, Unity ha estado trabajando en agregar las funcionalidades necesarias para dicha tarea.

Después de haber mejorado el solver usado para el motor de físicas, y haber agregado ArticulationBody para soportar articulaciones (Unity blog - Use articulation bodies to easily prototype industrial designs with realistic motion and behavior), Unity da un paso más hacia la simulación de robots integrando paquetes propios para la comunicación con Ros desde y hacia Unity, asi como el URDF-Importer (Unified Robot Description Format) para migrar con facilidad a Unity modelos de Ros que podrían estar actualmente simulados en Gazebo.

  • Robot Niryo One simulado en Unity, importado usando URDF Importer

Una vez importado el URDF del robot, se pueden utilizar los scripts provistos por el paquete ROS-TCP-Connector para generar los mensajes de ROS como clases de C#, para ser usados desde Unity (MessageGeneration). También se pueden usar los auxiliares provistos por ROSGeometry para cambiar entre el sistema de coordenadas de Unity (“RUF” right, up, forward) y el de ROS (“FLU” forward, left, up) y finalmente publicar a Ros!

El esquema es muy similar al utilizado frecuentemente con Rosbridge pero, mientras usando Rosbridge los mensajes son serializados a JSON, la estrategia de Unity pasa por publicar buffers teóricamente más rápidos de serializar/deserializar, y reemplazar Rosbridge con ROS-TCP-Endpoint, cumpliendo la misma funcionalidad que este último pero para el deserializado del formato utilizado por Unity.

Les comparto el repositorio y tutorial con el modelo de prueba, un brazo robótico importado usando URDF y manipulado a través de Ros con MoveIt: Pick and Place tutorial.

Si surgen dudas durante la ejecución del ejemplo, sientanse libres de preguntar e intentaré responder a la brevedad.

Más información en el post original: Robotics simulation in Unity is as easy as 1-2-3!

9 Likes

Muy interesante, @Christian_Barcelo!
Sabés si hicieron público algun roadmap con los planes de soportar nuevos features o agregar nuevos ejemplos?

Hola, el test que se ve con el farm simulator es eso…? Saludos…