Создаем управляющую программу в image-to-gcode

О том, как подготовить карту глубин (Z-depth map) для программы из трехмерного объекта было рассказано ранее. Теперь пришло время поговорить о том, как получить управляющую программу для станка с ЧПУ из Z-depth map. Для этого существует ряд платных программ (bmp2cnc, до недавнего времени Artcam), также есть полностью бесплатная opensource программа image-to-gcode. Проблема в том, что до недавнего времени программой image-to-gcode можно было воспользоваться только через linuxcnc. Сейчас этот недостаток устранен. Первоначальная программа была доработана человеком под ником Гармонист. Вот ссылка на форум: Image-to-gcode + решение для нежестких станков. Я только сделал возможным запуск программы как standalone и добавил сохранение и загрузку настроек под разными именами. Для корректного отображения разбил содержимое по нескольким вкладкам.

Скачать программу можно тут: https://github.com/yaroslavVl/image-to-gcode

Надо отметить, что сейчас появились бесплатные инструменты подготовки управляющих программ для ЧПУ, среди которых стоит отметить условно бесплатный Autodesk Fusion 360 и полностью бесплатный FreeCad начиная с версии 0.17.

Для просмотра полученного кода советую воспользоваться отличными программами: NC Corrector (v4.0) и Camotics. Я пользуюсь в основном Camotics.

Как установить

Для работы программы вам понадобится python2.7 с установленными библиотеками numpy и pillow. Я проверял работоспособность программы как под Windows7,10 x64 так и под Linux Debian9.6.0 x64. Установка для Windows10 проста:

— скачайте и установите python2.7

— компьютер, свойства, дополнительные параметры системы, параметры среды, добавить в системные переменные, path:

  • C:\Python27
  • C:\Python27\Scripts
  • win+R, cmd
  • В открывшейся консоли: pip install numpy
  • pip install pillow
  • Всё! Зарускаем image-to-gcode.py

В Debian9.6.0 чуть муторнее, несмотря на то, что python2.7 там уже стоит. Но тот, у кого linux разберется. У меня это не вызвало особых сложностей.

Настройки программы

Первая вкладка


Image size – размер картинки в пикселях

Size in units – размер картинки в выбранных единицах (далее: в единицах (мм, дюймы))

Minimum pixel value – минимальное значение пикселя

hight – высота (в единицах)

Maximum pixel value – максимальное значение пикселя

depth – глубина (в единицах)

Tool size размер фрезы (в пикселях)

Step – шаг сканирования (в единицах)

step/tool – отношение шага к диаметру фрезы (перекрытие). Если этот параметр больше 100%, то перекрытия не будет!

tool up/diameter – отношение заглубления фрезы при черновом проходе к её диаметру

Вторая и третья вкладки

Units [Единицы] – Указывает, следует ли использовать G20 (дюймы) или G21 (мм) в созданном G-коде

Invert Image [Инвертировать изображение] – Если «yes», черный пиксель является самой высокой точкой и белый пиксель является самой низкой точкой, если галочка не стоит, то наоборот

Normalize Image [Нормализовать изображение] – Если «yes», самый темный (из серых) пиксель переназначен на черный, самый светлый (из серых) пиксель переназначен на белый

Extend Image Border [Расширить рамку изображения] – Если «None», входное изображение конвертируется в G-код как есть, и детали, которые находятся по краям изображения могут быть обрезаны. Если «White» или «Black», то со всех сторон добавляется граница, равная диаметру инструмента, и детали, находящиеся у самых краев изображения, не будут отрезаны

Tolerance (units) [Сглаживание] – Когда ряд точек не превышает пределы допуска от текущей прямой линии, они выводятся в виде прямой линии. Увеличение этого параметра может привести к более высокой производительности, но также может удалить или размыть мелкие детали в изображении. По сути это добавляет G64 в итоговый G-код

Pixel Size (Units) [Размер пикселя] – Один пиксель входного изображения равняется ЭТОМУ (Pixel Size) количеству выходных единиц — обычно это число намного меньше, чем 1,0. Например, чтобы вырезать объект 50×50 миллиметров из файла в 400×400 пикселей, нужно установить это параметр в 0.125, поскольку 50 / 400 = 0.125. То есть это количество единиц (мм или дюймов) на один пиксель. То есть этот параметр задает выходной размер объекта в мм (или дюймах).

Feed Rate (units per minute) – Скорость подачи рабочего хода

