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

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.

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

Сообщение Гармонист » 20 авг 2013, 00:14

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

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

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

скачать и попробовать
старые версии (для просмотра содержимого нажмите на ссылку)
image-to-gcode v3.5.zip
(17.54 Кб) Скачиваний: 596

image-to-gcode v3.6.zip
исправил некоторые баги,
убрал режим 2.1. "Окантовка" т.к. он только мешает(его нужно кардинально переделать),
усовершенствовал режим 2.2. "Разница"(теперь дельта может быть <= 0)
(17.29 Кб) Скачиваний: 519

image-to-gcode v3.7.zip
исправил некоторые баги, очень сильно переделал, так что сейчас не могу всего припомнить ... одно из:
фреза теперь может подрезать края, но получается более плавный рисунок(см.пост о матрицах фрез ниже)
но главное это то что эта версия прошла рабочую обкатку (опять же -см.пост ниже)
(21.71 Кб) Скачиваний: 495

image-to-gcode v3.8.6.zip
исправил некоторые баги, очень многое переделал - поэтому сменил версию на 8
Переименовал некоторые параметры чтобы было понятнее, вывел расчетные размеры в миллиметрах,...
теперь параметр 'Не обрезать углы' - не доступен и включен поумолчанию, "отвязал" режим 'Optimize path' от режима 'RMF',
объединил функции RMF и Mill_objectiv и весь их функционал в одну: теперь в режимах 'Row/Col objective' - работает сортировка и прочие плюшки...
реализовал возможность через параметр 'mill layer by layer' - настраивать последовательность обхода участков только слой за слоем(если ИСТИНА) или по ветвям деревьев(если ЛОЖЬ)
(24.97 Кб) Скачиваний: 1359

image-to-gcode v3.8.7.zip
небольшие усовершенствования...
(25.35 Кб) Скачиваний: 507

image-to-gcode v3.8.8.zip
исправил ошибку с параметром "Инвертировать"(при определенной комбинации других параметров) из-за которой не формировался g-код и вываливалось сообщение об ошибке в сформированном ж-коде...
(25.38 Кб) Скачиваний: 456

image-to-gcode v3.8.9.zip
исправил некоторые ошибки, среди которых ошибка при шаге больше единицы в обычном режиме при особой комбинации других параметров...
доработал интерфейс - в частности сделал чтобы съем за проход не был 0 и не был более общей глубины если включен отступ или режим RMF или...
вобщем - работа над ошибками в версии 3.8.8
(для особо любознательных: распаковываете 2е версии и в терминале командой diff сравниваете 2 файла и читаете что изменилось...)
(25.48 Кб) Скачиваний: 1719

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

Лицензия (для просмотра содержимого нажмите на ссылку)
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. Обработка боковой частью фрезы

Image-to-gcode + решение для нежестких станков сравнительный анализ стратегий работы концом и боковой гранью фрезы.jpg
сравнительный анализ стратегий работы концом и боковой гранью фрезы

картинку взял отсюда
brochure.pdf
Взято с www.freesteel.co.uk
Буду признателен если кто-то подскажет в каком ПО это реализовано
(4.22 Мб) Скачиваний: 980


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

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

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

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



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


посмотрать описание: (для просмотра содержимого нажмите на ссылку)
Активируется флагом "Optimize roughing".
Примечание: этот режим №1 я разрабатывал как основа для 2го режима - поэтому если вы его реально используете - отпишитесь.
Image-to-gcode + решение для нежестких станков image-to-gcode оптимищированный режим - общий вид.png
image-to-gcode оптимизированный режим - общий вид

Отверстие в бублике, более редкие линии - не важно, инновация заключается не в этом.
На следующем слайде - послойно и очень наглядно видно а чем заключается оптимизация
Image-to-gcode + решение для нежестких станков image-to-gcode сравнение обычного режима и оптимизированного.png
image-to-gcode сравнение обычного режима и оптимизированного:
слева - обычный, справа - оптимизированный


Обратите внимание, что на 2м и 3м слое фреза не проходит там где уже прошла на предыдущих слоях!

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


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

Image-to-gcode + решение для нежестких станков image-to-gcode назначение флага 'Roughing is completed'.png
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. "окантовка" этот метод вычисляет места где чистовая фреза при прохождении по краям высота рельефа выше заданной. Другими словами вычисляются границы рельефа, причем крутизна подьема рельефа выше заданной. Т.е. если у тебя плавный рельеф без резких переходов, то этот режим вообще ж-код не создаст.
Для этого режима результаты чернового прохода так же учитываются.

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

