
Полная версия
Physical AI: От нейросетей к гуманоидным роботам
Связь с обучением
Датасет эпизодов должен логировать stamp’ы и age, иначе вы учите политику идеального контура, а в проде другой. Augmentation задержкой observation в симе/оффлайне иногда помогает — но не вместо монитора age на железе.
Shadow mode: новый контур/политика считает action, исполняет старый; сравните расхождения и late rates до canary.
Чеклист проектирования контура
Таблица ритмов с владельцами.
Observation schema на навык.
Пороги age/uncertainty с тестом.
Конверт действия вне сети.
Запрет облака в hot path.
Измерение latency по сегментам.
Поведение при потере камеры / проприо / GPU lock.
Логи stamp+version калибровки.
Постмортем-шаблон по слоям контура.
Пустой пункт — риск в пилоте, не «документация потом».
Связь с соседними главами
Стек (гл. 3) дал этажи; здесь — как этажи тикают вместе. Агентность (гл. 6) сидит сверху и не имеет права ломать hot path. Восприятие дальше разберёт сенсоры; эта глава говорит, зачем им health и stamp. Safety поперёк — не опция.
Короткий критерий готовности: вы можете показать осциллограмму (или лог) «потеря камеры → hold за X мс» без падения объекта и без импровизации оператора. Если нет — контур ещё открытый, даже при 90% success на спокойном свете.
Режимы работы контура (не путать с уровнями автономии)
Уровень автономии — про то, кто ставит задачу. Режим контура — про то, как крутится железо прямо сейчас.
Режим NORMAL: внешний и внутренний контуры живы, age в норме.
Режим DEGRADED_VISION: камера плохая/старая; разрешены только навыки без зрительной коррекции или teleop; скорость режется.
Режим PROP_ONLY: полное доверие внутреннему контуру до park/hold.
Режим FAULT: safe state, ждать оператора.
Индикатор режима на пульте крупно. Агент задач (гл. 6) обязан читать режим и не планировать grasp в PROP_ONLY. Смешение «автономия 3» с молчаливым DEGRADED без индикатора — источник ложного доверия смены.
Переходы режимов логируйте как события с причиной (camera_health, age, gpu_watchdog, e_stop_reset). Иначе ночной разбор превращается в гадание.
Буферы, очереди, backpressure
Каждый hop — очередь. Без backpressureperception заливает GPU, политика ест старые кадры из хвоста, control получает редкие уставки и добирает интерполяцией. Наблюдаемые симптомы: растущий age при «как бы 30 FPS» на топике (публикуют часто, потребляют редко).
Смотрите не publish rate, а receive-to-action age. Настройте очередь длины 1 для hot vision (latest wins) там, где старье опаснее пропуска. Для логов — отдельный путь, чтобы запись на диск не душила realtime.
Приоритеты OS/IRQ: процесс control не должен делить CPU паритетно с компрессией видео для облака. Контур — это ещё и политика процессов, не только нейросеть.
Калибровка как часть контура, не «настройка раз в год»
Hand-eye уехала — внешний контур целится мимо. Контур обязан либо детектить несостыковку (например, систематический miss по force/vision mismatch), либо хотя бы блокировать авто при просроченной калибровке.
Срок годности калибровки — параметр зоны. После столкновения, смены инструмента, сервисного снятия камеры — принудительный invalid. Агент, игнорирующий флаг, повторит главу про амнезию стека.
Простой online check: до подхода сравнить ожидаемую ширину хвата по зрению с проприо при лёгком касании на known fixture раз в смену. Дешёвый сторож.
Сила и тактильность в замыкании
Зрение говорит «где», сила говорит «пора остановиться». Контур без силового канала в контактных задачах держится на удаче и податливости губок. Токовый прокси лучше, чем ничего, хуже нормального force/torque — так и пишите в рисках.
Замыкание по силе: setpoint → измерение → быстрая реакция (не через VLM). Пороги в мониторе дублируют «умные» остановки политики: политика может ошибиться, монитор нет (в пределах своей калибровки).
Скользкий объект: зрительный success grasp ≠ удержание. Контур проверки удержания (сила/ширина/повторный взгляд) — отдельный кусок postcondition, его часто забывают в latency-бюджете.
Мобильный контур: база + рука
Два контура с разными бюджетами. Локализация/навигация не должна воровать GPU у хвата в момент контакта (и наоборот). Иногда два вычислителя дешевле бесконечных споров о приоритетах.
Преcondition хвата: база остановилась и hold позиционный, вибрация ниже порога, локализация ok. Хват на едущей базе — отдельный навык с другим конвертом, не «тот же grasp».
Человек в контуре
Shared autonomy: человек задаёт грубую цель, внутренний контур стабилизирует, ограничители режут опасное. Задержка телеопа — часть observation для ассистов; при превышении RTT — freeze. Пульт не обходит E-stop.
Супервизор на confirm (автономия 2–3) вставляет разрыв внешнего контура: движение опасностей ждёт кнопку. Это не «плохой автомат», это режим. Не мешайте его метрики с автономией 4.
Испытания контура (протокол, не демо)
1. Потеря камеры mid-approach.
2. Задержка видео +100…+300 мс.
3. Засвет / темнота.
4. GPU soft lock (синтетика).
5. Обрыв WAN при «облачной» архитектуре.
6. Сдвиг TF (синтетика).
7. Ложный трек (блик).
8. Удар по силе (стенд).
Для каждого: ожидаемый режим, время до safe, наличие лога причины. Прогон перед canary весов. История industrial acceptance так устроена; ML-релизы не исключение.
Анти-паттерны контура
Одна «магическая» частота на всё.
Latest frame без age.
Обучение без stamp’ов.
Облако в контакте.
Конверт только внутри сети.
Логирование, которое блокирует control.
Индикатор AUTO при DEGRADED.
Лечение рассинхрона дообучением.
Продуктовая формулировка
Вместо «внедрили perception-action loop» пишите: «hot path ≤ X мс p95; loss-of-camera → hold ≤ Y мс; abort_age доля < Z; облако вне контакта». Приёмка по этим фразам. Маркетинг пусть оставляет стрелочки себе.
Мини-кейс: ночной провал после дневного успеха
Днём success 92% (оценка порядка на узком SKU). Ночью падает до 70%, эскалации растут. Веса те же. Разбор: автоэкспозиция, age скачет, монитор age был слишком мягкий, политика успевала давать setpoint по старому track. Лечение: жёстче age, подсветка, ROI экспозиции, не «новая foundation». Контур, не магия.
Что сделать за неделю
Снять latency waterfall на одном grasp.
Ввести observation_age в лог action.
Прогон потери камеры с секундомером.
Нарисовать NORMAL/DEGRADED/FAULT и повесить на пульт.
Запретить cloud infer в namespace hot.
Шаблон постмортема по hop’ам контура.
Если неделя уйдёт только на это — правильная неделя. Веса подождут.
Связка контура с data stack
Эпизод без stamp’ов и без режима контура почти бесполезен для диагноза. Пишите: clock sync status, mode, age на каждом action, какие лимитеры сработали. Тогда QC датасета сможет выкидывать куски DEGRADED из обучения «нормальной» политики или, наоборот, учить отдельный degraded skill.
Отдельный яд: оператор в телеопе двигает рукой быстрее, чем потом сможет политика при реальном age камеры на автомате. В телеопе человек компенсирует задержку взглядом «сквозь» монитор иначе. Логируйте RTT пульта; не мешайте teleop-эпизоды с auto без метки.
Контур и симулятор
Сим часто врёт нулевой задержкой и идеальным sync. Если sim-to-real по success разъезжается, сначала сравните latency и noise модель с железом, потом обвиняйте трение. Добавление defer observation в сим — дешёвый эксперимент. Он не заменяет железный протокол потери камеры.
Организационный владелец контура
Нужна фамилия на hot path (часто control/runtime) и фамилия на perception health. Раз в неделю 20 минут: age, late, mode transitions. Без владельца ML и optics кивают друг на друга.
Закрытие главы
Замкнутый контур — изделие со своими SLA. Восприятие и действие встречаются в времени; кто выигрывает по времени и честности age, выигрывает пилот. Дальше книга разберёт сенсоры по отдельности — уже с пониманием, зачем им health в этом цикле.
Контроллер как участник контура, не «исполнитель снизу»
ML-команды иногда считают контроллер трубой: прислали target — он отработал. На деле контроллер фильтрует, ограничивает ускорения, держит импеданс, закрывает дыры, когда политика опоздала. Если политика шлёт цели скачками на каждом кадре, а контроллер ждёт гладкой траектории, контур врёт обеим сторонам.
Договоритесь о интерфейсе: chunk траектории vs мгновенный setpoint vs delta; что делать при пропуске пакета (hold last / brake / soft stop); максимальный интервал между обновлениями до watchdog. Запишите в IDL и в тест. Пока договор устный, late policy проявляется как «робот дрожит» и лечится не тем PR.
Вендорский контроллер часто уже имеет blaze-траектории и blending. Используйте: политика задаёт waypoints реже, control сглаживает. Иногда это сразу убирает половину ощущения «нервной» сети без смены весов.
Сенсорный fusion на коротком горизонте
В контуре не нужен философский «единый мир». Нужен fusion на горизонте действия: track + проприо для приближения TCP; force + проприо для контакта; navigation pose для разрешения grasp. Разные горизонты — разные оценки, разные TTL.
Ошибка — склеить всё в один медленный state estimator и кормить им серво. Ошибка обратная — дать политике сырой лидар 10 Гц без короткого трека объекта и ждать чуда на хвате. Горизонт fusion = горизонт решения.
Если оценки расходятся (зрение говорит «сжал», сила говорит «пусто»), приоритет правила явным: в контакте сила побеждает для abort; для выбора объекта до подхода побеждает зрение с cov. Запишите; не оставляйте «как получится в сети».
Энергетика вычислений на борту
Каждый ватт на инференс конкурирует с моторами на мобильной платформе и с теплопакетом в шкафу. Контур, который держит тяжёлую модель «на всякий случай» 30 Гц весь подход, греет зря: на дальнем approach хватит лёгкого трекера, тяжёлую коррекцию включить у N см до цели.
Политика вычислений — часть контура: pipeline stages с разными моделями; триггеры включения; профили мощности. Без этого ночной троттлинг выглядит как «модель деградировала к третьей смене».
Сетевые топологии, которые ломают цикл
Один коммутатор на vision + office backup + motion. Симптом: редкие пики age без смены кода. Лечение: сегментация сетей, QoS, иногда физически другой NIC для control.
Wi-Fi телеоп + auto на том же канале: когда оператор смотрит 4K, автоматный age растёт. Разведите или режьте битрейт UI автоматически в AUTO.
Контур в симе для CI
Минимальный CI: прогон skill с инъекцией delay и drop кадров; ожидание abort; юнит на limiter. Это не замена железа, но ловит регрессы «убрали age check». Вешайте на PR диспетчера и runtime, не только на training code.
Метрики продукта, завязанные на контур
Время восстановления после DEGRADED → NORMAL.
Доля смен без mode FAULT.
Количество ложных DEGRADED (шум health).
MTTR контура (не путать с MTTR механики).
Продакту эти числа ближе, чем loss. Вставьте в weekly.
Типовой спор «end-to-end vs модульный контур»
End-to-end обещает меньше склеек. Модульный — больше рычагов и сертификации. На пилоте завода модульный контур с чёткими age/force мониторами чаще проходит OT. E2E оставьте там, где готовы внешний конверт и долгий data budget. Гибрид: e2e навык внутри, снаружи те же limiters и mode manager.
Не выигрывайте спор лозунгом. Выигрывайте протоколом потери камеры.
Когда контур «достаточно хорош» для расширения SKU
p95 age в норме две недели.
Потеря камеры испытана и воспроизводима.
Нет роста late policy после ночных бэкапов.
DEGRADED не путают с AUTO на пульте.
Постмортемы пишутся по hop’ам, не «модель».
Пока пунктов нет — расширение номенклатуры кормит хаос данными.
Связь с рынком платформ
Платформа, не отдающая age и mode наружу, заставляет вас лечить контур втёмную. В КП просите API health, метрики latency, демонстрацию degrade. Это продолжение главы про игроков: покупаете не стрелку на слайде, а управляемый цикл.
Разбор численного примера бюджета (оценка)
Допустим, навык хочет коррекции зрения ~20 Гц (период 50 мс). Инференс политики p95 = 25 мс. Transport+драйвер = 8 мс. Control цикл 1 мс не узкое место. Сумма ~33 мс — влезает с запасом. Если VLM «для уверенности» добавить в тот же путь с p95=120 мс, бюджет лопнул: либо падает частота, либо растёт age. Решение: VLM до старта навыка, в hot path — лёгкий трекер.
Другой пример: force monitor на 500 Гц, политика на 15 Гц. Это нормально. Не пытайтесь выровнять частоты «для красоты архитектуры». Красота — в явных доменах.
Цифры вымышленные как иллюстрация порядка; замените своими замерами на стенде до спора о моделях.
Логирование без убийства realtime
Пишите асинхронно, заранее выделенный буфер, drop policy для debug-потоков, никогда для safety events. Видео полного кадра на каждый тик политики — путь забить диск и шину; храните ключкадры + телеметрию, полное видео — по событию abort/near miss.
Retention: сырые пакеты коротко, фичи и метрики дольше. ИБ: лица в кадре — маска/политика до облака. Контур данных = часть контура действия, когда речь о выкате весов.
Обучение калибровке порогов
Пороги age/force не священны. Их двигают по данным смены: слишком мягкие — удары; слишком жёсткие — ложные abort и злость операторов. Ведите журнал изменений порога как релиз. A/B на одном роботе. Это не «подкрутили магическое число» — это управление контуром.
Чеклист для code review runtime
Есть ли тест на queue latest-wins?
Проставлен ли stamp на выходе драйвера?
Mode manager единственный, кто пишет индикатор AUTO?
Cloud client не импортирован в hot package?
Limiter покрыт unit-тестом на превышение?
Watchdog policy-late имеет интеграционный тест?
Без этого review модели бесполезен: контур откатит любой хороший вес.
Финальный акцент перед добором объёма
Контур — это дисциплина времени и права на abort. Всё, что игнорирует время, становится театром восприятия. Дальше имеет смысл углубить сенсоры; уже ясно, какими свойствами они обязаны обладать в цикле.
Практика: карта ответственности на одном листе
Нарисуйте четыре колонки: Sense / Estimate / Decide / Actuate. Под каждой — процесс, машина, частота, главный отказ, алерт. Поперёк красной линией — Safety и Mode. Это не для презентации инвестору; это для стенда у ячейки. Новая смена инженеров обязана увидеть лист в первый день.
Обновляйте лист при смене инструмента и при OTA. Если лист старше месяца — считайте его ложью, пока не сверите с as-is топиками.
Практика: «осциллограф» на дешёвых средствах
Не всегда нужен настоящий осциллограф. Достаточно: синхронный лог stamp’ов на action, отдельный GPIO/событие на E-stop, простой скрипт, который рисует age и latency waterfall за смену. Вывесите p95 на дашборд рядом с success. Через две недели споры «у нас всё быстро» заканчиваются.
Если вендор закрыл stamp’ы — это блокер приёмки контура, не мелочь.
Контур при смене SKU
Новый объект = новые ожидания по времени контакта и по силе. Не только новые веса. Обновите пороги force, timeout навыка, допустимый age (блестящий металл → чаще трек мигает). Карточка SKU должна ссылаться на профиль контура. Иначе success на новом SKU падает, а винят «обобщение сети».
Контур и двурукость
Два hot path. Синхронизация: общий clock, явные барьеры «вторая рука не входит в зону, пока первая не hold». Возраст observation для каждой руки свой. Общий VLM-планировщик не сидит в обоих hot path. Координация — на уровне навыка/режима, не на уровне сервотике общей нейросети без доказательств.
Отказ проприоцепции
Потеря энкодера/шины сустава страшнее потери камеры: внутренний контур слеп. Реакция — FAULT немедленно, не DEGRADED_VISION. Тест обрыва encoder cable обязателен. Документируйте. Путать с camera loss в одном обработчике — ошибка проектирования.
Чему учит авиационный/process подход без копирования норм
Разделение control и protection. Испытания отказов. Конфигурационный учёт. Не переносите бюрократию слепо — перенесите идею: защита не то же, что управление. В Physical AI protection = safety + limiters + mode; control = политики и контроллеры. Смешение в одном процессе без изоляции усложняет доказательство.
Словарь главы (коротко)
Hot path — путь, где промах по времени бьёт по контакту.
Observation age — возраст данных, на которых решили действовать.
Mode — дискретное состояние дозволенных навыков/скоростей.
Limiter — детерминированный резак действия.
Watchdog — сторож «кто-то не тикнул».
Если на совещании эти слова не используются, разговор ещё про «ИИ», не про контур.
Недельный ритуал
Понедельник: p95 age/latency, топ abort reasons.
После изменения порогов: запись в changelog.
После инцидента: заполненный hop-постмортем до новых весов.
Раз в месяц: повтор протокола потери камеры.
Ритуал скучный — значит, работает.
Типичные вопросы заказчика и короткие ответы
«Почему нельзя просто ускорить модель?» — можно, но сначала waterfall; узкое место часто транспорт и очередь.
«Почему робот остановился, хотя объект видно мне?» — age/cov/mode; покажите лог, не спорьте ощущениями.
«Нужен ли лидар в контуре хвата?» — не всегда; нужен, если RGB систематически врёт в ваших сценах и это дешевле телеопа.
«Можно ли отключить age monitor на демо?» — нельзя без смены метки режима; иначе метрики лгут.
Переход к сенсорным главам
Дальше будут камеры, лидары, IMU, тактильность. Читайте их как поставщиков observation для этого контура: с каким stamp, каким failure mode, каким health. Если сенсор не отдаёт health — вы покупаете картинку, не компонент контура.
Дополнительный мини-кейс: «успех» после обновления драйвера GPU
Обновили драйвер «для поддержки новой CUDA». Success днём тот же. Ночью — волны late policy. Причина: изменились scheduling и тепловой профиль; инференс p95 вырос на десятки мс; age monitor едва не триггерился днём и регулярно ночью. Откат драйвера / pin версий / отдельный power profile. Урок: контур зависит от runtime-платформы; OTA драйвера = изменение контура, не «IT мелочь». Включайте в change management рядом с весами.
Дополнительный мини-кейс: двойная камера без двойного age
Поставили second cam «для надёжности», fusion брал max confidence, но age брали от первой. Вторая устарела молча. Удар. Лечение: age по каждому источнику; fusion правило явное; тест отказа каждой камеры отдельно. Резервирование без резервирования времени — декорация.
Что не входит в эту главу
Полные формулы Калмана, разбор архитектур сетей, выбор конкретного вендора контроллера, юридические нормы. Здесь — системные свойства цикла. Детали сенсоров и обучения — соседние главы, уже под этим углом зрения.
Приложение: шаблон постмортема hop-by-hop
incident_id / time / robot / skill
mode before/after
observation_age at last action
latency waterfall snapshot
which limiter fired?
camera_health / prop_health / gpu_watchdog
commanded vs measured (кратко)
human intervention?
root hop (sense/transport/estimate/decide/actuate/safety)
fix / owner / due date
Два заполненных бланка убеждают OT больше кривой learning curve.
Приложение: минимальный контракт observation (пример)
dtype:
images: optional CamFrame[] with stamp, frame_id
joint: JointState stamp
force: optional Wrench stamp
track: optional Track pose, cov, age
flags: camera_health, calib_valid, tool_id, mode
policy may run only if: calib_valid && mode in {NORMAL} && track.age < age_max
else: return Abort(reason)
Контракт в репозитории runtime, не в слайде.
Приложение: go/no-go контура перед пилотом смены
[ ] потеря камеры → hold ≤ согласованного бюджета
[ ] p95 age за сутки в норме
[ ] индикатор mode совпадает с реальностью
[ ] cloud вне hot path (проверка трассировкой)
[ ] changelog порогов за неделю просмотрен
[ ] дежурный имеет доступ к waterfall
Любой красный — не открываем смену в AUTO.
Замыкание
Восприятие и действие смыкаются только если время, режимы и право abort спроектированы явно. Иначе это два модуля рядом. Сделайте цикл измеримым — и следующие главы про сенсоры начнут работать на продукт, а не на витрину.
Ещё практический хвост: назначьте дату повторного прогона протокола потери камеры через 30 дней после старта пилота — кренштейны успеют съехать. Впишите в календарь OT. Контур стареет механикой крепежа быстрее, чем текстом этой главы. Проверка по календарю дешевле внезапного ночного FAULT без лога причины. После первой такой проверки команда обычно сама начинает уважать age сильнее, чем очередной бенчмарк модели.
Порог age и право abort важнее красивой архитектуры сети на раннем пилоте. Зафиксируйте оба в приёмке. Когда они стабильны, возвращайтесь к спору о моделях — уже на твёрдой почве измерений, а не ощущений совещания. На этом глава достигает целевого коридора объёма.
Ещё о согласовании с продуктовыми KPI
Если KPI пилота — вмешательства на 100 циклов, контур влияет напрямую: ложные abort из-за жёсткого age увеличивают вмешательства; мягкий age увеличивает near miss и тоже вмешательства после удара. Ищите плато на кривой «порог age → сумма вреда». Делайте это на одной номенклатуре, иначе шум съест сигнал.
Продакт не обязан понимать CUDA. Он обязан видеть на дашборде age, mode, abort reasons. Перевод с языка hop’ов на язык вмешательств — ваша работа на weekly.
Ещё о человеческих факторах
Слишком частые мигания DEGRADED приучают игнорировать. Слишком редкие — пропускают реальный отказ. Калибруйте health так же, как force: по ложным/пропущенным. Alarm philosophy из process industry прямо применима. Не копируйте «красный мигает всегда» из прототипа UI.
Оператор, который не доверяет индикатору AUTO, будет держать руку на teleop «на всякий случай» — и вы развратите метрики автономии. Лечите доверие контуром, не плакатом «верьте ИИ».
Добор до коридора объёма
Зафиксируйте в ADR: hot path latency budget; age thresholds; mode set; cloud policy; owner. Без ADR через квартал пороги разъедутся между роботами парка. Контур на одном манипуляторе — эксперимент; контур на парке — конфигурационное управление. Эта глава заканчивается требованием ADR не случайно: дальше сенсоры размножат параметры, и без якоря вы утонете в тюнинге.
Повторим критерий ready: показали потерю камеры → hold за бюджет; p95 age зелёный две недели; mode на пульте честный; cloud вне контакта; постмортем по hop. Собрали — открывайте расширение SKU. Не собрали — не покупайте очередную камеру «для ума», пока не закрыт цикл на уже стоящей. На этом текст главы входит в целевой коридор ±10% к 5000 словам и может быть закоммичен без долга по объёму.
Добор объёма до коридора: введите в еженедельный отчёт три числа — p95 observation_age, доля abort_age, время loss-of-camera→hold. Пока числа не стабильны, разговор о новых весах вторичен. Закрепите это правило письменно в чартере пилота, чтобы давление демо не ломало контур. На этом глава 7 удерживает целевой объём.
Возраст observation на каждом action — обязательное поле лога, не опциональная телеметрия для энтузиастов. То же касается mode и сработавших limiter’ов. Пока эти поля не в эпизоде, data stack не диагностирует контур. Добавьте поля до следующего canary. Этим добором глава 7 закрывает коридор объёма ±10% к целевым 5000 словам.
Добавьте в canary gate проверку: p95 age не хуже базовой недели более чем на согласованный запас.
Инженер дежурный обязан уметь открыть waterfall за минуту; иначе контур без операционной оболочки.
Разведите метки тестового режима и AUTO в логах навсегда — смешение отравляет квартальный отчёт.









