feature_9040

Терминатор против Кубика Рубика или игрушки для папы

Поучаствовали мы надысь с младшей в школьной научной конференции. По линии робототехники на этот раз. А что вы думали — девочки и не на такое способны. Не без помощи папы и мамы, конечно… Классный руководитель, правда, слегка в шоке была. В прошлый-то раз мы по России первое место по линии лингвистики заняли. А теперь совершенно противоположную поляну окучили. Ну а что. Таланты они во всём таланты, чего уж там скромничать :)

Городили из Lego Mindstorms. Самое сложное было придумать относительно простую конструкцию (все-таки 4 класс всего лишь), которая при этом была бы достаточно зрелищной. Всякие машинки нам показались слишком банальными. Понятное дело, обратились к интернету. И там напали на целый класс роботов, собирающих кубик Рубика. Выглядело это завораживающе. Я не умею собирать кубик (не, по известному еще из журнала Наука и жизнь алгоритму могу, но это не то), а игрушка из конструктора умеет. Чудеса… Сделали одного такого. И реально ведь собирает, падла. Вот прям на твоих глазах. Правда софт там специфический. И дальнейшие опыты показали, что неспроста.

Для участия в конференции, конечно, готовая конструкция не годилась. Дело даже не в механике (её-то мы оставили почти той же, усилили только). Дело в алгоритмах, которые нужно было разработать самостоятельно. Пропущу подробности — их страниц на полсотни вышло бы. В целом оказалось две проблемы. Одна математическая — я с высшим физико-математическим не всё понял (стыдно, но очень не всё). Куда уж донести это до четвероклассницы.  Вторая техническая — датчик цвета из набора давал очень путаные показания. И я его не осуждаю. Попробуй отличи красный от оранжевого. В указанной выше конструкции для датчика отдельный подгружаемый модуль реализован, и то четыре раза из пяти лажает. А там человек на этом собаку съел. В итоге решили упростить задачу. Пусть робот собирает не кубик из произвольного состояния, а из собранного кубика собирает пасьянсы. Типа таких:

cube

Сам механизм выглядел так:

lego

Вот эта задача оказалась для младшей школы в самый раз.  Родную среду программирования лего, правда, пришлось выкинуть. Для относительно сложных программ она оказалось слишком неудобной. И воспользоваться явой. Вообще оказалось, что для майдшторма есть среды программирования почти под любой язык.  Нам приглянулась leJOS. Понятно, что всякие тонкости пришлось сделать папе. Ребёнку для разработки алгоритмов достались объекты высокого уровня типа “повернуть куб”, “повернуть грань” и т.п. Ну типа я был сеньор-программером, а доча джуниором.

Кстати, на фотографиях два разных кубика. Первый  — настоящий (сделанный фирмой Rubiks), а второй китайский (правда известный в узких кругах DaYan). Так вот с первым робот не совладал. А секрет в скошенный углах второго. Они “прощают” довольно большие люфты механизма.

Работает это хозяйство так (на видео можно заметить, что привод датчика цвета немного не такой, как на фото — вариантов перепробовали много):

Исходные тексты, если вдруг кому надо будет, на гитхабе.