Приложение анализирует детали лего

Обновлено: 17.05.2024

Моё детство примерно на 20% состояло из Dungeons & Dragons (D&D) и на 80% — из LEGO. Эти два занятия очень сильно пересекались. Мне, по разным причинам, не разрешали всё время играть в D&D. Но я, привлекая на помощь воображение, и достигнув в этом деле успехов, достойных плута 15 уровня, понял, что создание персонажей AD&D игрой не считается. Воссоздание вселенной DragonLance средствами LEGO очень хорошо помогало мне быть ближе к игре, которая мне очень нравилась.

Поэтому одним из моих любимых направлений в LEGO были замки. Я тратил многие часы, выдумывая подземелья для моих героев. Для того чтобы не терять свои находки, и из-за того, что я видел, как мои друзья в школе чертят карты подземелий, я составлял планы своих LEGO-моделей на миллиметровке. Кроме того, я пытался сохранить и сведения о том, как именно были устроены модели. Использование миллиметровки казалось логичным для изображения того, что, в основном, состояло из прямоугольных блоков. Но меня, в итоге, сгубило недостаточно хорошее понимание правил изометрической проекции.


Теперь, хоть я и стал старше, моя любовь к LEGO не угасла. И хотя я и не могу сказать, что очень уж горжусь своими моделями (их называют MOC-моделями), я почувствовал, что просто должен разобраться с тем, как мне документировать то, что создаю. Я никогда не умел очень уж хорошо рисовать. Поэтому я решил обратиться к компьютеру.

CAD для LEGO

Несколько лет я работал в сфере виртуального 3D-моделирования (а в сфере обычного 3D — и того больше). Я хорошо владею 3D-приложениями, но всё, чем я пользовался, заточено под анимированную графику и под производство фильмов. Все эти программы, как, собственно, и фильмы, рассчитаны на то, чтобы создать красивую картинку. Как именно что-то сделано, до тех пор, пока всё выглядит хорошо, не так уж и важно. Если, ради того, чтобы что-то выглядело бы очень хорошо, нужно «обмануть» законы физики, то это вполне приемлемо, так как это будет существовать только в виртуальном пространстве.

А вот системы автоматизированного проектирования (Computer-Aided Design, CAD), это уже нечто другое. CAD-приложения пришли на смену обычным чертежам. В них создают спецификации, иллюстрирующие то, как нечто может быть создано в реальном мире. От этих программ ждут точности и реализма.

Так как невероятно много людей увлечено LEGO, существует активное сообщество тех, кто создаёт LEGO-модели, используя CAD-программы. Преимущества такого подхода очевидны: можно задокументировать подробные сведения о модели, описать то, какие детали нужны для её создания, и то, как именно их нужно соединить друг с другом. Это, конечно, не замена реальному конструктору LEGO (ну, разве что для тех, кто любит CAD больше, чем LEGO), но это — отличное дополнение к хобби.

Для того чтобы построить виртуальную модель LEGO, нужны две вещи:

  • Виртуальные детали LEGO.
  • CAD-приложение.

Виртуальные детали LEGO

Для того чтобы раздобыть виртуальное представление практически любого из когда-либо созданных строительных блоков для LEGO-моделей, можете воспользоваться опенсорсным ресурсом LDraw. LDraw — это открытый стандарт для цифровых моделей LEGO, который включает в себя возможности по описанию размеров и ориентации элементов. В дополнение к работе по описанию деталей средствами LDraw, силами сообщества подготовлены 3D-модели для каждой детали. Это значит, что все желающие могут загрузить тысячи определений деталей, истратив на это не особенно много трафика.

Установка набора деталей

Виртуальные детали очень похожи на изображения, которые используются на сайтах, или на шрифты, применяемые на компьютере. Собственно говоря, соответствующие файлы можно хранить где угодно. Главное, чтобы приложение, в котором планируется работать с деталями, знало о том, где эти файлы находятся. В Linux LDraw-файлы обычно размещают в папке /usr/share/LDRAW . В Windows это обычно C:\Users\Public\Documents\LDraw .

LDraw даёт в наше распоряжение лишь спецификации для каждой детали. Вот, например, как выглядит код описания кубика 1x1:


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

Приложение LDView для визуализации деталей

LDView — это среда для 3D-рендеринга, напоминающая POV-Ray или Cycles из Blender. Это приложение создано специально для рендеринга .ldr-файлов, то есть — CAD-файлов, содержащих данные в формате LDraw.

Если вы работаете на Linux, то, возможно, вы найдёте LDView в своём репозитории ПО. Если в репозитории этой программы не окажется — вы можете скачать установщик с сайта проекта. Если вы пользуетесь macOS или Windows, то вам, опять же, нужно будет воспользоваться сайтом LDView.

Просмотр отдельной детали

Легче всего начать цифровое конструирование моделей LEGO, попытавшись визуализировать отдельную деталь.

