Страница 4 из 9

LinuxCNC - Альтернативная кинематика.

Добавлено: 10 май 2012, 13:54
Serg
Эта тема предлагается для обсуждения моих решений некоторых вопросов кинематики в LinuxCNC и других, связанных с ними.

На сегодня стоит задача получить рабочее решение для вот этого монстрика: Многосевой станок лазерной резки листа и профиля #1 - нужно управлять количеством моторов (joints), которое пока не под силу штатным средствам LinuxCNC. Ну и скорее всего и для других проектов, которым окажутся тесными возможности штатной кинематики LinuxCNC.

Если появятся желающие присоединиться к работам по этой тематике, то добро пожаловать в тему.
Оставляю за собой узурпаторское право "отселять" обсуждения, выходящие за рамки этой темы. :tongue:

ВНИМАНИЕ!
Все опубликованные ниже разработки предлагаются "AS IS" (как есть), без каких-либо гарантий, в том числе и по сопровождению
Имеющиеся описания ориентированы на тех, кто более-менее разбирается в LinuxCNC и в его HAL в частности, или хотя-бы прочитал и понял документацию.
Считайте это своеобразным порогом вхождения. Если сделать подробное описание "для чайников", то оные не преминут этим воспользоваться и в случае любых непоняток будут задавать вопросы, которые как правило так или иначе освещены в документации. Отвечать на них я не желаю, не из вредности, а из-за отсутствия у меня на это времени....

Extended Gantry Axis Component for LinuxCNC HAL (egantry)

Описание: https://cncdevice.com/devel/eaxis/egantry.txt
Архив: https://cncdevice.com/devel/eaxis/egant ... re3.tar.gz предыдущая версия: https://cncdevice.com/devel/eaxis/egant ... re2.tar.gz
Устанавливается командой

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

sudo halcompile --install egantry.c
Совместим с LinuxCNC версий 2.6.x и выше. Для уточнения проверяйте у компонента axis.N наличие пинов home-state и homed.

BlackBox userspace component for LinuxCNC HAL

Описание: Re: LinuxCNC - Альтернативная кинематика. #76
Компонент: https://cncdevice.com/devel/misc/BlackBox.py

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Начало темы было такое: :)
PKM писал(а):А что за кинематика? Для твоего мега-станка?
gantry кинематика, которая которая использует только одну axis.N для любого количества приводов оси, ну и решает можество других проблем, сопутствующих штатной gantrykins.

Re: LinuxCNC - Альтернативная кинематика.

Добавлено: 05 июн 2015, 08:49
Serg
umerov писал(а):И еще один вопрос - если установить частоту servo-thread вместо 1 мс. => в 0.1 мс. если в этом смысл, сомжет ли пид двигателей отрабатывать траекторию точнее?
Теоретически - да, но на практике сложно найти двигатель, который хоть как-то сможет среагировать на управляющее воздействие даже за 1 мс.

Re: LinuxCNC - Альтернативная кинематика.

Добавлено: 05 июн 2015, 08:55
Predator
UAVpilot, Сергей решил ответить, не прошло и трёх лет :hehehe:

Re: LinuxCNC - Альтернативная кинематика.

Добавлено: 05 июн 2015, 09:02
nkp
Predator писал(а):не прошло и трёх лет
это шапка((

Re: LinuxCNC - Альтернативная кинематика.

Добавлено: 05 июн 2015, 09:03
Predator
nkp писал(а):это шапка
А блин, прикреплённый первый пост чтоли, я и не заметил :)

Re: LinuxCNC - Альтернативная кинематика.

Добавлено: 21 июн 2015, 08:51
nkp
пляски с gantrykins начинаются с переключения режимов ...
egantry ,я так понял, не требует никаких переключений ,емс в данном случае вообще не видит спареных осей...
это плюс...
а какие минусы будут при самом простом использовании: два шаговика на ось,никакого пид и энкодеров???
достаточен ли будет такой минимум:

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

setp stepgen.0.position-scale [AXIS_0]SCALE
setp stepgen.0.steplen 1
setp stepgen.0.stepspace 0
setp stepgen.0.dirhold 40000
setp stepgen.0.dirsetup 40000
setp stepgen.0.maxaccel [AXIS_0]STEPGEN_MAXACCEL

setp stepgen.3.position-scale [AXIS_0]SCALE
setp stepgen.3.steplen 1
setp stepgen.3.stepspace 0
setp stepgen.3.dirhold 40000
setp stepgen.3.dirsetup 40000
setp stepgen.3.maxaccel [AXIS_0]STEPGEN_MAXACCEL

net  Xpos-cmd  axis.0.motor-pos-cmd       => egantry.0.axis.motor-pos-cmd
net  X0pos     egantry.0.joint.00.pos-cmd => stepgen.0.position-cmd
net  X1pos     egantry.0.joint.01.pos-cmd => stepgen.3.position-cmd

net  X0pos-fb  stepgen.0.position-fb        => egantry.0.joint.00.pos-fb
net  X1pos-fb  stepgen.3.position-fb        => egantry.0.joint.01.pos-fb 
net  Xpos-fb   egantry.0.axis.motor-pos-fb  => axis.0.motor-pos-fb

net  Xenable   axis.0.amp-enable-out     => egantry.0.axis.amp-enable  
net  X0enable  egantry.0.joint.00.enable => stepgen.0.enable
net  X1enable  egantry.0.joint.01.enable => stepgen.3.enable

net  x0step <= stepgen.0.step
net  x0dir  <= stepgen.0.dir
net  x1step <= stepgen.3.step
net  x1dir  <= stepgen.3.dir

Re: LinuxCNC - Альтернативная кинематика.

Добавлено: 21 июн 2015, 13:04
Serg
nkp писал(а):egantry ,я так понял, не требует никаких переключений ,емс в данном случае вообще не видит спареных осей...
Да.
nkp писал(а):а какие минусы будут при самом простом использовании: два шаговика на ось,никакого пид и энкодеров???
Да вроде никаких, хотя в реале не пробовал. Нужно просто построить цепочку: axis -> egantry -> stepgen и соединить все одноимённые пины между axis и egantry.

P.S. С egantry разве что нельзя будет приводы поотдельности подвигать.

Re: LinuxCNC - Альтернативная кинематика.

Добавлено: 21 июн 2015, 15:03
nkp
UAVpilot писал(а): P.S. С egantry разве что нельзя будет приводы поотдельности подвигать.
как по мне , так это можно записать только в плюс...

Re: LinuxCNC - Альтернативная кинематика.

Добавлено: 22 июн 2015, 07:36
nkp
ноль по концевикам не получается искать:
(в роли концевиков - кнопки на панели)

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

net homeY pyvcp.home1  axis.1.home-sw-in
net homeZ pyvcp.home2  axis.2.home-sw-in

net homeX0 egantry.0.joint.00.home-sw  pyvcp.home0
net homeX1 egantry.0.joint.01.home-sw  pyvcp.home3
net homeX  egantry.0.axis.home-sw      axis.0.home-sw-in
в ини:

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

HOME_SEARCH_VEL = 1
HOME_LATCH_VEL = 0.50000
HOME_SEQUENCE = 2
может что то не то прописал ?

Re: LinuxCNC - Альтернативная кинематика.

Добавлено: 22 июн 2015, 08:00
Serg
Этого явно мало. Нужно соединить все пины egantry.0.axis.* с axis.0

Re: LinuxCNC - Альтернативная кинематика.

Добавлено: 22 июн 2015, 09:14
nkp
после добавления:

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

net index-enable egantry.0.axis.index-enable   axis.0.index-enable
net amp-fault    egantry.0.axis.amp-fault-out  axis.0.amp-fault-in
net homed        egantry.0.axis.homed          axis.0.homed
net neg-lim      egantry.0.axis.neg-lim-sw     axis.0.neg-lim-sw-in
net pos-lim      egantry.0.axis.pos-lim-sw     axis.0.pos-lim-sw-in
net home-state   egantry.0.axis.home-state     axis.0.home-state 
home работает...
но процедура происходит не так как с gantry...
в gantry каждая ось (из спаренных) ищет дом "самостоятельно" - то есть : поиск
концевика,съезд с него в обратную сторону , и уточнение одна из спаренных осей делает не глядя,что
в это время происходит со второй из осей...
теоретически - при очень большом начальном перекосе такая особенность может вызывать неточность в процедуре HOME...
-----------
тут же вроде это происходит логичней:
ось ,первая доехавшая до концевика , "ждет остальных" , потом только начинает уточнение ...
==========
может в чем то ошибаюсь - ведь выводы сделаны без железа - кнопки pyvcp вместо концевиков...

Re: LinuxCNC - Альтернативная кинематика.

Добавлено: 22 июн 2015, 11:52
Serg
nkp писал(а):net home-state egantry.0.axis.home-state axis.0.home-state
Вот это главное, через это egantry получает инфу о стадиях хомления.
nkp писал(а):ось ,первая доехавшая до концевика , "ждет остальных" , потом только начинает уточнение ...
Да, именно так и работает, по другому просто не получится. :)

Re: LinuxCNC - Альтернативная кинематика.

Добавлено: 03 дек 2015, 01:57
Serg
egantry версия 1.0pre3:

Добавлена возможность ограничить максимальные скорость и ускорение для каждого привода: добавлены пины egantry.N.joint.MM.max_velocity и egantry.N.joint.MM.max_acceleration, по дефолту - без ограничений.

Обновлённые файлы в первом сообщении.

Re: LinuxCNC - Альтернативная кинематика.

Добавлено: 03 дек 2015, 10:21
Nick
UAVpilot писал(а):Добавлена возможность ограничить максимальные скорость и ускорение для каждого привода
А на планировщик траектории это как-то повлияет?

Re: LinuxCNC - Альтернативная кинематика.

Добавлено: 03 дек 2015, 12:28
Serg
Nick писал(а):А на планировщик траектории это как-то повлияет?
Если скорость и ускорение поставить меньше, чем задано для самой оси в ini, то плохо повлияет - following error будет случаться. :)

Эти нововведения задумано использовать вот так:

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

setp x.joint.00.max_acceleration [AXIS_0]MAX_ACCELERATION
setp x.joint.00.max_velocity [AXIS_0]MAX_VELOCITY
setp x.joint.01.max_acceleration [AXIS_0]MAX_ACCELERATION
setp x.joint.01.max_velocity [AXIS_0]MAX_VELOCITY
больше как дополнительную защиту от каких-нибудь глюков в самом egantry или при подаче задания напрямую на компонент.

Re: LinuxCNC - Альтернативная кинематика.

Добавлено: 09 дек 2015, 01:02
Serg
Попутно другим разработкам родился ещё один компонент с говорящим названием: BlackBox.
Компонент записывает состояние всех HAL компонентов и сигналов в файл blackbox.log или с указанным именем.
Запись производится любым из сигналов in0..in7 положительным фронтом, in0-not..in7-not отрицательным фронтом.
Входной сигнал дублируется на соотв. пинах out0..out7-not ПОСЛЕ ЗАПИСИ состояния HAL.
enable - разрешает работу компонента.

Может быть полезен при "разборе полётов", когда что-то произошло и надо найти причину. Например можно активировать при нажатии кнопки E-STOP или по сигналу ошибки приводов.
Сам компонент в начале темы, запускается так:

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

loadusr -W ./BlackBox.py
или так

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

loadusr -W ./BlackBox.py blackbox.txt
сам файл BlackBox.py должен находится в каталоге с конфигурацией станка и иметь права на запуск.

Re: LinuxCNC - Альтернативная кинематика.

Добавлено: 09 дек 2015, 10:44
Nick
А пример готового лога есть?
Или там просто вывод halcmd show?

Re: LinuxCNC - Альтернативная кинематика.

Добавлено: 09 дек 2015, 12:24
Serg
там просто вывод halcmd show, ну и в начале строчка с датой и временем, ибо новые записи туда добавляются.
Наверно надо будет ещё указать по какому пину запись случилась...

Re: LinuxCNC - Альтернативная кинематика.

Добавлено: 10 мар 2016, 15:53
VitalikD
UAVpilot, что произойдет если не сработает один из датчиков на сопряженных осях, будет перекашивать портал до отключения сервы по перегрузке, или можно задать максимальное рассогласование для аварийной остановки?

Re: LinuxCNC - Альтернативная кинематика.

Добавлено: 10 мар 2016, 21:46
Serg
Датчик лимита? Произойдёт то-же самое, что в случае обычной оси - будет перекашивать портал или упираться в мех. ограничитель до отключения сервы по перегрузке.
В принципе можно сделать пин для задания макс. рассогласования. Подумаю на досуге, надо будет повнимательней просчитать поведение до хоминга...
Если надо прямо сейчас, то можно внешнюю логику "навесить", все нужные параметры наружу "светят".

Re: LinuxCNC - Альтернативная кинематика.

Добавлено: 11 мар 2016, 00:34
VitalikD
UAVpilot писал(а):В принципе можно сделать пин для задания макс. рассогласования.
Да, я это и имел в виду. Иначе можно сломать что-нибудь.
UAVpilot писал(а):Если надо прямо сейчас
Нет, спасибо. Есть большой плазморез, но хозяйва еще не решили, стоит ли тратиться на нормальное управление, ибо к механике тоже надо приложить руки, а они там у всех не оттуда. Я на всякий случай решение прикидываю.
Вот еще такой вопрос. На приводах стоят шаговики. Хочу поставить энкодеры на тысячу-две меток, но управлять через них по скорости разрешения маловато - двигатели без редуктора, около 120мм перемещения на оборот. По энкодерам просто останавливаться в случае превышения ошибки. Но хотелось бы иметь возможность выровнять портал нажатием кнопки без езды на датчики и перепривязаться к нулям через счетчики энкодеров. Такое сложно добавить, если понадобится?