Перейти к основному содержанию

Бесплатный онлайн-симулятор робота · Blockly · Цифровой двойник

Запрограммируйте роботадля стрижки волос.Каждое движение сначала проверяется.

HCR представляет собой академическое исследование Hair Cutting Robot. Участники собирают программу из блоков и управляют пятисуставным Service Robot на воксельной причёске. Цифровой двойник заранее проверяет движения и отклоняет любое, которое может коснуться головы.

Клиент работает в браузере, а сервис Rust воспроизводит и оценивает отправленные программы. Физический робот не требуется; сложность меняется в зависимости от результатов участника.

Или скачайте настольное приложение для macOS, Windows и Linux. Это удобно, если в помещении нет Wi-Fi.

Аккуратная короткая стрижкаВыполняется
  1. shoulderRoll15°
  2. shoulder72°
  3. elbow10°
  4. elbow−48°
  5. baseYaw−30°
  6. baseYaw
  7. baseYaw30°
  8. wrist−20°
Полнота57.6
СрезатьОставить

Зачем

Обучение робототехнике трудно масштабировать

Один манипулятор — один ученик

Настоящий манипулятор дорог, рассчитан на одного ученика и требует постоянного контроля преподавателя.

Один курс — один темп

Единая последовательность уроков утомляет сильных учеников и заставляет отстающих сдаваться.

Ошибки обходятся дорого

На реальном оборудовании неверный угол приводит к столкновению, поэтому новичкам часто вообще не дают управлять роботом.

Цикл

Составьте программу, проверьте и оцените. Измените одно число и попробуйте снова

Третий из трёх шагов возвращает к первому. В этом цикле и состоит обучение.

  1. 1Программа

    Перетаскивайте блоки, не вводя синтаксис

    В режиме Servo есть три типа блоков: абсолютный угол, ожидание и повтор. Cutter Grid добавляет шесть мировых направлений и целые расстояния, заранее компилируемые в детерминированный план суставов.

    Углы сервоприводов · движения Cutter Grid · ожидание (0–5000 мс) · повтор (1–20 раз)

  2. 2Проверка

    Сначала программу запускает цифровой двойник

    До движения манипулятора программа проверяется на геометрической модели головы. Опасная команда отклоняется: робот сохраняет последнюю безопасную позу, а проблемный блок подсвечивается.

    Непрерывная проверка контакта · детерминированно, без физического движка

  3. 3Оценка

    Баллы, а не отметка

    Ошибка означает лишь ещё одну попытку. Баллы зависят от сходства с целевой причёской, компактности программы и расчётного времени.

    0.60 completion + 0.25 efficiency + 0.15 time

Гарантия выполнимости

Каждое задание гарантированно выполнимо.

Нельзя сначала нарисовать целевую причёску и просто надеяться, что манипулятор до неё дотянется. В одном из ранних заданий требовалось удалить 91 элемент волос, хотя робот мог достать лишь до 20. Задание было невыполнимым, но учащегося об этом не предупреждали.

Теперь решатель запускается первым. Кандидатная цель проверяется во всём бесколлизионном пространстве суставов и передаётся эталонному решателю; всё, что он не может завершить, отбрасывается при генерации и не выдаётся учащимся. Найденное решение задаёт эталонные стоимость и время уровня.

Одно из первых заданий, созданных вручную

Волосы, заданные уровнем91
Волосы в пределах досягаемости робота20

Задание невозможно было выполнить, но экран об этом не сообщал. Учащийся легко мог принять недостаток конструкции за собственную ошибку.

Адаптация

Свой уровень для каждого ученика, а не один для всего класса

После каждой попытки платформа заново оценивает уровень и подбирает следующее задание. Уверенный успех повышает сложность, затруднение — снижает её.

Способность θ
Уровень программирования робота по логит-шкале, обновляемый после каждого повторного выполнения.
2PL, а не 3PL
Правильную стрижку нельзя угадать, поэтому параметр угадывания равен нулю, а третий параметр не оценивается по шуму.
Выбор заданий
Задания ранжируются по информации Фишера при текущем θ, затем частота показа ограничивается, чтобы ученики одного уровня не получали один и тот же небольшой набор.
Частичный балл
Баллы непрерывны. Перед обновлением оценки сервис преобразует исходный балл относительно порога освоения задания и сохраняет исходное значение.
Калибровка
Новое задание сначала считается предварительным: частота показа ограничена, а результаты не влияют на официальную оценку способности, пока не накопится достаточно ответов для повторной оценки сложности.
Пока используется один θ
В этой версии способность представлена одним составным значением, а у каждого ответа сохраняются теги измерений для отчётности. Настоящая многомерная модель — следующий этап, а не текущая возможность.

Участие

До начала выберите, хотите ли вы участвовать

Клиент не создаёт сеанс симулятора или идентификатор игрока, пока человек не решит участвовать в исследовании.

Необходимые данные исследования

Скомпилированный Blockly Program IR, версия задания, оценка и технические идентификаторы сеанса или отправки, необходимые для воспроизведения и анализа.

Дополнительный контекст

Основной язык записывается только общим кодом, например zh или en. Смещение UTC хранится как число минут. Кнопка «Участвовать» включает оба поля; в дополнительных настройках их можно отключить по отдельности.

Что мы не собираем

Мы не собираем отпечатки браузера, точные имена часовых поясов IANA, предполагаемое местоположение, рекламные идентификаторы или профили межсайтового отслеживания.

Как мы описываем данные

Мы не называем эти данные полностью анонимными. В материалах исследования могут сохраняться идентификаторы сессий, а сервер ведёт обычные журналы безопасности, поэтому данные считаются обезличенными.

Режимы

Тренируйтесь самостоятельно или соревнуйтесь со всей группой

Самостоятельная практика

Без ограничения времени: рабочая среда, задание и любое число попыток.

  • Можно запустить, приостановить, продолжить, выполнить по одной команде, остановить или сбросить. После сброса программа сохраняется.
  • «Тест» оценивает программу без визуализации за миллисекунды, не дожидаясь анимации.
  • Во время работы можно включать и выключать предварительный вид целевой причёски.

Соревновательный раунд

Все участники комнаты одновременно получают одно и то же задание.

  • Фиксированное окно реального времени, отсчитываемое сервером, а не устройством игрока.
  • До конца раунда никто не видит баллы, даже собственные.
  • Можно отправлять сколько угодно раз; учитывается только лучшая попытка.
  • Программы повторно выполняются на сервере, поэтому более быстрый компьютер не даёт преимущества.

Без настроенного сервера браузер оценивает раунды против запрограммированных ботов. Меню, лобби и таблица результатов явно помечают их как тренировочные. Играть офлайн можно, но локальный балл никогда не выдаётся за официальный.

Создано на Rust

Rust: от серверного воспроизведения до встроенной прошивки робота

Rust в HCR — не декоративная метка: на нём реализованы сервис оценки, адаптивный механизм, протокол и встраиваемый шлюз no_std.

Повторное выполнение на сервереПротоколПрошивка Rust (целевая)
Узнать о Rust в HCR

Техническая основа

Четыре компонента, один протокол

Simulator

HCR_Simulator_Frontend

React · TypeScript · Vite · React Three Fiber · Blockly

Весь демонстрационный цикл выполняется на клиенте. Если серверная часть не настроена, сетевые запросы не отправляются.

Service

hcr-backend

Rust · MQTT over WebSocket · HTTP binding

Воспроизводит программы на сервере, управляет адаптивным банком заданий, сроками раундов и таблицей результатов.

Протокол

hcr-backend/schema

hcr.v1 · JSON and CBOR

Каждое сообщение помещается в конверт и связывается по ULID. Минорные версии могут только добавлять поля; получатели отбрасывают неизвестное содержимое, а не завершаются с ошибкой.

Оборудование

hcr-fw

Rust (no_std) · ESP8266 · Arduino C++ as a hardware library

В физическом манипуляторе с пятью сервоприводами Rust управляет запуском, маршрутизацией, HTTP/JSON и состоянием сервоприводов; C++ остаётся за байтовым C ABI. MQTT пока не реализован.

Попробуйте

Адаптивное программирование, игра, симуляция и обучение на одной платформе.

Покупать робота не нужно. Весь класс может учиться одновременно, каждый на своём уровне. Ознакомьтесь с исследованием, решите, участвовать ли, и откройте первое задание.