Сначала откройте ваш любимый текстовый редактор. Это может быть любая программа. Главное — чтобы она могла сохранять документы в виде обычного текста. Некоторые текстовые редакторы, в стремлении оказать пользователям добрую услугу, пытаются сохранять текстовые материалы в файлах, в которых, помимо текстов, есть ещё масса служебной информации (вроде .rtf и .doc). Существует множество хороших кросс-платформенных текстовых редакторов. Я, для наших дел, могу порекомендовать довольно-таки минималистичный редактор Geany.

Создадим новый файл с именем 1brick.ldr и введём в него следующий текст:


А теперь взглянем на наше скромное творение:


Только что вы создали простой CAD-файл, описывающий один кубик (а именно — модель номер 3001), цветовой индекс которого равняется 1 (это синий цвет), расположенный в позиции (0, 0, 0) по осям X, Y и Z. Поворот кубика регулируется с использованием средств матричного преобразования. Их применение, надо признать, не относится к простым математическим вычислениям. Правда, при конструировании LEGO-моделей произвольное вращение деталей требуется сравнительно редко, так как большинство деталей стыкуются друг с другом с использованием шипов.

Любая строка в файле, начинающаяся с 0, содержит либо комментарий, либо метаданные. Строка, начинающаяся с 1, содержит описание детали.

Вы можете попрактиковаться в перемещении и вращении деталей, внося изменения в свой CAD-файл. Обычный кубик имеет в высоту 24 LDU (LDraw Units). Это значит, что ставить детали друг на друга можно, меняя их координату Y с шагом в 24 единицы. Поворачивать детали можно, выполняя матричные преобразования.

Взгляните на этот код:


Вот результат его визуализации.


Конечно, перемещать детали можно вдоль любой из трёх осей. В спецификации LDraw сказано, что кубик 1x1 имеет 20 LDU в ширину и 20 LDU в длину. А это значит, что расставлять такие кубики вдоль оси X можно, меняя их позиции с шагом в 20 LDU.


Ещё два кубика

Порядок сборки модели

Чаще всего формат LDraw используется для того чтобы продемонстрировать порядок сборки модели. А это значит, что нужно описать последовательность шагов сборки. В LDraw это делается с использованием метакоманды STEP .

Для того чтобы испытать эту метакоманду, добавьте в свой файл, между описаниями деталей, следующее:


Готовый файл будет выглядеть так:


Теперь в вашем проекте описано два шага. На первом выводится первый кубик, на втором — второй. Можно пошагово просматривать .ldr-файлы, пользуясь клавишами-стрелками в верхней панели инструментов LDView, находящимися около подписи Steps .


Панель инструментов для пошаговой визуализации моделей

На одном шаге необязательно должен выводиться лишь один кубик. Как и в случае с инструкциями к наборам LEGO, установку нескольких деталей можно объединить в один шаг. Главное, чтобы это не повредило понятности инструкции.

В LDraw есть и другие команды. Например — тут можно рисовать линии, поясняющие расположение деталей, и делать прочие подобные вещи. Соответствующие сведения можно найти в спецификации.

Выяснение кодов деталей

Я хранил свою коллекцию LEGO в ящиках для рыболовных принадлежностей. Поэтому я мог быстро найти любую деталь из любого набора. Правда, по мере того, как росла коллекция, мне было нужно всё больше и больше ящиков. А в результате у меня стало уходить больше времени на поиск нужной детали.

Если учесть то, что в LEGO имеется более 11000 уникальных деталей, искать цифровые детали так же сложно, как и обычные. У каждой официальной детали LEGO есть собственный код. Например, тот кубик 2x4, который мы использовали в примере, имеет код 3001. Если вам известен код детали, вы можете просто использовать его в CAD-файле, и соответствующая деталь появится в вашей модели.

В дистрибутиве LDraw имеется файл parts.lst , в котором, с помощью grep, можно найти нужную деталь. Но детали там не всегда описаны по одной и той же схеме. Работая с этим файлом не всегда легко предугадать то, какие именно ключевые слова соответствуют тем или иным деталям. Например — как понять, какое слово, «curved» «sloped» или «angled», лучше всего характеризует некую деталь сложной формы?

Хотя искать детали можно и в parts.lst , в этом деле нам могут помочь некоторые специальные интернет-ресурсы:

    — это пользовательская группа, в которой есть база данных со сведениями о кодах деталей LEGO, построенная на основе сведений, взятых из LDraw. — хороший каталог деталей. — ещё один ресурс, на котором есть каталог деталей.

Другие средства для рендеринга моделей

После того, как вы создали свой шедевр, LDView может экспортировать вашу модель, что позволит вам отрендерить её в высоком качестве. Для этого можно воспользоваться POV-Ray — опенсорсной программой для фотореалистичного рендеринга трёхмерных моделей. В результате плоды ваших трудов можно будет представить в весьма привлекательном виде. Найти POV-Ray можно или в репозитории программ вашего дистрибутива Linux, или на сайте проекта.

