Image-to-gcode + решение для нежестких станков

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.
Аватара пользователя
Гармонист
Почётный участник
Почётный участник
Сообщения: 423
Зарегистрирован: 24 апр 2011, 09:14
Репутация: 72
Откуда: планета Земля
Контактная информация:

Image-to-gcode + решение для нежестких станков

Сообщение Гармонист »

Image-to-gcode + решение для нежестких станков

в продолжение этой темы

Кому леньки читать и вникать:тут назначени кратко - представлено на ВИДЕО, в картинках и даже прокоментировано

скачать и попробовать
старые версии (для просмотра содержимого нажмите на ссылку)
image-to-gcode v3.5.zip
(17.54 КБ) 1067 скачиваний
image-to-gcode v3.6.zip
исправил некоторые баги,
убрал режим 2.1. "Окантовка" т.к. он только мешает(его нужно кардинально переделать),
усовершенствовал режим 2.2. "Разница"(теперь дельта может быть <= 0)
(17.29 КБ) 1002 скачивания
image-to-gcode v3.7.zip
исправил некоторые баги, очень сильно переделал, так что сейчас не могу всего припомнить ... одно из:
фреза теперь может подрезать края, но получается более плавный рисунок(см.пост о матрицах фрез ниже)
но главное это то что эта версия прошла рабочую обкатку (опять же -см.пост ниже)
(21.71 КБ) 895 скачиваний
image-to-gcode v3.8.6.zip
исправил некоторые баги, очень многое переделал - поэтому сменил версию на 8
Переименовал некоторые параметры чтобы было понятнее, вывел расчетные размеры в миллиметрах,...
теперь параметр 'Не обрезать углы' - не доступен и включен поумолчанию, "отвязал" режим 'Optimize path' от режима 'RMF',
объединил функции RMF и Mill_objectiv и весь их функционал в одну: теперь в режимах 'Row/Col objective' - работает сортировка и прочие плюшки...
реализовал возможность через параметр 'mill layer by layer' - настраивать последовательность обхода участков только слой за слоем(если ИСТИНА) или по ветвям деревьев(если ЛОЖЬ)
(24.97 КБ) 1925 скачиваний
image-to-gcode v3.8.7.zip
небольшие усовершенствования...
(25.35 КБ) 918 скачиваний
image-to-gcode v3.8.8.zip
исправил ошибку с параметром "Инвертировать"(при определенной комбинации других параметров) из-за которой не формировался g-код и вываливалось сообщение об ошибке в сформированном ж-коде...
(25.38 КБ) 891 скачивание
image-to-gcode v3.8.9.zip
исправил некоторые ошибки, среди которых ошибка при шаге больше единицы в обычном режиме при особой комбинации других параметров...
доработал интерфейс - в частности сделал чтобы съем за проход не был 0 и не был более общей глубины если включен отступ или режим RMF или...
вобщем - работа над ошибками в версии 3.8.8
(для особо любознательных: распаковываете 2е версии и в терминале командой diff сравниваете 2 файла и читаете что изменилось...)
(25.48 КБ) 2372 скачивания
как установить написано тут
Лицензия (для просмотра содержимого нажмите на ссылку)
image-to-gcode is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by the
Free Software Foundation; either version 2 of the License, or (at your
option) any later version. image-to-gcode is distributed in the hope
that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
the GNU General Public License for more details. You should have
received a copy of the GNU General Public License along with image-to-gcode;
if not, write to the Free Software Foundation, Inc., 59 Temple Place,
Suite 330, Boston, MA 02111-1307 USA
В теории - любой станок жесткий и безлюфтовый только в какой то степени.
Поэтому эта тема посвящена всем станкам. ;)

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


ВНИМАНИЕ: механизм экспериментальный (инновационный :mrgreen: ) и еще допиливается :rasp: - вобщем - тебя предупредили... 8-)
Исправил некоторые ошибки(возможно добавил свои :monkey: ).

Если слишком долго работает - рецепт: в Ubuntu(старой, без Unity) - меню - Система - Администрирование - Системный монитор - Процессы - находим в списке image-to-gcode - жмем ПКМ - Изменить приоритет - ставим -10(пробовал -18 - все виснет). Скорость у меня возрастает примерно в 2 раза.
Принцип действия + теория: (для просмотра содержимого нажмите на ссылку)
В пределе есть 2е стратегии обработки(IRL они комбинируются):
1. Обработка кончиком фрезы
2. Обработка боковой частью фрезы
сравнительный анализ стратегий работы концом и боковой гранью фрезы
сравнительный анализ стратегий работы концом и боковой гранью фрезы
картинку взял отсюда
brochure.pdf
Взято с www.freesteel.co.uk
Буду признателен если кто-то подскажет в каком ПО это реализовано
(4.22 МБ) 1461 скачивание
Обработка боковушкой фрезы при глубоком рельефе - конечно же эффективнее чем кончиком,
т.к. поверхность задействованной площади боковушки, больше поверхности задействованной площади кончика фрезы.

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

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

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

Режим №1 - послойное снятие материала, чистовой фрезой, но с оптимизацией холостого хода предыдущих слоев.

посмотрать описание: (для просмотра содержимого нажмите на ссылку)
Активируется флагом "Optimize roughing".
Примечание: этот режим №1 я разрабатывал как основа для 2го режима - поэтому если вы его реально используете - отпишитесь.
image-to-gcode оптимизированный режим - общий вид
image-to-gcode оптимизированный режим - общий вид
Отверстие в бублике, более редкие линии - не важно, инновация заключается не в этом.
На следующем слайде - послойно и очень наглядно видно а чем заключается оптимизация
image-to-gcode сравнение обычного режима и оптимизированного:<br />слева - обычный, справа - оптимизированный
image-to-gcode сравнение обычного режима и оптимизированного:
слева - обычный, справа - оптимизированный
Обратите внимание, что на 2м и 3м слое фреза не проходит там где уже прошла на предыдущих слоях!

(Почему такие не гладкие линии? Потому что при увеличении/уменьшении рисунка используйте только метод Linear, иначе будет такое с рельефом как на картинке)
Применять этот режим можно для создания сложных глубоких рельефов одной лишь! чистовой фрезой
и при этом не проходить по обработанным местам дважды/трижды/4....
Если фрезы недорогие, а авто-смены инструмента нет и не хочется парится,
то можно сделать в этом режиме УП, "зарядить" станок и идти спать(шучу конечно).


Оптимизированный ж-код с установленным "Roughing is completed".
image-to-gcode оптимизированный режим + флаг  'Roughing is completed' - общий вид
image-to-gcode оптимизированный режим + флаг 'Roughing is completed' - общий вид
image-to-gcode назначение флага 'Roughing is completed'
image-to-gcode назначение флага 'Roughing is completed'

Режим №2 - два в одном: разница между черновой фрезой и чистовой + окантовка.


посмотреть описание: (для просмотра содержимого нажмите на ссылку)
Активируется флагом "Roughing mode minus finishing mode" и параметрами: "min delta rf(units)", "отступ грубого прохода", "съем за проход", "Roughing stepover (pixels)", "Roughing tool Diametr (unts)", "Roughing tool Type", "Roughing tool Diameter 2(units)", "Roughing Angle of tool diametr 2".

