Нейросеть ChatGPT может генерировать GCode
Другая интересная идея
Убедившись в том, что нейросети способны генерировать изображения на тему 3D-печати, я продолжил экспериментировать. Тем более, что в комментариях к предыдущей заметке прозвучала более полезная и интересная идея, а именно – научить нейросеть генерировать GCode для 3D-печати.
Это действительно может оказаться полезным в случае, если нужно написать нестандартный GCode для 3D-печати материала с заданной структурой, а привычные настройки программ для слайсинга не могут дать ожидаемый результат.
К сожалению, нейронная сеть Шедеврум (shedevrum.ai) от компании Яндекс (что в версии beta 0.1.4, что в текущей версии) пока не подходит для проверки этой идеи. Поэтому для очередного эксперимента было решено воспользоваться другой нейросетью – ChatGPT.
В отличие от Шедеврума, ChatGPT способна не только генерировать текст и изображения, но и решать более сложные и полезные задачи, в том числе генерировать программный код.
Это я и решил проверить.
Поехали
Перед нейросетью была поставлена задача сгенерировать GCode для 3D-печати простейшего слоя, состоящего из десяти одинаковых прямых линий длиной 10 мм, уложенных друг за другом с шагом 0.2 мм. параметр экструзии был задан произвольно.
Ниже представлены примеры генерации GCode в ChatGPT версии 3.5 и 4.0 по текстовым запросам (промтам).
Оба тестовых запроса были составлены на английском языке одинаковым образом, за исключением некоторых мелочей. Например, второй запрос отличался от первого тем, что включал смещение начальной точки относительно начала системы координат. Другие же отличия связаны с многократным уточнением для нейросети правил написания отдельных команд GCode с целью их правильного прочтения слайсером.
Таблица - Сравнение результатов генерации простейшего GCode по текстовому запросу
Версия нейросети | Текстовый запрос (промт) | Результат |
ChatGPT-3.5 | Write a txt file with gcode for Slic3r Slicer. Printing is in relative coordinates using G91 in the beginning. Layer thickness is equal to 0.3. The layer consists of 10 lines printed next to each other along X axis, the length of each line is 10 mm, first line is printed along the positive direction of X axis. Then, after spacing, we print the second line along negative direction of X axis. Then spacing and etc. The spacing along Y axis between these lines is equal to 0.2 mm. Spacing is constant and does not increase. Spacing commands after move for spacing should be written separately. E values are equal to 3 for every move with extrusion along X axis. No spacing along X axis. | G91 G21 G92 E0 G1 X10 E3 ; Move to the starting point of the first line, extruding 3mm G92 E0 ; Reset extruder position G1 Y0.2 ; Move up 0.2mm along the Y axis for spacing G1 X-10 E3 ; Move to the starting point of the second line, extruding 3mm G92 E0 ; Reset extruder position G1 Y0.2 ; Move up 0.2mm along the Y axis for spacing G1 X10 E3 ; Move to the starting point of the third line, extruding 3mm G92 E0 ; Reset extruder position G1 Y0.2 ; Move up 0.2mm along the Y axis for spacing G1 X-10 E3 ; Move to the starting point of the fourth line, extruding 3mm G92 E0 ; Reset extruder position G1 Y0.2 ; Move up 0.2mm along the Y axis for spacing G1 X10 E3 ; Move to the starting point of the fifth line, extruding 3mm G92 E0 ; Reset extruder position G1 Y0.2 ; Move up 0.2mm along the Y axis for spacing G1 X-10 E3 ; Move to the starting point of the sixth line, extruding 3mm G92 E0 ; Reset extruder position G1 Y0.2 ; Move up 0.2mm along the Y axis for spacing G1 X10 E3 ; Move to the starting point of the seventh line, extruding 3mm G92 E0 ; Reset extruder position G1 Y0.2 ; Move up 0.2mm along the Y axis for spacing G1 X-10 E3 ; Move to the starting point of the eighth line, extruding 3mm G92 E0 ; Reset extruder position G1 Y0.2 ; Move up 0.2mm along the Y axis for spacing G1 X10 E3 ; Move to the starting point of the ninth line, extruding 3mm G92 E0 ; Reset extruder position G1 Y0.2 ; Move up 0.2mm along the Y axis for spacing G1 X-10 E3 ; Move to the starting point of the tenth line, extruding 3mm G92 E0 ; Reset extruder position M104 S0 ; Turn off the extruder G90 ; Switch to absolute coordinates M106 S0 ; Turn off the fan M104 S0 ; Turn off the extruder M140 S0 ; Turn off the heated bed M84 ; Disable motors |
ChatGPT-4.0 | Write a txt file with gcode for Slic3r Slicer. Printing is in relative coordinates using G91 in the beginning. Starting point is shifted at 10 mm along X axis. Layer height is equal to 0.3. The layer consists of 10 lines printed next to each other along X axis, the length of each line is 10 mm. First line is printed along the positive direction of X axis. Then, after spacing along Y, we print the second line along negative direction of X axis. Then spacing along Y and etc. The spacing along Y axis between these lines is equal to 0.2 mm. Spacing is constant and does not increase. Spacing commands after move for spacing should be written separately. E values are equal to 3 for every move with extrusion along X axis. No spacing along X axis. Merge commands for extrude filament and printing lines along X axis. Separate spacing commands along the Y-axis are included after each move in the X direction. | Apologies for the oversight earlier. Here is the corrected GCode file for Slic3r Slicer, which includes merged commands for extruding filament and printing lines along the X-axis, with separate spacing commands along the Y-axis: G21 G91 G1 X10 G90 G92 E0 G92 E0 M104 S200 G91 G1 E3 X10 G92 E0 G1 Y0.2 G90 G91 G1 E3 X-10 G92 E0 G1 Y0.2 G90 G91 G1 E3 X10 G92 E0 G1 Y0.2 G90 G91 G1 E3 X-10 G92 E0 G1 Y0.2 G90 G91 G1 E3 X10 G92 E0 G1 Y0.2 G90 G91 G1 E3 X-10 G92 E0 G1 Y0.2 G90 G91 G1 E3 X10 G92 E0 G1 Y0.2 G90 G91 G1 E3 X-10 G92 E0 G1 Y0.2 G90 G91 G1 E3 X10 G92 E0 G1 Y0.2 G90 G91 G1 E3 X-10 G92 E0 G1 Y0.2 G90 M104 S0 M84 |
Сначала нейросеть генерировала отрезки со смещением вдоль оси OX.
Однако после нескольких уточнений удалось добиться желаемого результата.
Ниже приведены результаты визуализации каждого набора сгенерированных команд GCode в слайсере Repitier-Host V2.3.1.
Проверка результата генерации простейшего GCode нейросетью ChatGPT-3.5 в слайсере Repitier-Host V2.3.1.
Проверка результата генерации простейшего GCode нейросетью ChatGPT-4.0 в слайсере Repitier-Host V2.3.1
Можно видеть, что в обоих случаях нейросеть не выдала строчки GCode для настройки высоты (толщины) слоя. В остальном, слайсер хорошо распознает полученные команды.
Конечно, полученный результат нельзя назвать идеальным. Но возможно, в недалеком будущем, нейросети позволят упростить решение этой и других рутинных задач.
П.Я.Т.Н.И.Ц.А.
Пятница не за горами, поэтому желаю всем участникам Сообщества хороших выходных!
Обязательно предлагайте новые темы для следующих заметок в комментариях и подписывайтесь на мой Telegram-канал, если вас тоже интересует тема применения нейросетей в 3D-печати, в науке и других технологиях.
Еще больше интересных статей
Расчет воздушных потоков обдува сопла в Ansys Fluent
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
3д модель универсального зажима для выравнивания углов плитки
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Ультрабюджетный лазерный СО2 станок своими руками
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Комментарии и вопросы
Благодарю большое, под заваляв...
Все же смущает меня пластина с...
ПЕТГ более склонен к ползучест...
В общем проблема в чём возникл...
Подскажите почему такой 1-ый в...
Поменяла нагревательную часть...
Нужно ли брать защитную пленку...