Призначення і роль у нашому технологічному стеку
onrobot-api забезпечує пряме керування гріпером OnRobot через Compute Box і використовується як апаратно-орієнтований шар для:
- 2FG7 (основний сценарій pick-and-place),
- RG2,
- VGC10.
Для комірки Estun Codroid основний фокус — TWOFG (2FG7).
Транспортні інтерфейси
У коді реалізовані три канали взаємодії:
- XML-RPC (основний)
- endpoint (кінцева URL-точка): http://<compute-box-ip>:41414/;
- створюється в Device.getCB() через xmlrpc.client.ServerProxy.
- Резервний REST-канал (fallback) (точково)
- використовується в set_finger_orientation() при відсутності XML-RPC методу;
- endpoint: /api/dc/twofg/set_finger_orientation/{t_index}/{true|false}.
- Потік статусу Socket.IO (status stream)
- OnRobotStatusClient підписується на повідомлення message і кешує останні дані (payload);
- дозволяє читати device.variable без синхронного опитування (polling) XML-RPC.
Базові класи
- Device (onrobot/device.py)
- зберігає IP Compute Box (Global_cbip);
- повертає XML-RPC-проксі (getCB()).
- TWOFG (onrobot/twofg.py)
- головний драйвер 2FG7;
- має блокування потоку (thread-lock) для безпечних викликів _call_xmlrpc()/_call_rest();
- вміє запускати потік статусу (status stream).
- OnRobotStatusClient (onrobot/status_client.py)
- управляє Socket.IO підключенням;
- надає latest_payload()/get_device_variable(…).
- GripperProfile (onrobot/gripper_profiles.py)
- централізує обмеження force/speed/width і типові налаштування (default tuning).
Параметри профілю 2FG7 (фактичні межі з коду)
Для профілю twofg7 зафіксовано:
- force_min=20 N, force_max=140 N, force_default=20 N;
- speed_min=10 %, speed_max=100 %, speed_default=10 %;
- open_width_default=25 mm, close_width_default=5 mm;
- calibration_width=5 mm.
Ці обмеження використовуються для перевірок під час виконання (runtime) у TWOFG.grip().
Підключення і перевірка доступності
Базова послідовність:
- створити Device(<ip>);
- створити TWOFG(device);
- викликати isConnected(t_index=0).
isConnected() перевіряє cb_is_device_connected(…, TWOFG_ID=0xC0) і повертає:
- True — пристрій знайдено;
- False — недоступний/непідключений;
- вищі методи при відсутності підключення повертають CONN_ERR = -2.
Керування захватом: grip, move, stop
grip(…)
Метод виконує:
- перевірку підключення;
- читання min/max ширини (get_min_ext_width, get_max_ext_width);
- валідацію t_width, n_force, p_speed проти профілю;
- команду twofg_grip_external(t_index, width, force, speed);
- за f_wait=True:
- очікує завершення busy-стану (до ~3 с, 30 циклів по 0.1 с),
- потім очікує grip-detected (до ~2 с, 20 циклів по 0.1 с).
Повернення:
- RET_OK = 0 — успіх;
- RET_FAIL = -1 — тайм-аут (timeout)/невалідні параметри/інша помилка;
- CONN_ERR = -2 — немає підключення.
move(…)
move() також перевіряє ширину та викликає twofg_grip_external, але з фіксованими force=100, speed=80 (як у реалізації). Це важливо для розуміння, що move() у поточному коді не дає тонкого контролю сили/швидкості (force/speed).
stop(…)
stop() викликає twofg_stop(t_index) і зупиняє поточний рух пальців.
Зчитування стану 2FG7
TWOFG надає телеметрію:
- isBusy();
- isGripped();
- getStatus();
- get_ext_width();
- get_min_ext_width() / get_max_ext_width();
- get_force().
Коди статусу (з README):
- 0 — stable;
- -1 — error;
- -2 — connection failed.
Орієнтація пальців (inward/outward)
Реалізація підтримує:
- get_finger_orientation_label() -> “inward” або “outward”;
- set_finger_orientation(…):
- приймає orientation як рядок/число/булеве значення (boolean),
- нормалізує значення,
- спочатку пробує XML-RPC (twofg_set_finger_orientation),
- при невдачі пробує резервний REST endpoint (fallback).
Це робить поведінку стійкішою між різними версіями Compute Box API.
Потік статусу Socket.IO (status stream): коли і навіщо використовувати
Через start_status_stream() можна отримувати асинхронні оновлення змінних пристрою:
- OnRobotStatusClient.connect() відкриває канал до http://<cb_ip>;
- callback on_update дозволяє реактивно обробляти дані (payload);
- get_status_snapshot() повертає variable для product_code=0xC0.
Цей шлях зручний для UI та моніторингу, де важлива «остання відома» телеметрія без блокуючих XML-RPC-викликів.
Інтеграція з codroid-api у проєкті комірки
Важливо розрізняти два підходи:
- Прямий onrobot-api
- пряме керування Compute Box (XML-RPC/Socket.IO),
- повний доступ до телеметрії 2FG7.
- Через codroid-api (toolAction)
- команди йдуть через контролер робота (Robot/Control/toolAction),
- простіше інтегрувати в наявний конвеєр команд робота (robot command pipeline).
Практично в лабораторних сценаріях потрібно фіксувати один підхід на конкретну задачу, щоб уникати конфліктів керування інструментом.
Типові причини збоїв і первинна діагностика
- Невірний IP Compute Box -> isConnected=False, CONN_ERR.
- Неприпустима ширина/сила/швидкість -> RET_FAIL з повідомленням про діапазон.
- Busy/grip timeout -> перевірити механіку гріпера, заїдання, перешкоди, фактичні force/speed.
- Відсутній XML-RPC-метод орієнтації -> перевірити доступність REST fallback.
- Відсутні status updates -> перевірити мережу до Compute Box і роботу каналу Socket.IO.
Обмеження і рекомендації щодо експлуатації
- Частина реалізації повертає коди (-2/-1/0) замість винятків; у прикладному коді потрібно явно обробляти ці значення.
- Методи grip/move із f_wait=True блокують потік до завершення циклу очікування.
- Поточний move() використовує фіксовані force/speed; для контрольованого процесу захвату рекомендовано grip().
- Для складних сценаріїв (подвійні інструменти, специфічні поведінки прошивки firmware) використовуйте офіційну документацію OnRobot і документацію конкретної версії Compute Box API.
Обмеження прошивки (firmware) / Compute Box
Практичні обмеження інтеграції з Compute Box:
- Поведінка API залежить від ревізії прошивки (firmware): набір доступних методів може відрізнятися, частина команд може змінювати формат відповіді між версіями прошивки.
- XML-RPC і fallback: окремі можливості (наприклад, orientation/path) можуть бути недоступні як XML-RPC; у таких випадках застосунок використовує fallback-логіку (за підтримки конкретної версії API).
- Статус-канал: Socket.IO-телеметрія чутлива до мережевої стабільності; відсутність status updates не завжди означає відсутність XML-RPC-з’єднання.
- Політика для лабораторного стенду: використовувати зафіксовану «підтверджену» базову версію прошивки (firmware baseline); будь-яке оновлення прошивки Compute Box виконувати лише з повним regression/acceptance test.
- Документування: після зміни прошивки (firmware) обов’язково оновити матрицю сумісності (розділ 14.1) і зафіксувати всі відмінності поведінки у журналі експлуатації.