Примечание: при большей картинке и большей фрезе - обработка может занять слишком большее время.(Если есть идеи как оптимизировать - я готов выслушать).
Описание:

метод 2.1. "окантовка" этот метод вычисляет места где чистовая фреза при прохождении по краям высота рельефа выше заданной. Другими словами вычисляются границы рельефа, причем крутизна подьема рельефа выше заданной. Т.е. если у тебя плавный рельеф без резких переходов, то этот режим вообще ж-код не создаст.
Для этого режима результаты чернового прохода так же учитываются.
картинку в g-код окантовка.png
картинку в g-код режим 'окантовка'.png
метод 2.2. - собственно "гвоздь программы" - режим "разницы RMF"
- черновая фреза не войдет в узкие и глубокие места из-за своей толщины, а чистовая в этих местах может поломаться(я 4шт сломал) из-за того что много не снятого материала и большое заглубление.
Так вот этот механизм - вычисляет все места где черновая фреза оставила материал более заданной глубины и только по этим местам! делает ж-код.
картинку в g-код 'разница'.png
картинку в g-код режим 'разница'.png
Image-to-gcode режим Roughing mode minus Finishing mode
Image-to-gcode режим Roughing mode minus Finishing mode
Image-to-gcode режим Roughing mode minus Finishing mode
Image-to-gcode режим Roughing mode minus Finishing mode
Примечание: режим №2 - делает сразу двумя методами и 2.1. и 2.2.
Включить только 2.1. или только 2.2. - интерактивно нельзя.
logo cnc-club.ru.png
logo cnc-club.ru.png (2.77 КБ) 34260 просмотров
logo cnc-club.ru окантовка + разница RMF.png
image2gkode logo cnc-club.ru режим разницы RmF.png
Назначение режима №2: Этот ж-код используется как промежуточный проход между черновой и чистовой обработкой - позволяющий сделать отступ между требуемым и текущим рельефом не более заданной величины. По сути "выравнивает отступ" или другими словами - дочищает места где черновая фреза не пролезла, чтоб при финишном режиме в них не сломалась фреза.
Как использовать: (для просмотра содержимого нажмите на ссылку)
1. - обрабатываем заготовку самой большой фрезой, послойно с минимальной глубиной слоя (0.5мм-3мм), с максимальным шагом равным 80%-99% диаметра фрезы. Отступ 1мм-3мм.
Цель: грубо снять максимальное количество материала, для облегчения работы следующего режима.

2. - обрабатываем заготовку средней фрезой
(придется подбирать чтобы она была не слишком большая и не слишком маленька)
(рекомендую: шаровую или прямую-диаметр 5мм, но можно конус со скруглением на конце диаметром 3мм-8мм), послойно с глубиной слоя 3мм-8мм, с шагом равным 30% диаметра фрезы.
Отступ минимальный = 30% от диаметра чистовой фрезы = ~0.5мм.
Цель: снять основную часть материала, оставить минимальный отступ.

3. - обрабатываем заготовку в этом режиме "разницы" между предыдущей фрезой с чистовой "фрезой со шлифовкой":
- выбираем шаблон сканирования: "Cols Object" или "Rows Object"
- ставим флаг "Roughing mode minus finishing mode"
- ставим "min delta rf(units)" - главный параметр - разница в миллиметрах между черновым и чистовым рельефами. Ставим шаг заглубления в миллиметрах(без него - нет смысла) "Съем за проход".
- задаем конфигурацию черновой фрезы(черновая фреза должна быть больше чистовой!)
- задаем параметры предыдущего чернового прохода и следубщего чистового

Цель: сделать равномерный отступ по всему рельефу не более заданного значения.
Я использую двухперую спиральную прямую со скругленным концом диаметром 1.5мм и высотой 12мм, с функцией шлифовки поверхности.

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

5. Бывает 4х режимов достаточно. Кому не достаточно - можно 5й - "финишный" режим гравером со скругленным концом. Тогда на 4м этапе - нужно задать отступ.
У меня например после 4го режима - поверхность получается полированой, но рельеф немного смазаный. После гравера - появляется ворс который приходится удалять вручную, но рельеф становится более... "сочным".
А настолько мелкой фрезы с полировкой как гравер - еще не нашел.
Последний раз редактировалось Гармонист 16 янв 2015, 09:42, всего редактировалось 15 раз.
http://cnc-club.ru/forum/viewtopic.php?t=1064 - домашний станок типа "рука"
http://cnc-club.ru/forum/viewtopic.php?t=1107 - быстро создать 3d образ без сканера по фоткам
http://cnc-club.ru/forum/viewtopic.php?t=1073 - прогноз станко-строения
http://livehistory.ru - мозаика складывается
http://www.economics.kiev.ua - почему все так в нашем мире
Аватара пользователя
Гармонист
Почётный участник
Почётный участник
Сообщения: 423
Зарегистрирован: 24 апр 2011, 09:14
Репутация: 72
Откуда: планета Земля
Контактная информация:

Image-to-gcode Доп-функционал:

Сообщение Гармонист »

Доп-функционал:

Печенько №1 Не делать ж-код по фону внутри рельефа.
Пример "Max background len(pixels)" = 0 - т.е. - не использовать.
image2gcode Max background len=0
image2gcode Max background len=0
image2gcode Max background len=1
image2gcode Max background len=1
image2gcode Max background len=25
image2gcode Max background len=25
image2gcode Max background len=65
image2gcode Max background len=65

Печенько №2 Не обрезать углы
Пример флаг "Dont cut angles" сброшен

вставить скрин

Пример флаг "Dont cut angles" установлен

вставить скрин


Печенько №3 двойная конфигурация фрезы
Задается параметрами:
image2gcode двойная конфигурация фрезы.png
Могу сделать работу с фрезой любой! конфигурации.
Считаешь размер матрицы фрезы, задаешь в Gimp-e картинку с этим количеством пикселей по горизонтали и на картинке рисуешь вертикальное сечение своей фрезы, а я могу сделать чтобы image-to-gcode ее подхватывал и использоваля для создания матрицы высот инструмента. Вот только нужно ли так неэффективно тратить время? image-to-gcode это плагин для не точной обработки, потому что для создания точного рельефа картинку нужно увеличивать многократно(а увеличив - во столько же раз увеличивается время компиляции g-кода). Если ты хочешь точный рельеф, то лучше взять CAM который делает по 3d модели, а не по картинке.
Поэтому(если ничего не изменится) я думаю - прекратить доработку image-to-gcode. Благо сейчас появился CAM под Linux для Blender.


Скрин как это выглядит в g-коде:

Обычная шаровая
картинку в код - обычная полусфера
картинку в код - обычная полусфера
полусфера + угол 45град
полусфера + угол 45град
полусфера + угол 120град
полусфера + угол 120град
обратите внимание: угол - КАСАЕТСЯ шара!
а не рисуется от точки диаметра. Из-за этого при больших углах(100-200град) - шарик даже большого диаметра почти не видно на рисунке. Что наглядно видно на скрине выше.
обычная конусная 90град
обычная конусная 90град
откуда взялась небольшая "ступенька"(3й излом) в самом верху - я написал в следующем сабже.
конус 90град + угол 45град
конус 90град + угол 45град
Последний раз редактировалось Гармонист 20 авг 2013, 09:04, всего редактировалось 4 раза.
http://cnc-club.ru/forum/viewtopic.php?t=1064 - домашний станок типа "рука"
http://cnc-club.ru/forum/viewtopic.php?t=1107 - быстро создать 3d образ без сканера по фоткам
http://cnc-club.ru/forum/viewtopic.php?t=1073 - прогноз станко-строения
http://livehistory.ru - мозаика складывается
http://www.economics.kiev.ua - почему все так в нашем мире
Аватара пользователя
Гармонист
Почётный участник
Почётный участник
Сообщения: 423
Зарегистрирован: 24 апр 2011, 09:14
Репутация: 72
Откуда: планета Земля
Контактная информация:

Image-to-gcode формирование матрицы инструмента

Сообщение Гармонист »

важное отступление:
Чем обусловлен излом если грань фрезы прямая(сама фреза - обычная конусная острая)?
излом, хотя фреза - обычная конусная.png
Конфигурация фрезы строится по точкам!
Строится квадратная матрица, с размером грани = диаметру фрезы/размер одной точки.
Из этого получается важный вывод: если например диаметр фрезы 1мм, а размер точки 0.3мм, то размер матрицы получается 3и на 3и - и то что тип фрезы полусфера уже - почти не играет роли! Поэтому для большей точности нужно увеличить размер рисунка(например в Gimp-e - меню - Image - Scale image - тип увеличения Linear !!! другие типы портят рисуток).
Кстати - черновой отступ не может быть меньше размера одного пикселя(хотя image2gcode позволяет его ввести).

Предварительно картинка чтобы было ясно о чем речь:
типы построения матриц конусной фрезы.png
Матрица может иметь четное(пример: 6мм диаметр фрезы - точка 1мм) или нечетное(пример: 1,5мм диаметр фрезы - точка 0,1мм) число ячеек в грани. К тому же программно можно искусственно увеличить получившуюся матрицу на +1 и получить по желанию хоть чет, хоть нечет. Я сделал программно - "всегда нечет":

Если получился(сделали искусственно) четное, то в центре 4 яцейки матрицы = 0 - кончик фрезы. И не только из-за этого - тратится много лишнего места. Плюс в том что сама фреза напоминает круг(читай ниже).

Если получился(сделали искусственно) нечетное, то в центре 1 яцейки матрицы = 0 - кончик фрезы. Фреза более острая и точность получается выше, но сама фреза напоминает квадрат(читай ниже).

Возвращаясь к излому:
Каждая ячейка матрицы - имеет квадратную форму с 4мя углами.
Фреза может касаться ячейки:

получим в теории 3 алгоритма(в принципе - можно и больше придумать):
1. Фреза касается каждой ячейки всегда в левом нижнем углу(так сделано в предыдущих версиях image-to-gcode)

2. Фреза касается каждой ячейки в центре ячейки(см. на рисунке изображени "1 нечетное" внизу)
Но тогда фреза может "подрезать" рельеф. Если это не принципиально - то это лучший вариант(жаль только не реализованный).
3. Фреза касается каждой ячейки в ближайшем угле(я выбрал и реализовал этот - смотри на рисунке изображени "2 нечетное" поцентру).

Я сделал по алгоритму 3. Обрати внимание на излом фколетовой линии на рисунке поцентру.
В результате из-за этого - получается вот этот излом... может стоит переделать, но как ?...




------------------------------------------------
Раз пошла такая пьянка реж последний огурец: для наглядности приведу матрицы шаровой фрезы для различных размеров,
чтобы никто не тешил себя идеями к примеру: что он задаст размер точки 0,1мм, диаметр фрезы 0,6мм
тип фрезы шаровая - наивно полагая что при таких пропорциях - тип инструмента что-то изменить на конечном g-коде. А в резульате получиться почти "прямая", а не "шаровая" фреза.

Итак:
Матрицы фрез инструмента: (для просмотра содержимого нажмите на ссылку)
Обратите внимание где Inf, а где цифра:
Тип фрезы - шаровая, размер пикселя = 0.1mm

Диаметр фрезы = 0.05mm
[[ 0.]]

размер матрицы 1 на 1

Диаметр фрезы = 0.1mm
[[ 0.]]
размер матрицы 1х1

Диаметр фрезы = 0.103mm
[[ Inf 0.03916104 Inf]
[ 0.03916104 0. 0.03916104]
[ Inf 0.03916104 Inf]]

размер матрицы 3х3

тут нужно пояснить: диаметр фрезы 0.103мм/0.1мм = 1,03 > 1
Поэтому размер матрицы увеличивается до 2 на 2.
Плюс включен механизм: always_an_odd - всегда нечетное(зачем - я писал выше),
который размер матрицы увеличивает до 3х3.

Inf = плюс бесконечность. Т.е. считайте что в єтих местах фрезы вообще нет.
Получается сечение фрезы имеет форму креста!
Учитывайте это если хотите получить рельеф с высокой точностью.

Диаметр фрезы = 0.15mm
[[ 0.05 0.0190983 0.05 ]
[ 0.0190983 0. 0.0190983]
[ 0.05 0.0190983 0.05 ]]

3х3
снова квадратное сечение фрезы

Диаметр фрезы = 0.199mm
[[ 0.02949821 0.01347529 0.02949821]
[ 0.01347529 0. 0.01347529]
[ 0.02949821 0.01347529 0.02949821]]
3х3

Диаметр фрезы = 0.2mm
[[ 0.02928932 0.01339746 0.02928932]
[ 0.01339746 0. 0.01339746]
[ 0.02928932 0.01339746 0.02928932]]
3х3

Диаметр фрезы = 0.3mm
[[ 0.01771243 0.00857864 0.01771243]
[ 0.00857864 0. 0.00857864]
[ 0.01771243 0.00857864 0.01771243]]
3х3

Диаметр фрезы = 0.31mm
[[ Inf Inf 0.11594875 Inf Inf]
[ Inf 0.01706886 0.00828599 0.01706886 Inf]
[ 0.11594875 0.00828599 0. 0.00828599 0.11594875]
[ Inf 0.01706886 0.00828599 0.01706886 Inf]
[ Inf Inf 0.11594875 Inf Inf]]

5х5

обратите внимание как резко размер матрицы увеличивается сразу на 2 ячейки
Форма сечения фрезы напоминает ромб

Диаметр фрезы = 0.4mm
[[ Inf 0.07752551 0.06771243 0.07752551 Inf]
[ 0.07752551 0.01291713 0.00635083 0.01291713 0.07752551]
[ 0.06771243 0.00635083 0. 0.00635083 0.06771243]
[ 0.07752551 0.01291713 0.00635083 0.01291713 0.07752551]
[ Inf 0.07752551 0.06771243 0.07752551 Inf]]
5х5

Диаметр фрезы = 0.4001mm
[[ Inf 0.07749388 0.06768686 0.07749388 Inf]
[ 0.07749388 0.01291368 0.00634919 0.01291368 0.07749388]
[ 0.06768686 0.00634919 0. 0.00634919 0.06768686]
[ 0.07749388 0.01291368 0.00634919 0.01291368 0.07749388]
[ Inf 0.07749388 0.06768686 0.07749388 Inf]]