Plunge Feed Rate (units per minute) – Скорость заглубления (врезания) в материал

Spindle Speed (RPM) – Скорость вращения шпинделя

Scan Pattern [Шаблон сканирования] – Возможные модели прохода инструмента:

  • Rows Строки
  • Columns Колонки
  • Rows, then Columns Строки, затем Колони
  • Columns, then Rows Колонки, затем Строки
  • Rows ObjectСтроки с расширенным функционалом
  • Cols Object Колонки с расширенным функционалом

Scan Direction [Направление сканирования] – Возможные направления прохода инструмента:

  • Positive: Фрезерование начинается с меньших значений X или Y, в направлении бо’льших значений
  • Negative: Фрезерование начинается с бо’льших значений X или Y, в направлении меньших значений
  • Alternating (по зигзагу): Фрезерование начинается на том же конце оси Х или Y, где завершился предыдущий проход. Это позволяет снизить количество холостых перемещений
  • Up Milling: Фрезерование идет от меньших точек по Z к бо’льшим (после врезания только ВВЕРХ)
  • Down Milling: Фрезерование идет от бо’льших точек по Z к меньшим (после врезания только ВНИЗ)

Depth (units) [Глубина] – В верхней части материала всегда Z = 0. При самом глубоком врезании в материал Z = -Depth

Vertical border for cutting background (units, 0=no cutting) – Вся нижняя часть объекта на установленную величину (глубину) считается фоном и будет обрезана с краев. Если требуется удалить только нижнюю «подложку», то установку параметра можно сделать маленькой величины.

HorizontalMax background len.’ (pixels) – (применимо только если Vertical border for cutting backgroundне равен нулю и когда Scan Pattern установлен в Rows Object или Columns Object) Не делать ж-код по фону внутри рельефа (не делать если = 0) или делать, но только там, где длина прохода по фону меньше данного параметра.

Stepover (pixels) [Шаг сканирования] – (в пикселях!) Расстояние между соседними строками (или столбцами). Чтобы найти число пикселей для данного расстояния, вычислите расстояние/pixel size и выберите ближайшее целое число. Например, если pixel size = 0,125 и желаемый шаг между соседними проходами (расстояние) = 0,2, то Step Over = 2 пикселя, так как 0.2/0.125 = 1.6. В результате реальное расстояние между проходами получится 2*0.125 = 0.25

Safety Height (units) [Безопасная высота] – Безопасное расстояние над поверхностью заготовки для холостого перемещения. image-to-gcode всегда принимает верхнюю плоскость заготовки за Z=0

Tool Diameter (units) – Диаметр фрезы. Если применяются параметры Tool Diameter 2 и Angle of tool, то Tool Diameter – это диаметр конца фрезы.

Tool Type [Тип инструмента] – Форма режущей части инструмента. Возможные формы инструмента:

  • Ball End — шарообразная фреза (заканчивающаяся полусферой)
  • Flat End — цилиндрическия фреза
  • 30 degree — конусная фреза 30 градусов
  • 45 degree — конусная фреза 45 градусов
  • 60 degree — конусная фреза 60 градусов
  • 90 degree — конусная фреза 60 градусов

Tool Diameter 2 (units) – диаметр основания фрезы там, где фреза начинает сужаться под углом Angle of tool (Tool Diameter 2 > Tool Diameter, иначе параметры Tool Diameter 2 и Angle of tool не учитывается)

Angle of tool 2 – угол сужения фрезы от большего диаметра Tool Diameter 2 к меньшему Tool Diameter (0 < Angle of tool < 180, иначе параметры Tool Diameter 2 и Angle of tool не учитывается)

Lace Bounding [Ограничение разводов] – Данная опция определяет пропускаются ли области, которые являются относительно пологими вдоль прохода по столбцу или колонке. Эта опция имеет смысл только, когда выбран проход инструмента по двум направлениям (см. Scan Pattern). Возможные варианты оптимизации:

  • None: строки и колонки вырезаются полностью
  • Secondary: При фрезеровании во втором направлении, области, которые не имеют крутого наклона в этом направлении, будут пропущены
  • Full: При фрезеровании в первом направлении, области, которые имеют крутой склон во втором направлении, пропускаются. При фрезеровании во втором направлении, области, которые имеют пологий склон в этом направлении будут пропущены

Contact Angle (degrees) – Когда Lace bounding не в режиме «None», склоны имеющие угол больше чем Contact angle (угол контакта) считаются крутыми, а склоны имеющие угол меньше считаются пологими.

Mill layer by layer [Проходить слой за слоем] – (применимо только когда Scan Pattern установлен в Rows Object или Columns Object!) Если «yes», то не переходить к следующему слою пока не пройден текущий. Т.е. последовательная обработка слой за слоем – стандартный для image-to-gcode режим

Don’t cut on the passed (vertical optimize path) – (применимо только когда Scan Pattern установлен в Rows Object или Columns Object!) Если «yes», то не создавать траекторию там, где на предыдущих слоях она уже была пройдена.

Previous cutter minus current cutter (RMF) – (применимо только когда Scan Pattern установлен в Rows Object или Columns Object. Примечание: при большой картинке и включённом параметре — обработка может занять слишком много времени!) Переключение в режим, позволяющий создать G-код для выбора (удаления) разницы между деталью после черновой обработки и деталью перед чистовой. Этот ж-код используется как промежуточный проход между черновой и чистовой обработкой — позволяющий сделать отступ между требуемым и текущим рельефом не более заданной величины. По сути «выравнивает отступ» или другими словами — дочищает места где черновая фреза не пролезла, чтоб при финишном режиме в них не сломалась фреза. Подробнее описание этого режима – ниже в примере или на форуме по ссылке в начале статьи.

Min delta of RMF mode (units) – (Доступно только в режиме «Previous cutter minus current cutter«) G-код будет создаваться только там, где после черновой обработки, материала по глубине осталось больше величины параметра «Min delta of RMF mode«.

Previous offset (rmf)(units, 0=no roughing) – (Доступно только в режиме «Previous cutter minus current cutter») Параметр аналогичен Roughing offset. Устанавливается для первой (черновой) фрезы. Roughing offset при этом для второй (чистовой) фрезы.

Roughing offset (units, 0=no roughing) [Отступ чернового прохода] – Отступ последнего, как правило тонкого, слоя для окончательного чистового прохода. Roughing offset = 0 если не требуется оставлять слой для чистового прохода

Roughing depth per pass (units) [Съем за проход] – (Доступно если «Roughing offset» не равно 0) Глубина снимаемого материала за один (черновой) проход

Previous stepover (pixels) – (Доступно только в режиме «Previous cutter minus current cutter») Параметр аналогичен Stepover. Устанавливается для первой (черновой) фрезы. Stepover при этом для второй (чистовой) фрезы.

Previous tool Diameter (units) – (Доступно только в режиме «Previous cutter minus current cutter») Параметр аналогичен Tool Diameter. Устанавливается для первой (черновой) фрезы. Tool Diameter при этом для второй (чистовой) фрезы.

Previous tool Type – (Доступно только в режиме «Previous cutter minus current cutter») Параметр аналогичен Tool Type. Устанавливается для первой (черновой) фрезы. Tool Type при этом для второй (чистовой) фрезы.

Previous tool Diameter 2 (units) – (Доступно только в режиме «Previous cutter minus current cutter») Параметр аналогичен Tool Diameter 2. Устанавливается для первой (черновой) фрезы. Tool Diameter 2 при этом для второй (чистовой) фрезы.

Previous Angle of tool diameter 2 – (Доступно только в режиме «Previous cutter minus current cutter») Параметр аналогичен Angle of tool diameter 2. Устанавливается для первой (черновой) фрезы. Angle of tool diameter 2 при этом для второй (чистовой) фрезы.

Cut top jumper – Если «yes», то обрезать (исключать) проходы по поверхности детали (т.е когда z = 0). Можно применять при обработке впуклого (вдавленного) рельефа, если не требуется выравнивать поверхность. (применимо только если “Vertical border for cutting background” не равен нулю. Не используйте в режимах, когда «Scan Pattern» установлен в Rows Object или Columns Object!)

The detail of comments – степень подробности комментариев в получившемся G коде

Четвертая вкладка

Сохранение и загрузка пользовательских настроек. Чтобы сбросить настройки в настройки по умолчанию – удалите из папки “settings” файл settings.image2gcoderc.

Как пользоваться

