James Bruton знову взявся за тему, яку багато хто вважає просто ефектною іграшкою. Щупальцеподібні роботи з косими обертовими шарнірами виглядають круто, але досі майже ніхто не змушував їх реально працювати в тривимірному просторі. У новому відео він показує, як це змінити.
Спочатку він згадує, звідки взагалі взялася ідея. Такі механізми нагадують систему векторної тяги в деяких вертикально злітаючих літаках — три секції з нахиленими шарнірами, які дозволяють направляти потік то назад, то вниз. Або конструкції з каналу Akiyuki, зібрані з Lego. Там чотири секції, і здається, що робот рухається в 3D. Але мотори просто крутяться в заздалегідь задані позиції. Ніяких розрахунків кінематики.
Сам James уже будував подібне. Була шестинога щупальцеподібна машина, де кожна нога мала три секції з кутовим зміщенням. Вона якось ходила, але діапазон руху був слабкий. Потім — величезна версія для EMF Camp 2024 з омні-колесами. Чотири осі дозволяли більш-менш рухати кінець у просторі, але все керувалося вручну: окремі перемикачі на кожен шарнір. Ніякої автоматики.
А щоб робот став корисним,
потрібно зовсім інше. Задати координати кінця в просторі — X, Y, Z — і щоб усі шарніри самі підлаштувалися. Тоді можна вести інструмент по траєкторії, різати, піднімати і класти предмети, або змушувати ногу йти. Це класична інверсна кінематика. James уже сотні разів писав такий код для своїх робособак. Там усе просто: нога — це трикутники, теорема Піфагора, базова тригонометрія. А тут — косі шарніри, кожен з яких крутить усе, що вище, по конусу. Розрахувати вручну майже нереально.
В Autodesk Fusion можна тягати кінець робота мишкою, і програма сама вирішує положення шарнірів. Але тришарнірна версія рухається лише в площині. Чотири шарніри вже краще, проте скриптом передати цільову точку в Fusion так, щоб він не розривав модель, — не виходить. Потрібен інший інструмент.
James звернувся до ROS 2 і MoveIt. Колись він уже експериментував з ROS 1 — робив робота, який картував простір і об’їжджав перешкоди. Тепер освоює другу версію. MoveIt має зручний майстер налаштування. На прикладі класичної руки Panda все працює ідеально: ставиш ціль для зап’ястя — і система рахує шлях,
навіть пряму лінію в декартових координатах.
Але з щупальцем виникла проблема. MoveIt хоче фіксувати орієнтацію кінця. А в базовій конструкції для цього просто не вистачає ступенів свободи. Довелося додати три традиційні шарніри на кінці, зробивши щось на кшталт карданного підвісу. Потім експортував модель з Fusion у URDF (інструмент Fusion to URDF має свої глюки, але вдалося). І вже в MoveIt можна було задавати позиції і дивитися, як усе рухається.
Найцікавіше — режим MoveIt Servo. Реальний час, шість осей. James підключив трекінгову камеру Intel RealSense T265. Хвиляєш камерою в повітрі — і кінець робота повторює рух. Щоб змусити все працювати на різних версіях Python (ROS 2 Humble на Ubuntu 22.04 вимагає 3.10, а RealSense API — 3.9), довелося робити костиль через UDP. Але результат того вартий: виглядає як керування живою істотою.
Як саме MoveIt рахує інверсну кінематику? James використовує солвер LMA (Levenberg-Marquardt). Це ітеративний метод: трохи рухає один шарнір, перевіряє, чи ближче став кінець, потім інший, дає більшу вагу тим рухам, що допомагають,
і повторює, поки не досягне цілі. Робить це для кожної точки траєкторії — близько 30 разів на секунду, коли працює камера.
«Якщо у вас є ідеї для дивних конфігурацій рук — пишіть у коментарях. Може, я спробую їх зібрати»
Далі він перевірив, скільки щупальцевих шарнірів потрібно, щоб отримати повноцінні шість ступенів свободи. З шістьма вже можна фіксувати орієнтацію, але діапазон дуже обмежений. З сімома стає помітно краще. А якщо поставити шарніри під 90 градусів замість 45 — діапазон зростає ще більше, особливо в обертанні.
Саме таку семишарнірну руку під 90 градусів James і зібрав у реальності. Друкував на принтерах Prusa (дякує Prusa Research), філаментом від Polymaker — PLA Pro і особливо міцним Polymax PLA. Сервоприводи — Dynamixel XM540-W270-T, 100 кг·см. База на лінивій сьюзан, щоб розвантажити перший серво. Додаткові підшипники на других шарнірах. У підсумку вийшла досить блокова, але робоча конструкція.
Електроніка — Teensy 4.1 + Dynamixel Shield, кнопки для активації, заморозки і хоумінгу, аварійна зупинка, живлення від 3S LiPo. Цифровий двійник у ROS синхронізується з реальною рукою через Python-скрипт,
який шле кути послідовно на Teensy.
На відео видно, як під час pitch-, roll- і yaw-рухів кубик на кінці інструменту стоїть майже нерухомо в просторі, а вся рука перебудовується навколо нього. Є невеликий люфт у редукторах — він накопичується, і на кінці з’являється помітне хитання. Але для демонстрації концепції цього вистачає. З камерою все виглядає особливо ефектно: робот повторює рухи в повітрі, іноді шарніри різко «перекидаються», щоб знайти рішення, але загалом працює стабільно.
І на десерт — розширення робочого простору. James інтегрував у кінематичний солвер свою голономну платформу на чотирьох омні-колесах з ROS 2 Nav2. Коли рука доходить до межі досяжності, база під’їжджає, і рука знову центрується. Працює і по X, і по Y, і при цьому можна змінювати орієнтацію інструменту. Виглядає трохи монструозно, але дуже функціонально.
James чесно каже: хотів би мати таку систему ще на тій великій машині для EMF Camp. А поки що пропонує глядачам кидати ідеї нових дивних конфігурацій. І, звісно, нагадує про Patreon, де відео з’являються раніше.
Виходить, що щупальцеподібний робот — це вже не просто красива іграшка. З правильним солвером інверсної кінематики і достатньою кількістю шарнірів він стає цілком робочим інструментом. Або принаймні дуже переконливим доказом, що навіть найдивніші конструкції можна змусити слухатися.
Запис Ентузіаст зробив щупальцеподібного робота і змусив його працювати в 3D спершу з'явиться на ProstoMob.