5х5
а тут матрица не увеличилась на 2 квадрата, т.к. фреза помещается в матрицу:
0.4001мм/0.1мм < 5

Диаметр фрезы = 0.4999mm
[[ 0.11775695 0.05636539 0.0500125 0.05636539 0.11775695]
[ 0.05636539 0.01021055 0.00505206 0.01021055 0.05636539]
[ 0.0500125 0.00505206 0. 0.00505206 0.0500125 ]
[ 0.05636539 0.01021055 0.00505206 0.01021055 0.05636539]
[ 0.11775695 0.05636539 0.0500125 0.05636539 0.11775695]]

5х5
Сечение квадратное!

Диаметр фрезы = 0.5mm
[[ 0.11771244 0.05635083 0.05 0.05635083 0.11771244]
[ 0.05635083 0.01020842 0.00505103 0.01020842 0.05635083]
[ 0.05 0.00505103 0. 0.00505103 0.05 ]
[ 0.05635083 0.01020842 0.00505103 0.01020842 0.05635083]
[ 0.11771244 0.05635083 0.05 0.05635083 0.11771244]]
5х5

Диаметр фрезы = 0.6mm
[[ Inf 0.22928932 0.14188612 0.13416876 0.14188612 0.22928932 Inf]
[ 0.22928932 0.08786797 0.04504902 0.04019238 0.04504902 0.08786797 0.22928932]
[ 0.14188612 0.04504902 0.00845241 0.00419601 0.00845241 0.04504902 0.14188612]
[ 0.13416876 0.04019238 0.00419601 0. 0.00419601 0.04019238 0.13416876]
[ 0.14188612 0.04504902 0.00845241 0.00419601 0.00845241 0.04504902 0.14188612]
[ 0.22928932 0.08786797 0.04504902 0.04019238 0.04504902 0.08786797 0.22928932]
[ Inf 0.22928932 0.14188612 0.13416876 0.14188612 0.22928932 Inf]]
7х7
далее из-за больших матриц я покажу на экселе


Диаметр фрезы = 0.7mm
7х7
0,7_.png
Диаметр фрезы = 0.8mm
9х9
0,8_.png
вот тут сечение начинает напоминать круг

Диаметр фрезы = 0.8999mm
9х9
0,8999_.png
снова урезаный квадрат

Диаметр фрезы = 0.9001mm
11х11
0,9001_.png
напоминает круг

Диаметр фрезы = 1.0mm
11х11
1_.png
Диаметр фрезы = 1.10mm
11х11
1,1_.png
Диаметр фрезы = 1.10001mm
13х13
1,1001_.png
Выводы:
1. Сечение фрезы получается всегда - не круглое
2. при четных диаметрах инструмента(0.4 0.8 1 1.2...) - сечение внешне получается более округлое, но сама матрица увеличина. Появляется некоторая избыточность.
При нечетных диаметрах инструмента - наоборот - сечение получается более квадратичное, но "сжато".


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

Это может произойти из-за того что сечение фрезы получается квадратное
(из-за выбранной мной стратегии формирования матрицы инструмента - см. выше)
и уголки этого квадрата при формировании ж-кода скажут программе что фреза в это отверстие - НЕ ПРОЛЕЗЕТ.

Повторюсь: думаю что для точных работ(особенно для создания деталей механизмов) - image-to-gcode - может неподойти.
Используйте для єтих целей САМ-ы строящие g-код по 3d объектам.
http://cnc-club.ru/forum/viewtopic.php?t=1064 - домашний станок типа "рука"
http://cnc-club.ru/forum/viewtopic.php?t=1107 - быстро создать 3d образ без сканера по фоткам
http://cnc-club.ru/forum/viewtopic.php?t=1073 - прогноз станко-строения
http://livehistory.ru - мозаика складывается
http://www.economics.kiev.ua - почему все так в нашем мире
Аватара пользователя
Nick
Мастер
Сообщения: 22631
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1631
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Image-to-gcode + решение для нежестких станков

Сообщение Nick »

+ большая золотая медалька! :) Давно хотел разобраться, что тут на самом деле сделанно, откладывал на по-позже, когда будет больше свободного времени. И уже потом выписать медальку. Но так и не смог... В общем совесть меня совсем замучила.

Сразу видно, что работа проделана громадная, я бы за такое наверное даже не взялся! :good: И чувствуется серьезный подход!

Надо теперь придумать, как все это продвинуть в массы! :thinking:
Аватара пользователя
Гармонист
Почётный участник
Почётный участник
Сообщения: 423
Зарегистрирован: 24 апр 2011, 09:14
Репутация: 72
Откуда: планета Земля
Контактная информация:

Re: Image-to-gcode + решение для нежестких станков

Сообщение Гармонист »

Nick писал(а):Надо теперь придумать, как все это продвинуть в массы!
уже почти доделан станок №2 и в планах выложить фотки реального использования - ака "урок".
Хотя я уже реально пробовал, но это было все же больше - бэтатестирование... вобщем - ждемс...
http://cnc-club.ru/forum/viewtopic.php?t=1064 - домашний станок типа "рука"
http://cnc-club.ru/forum/viewtopic.php?t=1107 - быстро создать 3d образ без сканера по фоткам
http://cnc-club.ru/forum/viewtopic.php?t=1073 - прогноз станко-строения
http://livehistory.ru - мозаика складывается
http://www.economics.kiev.ua - почему все так в нашем мире
Аватара пользователя
Гармонист
Почётный участник
Почётный участник
Сообщения: 423
Зарегистрирован: 24 апр 2011, 09:14
Репутация: 72
Откуда: планета Земля
Контактная информация:

Промышленный аналог темы

Сообщение Гармонист »

Нашел промышленный аналог - его задача аналогичная - выбрать материал, оставшийся от предыдущей фрезы в местах с глубиной более предельной.
Смотрим видео:
https://www.youtube.com/watch?v=ytFQMEeq3Bk

На что нужно обратить внимание(конечно же кроме железных сисек):
сама модель
сама модель
САМ-интерфейс еще и визуализирует процесс фрезеровки
САМ-интерфейс еще и визуализирует процесс фрезеровки
На сколько оптимальна траектория!
CAM-МЕЧТА ЧПУ-линуксоида: 3d модель + траектория движения инструмента + отображение не снятого материала<br />да к тому же - все это в динамике!!!
CAM-МЕЧТА ЧПУ-линуксоида: 3d модель + траектория движения инструмента + отображение не снятого материала
да к тому же - все это в динамике!!!
смотрите на сколько программный расчет соответствует готовому изделию
смотрите на сколько программный расчет соответствует готовому изделию

а теперь самое интересное:

разница между предыдущей(пройденно) фрезой и будущей(еще не прошла) фрезой<br />красным показаны места со слишком высоким рельефом
разница между предыдущей(пройденно) фрезой и будущей(еще не прошла) фрезой
красным показаны места со слишком высоким рельефом
разница между предыдущим режимом и будущим<br />красным показаны места со слишком высоким рельефом<br />в которых фреза может сломатся
разница между предыдущим режимом и будущим
красным показаны места со слишком высоким рельефом
в которых фреза может сломатся
слева - до обработки, справа - после обработки<br />сравните между собой(обращая внимание на 2е предыдущие картинки)
слева - до обработки, справа - после обработки
сравните между собой(обращая внимание на 2е предыдущие картинки)
после предыдущих 2х фрез - снова режим разницы
красным показаны места со слишком высоким рельефом: предыдущая фреза в эти места не пролезла, а более мелкая фреза в них пролезет, но может сломаться -  поэтому рельеф в этих участках нужно выбирать мелкой фрезой ПОСЛОЙНО!
красным показаны места со слишком высоким рельефом: предыдущая фреза в эти места не пролезла, а более мелкая фреза в них пролезет, но может сломаться - поэтому рельеф в этих участках нужно выбирать мелкой фрезой ПОСЛОЙНО!
а вот это почти что промышленный шпионаж :shh: - на предыдущем слайде представлен интерфейс,
раскрашивающий модель в зеленые и главное - красные цвета :beer_blow:
показано как в таких участках формируется ж-код специальным режимом
показано как в таких участках формируется ж-код специальным режимом
специальный режим: ж-код формируется ТОЛЬКО в этих участках с послойным снятием
специальный режим: ж-код формируется ТОЛЬКО в этих участках с послойным снятием
странно, но последние 2 слайда у меня никак не сопоставляются с красными участками ни в 1й(5.png 6.png) ни во 2й(7.png) раз.
Возможно на видео не видно "желтого" цвета на "зеленом"... не ясно.
http://cnc-club.ru/forum/viewtopic.php?t=1064 - домашний станок типа "рука"
http://cnc-club.ru/forum/viewtopic.php?t=1107 - быстро создать 3d образ без сканера по фоткам
http://cnc-club.ru/forum/viewtopic.php?t=1073 - прогноз станко-строения
http://livehistory.ru - мозаика складывается
http://www.economics.kiev.ua - почему все так в нашем мире
Аватара пользователя
Nick
Мастер
Сообщения: 22631
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1631
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Image-to-gcode + решение для нежестких станков

Сообщение Nick »

Визуализация процесса обработки - прикольная вещь! Правда пока не совсем понимаю, как ее можно реализовать... По идее это очень много булевых операций на трехмерных объектах... только обычно эти операции подглючивают и они далеко не быстрые... может они большие допуски на визуализацию ставят...
Аватара пользователя
Nick
Мастер
Сообщения: 22631
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1631
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Image-to-gcode + решение для нежестких станков

Сообщение Nick »

Визуализация процесса обработки - прикольная вещь! Правда пока не совсем понимаю, как ее можно реализовать... По идее это очень много булевых операций на трехмерных объектах... только обычно эти операции подглючивают и они далеко не быстрые... может они большие допуски на визуализацию ставят...
Аватара пользователя
Гармонист
Почётный участник
Почётный участник
Сообщения: 423
Зарегистрирован: 24 апр 2011, 09:14
Репутация: 72
Откуда: планета Земля
Контактная информация:

Визуализация процесса обработки в Linux

Сообщение Гармонист »

Nick писал(а):Визуализация процесса обработки - прикольная вещь! Правда пока не совсем понимаю, как ее можно реализовать...
Смотрю в сторону Blendera: нарисовать в нем функционал, позволяющий открывать саму 3д модель и файл G-кода + нарисовать 3д конфигурацию фрезы - остальное дело техники...

но это будет не "онлайн" - режим. Для онлайна: нужно в отдельном окне LinuxCNC(как окно смены инструмента) - загрузить Blender и туда передавать текущие координаты(или хотя бы - текущую строку ngc-файла), а в остальном как в предудущем абзаце...

на эту тему лучше отдельную тему создать ;-)
http://cnc-club.ru/forum/viewtopic.php?t=1064 - домашний станок типа "рука"
http://cnc-club.ru/forum/viewtopic.php?t=1107 - быстро создать 3d образ без сканера по фоткам
http://cnc-club.ru/forum/viewtopic.php?t=1073 - прогноз станко-строения
http://livehistory.ru - мозаика складывается
http://www.economics.kiev.ua - почему все так в нашем мире
Аватара пользователя
Гармонист
Почётный участник
Почётный участник
Сообщения: 423
Зарегистрирован: 24 апр 2011, 09:14
Репутация: 72
Откуда: планета Земля
Контактная информация:

Re: Image-to-gcode v3.7

Сообщение Гармонист »

Гармонист писал(а): image-to-gcode v3.6.zip
Планирую выпустить версию 3.7 - сильно переделанную, т.к. нашел много неоптимальностей и глюков. Например:
- на вершинах из-за пошагового заглубления фреза на каждом новом слое проходит участки уже отработанные на предыдущих слоях - что бесцельно тратит время, износ станка, фрезы,... В новой версии там где на предыдущем слое фреза уже прошла весь требуемый для снятия материал - то на новом слое в этих местах уже не будет формироваться ж-код.
- на участке вычисляется максимальная высота, оставленная от предыдущей фрезы. Если участок большой(например когда delta=0 - участок это вся картинка), то получается много не ходов вхолостую. В новой версии - высота недореза предыдущей фрезы будет вычисляться в каждой точке.
...

(моя первая анимация в Gimp-е) демонстрация предварительных результатов(т.е. что собственно я хочу получить):
сложный участок
сложный участок
image-to-gcode RMF.gif
этот же участок
каждый фрейм - это отдельный слой заглубления с шагом 0.4мм
каждый фрейм - это отдельный слой заглубления с шагом 0.4мм
Это то самое "узкое место" в которое прямая фреза 3мм полностью не входит(точнее сказать - "входит, но не на столько глубоко как фреза с меньшим диаметром"). Отступ 0,54мм.
Следующая фреза 1,5мм "шаровая"(она же "полусфера", она же "круглая", она же "полукруглая", она "со скруглением на конце радиусом...", она же...) . Отступ такой же - 0,54мм.

Белые линии - (та самая "разница между 2мя режимами" (("Roughin Minus Finish" = rmf)) в виде ж-кода) ж-код построенный по "недорезанным" фрезой 3мм местам, с высотой более(параметр "min rmf delta") 0.7мм. Шаг заглубления фрезой 1.5мм = 0.4мм. Слоев получилось 16. Я скрыл быстрые переходы. Обратите внимание что для каждого нового слоя фреза выходит полностью! а потом снова заглубляется - проходя значительные путь! Это планирую убрать... А еще есть идея(правда в далеких планах) реализовать получение ж-кода задом наперед: т.е. один слой будет справа налево, второй слева на право, потом снова справа налево... чтобы уменьшить быстрые переходы...

Красные линии это - чистовой режим(т.е. "отступ"=0) этой же полукруглой фрезой 1,5мм - для сравнения.



К счастью - глядя со стороны на свою работу над image-to-gcode - я вижу что движение идет только в сторону усовершенствования.
К сожалению - все эти улучшения требуют более сложных алгоритмов, что плохо сказывается на скорости получения ж-кода(скорость работы image-to-gcode)... и чем дальше - тем хуже и хуже...
но думаю результат того стоит...
http://cnc-club.ru/forum/viewtopic.php?t=1064 - домашний станок типа "рука"
http://cnc-club.ru/forum/viewtopic.php?t=1107 - быстро создать 3d образ без сканера по фоткам
http://cnc-club.ru/forum/viewtopic.php?t=1073 - прогноз станко-строения
http://livehistory.ru - мозаика складывается
http://www.economics.kiev.ua - почему все так в нашем мире
Аватара пользователя
Nick
Мастер
Сообщения: 22631
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1631
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Image-to-gcode + решение для нежестких станков

Сообщение Nick »

Wow! :good:!
Гармонист писал(а):К счастью - глядя со стороны на свою работу над image-to-gcode - я вижу что движение идет только в сторону усовершенствования.
К сожалению - все эти улучшения требуют более сложных алгоритмов, что плохо сказывается на скорости получения ж-кода(скорость работы image-to-gcode)... и чем дальше - тем хуже и хуже...
но думаю результат того стоит...
10 минут на постоение траектории может сэкономить часы в обработке!
Потом все это можно пытаться оптимизировать.
Аватара пользователя
Гармонист
Почётный участник
Почётный участник
Сообщения: 423
Зарегистрирован: 24 апр 2011, 09:14
Репутация: 72
Откуда: планета Земля
Контактная информация:

Image-to-gcode v3.7 - пошаговый пример и результаты

Сообщение Гармонист »

Как и обещал: выложил новую версию v3.7 CAM "картинку в ж-код"

Опробовал на своей рамке и вот что у меня получилось:
3д модель изделия:
ZBrush рамка GrayScale.jpg
Размер картинки: 4000 х 2920
размер пикселя 0,0875мм глубина 7,5мм
Траектория движения - по зигзагу.
Высота изделия ~320мм

Режим 1 - убрал основной объем материала:

Фреза 12мм сферическая, 2 слоя по 3,6мм, шаг 56линий=4,9мм(50% диаметра фрезы)
1.JPG
настройки 1.jpg

Режим 2 - обвел (хотя можно было этого не делать):

Фреза 5мм прямая, 3 слоя по 3мм - готовил этот ж-код посредством GCodeTools
2.JPG
обводка.jpg
нужно было обводить фрезой 1,5мм как я сделал в конце...

Режим 3 - подготовка к чистовому режиму:

Фреза сфера 8мм, 1 слой, шаг 36линий=3,15мм(40% диаметра фрезы)
3.JPG
настройки 22.jpg
Многочисленные расчеты и тесты показали что без этого режима(после фрезы 12мм)
остается слишком много узких мест, оставшихся как недоработки фрезы 12мм.
Можно и без этого режима, но как вы понимаете: чем больше разница диаметров 2х фрез, тем больше работы для 4-го режима "Дельта".

Режим 4 - ДЕЛЬТА - собственно то почему эта тема создана - :

Фреза сфера 1,5мм, шаг 3линии=0,2625мм(18% диаметра фрезы)
Высота слоя 1,2мм(шаг заглубления). Слои создаются динамически в зависимости от того какой высоты материал нужно снять в данном конкретном месте.
режим &quot;Дельты&quot;: разница между фрезами 8мм и 1,5мм; дельта &gt;=2мм
режим "Дельты": разница между фрезами 8мм и 1,5мм; дельта >=2мм
Настройки режима &quot;Дельта&quot;<br />ВНИМАНИЕ: на картинке ошибка! Вместо &quot;Max background len(pixels)&quot; = 4 - должно быть 330!
Настройки режима "Дельта"
ВНИМАНИЕ: на картинке ошибка! Вместо "Max background len(pixels)" = 4 - должно быть 330!
Обратите внимание: при помощи этого инструмента - можно проводить анализ вашей поверхности
например: "найти все места где фреза оставила материал более Х-мм" просто задаете диаметр чистовой фрезы=1 точке...

Режим 5 - чистовой(?) :

Фреза сфера 1,5мм, шаг 3линии=0,2625мм(18% диаметра фрезы), 1слой
5.JPG
43.jpg
фреза не сломалась. Буду экспериментировать с более мелкими фрезами.

Режим 6 - ...(нехватает словарного запаса...) "вырезание"? изделия из заготовки... :

Фреза - все та же - сфера 1,5мм, 10?слоев, высота слоя 1мм
планирую в следующий раз попробовать "взять новую глубину" - 10мм сразу фрезой 1,2мм! :twisted: :attention:
Опять же - низкий поклон разработчикам GCodeTools
6.JPG
обводка.gif

только вытянул из станка:
рамка слева сделана на предыдущем станке -до сих пор медитативно шлифую, <br />справа на новом - еще не шлифовал
рамка слева сделана на предыдущем станке -до сих пор медитативно шлифую,
справа на новом - еще не шлифовал
а теперь - подближе:
44_.jpg
44.JPG
55.JPG
112.JPG
88.JPG
22.JPG
11.JPG
игрался с настройками фотоаппарата и &quot;поймал&quot; фрезу во время работы на скорости ~19000об/мин<br />видно как стружка разлетается во все стороны... потрясающе...<br />можно собрать 10 фотиков засинхать их сделать серию снимков каждые 0,01сек... наблюдая как &quot;работает&quot; фреза под разной нагрузкой и скоростями...
игрался с настройками фотоаппарата и "поймал" фрезу во время работы на скорости ~19000об/мин
видно как стружка разлетается во все стороны... потрясающе...
можно собрать 10 фотиков засинхать их сделать серию снимков каждые 0,01сек... наблюдая как "работает" фреза под разной нагрузкой и скоростями...
77.JPG
а вот тут было стремно! Дело в том что процесс реза идет так что фреза "открыта" с той стороны где она уже прошла -
это значит что есть куда и стружку отбрасывать и боковая нагрузка небольшая т.к. только с одной стороны,... а вот в таких местах фреза зажата со всех сторон.
Но благодаря режиму "Дельта" высота рельефа негде не была выше 2мм(хотя 2мм - это тоже опасно если подача сумасшедшая), что не позволило перенагрузить фрезу.
Вобщем я доволен результатами. :mrgreen: :eat:
На чистовом режиме нет черных подпаленностей от перегрева, правда на самой фрезе налипшая стружка почернела... :think:
но думаю это из-за последнего режима вырезания изделия из заготовки...

Огорчает только качество поверхности :? (см. полоски на фото выше)
сравнил с ж-кодом и такое ощущение что полоски идут через одну, т.е. только когда фреза движется в одну сторону - еще не понял в какую:
по ходу реза и вращения лезвий фрезы или при обратном направлении... :think:
- может это фреза завалена, может шаг 0,26мм слишком большой, может кончик фрезы слишком большой(диаметр 1,5мм),... :problem:
http://cnc-club.ru/forum/viewtopic.php?t=1064 - домашний станок типа "рука"
http://cnc-club.ru/forum/viewtopic.php?t=1107 - быстро создать 3d образ без сканера по фоткам
http://cnc-club.ru/forum/viewtopic.php?t=1073 - прогноз станко-строения
http://livehistory.ru - мозаика складывается
http://www.economics.kiev.ua - почему все так в нашем мире
Аватара пользователя
Nick
Мастер
Сообщения: 22631
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1631
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Image-to-gcode + решение для нежестких станков

Сообщение Nick »

Ахрененть! Просто супер! :good:!

Режим подрезки тонких мест это очень хорошая штука!
Гармонист писал(а):Огорчает только качество поверхности (см. полоски на фото выше)
сравнил с ж-кодом и такое ощущение что полоски идут через одну, т.е. только когда фреза движется в одну сторону - еще не понял в какую:
Может быть просто потому, что ходит зигзагами, когда идет вправо фрезу отклоняет в одну сторону, когда влево - в другую...
Аватара пользователя
Nick
Мастер
Сообщения: 22631
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1631
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Image-to-gcode + решение для нежестких станков

Сообщение Nick »

Не удержался выписал еще медальку :).
aaleksander
Мастер
Сообщения: 576
Зарегистрирован: 23 авг 2013, 18:04
Репутация: 118
Откуда: г. Ухта
Контактная информация:

Re: Image-to-gcode + решение для нежестких станков

Сообщение aaleksander »

Гармонист писал(а):может шаг 0,26мм слишком большой
обычно берут шаг = 10-15% от радиуса фрезы.
Аватара пользователя
Гармонист
Почётный участник
Почётный участник
Сообщения: 423
Зарегистрирован: 24 апр 2011, 09:14
Репутация: 72
Откуда: планета Земля
Контактная информация:

Как улучшить author.py? аппроксимация биарками, сглаживание.

Сообщение Гармонист »

Nick, подскажи пожалуйста пару вопросов:
В плагине GCodeTools - ты использовал аппроксимацию биарками. Можешь дать формулы/алгоритм?
Дело в том что мне не нравится ж-код, выдаваемый image-to-gcode - я хочу его усовершенствовать... можешь помочь?
Хочется чтобы он получался более гладким.
/usr/share/pyshared/rs274/author.py результаты при увеличении: участок ~5х5мм
/usr/share/pyshared/rs274/author.py результаты при увеличении: участок ~5х5мм
Смотрю в сторону NURBS сплайнов и твоих биарков.
По поводу NURBS сплайнов(кажется ты писал что в LinuxCNC пока что решили сплайны не реализовывать...):
тут и тут с формулами написано что:
1. некоторые фирмы уже внедрили сплайны в ж-коды - теперь можно рисовать 3д модель в сплайнах, аппроксимировать модель сплайнами, задавать программу в сплайнах да к тому же
2. фирма SIEMENS реализовала усовершенствованную технологию Look Ahead смотри тут: сглаживание сплайнами переходов между кадрами чтобы не терять время на торможение/разгон при приближении к концу/"началу нового" кадра. Т.е. он плавно по сплайну переходит из одного кадра в другой...
Т.е. для фирм у которых уже написаны УП в классических ж-кодах - нет надобности переходить на новые УП: включается эта штука и ту же УП станок выполняет на много быстрее!

Итак: аппроксимацию по точкам и получением ж-кода занимается не сам скрипт image-to-gcode.py а скрипт /usr/share/pyshared/rs274/author.py
там ж-код генерирует простая функция:
текст функции douglas (для просмотра содержимого нажмите на ссылку)

Код: Выделить всё

def douglas(st, tolerance=.001, plane=None, _first=True):
    """\
Perform Douglas-Peucker simplification on the path 'st' with the specified
tolerance.  The '_first' argument is for internal use only.

The Douglas-Peucker simplification algorithm finds a subset of the input points
whose path is never more than 'tolerance' away from the original input path.

If 'plane' is specified as 17, 18, or 19, it may find helical arcs in the given
plane in addition to lines.  Note that if there is movement in the plane
perpendicular to the arc, it will be distorted, so 'plane' should usually
be specified only when there is only movement on 2 axes
"""
    if len(st) == 1:
        yield "G1", st[0], None
        return

    l1 = st[0]
    l2 = st[-1]
    
    worst_dist = 0
    worst = 0
    min_rad = sys.maxint
    max_arc = -1

    ps = st[0]
    pe = st[-1]

    for i, p in enumerate(st): 
        if p is l1 or p is l2: continue
        dist = dist_lseg(l1, l2, p)
        if dist > worst_dist:
            worst = i
            worst_dist = dist
	    rad = arc_rad(plane, ps, p, pe)
	    #print >>sys.stderr, "rad", rad, max_arc, min_rad
	    if rad < min_rad:
		max_arc = i
		min_rad = rad

    worst_arc_dist = 0
    if min_rad != sys.maxint:
	c1, c2 = arc_center(plane, ps, st[max_arc], pe)
	lx, ly, lz = st[0]
	if one_quadrant(plane, (c1, c2), ps, st[max_arc], pe):
	    for i, (x,y,z) in enumerate(st):
		if plane == 17: dist = abs(math.hypot(c1-x, c2-y) - min_rad)
		elif plane == 18: dist = abs(math.hypot(c1-x, c2-z) - min_rad)
		elif plane == 19: dist = abs(math.hypot(c1-y, c2-z) - min_rad)
		else: dist = sys.maxint
		#print >>sys.stderr, "wad", dist, worst_arc_dist
		if dist > worst_arc_dist: worst_arc_dist = dist

		mx = (x+lx)/2
		my = (y+ly)/2
		mz = (z+lz)/2
		if plane == 17: dist = abs(math.hypot(c1-mx, c2-my) - min_rad)
		elif plane == 18: dist = abs(math.hypot(c1-mx, c2-mz) - min_rad)
		elif plane == 19: dist = abs(math.hypot(c1-my, c2-mz) - min_rad)
		else: dist = sys.maxint
		#if dist > worst_arc_dist: worst_arc_dist = dist

		lx, ly, lz = x, y, z
	else:
	    worst_arc_dist = sys.maxint

    else:
	worst_arc_dist = sys.maxint

    #if worst_arc_dist != sys.maxint:
	#print >>sys.stderr, "douglas", len(st), "\n\t", st[0], "\n\t", st[max_arc], "\n\t", st[-1]
	#print >>sys.stderr, "\t", worst_arc_dist, worst_dist
	#print >>sys.stderr, "\t", c1, c2
    if worst_arc_dist < tolerance and worst_arc_dist < worst_dist:
	ccw = arc_dir(plane, (c1, c2), ps, st[max_arc], pe)
	if plane == 18: ccw = not ccw # wtf?
	yield "G1", ps, None
	if ccw:
	    yield "G3", st[-1], arc_fmt(plane, c1, c2, ps)
	else:
	    yield "G2", st[-1], arc_fmt(plane, c1, c2, ps)
    elif worst_dist > tolerance:
	if _first: yield "G1", st[0], None
        for i in douglas(st[:worst+1], tolerance, plane, False):
            yield i
        yield "G1", st[worst], None
        for i in douglas(st[worst:], tolerance, plane, False):
            yield i
	if _first: yield "G1", st[-1], None
    else:
	if _first: yield "G1", st[0], None
	if _first: yield "G1", st[-1], None
Эту функцию я хочу переделать - чтобы траектория была более гладкой.

Полностью я с ней не разобрался, но выяснил вот что:
* в качестве выходных параметров ж-код в прямых и дугах (которые я хочу сгладить)
* в качестве входных параметров передается массив точек(st) и максимально допустимое отклонение(tolerance)
* количество этих точек уменьшается алгоритмом Douglas-Peucker. Наглядно его работу можно посмотреть тут
* берется первая и последняя точки - апроксимируются дугами или отрезками. Алгоритм смотрит у чего получится меньше погрешность тем и аппроксимирует.
Алгоритм такой: первая и последняя точки соединяются отрезком, вычисляется расстояние от каждой точки(кроме 1й и посл-й) до этого отрезка функцией:
dist_lseg(l1, l2, p) - но я не уверен что правильно прочел код (для просмотра содержимого нажмите на ссылку)

Код: Выделить всё

def dist_lseg(l1, l2, p):
    "Compute the 3D distance from the line segment l1..l2 to the point p."
    x0, y0, z0 = l1
    xa, ya, za = l2
    xi, yi, zi = p

    dx = xa-x0
    dy = ya-y0
    dz = za-z0 
    d2 = dx*dx + dy*dy + dz*dz
    
    if d2 == 0: return 0

    t = (dx * (xi-x0) + dy * (yi-y0) + dz * (zi-z0)) / d2
    if t < 0: t = 0
    if t > 1: t = 1
    dist2 = (xi - x0 - t*dx)**2 + (yi - y0 - t*dy)**2 + (zi - z0 - t*dz)**2

    return dist2 ** .5
и берется точка с максимальным расстоянием до отрезка. (Это расстояние и есть погрешность для прокладки маршрута по прямой.) Через эту точку и 1ю и последнюю строится дуга и вычисляется ее радиус... дальше мысль оборвалась идеей обратиться к коллективному разуму в твоем лице... Есть идеи?
http://cnc-club.ru/forum/viewtopic.php?t=1064 - домашний станок типа "рука"
http://cnc-club.ru/forum/viewtopic.php?t=1107 - быстро создать 3d образ без сканера по фоткам
http://cnc-club.ru/forum/viewtopic.php?t=1073 - прогноз станко-строения
http://livehistory.ru - мозаика складывается
http://www.economics.kiev.ua - почему все так в нашем мире
Аватара пользователя
Nick
Мастер
Сообщения: 22631
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1631
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Image-to-gcode + решение для нежестких станков

Сообщение Nick »

Гармонист писал(а):В плагине GCodeTools - ты использовал аппроксимацию биарками. Можешь дать формулы/алгоритм?
Дело в том что мне не нравится ж-код, выдаваемый image-to-gcode - я хочу его усовершенствовать... можешь помочь?
Хочется чтобы он получался более гладким.
http://en.wikipedia.org/wiki/Biarc
Собственно у меня все это аппроксимируется по такому алгоритму:
берем сегмент. по двум касательным на его краях строим биарку. Смотрим попадаем ли в допуск по растоянию (это тупо берем n точек от кривой и ищем расстояние до биарки). Если не попали в допуск - то разбиваем сегмент попалам.

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

Вот моя функция построения биарки: https://github.com/cnc-club/gcodetools/ ... v.py#L2583

Биарка как мне помнится строится однозначо по точкам начала и конца, касательным в начале и конце и отношению радиусов (r1/r2)

Вот так вычисляем отношение радиусов (к этому пришел опытным путем):
Тупо отношение касательных, не знаю, как это сделать в твоем случае... надо будет что-то придумать, для начала можно взять 1:1.

Код: Выделить всё

if TE.mag() < straight_distance_tolerance:
		TE = -(TS+v).unit()
		r = TS.mag()/v.mag()*2
	elif TS.mag() < straight_distance_tolerance:
		TS = -(TE+v).unit()
		r = 1/( TE.mag()/v.mag()*2 )
	else:	
		r=TS.mag()/TE.mag()


Вот статья по которой я это делал... вроде...
Там даже вроде что-то есть по аппроксимации ломанной кривой.
Вложения
V1Nos1to4_22.pdf
(317.29 КБ) 1225 скачиваний
Аватара пользователя
nebelnoir
Почётный участник
Почётный участник
Сообщения: 65
Зарегистрирован: 24 апр 2014, 20:28
Репутация: 49
Настоящее имя: Ярослав Власов
Откуда: Москва
Контактная информация:

Re: Image-to-gcode + решение для нежестких станков

Сообщение nebelnoir »

Есть пара вопросов:
1. Удалось ли как-то выйти на доработку официального проекта image-to-gcode? Здорово будет если включат в релиз LinuxCNC! Потому как стало уже очень круто! :good:
2. Самый главный вопрос: делаю деталь тремя фрезами – совсем черновой (flat например D10mm), черновой (flat D3mm) и чистовой (к примеру V 45 град D4mm).
Для этого прогоняю картинку 3 раза. Первый прогон настраиваю Roughing offset на 3мм, Tool diam 10 Stepover так чтоб получилось расстояние между проходами примерно в диаметр инструмента; второй Roughing offset на 0.6 например, Tool diam 3, Stepover тоже неочень часто; и третий Roughing offset 0 (V 45 Tool diam 4), Stepover для получения максимального качества.
Потом ручками слепляю G код из 3х файлов: из первого прогона исключаю чистовую, добавляю код из второго прогона, исключая верхние проходы и чистовую (то есть оставляю один или 2 последних черновых прохода) и последним добавляю из третьего прогона.
Теперь самое интересное – начинаются танцы с бубном: из-за разных диаметров фрез результирующие коды получаются смещёнными друг относительно друга в плоскости XY (как я понял (предварительно) на ½ разницы между диаметром бо’льшей фрезы и текущей, то есть для первого и второго прогона (10-3)/2=3.5 ). Поэтому приходится изхищьряться и использовать G92. :hammer: :rasp:
Может есть способ попроще? Как вообще решается эта проблема? И можно ли по-быстрому добавить такой функционал в im2gc, чтоб самому не лепить G код? Это было бы очень полезно.
3. Еще - список стал очень большой, не хватает экрана :thinking:
4. Хочу сделать несколько туториалов по im2gc и gcodetools на подобии того как получить z-depth в blender ( http://rkmiit.ru/main/all/students/educ ... /cmit.html :D моя работа, помогал dormouse http://cnc-club.ru/forum/memberlist.php ... ofile&u=64 ), чтобы пустить в массы. Из альтернатив: heeks и freemill, но там нет самого главного - конической фрезы. С Blender cam еще надо думать, может вполне годная вещь.
Аватара пользователя
Nick
Мастер
Сообщения: 22631
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1631
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Image-to-gcode + решение для нежестких станков

Сообщение Nick »

Туториал супер, а я долго искал, как вывести Zmap в итоге просто сделал скриншот :freak:.
ЗЫ добавил ссылку на туториал в wiki.
Аватара пользователя
nebelnoir
Почётный участник
Почётный участник
Сообщения: 65
Зарегистрирован: 24 апр 2014, 20:28
Репутация: 49
Настоящее имя: Ярослав Власов
Откуда: Москва
Контактная информация:

Re: Image-to-gcode + решение для нежестких станков

Сообщение nebelnoir »

косяк: прога не работает с инвертированным изображением и упорно срезает "лишнее" с черной стороны.
то есть если фон черный - все ок, подложка убирается.
если фон белый и стоит галочка инвертировать - срезает сверху
Вложения
errInv.jpg
Ответить

Вернуться в «LinuxCNC»