Image-to-gcode + решение для нежестких станков картинку в g-код режим 'окантовка'.png


метод 2.2. - собственно "гвоздь программы" - режим "разницы RMF"
- черновая фреза не войдет в узкие и глубокие места из-за своей толщины, а чистовая в этих местах может поломаться(я 4шт сломал) из-за того что много не снятого материала и большое заглубление.
Так вот этот механизм - вычисляет все места где черновая фреза оставила материал более заданной глубины и только по этим местам! делает ж-код.
Image-to-gcode + решение для нежестких станков картинку в g-код 'разница'.png

Image-to-gcode + решение для нежестких станков картинку в g-код режим 'разница'.png

Image-to-gcode + решение для нежестких станков Image-to-gcode режим Roughing mode minus Finishing mode.png
Image-to-gcode режим Roughing mode minus Finishing mode

Image-to-gcode + решение для нежестких станков image-to-gcode режим RMF.png
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 Кб) Просмотров: 18816

Image-to-gcode + решение для нежестких станков logo cnc-club.ru окантовка + разница RMF.png

Image-to-gcode + решение для нежестких станков 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 - почему все так в нашем мире
Аватара пользователя
Гармонист
Почётный участник
Почётный участник
 
Сообщения: 411
Зарегистрирован: 24 апр 2011, 09:14
Откуда: планета Земля
Репутация: 67
Медальки:

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

Сообщение Гармонист » 20 авг 2013, 00:15

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

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

Image-to-gcode + решение для нежестких станков image2gcode Max background len=0.png
image2gcode Max background len=0


Image-to-gcode + решение для нежестких станков image2gcode Max background len=1.png
image2gcode Max background len=1


Image-to-gcode + решение для нежестких станков image2gcode Max background len=25.png
image2gcode Max background len=25


Image-to-gcode + решение для нежестких станков image2gcode Max background len=65.png
image2gcode Max background len=65



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

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

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

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


Печенько №3 двойная конфигурация фрезы
Задается параметрами:

Image-to-gcode + решение для нежестких станков image2gcode двойная конфигурация фрезы.png


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


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

Обычная шаровая
Image-to-gcode + решение для нежестких станков 1 картинку в код - обычная полусфера.png
картинку в код - обычная полусфера

Image-to-gcode + решение для нежестких станков 2 картинку в код - полусфера + угол 45град.png
полусфера + угол 45град

Image-to-gcode + решение для нежестких станков 3 картинку в код - полусфера + угол 120град.png
полусфера + угол 120град

обратите внимание: угол - КАСАЕТСЯ шара!
а не рисуется от точки диаметра. Из-за этого при больших углах(100-200град) - шарик даже большого диаметра почти не видно на рисунке. Что наглядно видно на скрине выше.

Image-to-gcode + решение для нежестких станков 4 картинку в код - обычная конусная 90град ступенька.png
обычная конусная 90град

откуда взялась небольшая "ступенька"(3й излом) в самом верху - я написал в следующем сабже.
Image-to-gcode + решение для нежестких станков 5 картинку в код - конус 90град + угол 45град.png
конус 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 - почему все так в нашем мире
Аватара пользователя
Гармонист
Почётный участник
Почётный участник
 
Сообщения: 411
Зарегистрирован: 24 апр 2011, 09:14
Откуда: планета Земля
Репутация: 67
Медальки:

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

Сообщение Гармонист » 20 авг 2013, 00:16

важное отступление:
Чем обусловлен излом если грань фрезы прямая(сама фреза - обычная конусная острая)?

Image-to-gcode + решение для нежестких станков излом, хотя фреза - обычная конусная.png


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

Предварительно картинка чтобы было ясно о чем речь:
Image-to-gcode + решение для нежестких станков типы построения матриц конусной фрезы.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
Image-to-gcode + решение для нежестких станков 0,7_.png


Диаметр фрезы = 0.8mm
9х9
Image-to-gcode + решение для нежестких станков 0,8_.png

вот тут сечение начинает напоминать круг

Диаметр фрезы = 0.8999mm
9х9
Image-to-gcode + решение для нежестких станков 0,8999_.png

снова урезаный квадрат

Диаметр фрезы = 0.9001mm
11х11
Image-to-gcode + решение для нежестких станков 0,9001_.png

напоминает круг

Диаметр фрезы = 1.0mm
11х11
Image-to-gcode + решение для нежестких станков 1_.png

Диаметр фрезы = 1.10mm
11х11
Image-to-gcode + решение для нежестких станков 1,1_.png

Диаметр фрезы = 1.10001mm
13х13
Image-to-gcode + решение для нежестких станков 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 - почему все так в нашем мире
Аватара пользователя
Гармонист
Почётный участник
Почётный участник
 
Сообщения: 411
Зарегистрирован: 24 апр 2011, 09:14
Откуда: планета Земля
Репутация: 67
Медальки:

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

Сообщение Nick » 03 окт 2013, 22:14

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

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

Надо теперь придумать, как все это продвинуть в массы! :thinking:
Аватара пользователя
Nick
Мастер
 
Сообщения: 22543
Зарегистрирован: 23 ноя 2009, 16:45
Откуда: Gatchina, Saint-Petersburg distr., Russia
Репутация: 1572
Заслуга: Developer
Медальки:

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

Сообщение Гармонист » 04 окт 2013, 19:56

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 - почему все так в нашем мире
Аватара пользователя
Гармонист
Почётный участник
Почётный участник
 
Сообщения: 411
Зарегистрирован: 24 апр 2011, 09:14
Откуда: планета Земля
Репутация: 67
Медальки:

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

Сообщение Гармонист » 16 окт 2013, 01:24

Нашел промышленный аналог - его задача аналогичная - выбрать материал, оставшийся от предыдущей фрезы в местах с глубиной более предельной.
Смотрим видео:


На что нужно обратить внимание(конечно же кроме железных сисек):

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

Image-to-gcode + решение для нежестких станков 2.png
САМ-интерфейс еще и визуализирует процесс фрезеровки

На сколько оптимальна траектория!
Image-to-gcode + решение для нежестких станков 3.png
CAM-МЕЧТА ЧПУ-линуксоида: 3d модель + траектория движения инструмента + отображение не снятого материала
да к тому же - все это в динамике!!!

Image-to-gcode + решение для нежестких станков 4_.png
смотрите на сколько программный расчет соответствует готовому изделию


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


Image-to-gcode + решение для нежестких станков 5.png
разница между предыдущей(пройденно) фрезой и будущей(еще не прошла) фрезой
красным показаны места со слишком высоким рельефом

Image-to-gcode + решение для нежестких станков 6.png
разница между предыдущим режимом и будущим
красным показаны места со слишком высоким рельефом
в которых фреза может сломатся

Image-to-gcode + решение для нежестких станков 4.png
слева - до обработки, справа - после обработки
сравните между собой(обращая внимание на 2е предыдущие картинки)

после предыдущих 2х фрез - снова режим разницы
Image-to-gcode + решение для нежестких станков 7.png
красным показаны места со слишком высоким рельефом: предыдущая фреза в эти места не пролезла, а более мелкая фреза в них пролезет, но может сломаться - поэтому рельеф в этих участках нужно выбирать мелкой фрезой ПОСЛОЙНО!

а вот это почти что промышленный шпионаж :shh: - на предыдущем слайде представлен интерфейс,
раскрашивающий модель в зеленые и главное - красные цвета :beer_blow:

Image-to-gcode + решение для нежестких станков 8.png
показано как в таких участках формируется ж-код специальным режимом

Image-to-gcode + решение для нежестких станков 9.png
специальный режим: ж-код формируется ТОЛЬКО в этих участках с послойным снятием


странно, но последние 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 - почему все так в нашем мире
Аватара пользователя
Гармонист
Почётный участник
Почётный участник
 
Сообщения: 411
Зарегистрирован: 24 апр 2011, 09:14
Откуда: планета Земля
Репутация: 67
Медальки:

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

Сообщение Nick » 17 окт 2013, 14:51

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

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

Сообщение Nick » 17 окт 2013, 14:51

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

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

Сообщение Гармонист » 17 окт 2013, 18:15

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 - почему все так в нашем мире
Аватара пользователя
Гармонист
Почётный участник
Почётный участник
 
Сообщения: 411
Зарегистрирован: 24 апр 2011, 09:14
Откуда: планета Земля
Репутация: 67
Медальки:

Re: Image-to-gcode v3.7

Сообщение Гармонист » 27 окт 2013, 09:04

Гармонист писал(а): image-to-gcode v3.6.zip

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

(моя первая анимация в Gimp-е) демонстрация предварительных результатов(т.е. что собственно я хочу получить):
Image-to-gcode + решение для нежестких станков сложный участок.png
сложный участок

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

этот же участок
Image-to-gcode + решение для нежестких станков image-to-gcode Roughin minus finish.gif
каждый фрейм - это отдельный слой заглубления с шагом 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 - почему все так в нашем мире
Аватара пользователя
Гармонист
Почётный участник
Почётный участник
 
Сообщения: 411
Зарегистрирован: 24 апр 2011, 09:14
Откуда: планета Земля
Репутация: 67
Медальки:

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

Сообщение Nick » 28 окт 2013, 15:01

Wow! :good:!
Гармонист писал(а):К счастью - глядя со стороны на свою работу над image-to-gcode - я вижу что движение идет только в сторону усовершенствования.
К сожалению - все эти улучшения требуют более сложных алгоритмов, что плохо сказывается на скорости получения ж-кода(скорость работы image-to-gcode)... и чем дальше - тем хуже и хуже...
но думаю результат того стоит...

10 минут на постоение траектории может сэкономить часы в обработке!
Потом все это можно пытаться оптимизировать.
Аватара пользователя
Nick
Мастер
 
Сообщения: 22543
Зарегистрирован: 23 ноя 2009, 16:45
Откуда: Gatchina, Saint-Petersburg distr., Russia
Репутация: 1572
Заслуга: Developer
Медальки:

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

Сообщение Гармонист » 01 мар 2014, 12:47

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

Опробовал на своей рамке и вот что у меня получилось:
3д модель изделия:
Image-to-gcode + решение для нежестких станков ZBrush рамка GrayScale.jpg

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

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


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

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



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


Фреза 5мм прямая, 3 слоя по 3мм - готовил этот ж-код посредством GCodeTools
Image-to-gcode + решение для нежестких станков 2.JPG

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

нужно было обводить фрезой 1,5мм как я сделал в конце...

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


Фреза сфера 8мм, 1 слой, шаг 36линий=3,15мм(40% диаметра фрезы)
Image-to-gcode + решение для нежестких станков 3.JPG

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

Многочисленные расчеты и тесты показали что без этого режима(после фрезы 12мм)
остается слишком много узких мест, оставшихся как недоработки фрезы 12мм.
Можно и без этого режима, но как вы понимаете: чем больше разница диаметров 2х фрез, тем больше работы для 4-го режима "Дельта".

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


Фреза сфера 1,5мм, шаг 3линии=0,2625мм(18% диаметра фрезы)
Высота слоя 1,2мм(шаг заглубления). Слои создаются динамически в зависимости от того какой высоты материал нужно снять в данном конкретном месте.
Image-to-gcode + решение для нежестких станков 4.JPG
режим "Дельты": разница между фрезами 8мм и 1,5мм; дельта >=2мм

Image-to-gcode + решение для нежестких станков настройки 333.jpg
Настройки режима "Дельта"
ВНИМАНИЕ: на картинке ошибка! Вместо "Max background len(pixels)" = 4 - должно быть 330!

Обратите внимание: при помощи этого инструмента - можно проводить анализ вашей поверхности
например: "найти все места где фреза оставила материал более Х-мм" просто задаете диаметр чистовой фрезы=1 точке...

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


Фреза сфера 1,5мм, шаг 3линии=0,2625мм(18% диаметра фрезы), 1слой
Image-to-gcode + решение для нежестких станков 5.JPG

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

фреза не сломалась. Буду экспериментировать с более мелкими фрезами.

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


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

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



только вытянул из станка:
Image-to-gcode + решение для нежестких станков 7.JPG
рамка слева сделана на предыдущем станке -до сих пор медитативно шлифую,
справа на новом - еще не шлифовал


а теперь - подближе:
Image-to-gcode + решение для нежестких станков 44_.jpg

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

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

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

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

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

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

Image-to-gcode + решение для нежестких станков 66.JPG
игрался с настройками фотоаппарата и "поймал" фрезу во время работы на скорости ~19000об/мин
видно как стружка разлетается во все стороны... потрясающе...
можно собрать 10 фотиков засинхать их сделать серию снимков каждые 0,01сек... наблюдая как "работает" фреза под разной нагрузкой и скоростями...

Image-to-gcode + решение для нежестких станков 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 - почему все так в нашем мире
Аватара пользователя
Гармонист
Почётный участник
Почётный участник
 
Сообщения: 411
Зарегистрирован: 24 апр 2011, 09:14
Откуда: планета Земля
Репутация: 67
Медальки:

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

Сообщение Nick » 03 мар 2014, 09:29

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

Режим подрезки тонких мест это очень хорошая штука!

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

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

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

Сообщение Nick » 03 мар 2014, 09:33

Не удержался выписал еще медальку :).
Аватара пользователя
Nick
Мастер
 
Сообщения: 22543
Зарегистрирован: 23 ноя 2009, 16:45
Откуда: Gatchina, Saint-Petersburg distr., Russia
Репутация: 1572
Заслуга: Developer
Медальки:

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

Сообщение aaleksander » 03 мар 2014, 11:38

Гармонист писал(а):может шаг 0,26мм слишком большой

обычно берут шаг = 10-15% от радиуса фрезы.
aaleksander
Мастер
 
Сообщения: 576
Зарегистрирован: 23 авг 2013, 18:04
Откуда: г. Ухта
Репутация: 117
Медальки:

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

Сообщение Гармонист » 14 июн 2014, 19:44

Nick, подскажи пожалуйста пару вопросов:
В плагине GCodeTools - ты использовал аппроксимацию биарками. Можешь дать формулы/алгоритм?
Дело в том что мне не нравится ж-код, выдаваемый image-to-gcode - я хочу его усовершенствовать... можешь помочь?
Хочется чтобы он получался более гладким.
Image-to-gcode + решение для нежестких станков author.png
/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 - почему все так в нашем мире
Аватара пользователя
Гармонист
Почётный участник
Почётный участник
 
Сообщения: 411
Зарегистрирован: 24 апр 2011, 09:14
Откуда: планета Земля
Репутация: 67
Медальки:

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

Сообщение Nick » 16 июн 2014, 10:40

Гармонист писал(а):В плагине 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 Кб) Скачиваний: 1067
Аватара пользователя
Nick
Мастер
 
Сообщения: 22543
Зарегистрирован: 23 ноя 2009, 16:45
Откуда: Gatchina, Saint-Petersburg distr., Russia
Репутация: 1572
Заслуга: Developer
Медальки:

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

Сообщение nebelnoir » 07 июл 2014, 17:08

Есть пара вопросов:
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 memberlist.php?mode=viewprofile&u=64 ), чтобы пустить в массы. Из альтернатив: heeks и freemill, но там нет самого главного - конической фрезы. С Blender cam еще надо думать, может вполне годная вещь.
Аватара пользователя
nebelnoir
Почётный участник
Почётный участник
 
Сообщения: 64
Зарегистрирован: 24 апр 2014, 20:28
Откуда: Москва
Репутация: 47
Настоящее имя: Ярослав Власов

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

Сообщение Nick » 07 июл 2014, 19:05

Туториал супер, а я долго искал, как вывести Zmap в итоге просто сделал скриншот :freak:.
ЗЫ добавил ссылку на туториал в wiki.
Аватара пользователя
Nick
Мастер
 
Сообщения: 22543
Зарегистрирован: 23 ноя 2009, 16:45
Откуда: Gatchina, Saint-Petersburg distr., Russia
Репутация: 1572
Заслуга: Developer
Медальки:

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

Сообщение nebelnoir » 10 июл 2014, 22:21

косяк: прога не работает с инвертированным изображением и упорно срезает "лишнее" с черной стороны.
то есть если фон черный - все ок, подложка убирается.
если фон белый и стоит галочка инвертировать - срезает сверху
Вложения
Image-to-gcode + решение для нежестких станков errInv.jpg
Аватара пользователя
nebelnoir
Почётный участник
Почётный участник
 
Сообщения: 64
Зарегистрирован: 24 апр 2014, 20:28
Откуда: Москва
Репутация: 47
Настоящее имя: Ярослав Власов

След.

Вернуться в LinuxCNC

Кто сейчас на конференции

Зарегистрированные пользователи: _taras_, arkhnchul, at90, Bing [Bot], Google [Bot], MihailS3, N1X, Гагарин, Samodelkin 88, uralpt, Vitalii, Yandex [bot], ДмитрийП

Reputation System ©'