Easyelectronics.ru

Электроника для всех
Текущее время: 27 сен 2020, 21:05

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 27 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Дискретные перемещения вдоль прямой
СообщениеДобавлено: 28 апр 2015, 14:54 
Старожил
Аватара пользователя

Зарегистрирован: 19 фев 2015, 17:37
Сообщения: 1604
Откуда: void
Добрый день.

Ко мне на днях приедет заказанный ЧПУ станок, но без драйверов и контроллера. Как пояснили мне в компании, экспортные ЧПУ станки подпадают под европейские санкции и ввозить их нельзя. А вот станки, «подготовленные к ЧПУ», то есть с уже установленными шаговиками и концевыми выключателями, вполне себе можно. Короче, пришлось докупить драйвера, благо их предостаточно на рынке и заняться изготовлением котроллера. Думаю, возьму какую-нибудь stm-ку под него, хотя конкретно пока не решил.

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

На данный момент я думаю над аппроксимацией прямых дискретными перемещениями вдоль двумерной координатной сетки. Итак, примерный алгоритм:

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

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

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

Наконец, считаем наикратчайшее расстояние от оставшихся точек до заданной прямой и выбираем наименьшее значение. В том случае, если расстояния совпадают (например, когда прямая проведена под углом в 45 градусов) выбираем случайным образом. Далее повторяем действия до тех пор, пока не попадаем в точку В.

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

Вроде бы все так и достаточно просто. Не вижу смысла усложнять простые вещи. Можно было бы перевести все это на язык линейной алгебры и многообразий, но проще вряд ли станет.

В общем, хочу услышать ваши комментарии по алгоритму. Вдруг тут есть специалисты, хорошо знакомые с ПО ЧПУ станков. Да и просто любое мнение может оказаться полезным. В тех книгах, что я открыл, объясняется уже программирование в G-кодах, без низкоуровневых вещей. Не все мне здесь нравится (например, случайный выбор), но в целом, это лучшая из идей, что пока пришли мне в голову. С другой стороны, это «жадный» алгоритм, который может привести к неоптимальному решению. Если нужна картинка, то скажите, я могу вечером нарисовать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Дискретные перемещения вдоль прямой
СообщениеДобавлено: 28 апр 2015, 15:16 
Старожил

Зарегистрирован: 20 мар 2010, 17:31
Сообщения: 1394
Откуда: Челябинск
Не понял.
Вам это нужно, чтоль? : https://ru.wikipedia.org/wiki/%C0%EB%E3 ... 5%FD%EC%E0
https://ru.wikipedia.org/wiki/%D0%90%D0 ... 0%BA%D0%B0


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Дискретные перемещения вдоль прямой
СообщениеДобавлено: 28 апр 2015, 16:14 
Старожил
Аватара пользователя

Зарегистрирован: 23 сен 2012, 20:35
Сообщения: 2471
Думаю, проще будет взять что-то готовое, например, из SmoothieBoard или Grbl.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Дискретные перемещения вдоль прямой
СообщениеДобавлено: 28 апр 2015, 16:33 
Старожил
Аватара пользователя

Зарегистрирован: 19 фев 2015, 17:37
Сообщения: 1604
Откуда: void
Эх, как жить в нашем современном мире... Даже велосипед толком самостоятельно изобрести не дадут. =/
Но спасибо, я видел этот алгоритм в книгах, но без описания и не догадался забить в поиск. Реализую оба и посмотрю, насколько мой хуже.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Дискретные перемещения вдоль прямой
СообщениеДобавлено: 28 апр 2015, 16:51 
Старожил

Зарегистрирован: 20 мар 2010, 17:31
Сообщения: 1394
Откуда: Челябинск
El1te писал(а):
Эх, как жить в нашем современном мире... Даже велосипед толком самостоятельно изобрести не дадут. =/
Но спасибо, я видел этот алгоритм в книгах, но без описания и не догадался забить в поиск. Реализую оба и посмотрю, насколько мой хуже.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Дискретные перемещения вдоль прямой
СообщениеДобавлено: 28 апр 2015, 17:39 
Старожил
Аватара пользователя

Зарегистрирован: 19 фев 2015, 17:37
Сообщения: 1604
Откуда: void
Хм, рассказывать про "другие компы" пользователю с ником Elite это как-то... самонадеянно, что ли. =)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Дискретные перемещения вдоль прямой
СообщениеДобавлено: 28 апр 2015, 18:07 
Старожил

Зарегистрирован: 20 мар 2010, 17:31
Сообщения: 1394
Откуда: Челябинск
El1te писал(а):
Хм, рассказывать про "другие компы" пользователю с ником Elite это как-то... самонадеянно, что ли. =)

ну почему же?наряду с оригиналом, выпущеным для не помню уж каких машинок с процом 6502, были порты игрушки и на спектрумы, и на коммодоры с атарями, и были на 86 платформу...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Дискретные перемещения вдоль прямой
СообщениеДобавлено: 28 апр 2015, 18:12 
Старожил

Зарегистрирован: 20 мар 2010, 17:31
Сообщения: 1394
Откуда: Челябинск
И все-так, что нужно?
построение прямой, или задача коммивяжера?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Дискретные перемещения вдоль прямой
СообщениеДобавлено: 28 апр 2015, 19:58 
Старожил
Аватара пользователя

Зарегистрирован: 19 фев 2015, 17:37
Сообщения: 1604
Откуда: void
Да, именно построение прямой и нужно было. Я не догадался взглянуть на процесс фрезерования под углом машинной графики. =)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Дискретные перемещения вдоль прямой
СообщениеДобавлено: 28 апр 2015, 20:45 
Старожил

Зарегистрирован: 28 дек 2012, 07:17
Сообщения: 517
Mikesoft писал(а):

Там кстати в алгоритме окружности какая-то ошибка и в результате получается эллипс одна из осей которого на 1 (или 2?) больше другой :)

А вообще, на мой взгляд это категорически неправильный путь. Я бы считал все по честному, в плавучке. Тем более, что надо согласовывать несколько осей, разгон и торможение.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Дискретные перемещения вдоль прямой
СообщениеДобавлено: 28 апр 2015, 20:48 
Старожил

Зарегистрирован: 28 дек 2012, 07:17
Сообщения: 517
El1te писал(а):
Хм, рассказывать про "другие компы" пользователю с ником Elite это как-то... самонадеянно, что ли. =)

В таком случае над вами давлеет призрак недостаточной вычислительной мощности древних компов :)
Надо оставить все красивые алгоритмы в прошлом. Надежнее и быстрее решать проблемы в лоб :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Дискретные перемещения вдоль прямой
СообщениеДобавлено: 28 апр 2015, 21:58 
Старожил

Зарегистрирован: 20 мар 2010, 17:31
Сообщения: 1394
Откуда: Челябинск
Black Warrior писал(а):
El1te писал(а):
Хм, рассказывать про "другие компы" пользователю с ником Elite это как-то... самонадеянно, что ли. =)

В таком случае над вами давлеет призрак недостаточной вычислительной мощности древних компов :)
Надо оставить все красивые алгоритмы в прошлом. Надежнее и быстрее решать проблемы в лоб :)

Какие бы мощности вы не использовали, вам не удастся провести прямую между смежными пикселями ;-)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Дискретные перемещения вдоль прямой
СообщениеДобавлено: 29 апр 2015, 08:06 
Старожил

Зарегистрирован: 06 фев 2011, 15:16
Сообщения: 618
Откуда: Челябинск
El1te писал(а):
На данный момент я думаю над аппроксимацией прямых дискретными перемещениями вдоль двумерной координатной сетки. Итак, примерный алгоритм:

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

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

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

Наконец, считаем наикратчайшее расстояние от оставшихся точек до заданной прямой и выбираем наименьшее значение. В том случае, если расстояния совпадают (например, когда прямая проведена под углом в 45 градусов) выбираем случайным образом. Далее повторяем действия до тех пор, пока не попадаем в точку В.

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

Вроде бы все так и достаточно просто. Не вижу смысла усложнять простые вещи. Можно было бы перевести все это на язык линейной алгебры и многообразий, но проще вряд ли станет.
Это задача была решена в свое время Брезенхамом. Ссылки вам уже дали.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Дискретные перемещения вдоль прямой
СообщениеДобавлено: 29 апр 2015, 10:19 
Старожил
Аватара пользователя

Зарегистрирован: 06 янв 2012, 18:49
Сообщения: 802
Откуда: Новый Уренгой
Bill писал(а):
Это задача была решена в свое время Брезенхамом. Ссылки вам уже дали.


И самое главное!!! что элементарная матиматика! которая сводится не к вычислению координат точек, а лишь к вычислению необходимости посылки импульса драйверам мотора осей.

_________________
selenur.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Дискретные перемещения вдоль прямой
СообщениеДобавлено: 29 апр 2015, 11:18 
Старожил

Зарегистрирован: 20 мар 2010, 17:31
Сообщения: 1394
Откуда: Челябинск
Bill писал(а):
Это задача была решена в свое время Брезенхамом. Ссылки вам уже дали.

Добавлю ссылок...
Долго я впоминал название книжки - "математические основы машинной графики", или "алгоритмические..."
потскал - оказалось, есть и такая, и сякая, и обе - одного автора, Д.Роджерса.
Причем, по моему мнению, "математические основы" как раз более оринтированы на ЧПУ....

Роджерс Д., Адамс Дж Математические основы машинной графики (2001)
Роджерс Д. Алгоритмические основы машинной графики (1989)


Последний раз редактировалось Mikesoft 29 апр 2015, 11:33, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Дискретные перемещения вдоль прямой
СообщениеДобавлено: 29 апр 2015, 11:20 
Старожил

Зарегистрирован: 20 мар 2010, 17:31
Сообщения: 1394
Откуда: Челябинск
selenur писал(а):
И самое главное!!! что элементарная матиматика! которая сводится не к вычислению координат точек, а лишь к вычислению необходимости посылки импульса драйверам мотора осей.

"посылка импульса драйверам моторов" и есть "вычисление координат"


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Дискретные перемещения вдоль прямой
СообщениеДобавлено: 29 апр 2015, 16:35 
Старожил
Аватара пользователя

Зарегистрирован: 06 янв 2012, 18:49
Сообщения: 802
Откуда: Новый Уренгой
Mikesoft писал(а):
selenur писал(а):
И самое главное!!! что элементарная матиматика! которая сводится не к вычислению координат точек, а лишь к вычислению необходимости посылки импульса драйверам мотора осей.

"посылка импульса драйверам моторов" и есть "вычисление координат"


Я про это имел ввиду:

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

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

_________________
selenur.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Дискретные перемещения вдоль прямой
СообщениеДобавлено: 30 апр 2015, 11:33 
Старожил
Аватара пользователя

Зарегистрирован: 19 фев 2015, 17:37
Сообщения: 1604
Откуда: void
Black Warrior писал(а):
Mikesoft писал(а):

Там кстати в алгоритме окружности какая-то ошибка и в результате получается эллипс одна из осей которого на 1 (или 2?) больше другой :)

А вообще, на мой взгляд это категорически неправильный путь. Я бы считал все по честному, в плавучке. Тем более, что надо согласовывать несколько осей, разгон и торможение.


Насчет неправильности пути - вопрос спорный. Я листаю сейчас код grbl'а и там как раз Брезенхам используется. Я думаю, это связано с тем, что все-таки основное преимущество шаговиков - это дискретное перемещение и точное позиционирование. Глупо этим не пользоваться.

P.S. Сегодня еду за станком. :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Дискретные перемещения вдоль прямой
СообщениеДобавлено: 30 апр 2015, 12:04 
Старожил

Зарегистрирован: 20 мар 2010, 17:31
Сообщения: 1394
Откуда: Челябинск
El1te писал(а):
Black Warrior писал(а):
А вообще, на мой взгляд это категорически неправильный путь. Я бы считал все по честному, в плавучке. Тем более, что надо согласовывать несколько осей, разгон и торможение.


Насчет неправильности пути - вопрос спорный. Я листаю сейчас код grbl'а и там как раз Брезенхам используется. Я думаю, это связано с тем, что все-таки основное преимущество шаговиков - это дискретное перемещение и точное позиционирование. Глупо этим не пользоваться.

Вопрос совершенно не спорный. Считать дискретные перемещения "в плавучке", и приводить их к той же дискретке, чтоб получить точно такой же (точнее - этот же) результат, только медленнее и с бОльшей затратой ресурсов есть идиотизм.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Дискретные перемещения вдоль прямой
СообщениеДобавлено: 30 апр 2015, 13:02 
Старожил
Аватара пользователя

Зарегистрирован: 19 фев 2015, 17:37
Сообщения: 1604
Откуда: void
Ну, если использовать для одной заготовки несколько режимов, например, микрошаг 1/1 и 1/16, для трудных мест, то, возможно, проще считать непрерывно и потом проводить дискретное преобразование. Не знаю.
Я думаю сейчас остановить свой выбор все-таки на grbl'е, хотя от необходимости использовать ардуйню меня ломает.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Дискретные перемещения вдоль прямой
СообщениеДобавлено: 30 апр 2015, 13:52 
Старожил
Аватара пользователя

Зарегистрирован: 23 сен 2012, 20:35
Сообщения: 2471
El1te писал(а):
Я думаю сейчас остановить свой выбор все-таки на grbl'е, хотя от необходимости использовать ардуйню меня ломает.

Я бы присмотрелся к SmoothieBoard. Он, во-первых, уже портирован на кортекс (хотя и не самый популярный у нас). Во-вторых, там меньше ограничений, которые накладываются архитектурой МК. В-третих, там реализованы значительно более продвинутые алгоритмы разгона и торможения. Да, есть еще такая штука как TinyG (код вот тут https://github.com/synthetos/TinyG ). Там тоже с алгоритмами разгона и торможения все существенно лучше, чем у grbl: http://makezine.com/2013/09/23/why-your ... s-a-tinyg/


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Дискретные перемещения вдоль прямой
СообщениеДобавлено: 30 апр 2015, 17:57 
Старожил

Зарегистрирован: 20 мар 2010, 17:31
Сообщения: 1394
Откуда: Челябинск
El1te писал(а):
Ну, если использовать для одной заготовки несколько режимов, например, микрошаг 1/1 и 1/16, для трудных мест
удачи вам со внезапным повышением точности в середине хода :-)
Цитата:
то, возможно, проще считать непрерывно и потом проводить дискретное преобразование. Не знаю.

Советую еще предварительно переводить в футы и дюймы, затем считать в них с правающей точкой, а потом опять переводить из имперских в СИ, и уж после этого - дискретизировать... чисто чтоб не скучно было.
Цитата:
Я думаю сейчас остановить свой выбор все-таки на grbl'е, хотя от необходимости использовать ардуйню меня ломает.
Если дуйня обеспечит нормальную работу - почему бы и нет? Хотя имхо лучше что-нибудь посерьезнее для управления разгонными режимами двигателей.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Дискретные перемещения вдоль прямой
СообщениеДобавлено: 03 май 2015, 07:12 
Старожил

Зарегистрирован: 28 дек 2012, 07:17
Сообщения: 517
Не, ну может я немного погорячился с категоричностью неправильного пути :) Просто с прямыми и окружностями по брезенхему я давно уже разобрался и как то более интересно попробовать что то новенькое.
А недавно я ради интереса потестил синусы и косинусы на авр-ке, и вроде получилось около нескольких тысяч синусов в секунду да еще с переводом из градусов в радианы и отрисовкой на дисплее.
Да, а кроме окружностей и прямых надо ведь рисовать и дуги, рассчитывать их сопряжения, а это для станка с ЧПУ наверное основной контур будет.
Т.е. я как то не вижу, на чем тут экономить вычислительную мощщ и для чего. А вот поэкономить человеческое время, быстро прикинуть необходимую точность и т.д. - это я понимаю.
Тем более, что вроде автор рассматривал и STM32.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Дискретные перемещения вдоль прямой
СообщениеДобавлено: 05 май 2015, 13:49 
Старожил
Аватара пользователя

Зарегистрирован: 23 сен 2012, 20:35
Сообщения: 2471
IMHO, в данном случае имеет смысл рассмотреть самый простой вариант - простейший адаптер на LPT + драйверы шаговиков. Этот вариант точно будет работать будет самым простым в установке и настройке. Дальше можно уже изголяться и пилить что-то более продвинутое. Тем более, что ничего не мешает сделать продвинутый контроллер так, что бы он управлял шаговиками ровно через тот же LPT. Заодно и конструкция в целом упростится. Вобщем, "есть слона по кусочку", вместо того, что бы пытаться проглотить его целиком за раз.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Дискретные перемещения вдоль прямой
СообщениеДобавлено: 05 май 2015, 17:04 
Старожил

Зарегистрирован: 20 мар 2010, 17:31
Сообщения: 1394
Откуда: Челябинск
evsi писал(а):
Вобщем, "есть слона по кусочку", вместо того, что бы пытаться проглотить его целиком за раз.

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


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 27 ]  На страницу 1, 2  След.


Часовой пояс: UTC + 5 часов


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB