Главная » Правописание слов » Как написать программу для 3д принтера

Слово Как написать программу для 3д принтера - однокоренные слова и морфемный разбор слова (приставка, корень, суффикс, окончание):


Морфемный разбор слова:

Однокоренные слова к слову:

Приручаем динозавров, или как я писал свой собственный host controller для лаборатории 3D-печати

В этой статье я хочу рассказать о своем опыте разработки свободного ПО для управления 3D принтерами на Qt5, проблемах и особенностях общения с RepRap’ами и прочим радостям.

Результатом этого опыта стал RepRaptor — минималистичный свободный host-controller для 3D принтеров.

Всех интересующихся приглашаю под кат.

Немного предыстории

За последний год я сильно заинтересовался 3D печатью, и не просто 3D печатью, а ее свободной составляющей — проектом RepRap. Руководство ВУЗа поддержало начинания, и в течении этого года моими и единомышленников усилиями в МГТУ МИРЭА открылась лаборатория 3D печати.
Очень скоро возникла проблема — существующее в экосистеме ПО имело недостатки, которые сильно мешали работе. Поэтому было решено эти проблемы ликвидировать, создав свое ПО.

Почему Qt?

Как это все исправить? Довольно просто — написать хост на языке, который будет работать быстрее, и сделать его максимально простым. Сказано — сделано. Для разработки был выбран Qt, и не случайно. Этот замечательный фреймворк не только распространяется свободно, но и позволяет писать кроссплатформеные приложения без сопровождающей мультиплатформу в C++ боли, а так же не так давно периодически используемый мной QSerialPort стал официальной частью фреймворка.

Кроме того, я не знаю ни одной IDE, такой же быстрой и удобной для меня, как QtCreator.

С чего начать, или как разговаривают принтеры

Общаться необходимо работать с целым зоопарком разнообразных плат (Melzi, RAMPS 1.4, Teensylu, Gen7 1.5.1 и т.д.), благо сообщество проекта RepRap уже давно определилось с протоколом и списком команд. Для общения с любой платой используется серийный порт и протокол G-code.

В своей лаборатории 3D печати мы с товарищами используем прошивку Repetier, которая, на ряду с прошивками Marlin и Teacup поддерживает большинство стандартных кодов.

Первое разочарование — протокол

Спецификация серийных портов RS-232 обширна и интересна, но, к сожалению редко где используется на полную. При эмуляции серийного порта по USB, очень часто к микроконтроллеру подключаются только линии TX и RX, отвечающие за передачу данных. Линии, такие как DTR (сброс при подключении), обычно не используются, и это печально.

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

wait
G1 X10 Y10 Z10
ok 0
G1 X20 Y5 Z3
ok 0

N1 G1 X10 Y10 Z10 *cs
ok 1
N2 G1 X20 Y5 Z3 *cs
ok 2

Где cs — вычисленная контрольная для строки.

Как правило кодогенераторы, преобразующие 3D модели в G-Code для печати контрольных сумм не генерируют, а оставляют это на усмотрение хоста.

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

Реализация протокола

Qt имеет отличную функцию для облегчения жизни разработчику — сигналы и слоты.
Сигнал — это новое для C++ понятие. Сигнал объявляется в классе подобно слоту:

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

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

После такого вызова все слоты, присоединённые к этому сигналу будут вызваны при первой возможности в порядке присоединения, и им передастся значение 100.
Что такое слот? Коротко — это самый обычный метод, объявленный слотом

Соединяются сигнал со слотом тоже очень просто:

Есть и ограничение — у сигнала и слота обязательно должен совпадать передаваемый тип.

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

Самая простая часть — чтение.

Для реализации связи по серийному порту используется упомянутый выше QSerialPort (экземпляр которого назовем «printer»), имеющий сигнал readyRead(), вызывающийся каждый раз, когда на порт приходит информация. Все что от нас требуется — это создать в своем классе слот, который мы и будем вызывать при появлении этого сигнала, соединить их, и ждать. Что же мы будем читать? Как уже описано выше, в первую очередь нас интересуют ответы ok и wait. Так как наш код исполняется асинхронно, а у принтера есть буфер — нам надо где-то сохранить колличество строчек ок, которые мы приняли, чтобы при отправлении знать, сколько мы можем отправить. Хранить их будет в переменной «readyRecieve».

Отлично, с приемом разобрались. А что у нас с отправкой? Вот тут и видим дефект протокола. Никакой аппаратной команды для обозначения готовности к приему данных у нас нет, а значит нету и соответствующего сигнала у нашего QSerialPort. Значит отправлять будем по таймеру. Таймер в Qt работает до безобразия просто и удобно — мы создаем экземпляр класса QTimer, соединяем его сигнал timeout() с нашим слотом, который будет выполнятся по этому таймеру, а после этого запускаем его — timer.start(ms). В последствии было выяснено, что в зависимости от производительности ПК оптимальный промежуток находится от 1 до 5 мс. Кстати, если указать таймеру промежуток 0, то выполнятся он будет как только у Qt появится свободная минутка.

Еще стоит упомянуть, что отправляем мы либо команду от пользователя, либо файл. Так как разбор файла сводится к заурядной загрузки файла в массив, а так же фильтровании линий целиком из комментариев (чтобы не отправлять лишнее на принтер и не захламлять память), я решил опустить эту часть. Массив строк из файла называется gcode.

Ну вот, с серийным портом разобрались? Еще нет. Еще нам надо отловить ошибки. Для этого вновь прибегнем к сигналам и слотам, на этот раз будем слушать сигнал error(SerialPort::SerialPortError error) от нашего экземпляра QSerialPort:

Неаккуратное обращение с принтером расстраивает динозаврика, %username%.

Делаем наш хост умнее

Выносим кнопки команд

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

Иконок пока нет, но они обязательно появятся в последующих релизах. Реализация большинства этих кнопок весьма простая:

Метод injectCommand, способ работы которого мы уже узнали ранее, в реализации отправщика кода тоже весьма прост:

Получаем дополнительные данные

RepRap — это суровый DIY. Настолько суровый, что случается всякое:

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


Под температуру определим отдельную группу элементов

Как же ее узнать? Во время нагрева, принтер перестает принимать команды, и вместо ok или wait начинает присылать температуру. Строка температуры выглядит так:

Читаемо для человека, но не очень удобно для разбора. В первых версиях я разбирал эту строку прямо в слоте, отвечающем за прием информации, но тесты показали, что разбор строки прямо в этом слоте слишком сильно замедляет работу программы. До последнего я пытался избежать работы с потоками, так как одна из главных причин, по которой RepRaptor был написан — быстродействие. Многопоточность отлично ускоряет работу софта на многоядерных системах, но у нас с железом было все не так радужно. Однако выбора не осталось — надо было перенести в отдельный поток либо разбор, либо само соединение. Было решено пойти на компромисс — перенести разбор в отдельный поток, и позволить пользователю отключить проверку температуры.

Как реализована многопоточность в Qt? Очень удобно. Есть несколько способов создать отдельный поток. Полноценный способ — создать поток с помощью QThread, но нам не нужен полноценный поток для простого разбора строки, так что будем использовать другой способ — передадим нашу функцию разбора вместе с аргументам объекту QFuture, и будем за ним следить. Делается это так — для начала нам необходимо создать экземпляр QFutureWatcher, класса, который следит за QFuture, и сообщает нам о его состоянии. Затем надо написать нашу функцию разбора. Так как функция может вернуть только одну переменную, я решил создать специальный тип для передачи температуры:

Теперь осталось только отдать эту функцию потоку при удобном случае (вставляем дополнительную проверку в автомат функции приема):

Осталось только создать слот, чтобы подключить к нему сигнал, передающий из QFutureWatcher результаты выполнения функции:

Вот и все, теперь каждый раз, когда принтер сообщает нам о температуре — мы разбираем эту строку и красиво отображаем ее в интерфейсе.

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

Кто-то возможно скажет, что эти проверки излишние, но когда ты управляешь принтером с Asus EEEPC 900AX, и хочешь одновременно читать хабр — это необходимость.

Печать с SD карты

Очень многие типовые платы для 3D принтеров имеют встроенный слот для SD карты, или способ такой слот подключить. Такой метод печати является предпочтительным, так как в любой момент можно отключится от принтера и уйти, однако каждый раз вытаскивать SD карту зачастую лень, особенно если печатаешь много мелких деталей. Конечно, можно передать файл через серийный порт, но передача файла таким способом занимает едва ли меньше времени, чем сама печать.

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

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

За одно для открытия диалога будем посылать сигнал. Самому же себе. Да, соединять можно даже сигналы со слотами одного и того же объекта.

Слот, который мы подключаем к этому сигналу:

После этого надо перевести интерфейс в режим печати. Я сделал это путем введения дополнительного флага sdprinting. Статус печати с SD карты проверяется в схожей манере с температурой.

Софт — в массы

Как бы сильно я не любил GitHub — далеко не все любят собирать софт сами. Не смотря на кроссплатформенность Qt — это фреймворк, а не среда для кросс-компиляции. А это значит, помимо бинариков под платформу Linux-amd64 нужны еще бинарики под Linux-i386, Windows 32 и OSX 64. Что ж, с первыми двумя все просто — достаточно добавить нужные наборы в QtCreator. А как быть с Windows 32 и OSX 64? С последней — никак. Я пытался, но я умываю руки. Единственный способ собрать что-то под OSX — делать это на OSX. К сожалению, легально это сделать не возможно.

Debian и его пакеты

Очень хотелось собрать пакет под любимый Linux Mint, на котором и ведется разработка. По началу я хотел собрать пакеты для PPA, но в итоге пришел к тому, что собирать надо со статическими библиотеками Qt, а потому пакеты на первое время собирать пришлось руками. Почему статическая линковка? Все очень просто — даже в Ubuntu 14.04, на которой основан Mint в источниках имеется только Qt 5.2.1. В ходе тестов первых двух релизов на разных системах выявились баги QSerialPort, исправленные в новых версиях, а потому было принято решение поставлять все с последними версиями. К тому же, вики Qt говорит, что статически линкованые библиотеки несколько быстрее работают.

Windows и MXE

Одно дело — собирать пакеты под свою ОС, другое дело — под чужую. Тут необходим тулчеин — набор инструментов для сборки. Благо под Windows есть отличный MinGW, а для Linux есть не менее отличный MXE — менеджер окружения для кросс-компиляции с использованием свободных библиотек.

Установка до смешного простая — клонируем MXE и говорим ему, какие нам библиотеки нужны:

После этого можно смело идти пить кофе — сборка всего этого добра занимает приличное время.

После того, как сборка окончена — можно написать скрипт сборки проекта под Windows автоматически:

Просто и сердито. Работоспособность легко проверяется в Wine:

Выводы

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

Однако уже сейчас RepRaptor позволяет мне спокойно использовать свой ASUS EEEPC как стабильный хост для принтера, чего не мог достичь ни один другой хост из тех, что я пробовал. Ну и знания Qt у меня определенно улучшились, и все равно еще есть место для оптимизаций.

Эта статья так же приурочена к выходу первой стабильной версии, которую я сам теперь использую каждый день — 0.2.

Всем спасибо за внимание! Надеюсь мой опыт был вам полезен.

Напоследок — вот армия объектов, напечатанных во время тестов:

Источник

Программы для 3D-принтера: моделирование, слайсеры, печать

Ищете программное обеспечение для 3D-принтеров? Ознакомьтесь с нашим руководством. В обзоре мы собрали лучшие программные инструменты для 3D-печати.

Из статьи вы узнаете, какая программа больше всего подходит для каждого этапа 3D печати — какое ПО требуется для проектирования 3D-моделей с нуля, для подготовки моделей, печати и калибровки 3D принтера.
Также мы отметили, какие программы больше подойдут новичкам, а какие профессионалам, какое ПО доступно на русском языке, а какое только на английском, привели ссылки для скачивания.

Большинство приведенных в статье программ бесплатны для всех, некоторые — для студентов, преподавателей и проектов Open Source.

Рабочий процесс 3D-печати Утилита калибровки 3D принтеров Vectary
Моделирование 3D-Tool Free Viewer Figuro
Редактирование MakePrintable SketchUp Free
Нарезка на слои Meshmixer Fusion 360
Калибровка MeshLab FreeCAD
Печать Netfabb Blender
ПО TinkerCAD OnShape
Cura 3D Slash Компас
Repetier-Host Sculptris В заключение

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

Моделирование

Программное обеспечение для 3D-моделирования позволяет создавать 3D-модели на компьютере. Вы можете спроектировать что угодно, от отвертки до модели автомобиля.

Редактирование

Просмотр, редактирование и ремонт моделей для печати в формате STL. Независимо от того, создаете ли вы свою собственную 3D-модель или загружаете ее из интернета, чаще всего вы получаете STL-файл. Однако не все файлы STL идеальны, а некоторые могут иметь и явные недостатки. Дефекты моделей приводят к браку или сбоям при печати.

Нарезка на слои

Слайсер преобразует STL-файл в G-код — управляющий код для принтера, содержащий команды для печати каждого слоя модели и последовательность их применения. Зачастую слайсер содержит в себе функции диагностики и ремонта или автоисправления моделей.

Калибровка

Печать

Хост — программа для печати, она отвечает за передачу G-кода на принтер, позволяет отслеживать процесс печати и изменять настройки в режиме реального времени, если принтер подключен к компьютеру. Многие принтеры имеют встроенное ПО, печатающее модели с флешки или карты памяти.
Часто функционал слайсера и хоста объединен в одной программе.

Эти четыре типа программного обеспечения для трехмерной печати позволяют воплотить цифровую 3D-модель в физический 3D-объект.

ПО

Функции Slicer, 3D Printer Host

Язык: Английский, Русский

ОС: Windows, Mac, Linux

Cura — программное обеспечение для 3D-принтеров Ultimaker, также его можно использовать с большинством других 3D-принтеров. Его исходный код открыт, а функционал может быть расширен через систему плагинов

Это простое в использовании ПО позволяет управлять основными параметрами 3D-печати через простой интерфейс. Начните в режиме «Основной», где можно выбрать настройки качества печати. Если нужно более точное управление настройками качества печати, перейдите в режим «Эксперт».

Cura может непосредственно управлять 3D-принтером, для он должен быть подключен к ПК в течение всего времени печати.

Полная интеграция с CAD-софтом, подобным Solid-Works и Siemens NX, показывает применимость данного ПО в профессиональной деятельности, но для подавляющего большинства домашних пользователей, Cura — это простой и доступный слайсер для 3D-печати.

Бесплатное программное обеспечение для слайсинга и 3D-печати

Функции Slicer, 3D Printer Host

Язык: Английский, Русский

ОС: Windows, Mac, Linux

Repetier — опенсорсная программа для управления 3D-принтером и слайсерами.

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

Одна из особенностей Repetier — возможность удаленного доступа через сервер, — можно контролировать печать по сети, откуда угодно.

Бесплатное программное обеспечение для слайсинга и 3D-печати

Название: утилита для калибровки принтеров

Функции калибровка принтеров

