NVIDIA Holoscan 5 incorpora control robótico y procesamiento de sensores en un mismo modelo de programación. Un tutorial muestra cómo crear un bucle de compensación de gravedad para guiar manualmente un brazo robótico, usando Holoscan, Pinocchio y la biblioteca motorbridge.
La compensación requiere calcular continuamente la dinámica inversa a partir del estado del robot y de un modelo preciso de sus articulaciones. El tutorial se probó en Jetson Orin Nano, Jetson Thor y sistemas x86 con Ubuntu 24.04.
Control con Holoscan 5
El SDK de Holoscan reúne control de baja latencia y procesamiento de percepción de alto rendimiento para cargas de CPU y GPU. Sus particiones agrupan operadores en un hilo, mientras que las colas acotadas con política de descartar primero los datos antiguos evitan acumular muestras desfasadas.
Los operadores y grafos permiten expresar cuándo se ejecuta cada tarea y cómo se conectan. Además, el plan compilado permite inspeccionar la ejecución antes de arrancar, y las anotaciones NVTX integradas facilitan analizar latencia y variación temporal con Nsight Systems.
El brazo y el bucle de control
El ejemplo utiliza el Seeed Studio reBot Arm B601-DM, equipado con actuadores cuasi-direct-drive, que ofrecen ancho de banda de par para control y sensado. El bucle combina compensación de gravedad con rigidez y amortiguación ligeras, de modo que el brazo sostiene su peso y cede al contacto manual.
El tutorial emplea Pinocchio para resolver la dinámica inversa a partir del modelo URDF, y motorbridge para leer el estado de las articulaciones y enviar órdenes a los motores. La implementación divide el control en tres operadores: lectura periódica del estado, cálculo de los pares de gravedad y envío de órdenes.
Compilación y ejecución
El operador de lectura solicita datos cada 2,5 milisegundos, equivalente a 400 Hz en esta demostración. El operador de cálculo procesa cada estado recibido; el último operador envía las órdenes y rechaza las que hayan caducado, estén fuera de orden o excedan los límites.
El ejemplo configura una cola de profundidad uno con política de descartar el dato más antiguo. Si no se completa ningún lote de órdenes durante 100 milisegundos, el watchdog intenta desactivar los motores y detiene el grafo. La guía también contempla la desactivación de los motores al detener el operador.
La aplicación compila el grafo antes de habilitar los motores. Para ejecutar el ejemplo en Python se requiere Linux y Python 3.12 o posterior; el repositorio incluye también una implementación en C++ y sus instrucciones de compilación.
Mediciones de latencia
Las pruebas compararon versiones C++ y Python, con y sin asignación de núcleos de CPU. La latencia medida abarca desde la entrada al primer operador hasta la entrada al último, sin incluir el envío de órdenes a los motores.

En microsegundos, la latencia p50, p99,99 y p99,999 fue, respectivamente: C++ con núcleos asignados, 7,1, 17,2 y 20,7; C++ sin asignación, 15,3, 86,6 y 133,4. Para Python, los valores fueron 93,0, 142,6 y 1.014,0 con asignación, y 113,8, 1.373,5 y 3.134,1 sin ella.
La asignación de núcleos y el aislamiento redujeron la latencia p99,99 observada aproximadamente cinco veces en C++ y 9,6 veces en Python. Fueron ejecuciones secuenciales perfiladas, con más de un millón de ciclos por prueba; se excluyeron los primeros diez segundos y se conservaron los valores extremos.
Ambas versiones utilizan el solucionador de Pinocchio basado en C++, aunque Python añade ejecución del intérprete, asignación de objetos y coordinación del GIL. El artículo señala que esos costes importan en bucles de control de CPU con presupuestos de latencia de microsegundos; para cargas de percepción en GPU que duran milisegundos o decenas de milisegundos, suelen tener menor importancia.
Ampliación del control
La compensación de gravedad es una base, no un controlador completo. El repositorio incluye otro ejemplo en Python que añade cinemática y control de impedancia mediante operadores reutilizables, y permite introducir una posición y orientación objetivo mientras el brazo mantiene una respuesta flexible al contacto.
El tutorial plantea ampliar el sistema hacia enseñanza guiada por la mano, teleoperación y manipulación. Para incorporar percepción, propone usar el módulo de visión de Holoscan y componentes de NVIDIA Isaac ROS.
El SDK de Holoscan 5 y el tutorial completo están disponibles en línea.



