Идея небольшой утилитки

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

Re: Идея небольшой утилитки

Сообщение aaleksander »

Nick писал(а):Я смотрю, много тестовых коробочек наделал :)
Это следы дебагга :cry:
Сначало пытался с наскоку все эти припуски угадать. Потом плюнул, переписал все функции, чтоб на вход диаметр фрезы поступал и за пол-часа "написАл" правильные коробочки.
Сейчас занимаюсь мета-траекториями, это еще интереснее будет. Для ленивых ЧПУшников.
aaleksander
Мастер
Сообщения: 577
Зарегистрирован: 23 авг 2013, 18:04
Репутация: 118
Откуда: г. Ухта
Контактная информация:

Re: Идея небольшой утилитки

Сообщение aaleksander »

Добавил мета-траектории.
Что это такое?
Представьте, что есть доска, в нее вбиты гвозди (не до конца, шляпки торчат). Натягиваем на все это дело резинку, получаем замкнутый контур.
Гвозди могут быть разного диаметра.
Вот такой код, превращается в такую картинку (у метатраекторий есть отдельный просмотрищик)

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

# -*- coding: utf-8 -*-
from py2gcode import *
v = Meta()
#добавляем вершины
v.point(60, 10, 10)
v.point(110, 100, 10)
v.point(60, 190, 10)
v.point(40, 100, 30)

v.show(3) #предварительный просмотр траектории

def f():
	G0(0, 0, 5)
	G0(Z = 5)
	z = -3
	while z > -10:
		v.to_gcode(z) #экспортируем мета-траекторию в GCode на глубине z
		z -= 2

preview(f)
scr_01.PNG (2066 просмотров) <a class='original' href='./download/file.php?id=23408&mode=view' target=_blank>Загрузить оригинал (16.72 КБ)</a>
А вот так выглядит сама траектория (я сделал погружение по Z, чтобы было понятно, где-какие оси):
scr_02.PNG (2066 просмотров) <a class='original' href='./download/file.php?id=23409&mode=view' target=_blank>Загрузить оригинал (39.45 КБ)</a>
Если мы вдруг захотим сделать впадинку, то для этого нужно указать отрицательный радиус.
Изменям в программе список вершин:

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

v.point(60, 10, 10)
v.point(80, 80, -10)  #радиус отрицательный, значит "резинка" обойдет его с другой стороны
v.point(110, 100, 10)
v.point(60, 190, 10)
v.point(40, 100, 30)
И получаем такую траекторию:
scr_03.PNG (2066 просмотров) <a class='original' href='./download/file.php?id=23410&mode=view' target=_blank>Загрузить оригинал (15.33 КБ)</a>
scr_04.PNG (2066 просмотров) <a class='original' href='./download/file.php?id=23411&mode=view' target=_blank>Загрузить оригинал (34.3 КБ)</a>
Можно указывать вершины без радиуса, тогда это будет просто точка.
Вершины нужно указывать по часовой стрелке.
Вся эта прелесть доступна на Гитхабе
Жду замечаний, идей и хотелок :hottabych:
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Идея небольшой утилитки

Сообщение nkp »

aaleksander писал(а):есть доска, в нее вбиты гвозди (не до конца, шляпки торчат). Натягиваем на все это дело резинку,
э-ээ... а фрез за резинку не будет задевать при обработке? :freak:
:)
=================
подумалось - как со стороны народа пользователя просчитать коодинаты "шляпок" ,чтоб получить задуманную траекторию...
ведь в голове есть некая форма , и допустим надо определенно скруглить углы...
а тут :thinking:
ну может я просто не могу смоделировать задачу ,где подобное будет оправдано востребовано... ;)
aaleksander
Мастер
Сообщения: 577
Зарегистрирован: 23 авг 2013, 18:04
Репутация: 118
Откуда: г. Ухта
Контактная информация:

Re: Идея небольшой утилитки

Сообщение aaleksander »

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

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

# -*- coding: utf-8 -*-
from py2gcode import *

v = Meta()
v.point(30, 100, 10)
v.point(100, 100, 80)
v.point(100, 30, 10)
v.point(100, 100, -60)
#v.show(5)
def f():
	G0(0, 0, 5)
	G0(Z = 5)
	z = -3
	while z > -10:
		v.to_gcode(z)
		z -= 2

preview(f)
При этом, если мы хотим изменить радиусы, не надо пересчитывать абсолютно все координаты и углы: просто измени одно число в списке "гвоздей".

Еще Ник просил вот это:
Изображение
Еще проще: всего два "гвоздя" (для просмотра содержимого нажмите на ссылку)

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

# -*- coding: utf-8 -*-
from py2gcode import *

v = Meta()
v.point(100, 100, 20)
v.point(200, 70, 50)

#v.show(3)

def f():
	G0(0, 0, 5)
	G0(Z = 5)
	z = -3
	while z > -10:
		v.to_gcode(z)
		z -= 2
preview(f)
Но твою мысль я понял. Нужно сделать дополнительный параметр "режим скругления". Займусь.
aaleksander
Мастер
Сообщения: 577
Зарегистрирован: 23 авг 2013, 18:04
Репутация: 118
Откуда: г. Ухта
Контактная информация:

Re: Идея небольшой утилитки

Сообщение aaleksander »

Сделал скругление углов. Действительно - мега-полезная штука.
По-быстрому набросал несколько контуров (по 1-2 минуты на каждый).
На скринах пример программы и что она выдает.

P.S. подскажите, где почитать про алгоритмы выборки площади?
Думаю, это будет следующим этапом.
Вложения
Тут еще погружение на глубину, скрин не воткнул. (2006 просмотров) <a class='original' href='./download/file.php?id=23525&mode=view' target=_blank>Загрузить оригинал (47.92 КБ)</a>
Тут еще погружение на глубину, скрин не воткнул.
scr_meta_02.PNG (2006 просмотров) <a class='original' href='./download/file.php?id=23526&mode=view' target=_blank>Загрузить оригинал (38.91 КБ)</a>
scr_meta_03.PNG (2006 просмотров) <a class='original' href='./download/file.php?id=23527&mode=view' target=_blank>Загрузить оригинал (82.04 КБ)</a>
Аватара пользователя
tooshka
Почётный участник
Почётный участник
Сообщения: 1803
Зарегистрирован: 24 окт 2012, 14:26
Репутация: 209
Настоящее имя: Андрей
Откуда: Нижний Новгород
Контактная информация:

Re: Идея небольшой утилитки

Сообщение tooshka »

aaleksander писал(а):Сделал скругление углов. Действительно - мега-полезная штука.
А сопряжение линии и окружности или двух дуг?
Милая, ты услышь меня
под окном стою со своим я ЧПУ! (Протяжно; с надрывом; форте)
Внимание!!! Чрезмерное увлечение ЧПУ приводит к проблемам в семейных отношениях!
aaleksander
Мастер
Сообщения: 577
Зарегистрирован: 23 авг 2013, 18:04
Репутация: 118
Откуда: г. Ухта
Контактная информация:

Re: Идея небольшой утилитки

Сообщение aaleksander »

tooshka писал(а):
aaleksander писал(а):Сделал скругление углов. Действительно - мега-полезная штука.
А сопряжение линии и окружности или двух дуг?
Напрямую пока нет, только через промежуточную точку.
Мета-траектории - это не полноценная чертилка. Просто удобный способ задать траекторию для некоторых случаев с логичным алгоритмом и ожидаемым результатом (помните: гвозди и резинка ;) ). Для всего остального есть стандартные команды.

Но все равно, буду благодарен, если мне накидают реальных примеров из практики. Возможно, это подтолкнет меня к новым идеям.
Аватара пользователя
tooshka
Почётный участник
Почётный участник
Сообщения: 1803
Зарегистрирован: 24 окт 2012, 14:26
Репутация: 209
Настоящее имя: Андрей
Откуда: Нижний Новгород
Контактная информация:

Re: Идея небольшой утилитки

Сообщение tooshka »

Скорее всего в Жкоде нереализуемо вот тут с Ником обсуждали чуть.
http://cnc-club.ru/forum/viewtopic.php? ... 4&start=40
Милая, ты услышь меня
под окном стою со своим я ЧПУ! (Протяжно; с надрывом; форте)
Внимание!!! Чрезмерное увлечение ЧПУ приводит к проблемам в семейных отношениях!
aaleksander
Мастер
Сообщения: 577
Зарегистрирован: 23 авг 2013, 18:04
Репутация: 118
Откуда: г. Ухта
Контактная информация:

Re: Идея небольшой утилитки

Сообщение aaleksander »

tooshka писал(а):Скорее всего в Жкоде нереализуемо вот тут с Ником обсуждали чуть.
http://cnc-club.ru/forum/viewtopic.php? ... 4&start=40
Понял идею. Данная хотелка не укладывается в идеологию мета-траекторий. Но никто не мешает придумать какую-нибудь другую блабла-траекторию с другими алгоритмами построения. А там уже вижу задачу объединения разных траекторий и т.д.
Но для начала надо сделать сами дуги. У меня ж пока все строится из G0 и G1. Хотя я на своем станке особой разницы не заметил: пилит одинаково.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Идея небольшой утилитки

Сообщение Nick »

aaleksander писал(а):P.S. подскажите, где почитать про алгоритмы выборки площади?
Думаю, это будет следующим этапом.
Зигзаг или спиралькой... Оффестами лучше не заморачивайся - очень сложно и без глюков не работает.

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

Re: Идея небольшой утилитки

Сообщение aaleksander »

А где почитать можно? В основном пока интересует обычная обрезка за/в/по контуру.

P.S. темку можно повыше перенести, в общий раздел ПО. Под виндой нормально работает.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Идея небольшой утилитки

Сообщение Nick »

aaleksander писал(а):P.S. темку можно повыше перенести, в общий раздел ПО. Под виндой нормально работает.
Пока такого раздела нет... можно перенести в один из раздеов Lin/Win и оставить ссылку во втором разделе.
aaleksander писал(а):А где почитать можно? В основном пока интересует обычная обрезка за/в/по контуру.
Почитать... хммм. по что почитать про заглубление или зигзаги?
Заглубление - там все просто, вместо того, чтобы входить прямо под углом 90 градусов заходят под другим углом. Многие фрезы не могут заглубляться под углом 90 градусов. Плюс придется чуть продлить траекторию, чтобы дорезать заглубление до конца. основные параметры - угол заглубления и скорость.
Перемычки - на последних проходах фрезу приподнимают, чтобы оставались перемычки и деталь не улетала.

Про зигзаг... типо такого:
http://www.cnc-club.ru/forum/viewtopic. ... %2A#p13193
aaleksander
Мастер
Сообщения: 577
Зарегистрирован: 23 авг 2013, 18:04
Репутация: 118
Откуда: г. Ухта
Контактная информация:

Re: Идея небольшой утилитки

Сообщение aaleksander »

Nick писал(а):
aaleksander писал(а):А где почитать можно? В основном пока интересует обычная обрезка за/в/по контуру.
Почитать... хммм. по что почитать про заглубление или зигзаги?
Заглубление - там все просто, вместо того, чтобы входить прямо под углом 90 градусов заходят под другим углом. Многие фрезы не могут заглубляться под углом 90 градусов. Плюс придется чуть продлить траекторию, чтобы дорезать заглубление до конца. основные параметры - угол заглубления и скорость.
Перемычки - на последних проходах фрезу приподнимают, чтобы оставались перемычки и деталь не улетала.
Про зигзаг... типо такого:
http://www.cnc-club.ru/forum/viewtopic. ... %2A#p13193
Что это такое, я знаю. Мне бы алгоритмы.
Буду думать.
aaleksander
Мастер
Сообщения: 577
Зарегистрирован: 23 авг 2013, 18:04
Репутация: 118
Откуда: г. Ухта
Контактная информация:

Re: Идея небольшой утилитки

Сообщение aaleksander »

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

Re: Идея небольшой утилитки

Сообщение Nick »

aaleksander писал(а):Оффсетами - это в смысле рекурсивное построение эквидистантных контуров?
Ага, они самые. Тебе литературы подкинуть по ним? (но на английском)...
aaleksander
Мастер
Сообщения: 577
Зарегистрирован: 23 авг 2013, 18:04
Репутация: 118
Откуда: г. Ухта
Контактная информация:

Re: Идея небольшой утилитки

Сообщение aaleksander »

Давай, гляну.
Но пока кажется, что не осилю. Точнее трудоемкость реализации перевесит неудобство обхождения без них.
Пока все устраивает. Задумался о шрифтах.
aaleksander
Мастер
Сообщения: 577
Зарегистрирован: 23 авг 2013, 18:04
Репутация: 118
Откуда: г. Ухта
Контактная информация:

Re: Идея небольшой утилитки

Сообщение aaleksander »

А можно ли LinuxCNC настроить входные файлы так, чтобы он компилировал и сразу выполнял?
Например, увидел расширение cpp - запустил компиляцию, выполнил, взял из stdout гкод?

А то меня от динамической типизации питона выворачивает с непривычки.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Идея небольшой утилитки

Сообщение Serg »

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

Re: Идея небольшой утилитки

Сообщение Nick »

aaleksander писал(а):Например, увидел расширение cpp - запустил компиляцию, выполнил, взял из stdout гкод?
Так тоже самое, что и с питоном - надо фильтр настроить.
(что-то типо такого http://cnc-club.ru/forum/viewtopic.php? ... TER#p61529)
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Идея небольшой утилитки

Сообщение nkp »

с сишными исходниками поступаем так:
в ini в секцию [FILTER] (если такой нет - добавляем):

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

[FILTER]

PROGRAM_EXTENSION = .sh Script Bash
sh = bash
а уже в самом скрипте пропишем запуск gcc с последующим запуском программы:

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

#!bin/bash

gcc /home/nkp/emc2-dev-80db2a2/nc_files/45.c -o 45
./45
сам исходник :

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

#include <stdio.h>
 
int main (void)
{
    puts ("G1 F300 X10\nM2");
    return 0;
}
в итоге:
Выделение_003.png (1808 просмотров) <a class='original' href='./download/file.php?id=24258&mode=view' target=_blank>Загрузить оригинал (42.96 КБ)</a>
Ответить

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