Утилита для калибровки принтеров — это простая программа, которая позволяет произвести первоначальную настройку принтера, а в дальнейшем настраивать принтер под конкретный пластик. Со слов автора: “Писал я её изначально для себя, но сейчас решил всё таки выложить для всеобщего доступа, возможно кому-то она будет полезна.” Описание программы можно прочитать на сайте 3DToday, продолжение, окончание.

Бесплатное программное обеспечение для калибровки принтера

Название: 3D-Tool Free Viewer

Функции STL анализирование

3D-Tool Free Viewer — это продвинутый просмотрщик STL, который также позволяет проверять структурную целостность и пригодность файла для печати. Например, функция «поперечное сечение» позволяет взглянуть внутрь модели и проверить толщину стенки.

Это может быть полезно, когда есть необходимость проверить STL-файл на наличие ошибок перед тем, как начать 3D-печать, либо надо просмотреть большое количество моделей — в такой программе это намного быстрее и удобней, чем в слайсере.

Бесплатное программное обеспечение для просмотра 3D-моделей

Функции STL редактор, STL восстановление

В этом веб-сервисе можно проверить файлы моделей на наличие ошибок и исправить их. Сервис “понимает” и распознает более 15 форматов входящих файлов и обрабатывает файлы размером до 200 мегабайт, а также может напрямую подключаться к Sketchup, Blender и аккаунту на Thingiverse, и импортировать файлы оттуда. Загруженные файлы анализируются на наличие ошибок, проблем с поддержками и толщиной стенок, а затем автоматически исправляются с сохранением качества. Параметры исправления и исходящей детализации можно задавать вручную, либо выбрать один из основных режимов..

“Лечение” происходит в облачном сервисе, мощности которого позволяют провести процесс точно и быстро.

Файлы можно выводить в разных форматах и печатать прямо из сервиса, на выбор.

Бесплатное программное обеспечение для редактирования и восстановления STL-файлов для 3D-печати

Функции STL редактор, STL восстановление

Meshmixer — продвинутое программное обеспечение для просмотра, проверки, редактирования и исправления STL файлов. Оно особенно хорошо для выявления потенциальных проблем и их автоматического восстановления. Это часть семейства программного обеспечения для 3D-печати Autodesk.

Бесплатное программное обеспечение для редактирования и восстановления STL-файлов для 3D-печати

Функции: STL редактор, STL восстановление

ОС: Windows, Mac, Linux

MeshLab — это усовершенствованное программное обеспечение для редактирования STL, которое позволяет вам исправлять и редактировать поверхности, объединять объекты и повышать качество моделей для печати. ПО работает не только с готовыми STL-файлами, но может и конвертировать в них облако точек полученное от 3D-сканера.

Включены такие функции, как устранение шума.

Заполнение “дыр” в моделях.

Бесплатно для студентов, программное обеспечение для редактирования и восстановления STL-файлов для 3D-печати, для конвертации облака точек в STL

Функции: STL Восстановление, Слайсер

Цена: Бесплатно для студентов

Netfabb — это программное обеспечение для слайсинга, которое предлагает расширенные функции анализа и редактирования STL, позволяя вам исправить модель до нарезки.

Бесплатно для студентов, программное обеспечение для редактирования и восстановления STL-файлов для 3D-печати, для конвертации облака точек в STL

Язык: Английский, Русский

Однако набор функций TinkerCAD несколько ограничен по сравнению с такими, как Blender, FreeCAD и SketchUp, поэтому для сложных проектов пользователям лучше переключаться на более мощный инструмент.

Бесплатное программное обеспечение для моделирования и редактирования моделей для 3D-печати

Источник

Теперь вы знаете какие однокоренные слова подходят к слову Как написать программу для 3д принтера, а так же какой у него корень, приставка, суффикс и окончание. Вы можете дополнить список однокоренных слов к слову "Как написать программу для 3д принтера", предложив свой вариант в комментариях ниже, а также выразить свое несогласие проведенным с морфемным разбором.

Какие вы еще знаете однокоренные слова к слову Как написать программу для 3д принтера:



Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *