Головоломка для робота. Как я сделал машину для сборки кубика Рубика
Содержание статьи
Мне не хотелось повторять уже готовое изделие. Чтобы лучше понимать, как функционирует робот, и научиться чему-то новому, я решил делать все сам.
Подробно о том, как начать свою карьеру в электротехнике, читай в статье «Я у мамы инженер! Как перестать бояться паяльника и начать творить».
Выбираем платформу
Любой робот состоит из двух основных систем: механической и электронной. Для механической составляющей я рассматривал конструктор Lego, но его наборы могли оказаться очень дорогими, к тому же к нему очень сложно пристроить нестандартные части и блоки. Поэтому я остановился на проекте с сайта Otvinta.com и взял за основу их конструкцию. Ее детали можно легко распечатать на 3D-принтере.
В качестве платформы для электронного блока управления я выбрал смартфон на Android и микроконтроллер Arduino, которые связал по USB. На мой взгляд, такая платформа оптимальна для создания простых и дешевых роботов.
У современных смартфонов есть все необходимое: камера, Bluetooth, Wi-Fi, USB, GPS-датчик, сенсорный дисплей для управления, достаточно мощный процессор и большой объем памяти. Можно использовать бюджетный смартфон, чтобы уменьшить стоимость проекта.
Микроконтроллер Arduino нужен, чтобы отвечать за процессы реального времени: управлять сервоприводами, считывать информацию с внешних датчиков, получать управляющие команды со смартфона по USB и отправлять на него нужные данные.
Мой выбор остановился на смартфоне Motorola Moto G и микроконтроллере Arduino Mega 2560.
Смартфон Motorola Moto G
Микроконтроллер Arduino Mega 2560
Печатаем детали и собираем корпус
Модели всех деталей для корпуса робота можно скачать и распечатать на 3D-принтере (ZIP). Лучше печатать с максимальной точностью. Я этот момент не учел, поэтому детали потом пришлось подправлять с помощью наждачной бумаги.
Внутри деталей принтер оставляет полости, что сказывается на их прочности. Несколько деталей сломались при сборке, и мне пришлось их склеивать. Поэтому советую распечатывать мелкие детали без полостей внутри.
Сервоприводы советую брать оригинальные, они лучше подходят по конструкции и должны работать надежнее.
Крепеж я купил на строительном рынке. Корпус собирал по инструкции, это оказалось несложно.
Также роботу нужны два блока питания: на 12 В для Arduino и на 5 В для питания сервоприводов.
Механическая часть робота
Осталось прикрепить к корпусу робота микроконтроллер Arduino и смартфон. Смартфон приделаем к задней части корпуса с помощью специального держателя таким образом, чтобы его камера была направлена на кубик в центре.
Робот собственной персоной
Сервоприводы подключаем к микроконтроллеру и подаем на них питание. Теперь, когда механическая часть робота собрана, мы готовы приступить к написанию программ, которые будут управлять нашим устройством.
Управление сервоприводами
Управлять сервоприводами у нас будет микроконтроллер Arduino Mega 2560. Чтобы написать для него программу, понадобится средство разработки. Arduino IDE свободно распространяется в интернете и работает на любой современной ОС. После ее установки создаем новый скетч для написания исходного кода. Язык программирования похож на C, что сильно облегчит нашу работу.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Новый рекорд сборки кубика Рубика: 0,38 секунды
Робот-рекордсмен, разработанный в лаборатории биомиметической роботехники Массачусетского технологического института
Есть игры, в которые ИИ обыгрывает человека. А есть такие задачи, где человек вообще не рассматривается как конкурент. Здесь роботы соревнуются только друг с другом. Сборка кубика Рубика — типичная такая задача.
В ноябре 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), которая получает сигнал от каждого двигателя о начале/окончании движения и посылает сигнал о безопасном начале работы следующему двигателю в очереди.
Кубики не зря брали дешёвые, потому что в ходе эксперимента несколько штук сломались (см. видео). Инженеры пишут, что одна из хитростей, чтобы всё хорошо работало — обеспечить по-настоящему плотное сжатие всех деталей кубика. Если детали отходят друг от друга, то внешние части могут вывернуться наружу, когда вы пытаетесь быстро повернуть центральные плоскости.
Для сборки хорошо «разобранного» кубика обычно требуется от 19 до 23 шагов. Некоторые решения складываются быстрее, чем другие (самое быстрое состоит из 21 шага). Так что если повезёт, то задача решится примерно на 30 миллисекунд быстрее.
MindCub3r по-русски — делаем робота, который может собрать кубик Рубика (статья обновлена)
Не так давно обзавелся набором LEGO MINDSTORMS EV3 (31313) и с удивлением обнаружил, что в русскоязычном сегменте интернета довольно мало интересных материалов и инструкций по сборке и настройке роботов из этого набора. Решил, что нужно это дело исправлять.
Эта инструкция представляет собой вольный перевод материалов с официального сайта проекта MindCub3r и дополнена опытом самостоятельной сборки этого робота, способного собрать кубик Рубика меньше чем за 2 минуты.
Подробнее о LEGO MINDSTORMS EV3 можно почитать на этом сайте.
Вот, что у нас должно получится в итоге:
MindCub3r можно построить из одного комплекта Lego Mindstorms EV3 (31313, Home Edition).
Также вам понадобится инструкция по сборке и программное обеспечение, разработанное авторами проекта.
Буквально позавчера автор проекта объявил в своем ФБ, что подправил программное обеспечение для своего робота, и теперь оно работает со «штатной» прошивкой «кирпича» 1.06Н. На главной странице проекта эта информация также уже появилась, архив MindCub3r-v1p1a.zip, содержащий, среди прочего, и обновленную версию программы, уже доступен для загрузки. Загрузка и установка блока для датчика цвета по-прежнему необходима.
Дальнейший текст статьи исправлен с учетом последних изменений на сайте проекта!
Инструкцию по сборке MindCub3r смотрим или скачиваем здесь.
Прошивку (на момент написания статьи EV3-Firmware-V1.06H.bin) для кирпича скачиваем с официального сайта LEGO MINDSTORMS здесь.
Архив MindCub3r-v1p1a.zip с файлами проекта (MindCuber-v1p1.ev3, autorun.rtf и mc3solver-v1p1.rtf) качаем тут.
Еще нам понадобится прошивка для датчика цвета, которую берем здесь. Все дело в том, что стандартные настройки этого датчика не корректно определяют цвета в режиме RGB.
После того, как вы соберете робота и скачаете себе на компьютер все необходимое, можно приступать к настройке.
Если вы еще не обновили прошивку «кирпича» первым делом устанавливаем новую версию ПО для главного блока Mindstorms EV3:
1. Запускаем программное обеспечение LEGO MINDSTORMS EV3;
2. Выбираем Инструменты — Обновление встроенного ПО;
3. В появившемся диалоговом окне нажимаем «Просмотреть», находим предварительно закаченный файл EV3-Firmware-V1.06H.bin и жмем «Открыть»;
4. В диалоговом окне в таблице «Доступные файлы встроенного ПО» выбираем EV3-Firmware-V1.06H и жмем «Загрузить». Ждем окончания загрузки;
5. Перезагружаем главный блок (выключаем и снова включаем).
Далее устанавливаем прошивку для датчика цвета:
1. В ПО LEGO MINDSTORMS EV3 открываем новый пустой проект;
2. Выбираем Инструменты — Мастер импорта блоков;
3. В появившемся диалоговом окне нажимаем «Просмотреть», находим предварительно загруженный файл ColorSensorRGB-v1.00.ev3b и жмем «Открыть»;
4. В диалоговом окне в таблице «Выбрать блоки для импорта» выбираем ColorSensorRGB-v1.00.ev3b и жмем «Импорт».
5. Для завершения установки закройте диалоговое окно и выйдите из программного обеспечения LEGO MINDSTORMS EV3.
Теперь самый ответственный момент — загрузка программы робота в кирпич:
1. Распаковываем предварительно загруженный архив MindCub3r-v1p1a.zip;
2. Запускаем ПО LEGO MINDSTORMS EV3;
3. Выбираем Файл — Открыть проект, ищем файл MindCub3r-v1p1.ev3, распакованный из архива MindCub3r-v1p1.zip и жмем «Открыть»;
4. После открытия проекта загружаем его в «кирпич». Загружаем, но НЕ ЗАПУСКАЕМ.
5. Идем в Инструменты — Обозреватель памяти (Ctrl+I);
6. Выбираем (выделяем) во вкладке «Модуль» или «SD-карта» папку проекта «MindCub3r-v1p1»;
7. Нажимаем «Загрузить»;
8. Находим файл mc3solver-v1p1.rtf, распакованный из архива MindCub3r-v1p1a.zip и нажимаем «Открыть»;
9. Еще раз нажимаем «Загрузить», предварительно убедившись, что папка проекта «MindCub3r-v1p1» все еще выделена;
10. Находим файл InstallMC3-v1p1.rbf, распакованный из архива MindCub3r-v1p1a.zip и нажимаем «Открыть»;
Примечание: файл mc3solver-v1p1.rtf имеет текстовое расширение .rtf. Пожалуйста, не пытайтесь открыть этот файл с помощью текстового редактора.
11. Закройте диалоговое окно, выйдите из программы и перезагрузите модуль.
Последний этап — устанавливаем приложение MC3 Solver на главном модуле:
1. Включаем блок:
2. Находим во второй вкладке папку проекта MindCub3r-v1p1 (в памяти блока или на SD-карте):
3. Выбираем файл InstallMC3-v1p1 и нажимаем на центральную кнопку модуля для установки:
4. В третьей вкладке проверяем наличие установленного приложения MC3 Solver v1p1:
5. Перезагружаем блок.
6. В третьей вкладке блока запускаем приложение «MC3 Solver v1p1» для начала работы программы mc3solver-v1p1.rtf:
Всё! MindCub3r готов к использованию!
7. Запускаем программу в первой или во второй вкладке блока:
После запуска программы робот попросит вложить кубик («Insert cube») и начнет его сканировать датчиком цвета.
После сканирования робот ненадолго задумается и начнет сборку.
Удачное решение задачи ознаменуется радостным вращением кубика.
Вот, собственно, процесс работы робота:
Выше описан идеальный сценарий, на практике же все немного хуже — датчик может не правильно определить цвета — всего робот может провести 3 (три) цикла сканирования до того, как выдаст ошибку (Scan error). После этого нужно изъять кубик и снова вложить в робота. Причиной этому может быть или низкий заряд батареи модуля или «неправильный» кубик.
У меня иногда проходило по 3-5 повторов (3 цикла сканирования и одно изъятие) прежде чем робот принимался за сборку, но результат того однозначно стоит.
Если у вас остались вопросы, задавайте их в комментариях к статье, с удовольствием на них отвечу.