Вот пример команды рендеринга:


Ниже показан результат визуализации.


Высококачественная визуализация модели

Если вам нужна программа для формирования инструкций по сборке моделей — попробуйте опенсорсную LPub3D. Эта программа выводит пошаговые инструкции и список деталей, необходимых на каждом шаге.


Исследование мира LEGO

Создание моделей из деталей LEGO — это интересно. Разработка собственных моделей — это воплощение той творческой энергии, которой фанаты LEGO заряжаются, занимаясь любимым делом. Теперь ваши LEGO-идеи больше не должны существовать лишь в форме бесплотных идей. Вы можете сохранить их в виде моделей и пошаговых инструкций.

Мир любителей LEGO — это приятное и креативное место, которое стоит посетить всем тем, кому нравится создавать цифровые модели, разрабатывать собственные детали, или делать с кубиками LEGO что-то такое, чего никто больше с ними не делает. Если вам нравится LEGO, то сегодня — самый лучший день для того чтобы стать частью LEGO-сообщества!

Большинство людей старшего поколения уже давно знакомы с конструктором LEGO как через своих детей и внуков, так и через личный опыт. Однако, наверняка найдутся те, кто не смог ощутить всю радость и приятные ощущения от сборки набора во времена своего детства. Но результаты технического прогресса дают возможность без затрат строить самоделки из конструктора на виртуальном «столе» (а с сегодняшними ценами на LEGO это особенно актуально). Для этого достаточно иметь даже не самый мощный или дорогой компьютер.

Итак, компьютер есть, органы управления в виде клавиатуры и мышки есть - осталось установить соответствующую программу. В этой статье мы разберём тот софт, с которого начинал я сам и которым пользуются многие виртуальные (и не только) самодельщики – Lego Digital Designer (он же LDD). Виртуальный редактор существует с 2004 года, а с 2010 года и поныне используется четвёртая генерация. Последняя полноценная программа этой генерации имеет версию 4.3.11. Существующая сейчас на официальном сайте LEGO версия 4.3.12. является очень сырой и неполноценной, поэтому она не будет затронута в статье, и следует скачать 4.3.11. для нормальной работы.

Установка редактора версии 4.3.11. на Windows 10 имеет иной порядок действий, чем на Windows 7 или XP. Это связано Adobe Flash Player и его версии ActiveX, не поддерживающейся в "десятке", но поддерживающейся в "семёрке". Пункты "1" , "2" , и " 6.1 " необходимы только для установки на Windows 10 .

1. Правой кнопкой мыши щёлкаем по установщику "setupldd-pc-4_3_11.exe" и среди перечня действий выбираем пункт "Извлечь в setupldd-pc-4_3_11" (необходим архиватор WinRAR или 7z).

2. Открываем получившуюся папку. В ней 3 файла: "install_flash_player_active_x.exe", "LDDSetup.exe", и "OpenGLChecker.exe". Удаляем в папке "install_flash_player_active_x.exe", а файл "OpenGLChecker.exe" переименовываем в "install_flash_player_active_x".

3. После запуска установщика, мастер установки рекомендует закрыть другие программы для обновления системных файлов без необходимости перезагружать компьютер. Смело нажимаем "Next".

1. Правой кнопкой мыши щёлкаем по установщику "setupldd-pc-4_3_11.exe" и среди перечня действий выбираем пункт "Извлечь в setupldd-pc-4_3_11" (необходим архиватор WinRAR или 7z).

После загрузочного экрана нас встречает главное меню: на переднем плане расположены три раздела, которые отличаются лишь наполнением деталей и выбором палитры. На заднем плане - наш виртуальный рабочий стол (или же "сцена"), на котором и будут собираться самоделки. Кнопка с папкой означает "открыть", то есть выбрать файл из некой директории. Кнопка с файлом открывает сам рабочий стол.

1. Синее окошко - классический раздел. Присутствует ограниченный ассортимент деталей, но каждая деталь дублируется в нескольких цветах и имеют предустановленные декали. Именно его я использовал в начале своего хобби, не зная о существовании раздела "Universe", но об этом чуть ниже. Ныне классическая часть редактора не используется.
2. Белое окошко - проектирование различных роботов и установок на основе системы Mindstorms ( с англ. мозговой штурм). Имеет ещё более ограниченный выбор деталей и ещё более ограниченный выбор цветов в них, с декалями та же история. Ныне имеет ограниченное использование.
3. Чёрное окошко - расширенный раздел (собственно, что "extended" и означает). Сейчас является основным и используется в полной мере ввиду максимального объёма деталей, возможности выбора цвета из доступной палитры, и наличия списка декалей доступных для конкретной детали. Рассматривать интерфейс и основы управления буду именно в Extended.

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

Слева от рабочего пространства - категории с деталями . Эту колонку можно расширить вширь в правую сторону. Каждая категория отображает конкретный или условный тип деталей: кубики, пластины, скосы, минифигурки, и т.д.
Над категориями - наименование раздела, строка поиска , в которой можно забить либо номер детали, либо её наименование на английском, а также три колонки: "Bricks", "Templates", "Groups". Первая колонка у нас выбрана сейчас, вторая предназначена для сохранения шаблонов, которые могут пригодится при строительстве, а в третьей можно разделить и сохранить получившуюся модель на группы и подгруппы при её цельном виде на рабочем столе.
Под категориями - кнопки " открыть/скрыть все детали " и " фильтр цвета деталей ". В случае с классическим режимом фильтр и правда работает как фильтр, но в расширенном он окрашивает все детали в выбранный пользователем цвет (изначально все детали в extended-разделе покрашены в красный). Ползунок справа от кнопок - масштабирование, то есть чем левее ползунок уходит, тем визуальный масштаб деталей меньше, но их больше помещается в одно поле.
Двойная стрелочка от строки поиска - скрыть сегмент с категориями.

Средняя часть и самая основная по функциям. Несколько кнопок имеют дополнительные назначения, которые и будут указаны в порядке слева направо. Для демонстрации некоторых функций мне поможет небольшая модель машинки.

Первая кнопка - курсор (V). У курсора имеются следующие допназначения:
1.1. Курсор выбора и перемещения одной детали.
1.2. Выбор нескольких деталей.
1.3. Проверка соединения.
1.4. Выделение деталей одного цвета.
1.5. Выделение деталей одного типа.
1.6. Выделение деталей одного цвета и типа.
1.7. Выделить все объекты.
Вторая кнопка - копирование (C). При нажатии на деталь рядом появляется её копия.

Третья кнопка - вращение (H). Позволяет что-то открывать/закрывать/поднимать/опускать при наличии в модели вращательных деталей или конструкций. Имеет три строки измерения по осям XYZ. Угол можно задать как по стрелочкам, как по "циферблату" в левом верхнем углу, так и задать угол вручную.
Четвёртая кнопка - выравнивание осей (Shift+H). Позволяет визуализировать работу простых механических систем (например, работу шестерней) или соединить две отдельные точки.
Пятая кнопка - сгибание (комбинации клавиш нет). Позволяет сгибать шланги и т.н. "флексы" - полые гнущиеся трубочки. Как и выравнивание осей данная функция работает немного нестабильно. Рекомендую её не использовать вовсе, т.к. на ресурсе Mecabricks возможность сгибать резиночки и флексы реализована более удобно.

Шестая кнопка - палитра и декалирование. В ней есть следующие допназначения:
6.1. Выбор и возможность окрашивания (B). Пользователю предоставляется палитра из четырёх категорий цветов: однотонные, прозрачные, металлик, и устаревшие.
6.2. Пипетка. Даёт возможность узнать выбрать необходимый из модели цвет, если он вам неизвестен или его нет в стандартной палитре цветов.
6.3. Декалирование. При нажатии на деталь пользователю становится виден список доступных для неё декалей.
Седьмая кнопка - скрыть деталь (L). Позволяет скрыть деталь не удаляя её и не вынимая из конструкции. Очень помогает в объёмных постройках. Использование данной функции сопровождается небольшой иконкой минифигурки с закрывшимся руками лицом в правом верхнем углу.
Восьмая кнопка - удалить деталь (D).

Теперь перейдём к настройкам. В меню настроек можно перейти либо через "Edit" -> "Preferences", либо через комбинацию клавиш "Ctrl+6".

1. Show information field - добавляет информационное поле в нижнюю часть экрана, содержащее информацию о выбранных вами деталях или количестве деталей на столе.
2. Show tooltips - добавляет метки рядом с курсором мыши, разъясняя, как работают различные кнопки.
3. Enable sound in the application - отключить звуки в программе.
4. “Keys for turning” shown along with cursor - на курсоре отображается значок клавиатуры, указывающий на поворот.
5. Repeat inserting selected bricks - последняя выбранная деталь "приклеивается" к курсору и, щёлкнув левой кнопкой мыши, делает её копию.
6. Brick Count - показывает количество деталей.
7. Invert camera X­-axis - инвертировать движение камеры относительно оси X мыши (влево/вправо).
8. Invert camera Y-­axis - инвертировать движение камеры относительно оси Y мыши (вверх/вниз).
9. High-­quality rendering of bricks placed in scene - высокое качество визуализации деталей на столе.
10. High­-quality rendering of bricks in the Brick palette - высокое качество визуализации деталей в палитре.
11. Outlines on bricks - контуры на деталях.
12. Advanced shading - улучшенные тени на деталях.
13. Choose language - выбор языка интерфейса (английский/немецкий).
14. Compatibility mode - безопасный режим. Использовать следует лишь в том случае, если возникли проблемы с запуском LDD.
15. Reset preferences - возврат настроек по умолчанию.

Теперь, когда вы ознакомились с базовым интерфейсом LEGO Digital Designer, перед строительством осталось узнать основные клавиши управления клавиатуры и мыши:

Левая кнопка мыши (ЛКМ):
Нажмите на деталь, чтобы её выбрать.
Нажмите и перетащите, чтобы переместить деталь по столу.
Правая кнопка мыши (ПКМ):
Нажмите и удерживайте, чтобы повернуть вид камеры.
Средняя кнопка мыши (СКМ):
Увеличение/уменьшение масштаба сцены.

Кнопки на дополнительной клавиатуре (Num Lock):
Кнопки "2", "4", "6", "8" - поворот камеры вниз, влево, вправо, вверх.
Кнопка "5" - возвращение камеры в стандарное положение с видом на все детали и модели, расположенные на столе.

Кнопки на клавиатуре:
Кнопки "стрелка вверх", "стрелка вниз", "стрелка вправо", "стрелка влево" - вращение детали.
Ctrl+I - импорт модели в открытый файл.
Ctrl+Shift+S - сохранить как. (выбор формата).

Не рекомендую использовать следующие клавиши или их сочетание: "Ctrl+K" (скриншот), F6 (режим просмотра), F7 (создание инструкции, т.к. порядок действий зачастую бывает нелогичным или неправильным).

Итог: несмотря на всю простоту программы и прекращение поддержки, LEGO Digital Designer всё ещё можно использовать в качестве простого виртуального редактора. Конечно, и по возможностям и по технологичности он уступает тому же Stud.io, но за весь мой 11-летний опыт работы у меня ни разу не было мысли о том, что нужен более усовершенствованный виртуальный редактор. Под свои цели и задачи LDD и сейчас является удобной программой для разработки самоделок.

BrickSearch is the fastest and easiest way to find any LEGO set ever made! You can view photos of sets, piece counts, minifigures and building instructions. You can add sets to your collection, and keep a list of your favorites too!

Want to find info about a new LEGO set? Need building instructions for a LEGO set in your collection? Want to find your favorite LEGO set from when you were young? BrickSearch is the fastest way to find it!

- Search for any LEGO set ever made
- Find out how many pieces and minifigures are in each LEGO set
- Browse LEGO set photos in the gallery
- View LEGO set building instructions
- Browse by theme and discover LEGO sets you didn't even know existed
- Add LEGO sets to your collection and wanted list
- Manage your collection or inventory of LEGO sets
- Find out where you can buy any LEGO set

BrickSearch is not affiliated with the LEGO Group. LEGO and the LEGO logo are trademarks of the LEGO Group. © 2017 The LEGO Group.

What’s New

Fixes for some display issues in dark mode

Ratings and Reviews

Excellent app!

I use it daily, and love everything about it. Although, lately the app glitches for me and has not been working. Hopefully it gets fixed because I love the app.
The app keeps saying that there’s an error and that I have to check my connection to the internet even when I have a great connection. At first, I though it’s go away, but it’s been doing that for a while now. I checked to see if there was an update, and noticed that it was already updated. The app is now not pulling up any more than a few sets. I look at the Star Wars tab, and it shows 5 sets out of 776 or however many there are. Please, if you can fix this glitch, I would greatly appreciate it. Other than the glitch, I love the app and can’t wait when it’s fixed so I can continue to use it

Incredible Potential

So I don’t know anything about web design. However I will say that the filtering and searching is severely flawed. A lot of the time the search won’t come up and says it failed but then when you go to years and sift through them you can find some of the sets that didn’t show up. The way the themes are sorted is confusing and doesn’t even work when you try. So finding some stuff is very difficult. The other thing is that some exclusive sets like Comicon Sets and figures are not featured for all themes. So adding them to a wishlist or collection is impossible. Hopefully they will add all of Lego’s content. But moving on from the negative to the positive. I used to use an app called brick by brick which had pretty much the same purpose. While the app design was much simpler and easy to use it was boring. This app is far more stylized and even allows you to use links to buy the particular set your looking at. This app of properly updated and functioning as intended has the potential to be a far better app than brick by brick. I plan to stick with it for now and hope it grows in the given year.

What happened.

This used to be the greatest Lego inventory app on the planet, after the last update the app turned into crap and no one is seems to be fixing it? Now the app doesn’t find sets by number, only words, if it finds it at all? It no longer displays all the sets in a category, it displays multiple copies of sets and it can’t load pictures, and every set in its database says it has zero mini figs? This app is no longer usable, it has become quite pathetic and very aggravating! So until the developer decides to care about their creation and fixes the obviously broken app then their is no reason to waste your time with this app. Please restore this app to its former glory so people with huge collections can manage them…..

App Privacy

The developer, Tiro Media Ltd , indicated that the app’s privacy practices may include handling of data as described below. For more information, see the developer’s privacy policy.

Data Not Collected

The developer does not collect any data from this app.

Privacy practices may vary, for example, based on the features you use or your age. Learn More

Information

Compatibility iPhone Requires iOS 13.0 or later. iPad Requires iPadOS 13.0 or later. iPod touch Requires iOS 13.0 or later. Mac Requires macOS 11.0 or later and a Mac with Apple M1 chip.

Последние несколько лет я занимался проектированием и изготовлением машины, которая сможет распознавать и сортировать детали LEGO. Важнейшая часть машины — это Capture Unit, небольшое, почти полностью закрытое отделение, в котором есть конвейерная лента, освещение и камера.


Освещение вы увидите чуть ниже.

Камера делает фотографии поступающих по конвейеру деталей LEGO, а затем передаёт изображения по беспроводному каналу на сервер, выполняющий алгоритм искусственного интеллекта для распознавания детали среди тысяч возможных элементов LEGO. Подробнее об ИИ-алгоритме я расскажу в будущих статьях, а эта статья будет посвящена обработке, которая выполняется между «сырым» выводом видео камеры и входом в нейросеть.

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

Конечная цель: перейти от «сырого» видео (слева) к набору изображений одинакового размера (справа) для их передачи в нейросеть. (по сравнению с реальной работой gif замедлен примерно вдвое)

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

Извлечение нужных частей изображения таким образом часто называют распознаванием объектов (object detection). Именно это мне и нужно сделать: распознать наличие объектов, их расположение и размер, чтобы можно было сгенерировать ограничивающие прямоугольники для каждой детали на каждом кадре.

Самое важное — найти хорошие ограничивающие прямоугольники (выше показаны зелёным цветом)

Я рассмотрю три аспекта решения задачи:

  • Подготовка с устранением лишних переменных
  • Создание процесса из простых операций машинного зрения
  • Поддержание достаточной производительности на платформе Raspberry Pi, имеющей ограниченные ресурсы

Устранение лишних переменных

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

Первый шаг — это жёсткая фиксация положения, угла и фокусировки камеры. С этим всё просто — в системе камера закреплена над конвейером. Не нужно мне волноваться и о помехах от других деталей; нежелательные объекты почти не имеют шанса попасть в capture unit. Немного сложнее, но очень важно обеспечить постоянные условия освещённости. Мне не нужно, чтобы распознаватель объектов ошибочно интерпретировал тень от движущейся по ленте детали как физический объект. К счастью, capture unit очень мал (вся область обзора камеры меньше буханки хлеба), поэтому у меня был более чем достаточный контроль над окружающими условиями.


Capture unit, вид изнутри. Камера находится в верхней трети кадра.

Одно из решений — сделать отсек полностью замкнутым, чтобы никакое освещение снаружи не поступало. Я попробовал такой подход, использовав в качестве источника освещения светодиодные ленты. К сожалению, система оказалась очень капризной — достаточно одной небольшой дырочки в корпусе и свет проникает в отсек, делая невозможным распознавание объектов.

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


Получайте, тени!

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

Распознаватель объектов

YOLO очень крута! Но мне не нужны все её функции.

К счастью, я мог избежать сложного решения на основе ИИ, воспользовавшись «олдскульными» техниками машинного зрения. Первая техника — это вычитание фона (background subtraction), которое пытается выделить все изменившиеся части изображения. В моём случае единственное, что движется в поле зрения камеры — это детали LEGO. (Разумеется, лента тоже движется, но поскольку она имеет однородный цвет, камере она кажется неподвижной). Отделим эти детали LEGO от фона, и половина задачи решена.

Чтобы вычитание фона работало, объекты переднего плана должны значительно отличаться от фона. Детали LEGO имеют широкий диапазон цветов, поэтому мне нужно было очень тщательно выбирать цвет фона, чтобы он был как можно более далёк от цветов LEGO. Именно поэтому лента под камерой изготовлена из бумаги — она не только должна быть очень однородной, но и не может состоять из LEGO, иначе будет иметь цвет одной из деталей, которые мне нужно распознавать! Я выбрал бледно-розовый, но подойдёт и любой другой пастельный цвет, непохожий на обычные цвета LEGO.

В чудесной библиотеке OpenCV уже есть несколько алгоритмов для вычитания фона. Вычитатель фонов MOG2 — самый сложный из них, и при этом он работает невероятно быстро даже на raspberry pi. Однако подача кадров видео напрямую в MOG2 работает не совсем хорошо. Светло-серые и белые фигуры слишком близки к яркости бледного фона и теряются на нём. Мне нужно было придумать способ, чтобы отчётливей отделить ленту от находящихся на ней деталей, приказав вычитателю фона внимательнее смотреть на цвет, а не на яркость. Для этого мне достаточно было увеличить насыщенность изображений перед передачей его в вычитатель фонов. Результаты при этом значительно улучшились.

После вычитания фона мне нужно было использовать морфологические операции, чтобы избавиться от как можно большего количества шума. Для поиска контуров белых областей можно использовать функцию findContours() библиотеки OpenCV. Применив различные эвристики для отклонения контуров, содержащих шум, можно легко преобразовать эти контуры в готовые ограничивающие прямоугольники.

Производительность

Нейронная сеть — прожорливое существо. Для получения наилучших результатов при классификации ей требуются изображения максимального разрешения и в как можно больших количествах. Это значит, что мне нужно снимать их с очень высокой частотой кадров, сохраняя при этом качество и разрешение изображения. Я должен выжать из камеры и GPU Raspberry PI максимум возможного.

В очень подробной документации к picamera написано, что чип камеры V2 может выдавать изображения размером 1280x720 пикселей с максимальной частотой 90 кадров в секунду. Это невероятный объём данных, и хотя камера может его генерировать, это не означает, что с ним справится компьютер. Если бы я обрабатывал сырые 24-битные RGB-изображения, то мне пришлось бы передавать данные со скоростью примерно 237 МБ/с, а это слишком много и для бедного GPU компьютера Pi, и для SDRAM. Даже при использовании ускоренной с помощью GPU компрессии в JPEG частоты 90fps достичь невозможно.

Камера Raspberry Pi способна выводить сырое неотфильтрованное YUV-изображение. Хотя с ним работать сложнее, чем с RGB, у YUV на самом деле есть множество удобных свойств. Самое важное из них заключается в том, что оно хранит всего 12 бит на пиксель (у RGB это 24 бита).


Каждые четыре байта Y имеют один байт U и один байт V, то есть на пиксель приходится 1,5 байта.

Это означает, что по сравнению с RGB-кадрами я могу обрабатывать в два раза больше YUV-кадров, и это ещё не считая дополнительного времени, которое GPU экономит на преобразовании в RGB-изображение.

Однако такой подход накладывает уникальные ограничения на процесс обработки. На большинство операций с полноразмерным кадром видео будет тратиться чрезвычайно много памяти и ресурсов ЦП. В пределах моих строгих временных ограничений невозможно даже декодировать полноэкранный YUV-кадр.

К счастью, мне и не нужно обрабатывать кадр целиком! Для распознавания объектов ограничивающие прямоугольники не обязаны быть точными, достаточно приблизительной точности, поэтому весь процесс распознавания объектов можно выполнять с гораздо меньшим кадром. Операция уменьшения масштаба не обязана учитывать все пиксели полноразмерного кадра, поэтому кадры можно уменьшать очень быстро и без затрат. Затем масштаб получившихся ограничивающих прямоугольников снова увеличивается и используется для вырезания объектов из полноразмерного YUV-кадра. Благодаря этому мне не нужно декодировать или иным образом обрабатывать весь кадр высокого разрешения.


К счастью, благодаря способу хранения этого формата YUV (см. выше) очень легко реализовать быстрые операции обрезки и уменьшения масштаба, работающие непосредственно с форматом YUV. Кроме того, весь процесс без особых проблем можно распараллелить на четыре ядра Pi. Однако я выяснил, что не все ядра используются в полную силу, и это говорит нам, что «бутылочным горлышком» по-прежнему остаётся пропускная способность памяти. Но даже при этом мне удалось на практике достичь 70-80FPS. Более глубокий анализ использования памяти возможно помог бы ещё больше ускорить работу.


Если вам хочется узнать больше о проекте, то прочитайте мою предыдущую статью «Как я создал более 100 тысяч размеченных изображений LEGO для обучения».

Под катом мы попытались как-то обобщить и систематизировать наш опыт по выбору платформы для занятий с детьми. Если вы организуете кружок робототехники, возможно, вам это будет полезно.
К прошлой серии было много справедливых замечаний, по такому случаю я полностью переработал материал.

Введение

  1. механика;
  2. периферийная электроника;
  3. управляющий модуль;
  4. софт (среда разработки).

Сначала лирическое отступление.
В свое время я был одним из самых счастливых детей в Екатеринбурге, потому что отец привез мне из Германии целый чемодан Лего (тогда в России его еще совсем мало было). И я думаю, это очень здорово повлияло на мое умственное развитие — мелкая моторика, пространственное мышление. Однако у людей есть такое свойство: взрослея они иногда начинают нелюбить ту среду, из которой вышли, так и меня часто упрекают в предвзятости к Лего. Сейчас я все-таки попытаюсь это преодолеть.

image

image

Итак, главное достоинство леговской механики — это скорость сборки. Наверно, раз в десять выше, чем на винтах, раза в два выше, чем на заклепках. По большому счету главный соединительный элемент Lego Technic — это та же заклепка, которую не нужно зажимать, раскрывается сама за счет упругости:

image

Второй элемент — ось с крестообразным сечением:

По сути это заменитель винта, только “гайки” на ней не закручиваются, а держатся за счет продольного трения.
Плюс к этому в Лего есть специальные детали для сборки некоторых специфичных узлов, например, дифференциала. Все это позволяет быстро собирать очень сложные механизмы, и для детей это действительно здорово. Жаль только, что не навсегда мы остаемся детьми, и вот тогда возникает проблема: во взрослой жизни такие соединения нигде не используются, и плавный переход с Лего на что-то другое, насколько мне известно, еще никому не удавалось реализовать. Кроме того, возникает еще одна неприятность, с которой я сам при взрослении столкнулся: в Лего все из коробки подогнано идеально, до микронов, ребенок к этому привыкает, принимает как данность. В реальности для такой точности нужно прикладывать огромные усилия, и я этому уже в студенчестве долго учился, кажется, до сих пор толком не научился.

Управляющий модуль у Лего скучный.

image

С одной стороны, он очень прочный, почти не ломается, с другой имеет всего 8 разъемов и туда не влезает ничего, кроме кроме фирменных леговских проводов (кстати, насколько я знаю, самая ломкая часть). Разумеется, штатно с ним работают только леговские датчики и моторы.
С точки зрения преподавателя Леговская электроника самая малохлопотная: все легко подключается, почти никогда ничего не ломается, однако и простора для творчества очень мало.

Поскольку Лего — это большая компания, об инфраструктуре она позаботилась: подавляющее число соревнований по робототехнике имеют ограничение — только Лего.

image

Кроме того проводится множество разных конференций и мероприятий для преподавателей.

Резюме следующее: вещь невероятно классная, это действительно так, однако, как и для всех игрушек, чем раньше ребенок с нее соскочит, тем лучше, по нашему опыту седьмой класс — в самый раз. Так же Лего — единственный конструктор, который не требует от преподавателя серьезной технической подготовки. Ну а еще по идеологии своей он очень похож на Майкрософт, некоторые Майкрософт не любят.

Fischertechnik

По этой причине какие-то простые механизмы на Fischertechnik делать не очень удобно, но зато там есть множество специальных элементов, с которыми можно делать совершенно невероятные вещи: пневмоприводы, хемотроника, ионисторы, электрохимические суперконденсаторы и др. (подробнее см. ссылку выше). Кроме того, есть специализированные наборы, моделирующие то или иное производство.
В целом идеология Fischertechnik повторяет идеологию Лего, все-таки это игрушка, но очень технически продвинутая.

Кроссплатформенные управляющие модули

Сначала немного терминологии. Вся переферийная электроника для взрослой робототехники имеет стандартные разъемы, работает по стандартным протоколам. Fischertechnik, Лего и другие закрытые продукты создает искусственные препятствия для подключения через эти разъемы и протоколы. Продукты по-проще, например, Raspberry, хотя и не являются опенсорсными, но все стандарты поддерживают. Вообще по нашему опыту в данном случае опенсорсность железа не имеет столь большого значения: все разъемы стандартны, среды разработки тоже стандартны и, как правило, опенсорсны, и железная прокладка между ними существенной роли не играет, переход на другую железку никаких проблем не вызовет. Здесь еще можно по-рассуждать о нашей миссии по развитию опенсорсного железа, но для краткости опустим это, к теме не очень относится.

  1. Низкая цена.
  2. Быстрый старт: воткнул USB-провод, открыл среду разработки, загрузил пример, поехали. С Raspberry придется еще помучиться: образ на карточку загрузить, подключиться, настроить автозапуск скриптов и т.д.
  3. Большее удобство подключение периферии (например, на плате уже есть аналоговые входы, к Raspberry АЦП подключить сложно), большое количество разнообразных шилдов.
  4. Низкое энергопотребление.

image

По сравнению со своими аналогами Raspberry является самой распространенной и дешевой, по характеристикам последняя ее версия аналогам ничем особо не уступает, поэтому мы работаем с ней.

image

Среди ардуин мы выбрали Uno, поскольку, опять же, самая распространенная и дешевая (в Китае стоит порядка 30 юаней или ~ 300 рублей). Характеристики у нее не самые, но нам вроде хватает.

Конструкторы

image

Из других конструкторов наиболее популярен Huna (кстати, вроде бы отчасти российская разработка):

image

Трик предлагает неплохой конструктор, но, опять же, уж очень дорогой.

Общий принцип у всех конструкторов примерно один и тот же: плоские детали и уголки соединяемые винтами, по сути старый советский железный конструктор. При этом у каждого свои особенности: в Мультипло основные детали вырезаны из трехмиллиметрового пластика + маленькие алюминиевые уголки + пластиковые заклепки; в Huna плоский металл дополняется объемными пластиковыми деталями, похожими на Лего; Трик просто очень массивен.

Заключение


Наш выбор — ардуино + Raspberry + Multiplo. Цена самая низкая, простор для творчества самый большой. В то же время от преподавателя требуется очень высокая квалификация.
Вообще мы работаем с детьми с третьего класса, но это скорей исключение, все-таки до седьмого класса нужно что-то другое, типа Лего или Fischertechnik.

Читайте также: