Eszközök

Mesterséges intelligenciával generált szöveg

NVIDIA Holoscan 5: valós idejű gravitáció-kompenzáció robotkarokon három-operatoros vezérlővel

A cikk főszereplője az NVIDIA Holoscan 5 SDK és a Seeed Studio reBot Arm B601-DM robotkar, amelyen bemutatják a gravitáció-kompenzációs vezérlő felépítését.

NVIDIA Holoscan 5: valós idejű gravitáció-kompenzáció robotkarokon három-operatoros vezérlővel

Az NVIDIA Holoscan 5 SDK-ját bemutató útmutató egy egyszerű, mégis kritikus robotikai ellenőrző hurkot valósít meg: kézzel elmozdítható robotkart, amelynek motorjai pontosan annyi nyomatékot adnak, hogy a kart megtartsák a gravitáció ellenében. Az ilyen gravity-compensation (gravitáció-kompenzáció) feladat gyors, alacsony jitterű inverz dinamikai számításokat igényel — az algoritmusoknak folyamatosan ismerniük kell a robot aktuális állapotát és a linkek, tömegek, tehetetlenségi nyomatékok pontos modelljét. A bemutató a Holoscan 5 futtatókörnyezetét használva három egyedi operátorból építi fel a hurkot, és valós roboton, továbbá NVIDIA Nsight Systems-szel mérve mutatja be a késleltetést és jittert.

Miért Holoscan?

A Holoscan SDK célja, hogy egyesítse a nagy áteresztőképességű percepciót és az alacsony késleltetésű vezérlést egy egységes programozási modellben, amely CPU- és GPU-munkafolyamatokra egyaránt szabályozható végrehajtási utakat biztosít. A Holoscan minimális keretrendszer-hozzáadott költséget tart fenn, explicit végrehajtási terveket és beépített NVTX annotációkat ad, így az alkalmazás viselkedése könnyen ellenőrizhető Nsight Systems-ben.

Főbb tervezési elemek:

  • Partition-ök: az operátorláncokat egyetlen szálra csoportosítják, így elkerülve a szálak közti kézbesítési költségeket és felesleges syscalleket, ami csökkenti a késleltetést és a jittert.
  • Triggerek és sorok: OnClock és OnEach triggerekkel szabályozzák, mikor fusson egy operátor; korlátos, "drop-oldest" sorok megakadályozzák az elavult minták felgyülemlését.
  • Könnyű integráció: Holoscan 5 egyszerűen beilleszthető meglévő kódokba, és könnyű adatot be- illetve kivezetni a gráfokból.

Hardver és szoftver

A bemutatóhoz használt elérhető platform a Seeed Studio reBot Arm B601-DM, amelynek aktorai quasi-direct-drive (QDD) kialakításúak, így jó nyomatéksávszélességet és érzékelést biztosítanak — fontosak haptikus, kollaboratív, illetve nyomaték-alapú feladatoknál. A leírást Jetson Orin Nano, Jetson Thor és x86 Ubuntu 24.04 rendszereken tesztelték. A példakód Python 3.12+-ot használ; a repository tartalmaz C++ implementációt is.

A gravitáció-kompenzációhoz a bemutató a Pinocchio könyvtárat használja inverz dinamika megoldóként (RNEA), amely a URDF modell alapján számolja ki a szükséges csuklónyomatékokat. A motorhoz való interfészt a motorbridge könyvtár szolgáltatja, amely olvassa a visszacsatolt állapotot és küldi a parancsokat.

A vezérlőhurok három operátora

A Holoscan programozási modell két alapfogalomra épül: Operator és Graph. A graváció-kompenzációs ellenőrző hurkot három operátorra bontjuk:

  1. JointStateSourceOp — csuklóállapot olvasása órával
  • Kimenet: egy state port.
  • Trigger: OnClock period=2500 µs, azaz 2,5 ms-os periodicitás (a bemutató 400 Hz-en fut).
  • compute(): minden ticknél beolvassa a hét motor állapotát és kibocsátja azt.
  1. PinocchioGravityOp — gravitációs nyomaték számítása érkezett állapotból
  • Bemenet: state, kimenet: command.
  • Trigger: OnEach(state) — lefut, amikor új állapot érkezik.
  • Paraméterek: kp (pl. 1.5), kd (pl. 1.0), tau_scale és joint_direction, amelyek operátor-paraméterként állíthatók.
  • compute(): a beérkezett állapot és a paraméterek alapján átalakítja a csuklóállásokat a URDF modell szerinti vektorokká, majd Pinocchio computeGeneralizedGravity hívásával kiszámolja a gravitációs nyomatékokat, amelyek feedforward komponensként kerülnek a motorparancsokba egy kis compliance-szal (stiffness és damping).
  1. MotorCommandSinkOp — parancs elküldése a motoroknak
  • Bemenet: command.
  • Trigger: OnEach(command).
  • compute(): ellenőrzi a parancs érvényességét (lejárt, nem soros vagy határon túli parancsokat elvet) és továbbítja a robot helpernek, amely elküldi a hét motorparancsot. A stop() callback leállítja és tiltja a motorokat.

A három operátort egy gráfba kötve a forrás határozza meg a ritmust, a többi operátor pedig a bejövő adatra reagál. A partition segítségével mindhárom operátort a "control" csoportba helyezik, így egy runtime-owned szálon sorosan futnak — ez minimalizálja a szálak közti váltást.

Fordítás, előkészítés és futtatás

A Holoscan gráfot a rendszer lefordítja és ellenőrzi futás előtt; ha a terv nem érvényes, a fordító összegzést ad vissza. A modell- és motorinicializálás a prepare_gravity_compensation() függvényben történik közvetlenül a futtatás előtt.

A futtatás például így indítható (virtuális környezettel és Python 3.12-vel):

  • python3.12 -m venv build/python-venv
  • build/python-venv/bin/python -m pip install --only-binary=:all: -r requirements-python.txt
  • build/python-venv/bin/python -m pip check
  • build/python-venv/bin/python python/gravity_compensation.py

A program a "Gravity compensation active" üzenet után engedi, hogy kézzel vezessük a kart; a Ctrl+C leállítja és letiltja a motorokat.

Teljesítménymérés: késleltetés és jitter Nsight Systems-szel

A Holoscan natív NVTX annotációkat ad, ezért az alkalmazás módosítása nélkül lehet profilozni NVIDIA Nsight Systems-szel. Például:

  • mkdir -p build/profiles
  • nsys profile -t nvtx --sample=none --backtrace=none --cpuctxsw=none -o build/profiles/gravity-python build/python-venv/bin/python python/gravity_compensation.py

A timeline megmutatja az operátorok végrehajtását és az üzenetátviteli időket. A bemutatóban összehasonlították a processzormaghoz pinningelt és nem pinningelt futtatásokat, valamint C++ és Python implementációkat. A megtartott mérések során több mint egymillió futást vizsgáltak, és a következő p50 / p99.99 / p99.999 késleltetésértékeket kapták (mikroszekundumban):

  • HSDK C++ pinned: p50 = 7.1 µs, p99.99 = 17.2 µs, p99.999 = 20.7 µs
  • HSDK C++ unpinned: p50 = 15.3 µs, p99.99 = 86.6 µs, p99.999 = 133.4 µs
  • HSDK Python pinned: p50 = 93.0 µs, p99.99 = 142.6 µs, p99.999 = 1,014.0 µs
  • HSDK Python unpinned: p50 = 113.8 µs, p99.99 = 1,373.5 µs, p99.999 = 3,134.1 µs

A pinning és izoláció csökkentette a p99.99 késleltetést körülbelül 5×-tel C++-ban és 9.6×-tel Pythonban. Mindkét Holoscan változat a Pinocchio C++ solverét hívja, de a Python futtatás köré interpreter-bevonás, objektumallokációk és a GIL koordinációja adódik, amelyek felerősítik a legrosszabb esetbeli késleltetéseket. C++-ban több kontroll van az allokációk és rendszerhívások felett, ami fontos mikro-szekundumos késleltetési költségvetésű vezérlőhurkoknál.

Ugyanakkor GPU-alapú percepciós munkafolyamatok több ezred- vagy tízezredmásodperces skálán mozognak, ott a kisebb CPU-allocok és incidens sziszhívások optimalizálása általában kevésbé kritikus; Python továbbra is praktikus összerakó nyelv lehet, ha a költséges részek CUDA-ban futnak.

Továbblépés: teljes vezérlőstack és percepció

A bemutató végére működő gravitáció-kompenzációs hurokunk van: egy operátor olvassa az állapotot, egy másik Pinocchio-val számolja a gravitációs nyomatékot, és egy harmadik küldi a motorparancsokat. Holoscan előre leellenőrizte a gráfot, és Nsight Systems segítségével megmutatta a futás viselkedését.

A gravitáció-kompenzáció alap, nem pedig a végleges vezérlő. A tutorial repository tartalmaz egy második Python példát, amely kinematikát és impedancia-kontrollt ad hozzá, lehetővé téve célpozíció/injekciót (például egy tanult policy-ből) miközben a kar taktilisan kompatibilis marad. Innen lehet tovább építkezni hand-guided teaching, teleoperation és manipuláció felé; percepció hozzáadásához használható a Holoscan vision modul és az NVIDIA Isaac ROS komponensei (pl. GR00T inference).

Hol lehet továbblépni

A teljes tutorial és a Holoscan 5 SDK letölthető a repositoryból, amely tartalmazza a részletes konfigurációs, matematikai és hardverindítási útmutatókat.