Робот-рекордсмен, разработанный в лаборатории биомиметической роботехники Массачусетского технологического института
Есть игры, в которые ИИ обыгрывает человека. А есть такие задачи, где человек вообще не рассматривается как конкурент. Здесь роботы соревнуются только друг с другом. Сборка кубика Рубика — типичная такая задача.
В ноябре 2016 года робот компании Infineon Technologies AG установил новый мировой рекорд по сборке кубика Рубика: собрал его за 0,637 секунды, побив предыдущий рекорд 0,89 с. Но европейских инженеров превзошли студенты лаборатории биомиметической роботехники (Biomimetic Robotics Lab) Массачусетского технологического института. Их робот справился с заданием за невероятные 0,38 секунды. Это «грязное» время, которое включает в себя нажатие клавиши «Старт», распознавание изображения и вычисление последовательности действий. Непосредственно механическая часть выполнения задачи заняла примерно 335 миллисекунд. Решение задачи в программе на базе min2phase и отправка инструкций — 45 миллисекунд.
Видео в реальном времени снято явно не для человеческих глаз. Чтобы несовершенные органы чувств человека смогли зафиксировать процесс сборки, а медленный человеческий мозг осознал происходящее, требуется замедлить воспроизведение видео хотя бы в несколько десятков раз. На скорости 0,03x от реальной становится что-то понятно.
Разработчики уверены, что машина вполне способна справиться быстрее, но для этого требуется тщательная оптимизация тайминга механических движений, отснятых на высокоскоростную камеру. На видео в 0,03х скорости (замедление в 33 раза) заметно, что после каждого перемещения грани кубика по инерции двигаются туда и обратно, прежде чем окончательно остановиться. Так, поворот на 90° в реальности завершается за примерно 10 миллисекунд, но робот делает следующее движение через 15 миллисекунд. Именно в этой части можно значительно оптимизировать процесс. Но робот и так почти в два раза перекрыл предыдущий мировой рекорд, а из-за ошибок оптимизации ломался кубик или взрывались полевые транзисторы. Так что решили оставить всё как есть. Но если нужно, студенты могут «срезать» с рекорда ещё 100 миллисекунд.
В конструкции использованы следующие детали:
- 6 двигателей Kollmorgen ServoDisc серии U9 (четыре N9M4T с неодимовыми магнитами и два UD9-E — у них одинаковые характеристики и производительность). Два из них взяты со старого проекта механизированной руки, остальные по дешёвке куплены на eBay. К каждому двигателю прикреплён оптический датчик US Digital 2000, тоже с eBay. Хотя эти датчики обеспечивают избыточное разрешение для данного эксперимента, но их удалось купить по $14 за штуку — новые, что просто отличная цена. Правда, для прикрепления датчиков на двигатели пришлось немного повозиться.
- 6 специально разработанных драйверов двигателей с 12-вольтовым питанием. Здесь работают контроллеры STM32F303K8. Платы собраны на 100-вольтовых транзисторах. Но почему-то на 60 вольтах один из них дважды взорвался, когда кубик застревал. Прошивка для контроллеров.
Синхронизацию/согласование движений между шестью контроллерами осуществляет простая логическая плата (AND Board), которая получает сигнал от каждого двигателя о начале/окончании движения и посылает сигнал о безопасном начале работы следующему двигателю в очереди.
- 2 камеры PlayStation Eye снимают по три грани каждая. Видео обрабатывается на 187 FPS под Linux с очень низкой задержкой, по сравнению с обычными веб-камерами. Эти камеры удалось купить по 7 долларов. Правда, обнаружилась проблема с чётким различием красных и оранжевых квадратов, так что студенты немного смошенничали — и закрасили оранжевые квадраты чёрной краской.
- 1 кубик Рубика. Один из самых дешёвых.
Кубики не зря брали дешёвые, потому что в ходе эксперимента несколько штук сломались (см. видео). Инженеры пишут, что одна из хитростей, чтобы всё хорошо работало — обеспечить по-настоящему плотное сжатие всех деталей кубика. Если детали отходят друг от друга, то внешние части могут вывернуться наружу, когда вы пытаетесь быстро повернуть центральные плоскости.
Для сборки хорошо «разобранного» кубика обычно требуется от 19 до 23 шагов. Некоторые решения складываются быстрее, чем другие (самое быстрое состоит из 21 шага). Так что если повезёт, то задача решится примерно на 30 миллисекунд быстрее.
Комментарии (42)
geisha
11.03.2018 19:39Хах, ну если кубик собрали специально с пазами под шесть манипуляторов то да, новый рекорд. Только не совсем понятно, в какой дисциплине.
Silvarum
11.03.2018 20:02Кубик как раз самый обычный, просто у него грани разборные. Да и собственно другие роботы для сборки тоже подобными манипуляторами пользуются.
geisha
12.03.2018 01:15Интересно, насколько далеко можно зайти с такими установками. В аналогичных соревнованиях людей ломать кубик, к примеру, нельзя. Ну и у людей два манипулятора а не 6. А тут
ломался кубик или взрывались полевые транзисторы
Silvarum
12.03.2018 07:22У человека можно сказать, что 10 манипуляторов, поскольку почти все действия производятся пальцами. Просто их конструкция не оптимальная для данной задачи.
На соревнованиях у людей кубики тоже ломаются — чем больше кубик позволяет срезать углы, тем, как правило, более он хлипкий. Вот пальцы люди себе вроде бы не ломали :)
Farrneel
12.03.2018 08:15Ну, скажем, "ломать кубик нельзя" — это именно про состязание одновременно нескольких участников. А тут просто ставится рекорд на скорость. Вот если бы было соревнование нескольких манипуляторов — то тогда да, скорее всего учитывали бы. В конце концов, если, к примеру, человек идёт на рекорд и случайно ломает кубик, то не разгонять же всю комиссию? Ну и, скорее всего, поломки кубика были во время разработки и отладки машины.
ElenaPhp
12.03.2018 09:48в скорости?)все ограничено лишь узлами кубика)роботы только рады ускориться, думаю)
LeqWiser
11.03.2018 19:59Надо показать своему соседу, который за 2 минуты собирает. Он недавно перестал собирать, ибо сказал, что уперся во время и быстрее не может
danila_bulatski
11.03.2018 20:50Уперся в 2 минуты? Странно, я обычным методом из минуты выходил
dmitrytheman
11.03.2018 21:19Согласен. Я по методу Фридрих в 1 минуту 20 — 30 секунд собирал. Хотя если сосед свои личные алгоритмы использовал, то молодец.
T_Sun
12.03.2018 08:361.5-2 минуты — время для обычных, не оптимальных алгоритмов.
Методом Фридрих (F2L и тд) сборка должна быть меньше минуты.
zartarn
12.03.2018 08:48Классический послойный метод — из минуты спокойно можно выйти. А вот Фридрих если без большого фанатизма, но все же подучить формул побольше — из 30 секунд можно выйти.
Tyusha
11.03.2018 20:31За 21 оборот собрал. Это значит, что не нашёл самого оптимального варианта сборки. т.к. из любого положения можно собрать кубик за 20 ходов.
Но тут, понятное дело, уже соревнование не алгоритмов, а в механики.dmitrytheman
11.03.2018 21:29+1Ну всё же 20 это не минимальное число оборотов вообще, а минимальное для абсолютно любой из всех изначальных конфигураций. Если у кубика повернута одна грань на 90°, то и для сборки нужен один поворот. Если я не ошибаюсь, то термин "поворот" при сборке кубика — это поворот на 90° любой грани.
Dvlbug
12.03.2018 00:22Как мне кажется, такие модификации кубика противоположны соревнованию.
Это как если заменить грани на RGB светодиоды или на эмуляторе запустить.
Никто не будет против если я на олимпийских играх по бегу на машине проеду?DracoL1ch
12.03.2018 01:38Если это будет соревнование среди машин — то пожалуйста. Эти роботы не с людьми соревнуются.
T_Sun
12.03.2018 08:39пишут, что кубик используется самый обычный
Norno
12.03.2018 09:12Это не совсем правда, у него изменены цвета граней (фиг с ним), и модифицированы грани, что уже существеннее, но, как отметили выше, ± все рекорды роботов ставятся на таких кубиках.
zartarn
12.03.2018 10:07Изменение цветов граней вроде никогда небыло критичным. Модификаций граней — тоже не наблюдаю. Сняли колпачки с центральных элементов, и в них вставляется уже «манипулятор».
Сейчас вроде даже разрешили на соревнованиях кубики из цветного пластика (чет такое слышал).
andersong
12.03.2018 10:11Помнится, давно (кажется, во времена первой эпидемии) прочитал, что есть комбинации, из которых невозможно собрать кубик. Это правда?
jetexe
12.03.2018 10:13ну его же надо как-то в эту комбинацию ввести…
andersong
12.03.2018 10:18Логично, а если собрать (из деталей) /приклеить наклейки сразу в этой комбинации?
jetexe
12.03.2018 10:36нет. Такой комбинации не существует. Для вообще всех комбинаций требуется не более 20 шагов. На доказательство этого ушло 35 лет
mammuthus
12.03.2018 10:50Поправка: для вообще всех комбинаций правильного кубика требуется не более 20 шагов. Для кубика, в котором были переклеены грани определенном образом, такие комбинации есть, например:
mafia8
12.03.2018 10:58А если переклеить цвета на одной детали? Тут нет принципа чётности? В той статье «все» — это все нормальные комбинации, к которым можно прийти из собранного состояния без разбирания кубика.
andrey_aksamentov
12.03.2018 10:53За сколько же тогда будет решена судьба человечества? Будет ли это хотя бы сотая секунды...
ODY
12.03.2018 13:30В дорогих кубиках Рубиках можно прокручивать перпендикулярную грань не дожидаясь докрутки предыдущей, называется «резать угол». Также они лучше смазаны, и имеют настройки упругости. Как и писалось в статье, с рекорда можно срезать еще несколько мс.
alix_ginger
12.03.2018 15:48А можно ли найти такое решение, которое пусть и увеличит количество необходимых поворотов, но при этом повороты будут производиться парами — по две противолежащих грани?
Ведь противолежащие грани можно поворачивать одновременно, и тогда «параллельное» решение из 30 поворотов займет меньше времени, чем обычное из 20.
Со вчерашнего дня пытаюсь это сформулировать, но до сих пор, по-моему, не очень понятно.zartarn
12.03.2018 16:40А смысл? если обе в одну сторону это = повороту центрального слоя. Если в разные — то это поворот центр+грань и грань. Существенно тут не выйграешь. Да и просчитывается алгоритм наиболее эффективный, а не пошагово. На числе оборотов тут уже особо не выйграть.
denis64
Дальнейшее усовершенствование наверняка будет идти по пути поиска новых конструкционных и смазочных материалов самого кубика. Иначе его начнёт разрывать от перегрузок.
redpax
Просто нужно установить выдвигающиеся на втречу движения отбойники гасящие инерцию, тогда тайминги можно будет уменьшить в разы.
vesper-bot
Придется тогда гасить инерцию уже отбойников, так как им придется влезать в область, заметаемую движением предыдущего угла, значит, они должны выдвигаться, когда нужны, и убираться, когда не нужны. Возможно, можно оптимизировать сам профиль приложения нагрузки, при котором движение выполняется быстрее и без перелета граней через целевое положение, но это не факт.