Скорректируйте настройки согласно пояснениям выше и нажмите «START». Генерация Gcode может занять от нескольких десятков секунд до существенного времени. Это зависит от размера изображения, производительности вашего компьютера и установленных вами параметров.

   Самое важное что надо понять: для того чтобы получить окончательный G код, вам придется сгенерировать несколько файлов и вручную «склеить» их в один. Первый файл будет содержать управляющую программу для черновой фрезы, последний – для чистовой. Во многих случаях понадобятся промежуточные файлы.

Лучше не использовать изображение больше 1000х1000 пикселей. Можно, но тогда обработка займет слишком много времени.

   Разберем концепцию подготовки окончательной управляющей программы на примере. Возьмем картинку размером 1000х1000 пикселей. Хотим получить изделие размером 80х80х25мм:

  1. Черновая обработка для выбора основного объема материала.

Используется плоская (цилиндрическая flat end) фреза большего диаметра 8-12мм и более, step/tool ~90%, Roughing offset – 1-2мм. Далее при склейке кода последний («чистовой») слой удаляем для того чтобы было что снимать чистовой фрезой))).

Будьте внимательны, если вы используете параметр Extend Image Border НЕ как None, то при «склейке» вам необходимо будет задавать смещение через дополнительные команды Gкода (G10 L2 или G10 L20), поскольку все траектории будут смещены на диаметр фрезы, а фрезы на разных этапах имеют разный диаметр. Если же этот параметр установлен в None, то позаботьтесь чтобы на изображении вокруг объекта (если он выпуклый) было достаточно пространства, чтобы фреза могла обходить его со всех сторон. Но в целом сделать это не сложно, смотрите пример. Если фреза коническая, то отступ надо задавать по бо’льшему радиусу.

Для нашего примера берем плоскую фрезу 10мм, step/tool 80% (т.е перекрытие 20%), 3 слоя (последний слой убираем). Настройки и Gкод прикрепляю архивом 1. Время генерации кода 27 секунд (для ноутбука win10 х64 core i7 2.4GHz)

  1. Вторая черновая обработка.

Используется плоская или шаровая (ball end) фреза диаметром 3-5мм, step/tool ~30%, Roughing offset – 0.5мм. При склейке кода последний слой также удаляем. Если требуется этот этап можно повторить с еще одной черновой фрезой меньшего размера.

Для нашего примера шаровая фреза 4мм, 2 слоя (последний слой убираем). Настройки и Gкод прикрепляю архивом 2. Время генерации кода 47 секунд.

  1. Режим Previous cutter minus current cutter (RMF)

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

— выбираем Scan PatternRows Object или Columns Object

— ставим главный параметр Min delta of RMF mode (в единицах) — разница между черновым и чистовым рельефами.

— Для чистовой фрезы устанавливаем параметры: Angle of tool 2, Tool Diameter 2, Tool Type, Tool Diameter, Roughing depth per pass (без этого параметра этот этап не имеет смысла, потому что тогда по сути этот этап превращается в урезанный чистовой проход). Чистовая фреза – это как правило конусная фреза со скруглением на конце диаметр основания 3-4мм диаметр конца – совсем маленький, угол – максимально острый.

— Для черновой фрезы устанавливаем параметры с словом Previous. Все параметры черновой фрезы (в том числе Previous stepover) берем из предыдущего этапа! Черновая фреза должна быть больше чистовой!

Цель данного этапа – получить равномерный отступ по всему рельефу для последующего окончательного чистового прохода.

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

Для нашего примера чистовая шаровая фреза 3/1мм угол 8, заглубление по 13мм. Настройки и Gкод прикрепляю архивом 3. Время генерации кода 55 минут 41 секунд. Получилось очень долго! Не расстраивайтесь и ждите, генерация может занять и 2 часа и больше. На начальном этапе освоения программы этот шаг лучше опустить и сделать чистовой проход в несколько слоев. Помните, этот этап нужен далеко не всегда.

  1. Чистовая обработка

Проходим той же чистовой фрезой в один проход (без послойного заглубления). Stepover – минимальный (0.2-0.8мм).

Для нашего примера чистовая фреза осталась та же. Настройки и Gкод прикрепляю архивом 4. Время генерации кода 1 минута 26 секунд.

  1. Финишная обработка (если требуется)

Если требуется можно сделать финишную обработку гравером со скругленым концом.

Между склейками файлов можно дописать немного кода для смены инструмента. Окончательный Gкод прикрепляю архивом full.

Ярослав Власов

Отправить ответ

Пожалуйста зарегистрируйтесь чтобы оставить комментарий
  Подписаться  
Notify of