Страница 1 из 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 - Альтернативная кинематика.

Добавлено: 09 янв 2015, 03:44
PKM
Над gantry лучшие умы бились безрезультатно :)
Поэтому в сто раз интереснее

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

Добавлено: 09 янв 2015, 04:36
Serg
PKM писал(а):Ведь над gantry лучшие умы бились безрезультатно :)
В принципе оно уже работает, осталось победить только хоминг с уточнением по индексу - где-то я там что-то напутал... Взял таймаут, позанимаюсь другими делами, а эта проблема пусть "в фоне" решается... :)

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

Добавлено: 09 янв 2015, 15:11
PKM
Очень любопытно, как сделано.

Разработчики все никак не могут сделать HOME_SYNCHRONISE, это бы много вопросов сняло.

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

Добавлено: 09 янв 2015, 16:13
Serg
PKM писал(а):Разработчики все никак не могут сделать HOME_SYNCHRONISE, это бы много вопросов сняло.
Да вроде ничего сложного, задействовал пин axis.N.home-state. По home-sw работает во всех вариантах.
PKM писал(а):Не могу, объясняй :)
там в начале написано:

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

#define joint_offset(i) (*(__comp_inst->joint_offset[i]))
просто надоело каждый раз по столько много букв писать. :)

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

Добавлено: 09 янв 2015, 17:02
Serg
PKM писал(а):Хорошо, но какой тогда смысл в i? Я предположил, что эта строка внутри цикла находится.
Например если где-то в коде написать
joint_offset(25)
то препроцессор заменит это на
(*(__comp_inst->joint_offset[25]))
Это у define синтаксис такой, в книжках по С это описывается. :hehehe:
PKM писал(а):Меня это и сбило с толку, думаю почему писать кинематику в формате comp? :)
Ну оно и сделано как HAL-компонент, вставляется между axis.N и pid.N/stepgen.N.
Формат comp довольно ограничен по возможностям, поэтому написано на настоящем C.

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

Добавлено: 09 янв 2015, 17:16
PKM
UAVpilot писал(а):Ну оно и сделано как HAL-компонент, вставляется между axis.N и pid.N/stepgen.N.
Ага, так это и не кинематика.
UAVpilot писал(а):gantry кинематика, которая которая использует только одну axis.N для любого количества приводов оси, ну и решает можество других проблем, сопутствующих штатной gantykins.
Поначалу подумал, что вместо gantrykins будет.
Теперь начинает проясняться.

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

Добавлено: 09 янв 2015, 21:08
Serg
PKM писал(а):Поначалу подумал, что вместо gantrykins будет.
В этом месте многого не сделать, слишком ограничены возможности.

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

Добавлено: 15 янв 2015, 00:18
Serg
UAVpilot писал(а):В принципе оно уже работает, осталось победить только хоминг с уточнением по индексу - где-то я там что-то напутал... Взял таймаут, позанимаюсь другими делами, а эта проблема пусть "в фоне" решается... :)
В общем победил я индексы - всё красиво работает, хомится во всевозможных вариантах. Осталось ещё одну полезную фичу приделать и "марафет навести"...
Выглядит как HAL-компонент, который включается между axis.N и несколькими pid.N или stepgen.N.
Компонент поддерживает до 16 осей по 8 моторов в каждой. В принципе это всего-лишь два дефайна в исходниках.
Кино снимать лень, да и не раскроет оно сути, лучше покажу графики процессов хомления:
home.zip
(31.86 КБ) 738 скачиваний

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

Добавлено: 15 янв 2015, 00:32
PKM
Чем эти файлы проще посмотреть?

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

Добавлено: 15 янв 2015, 01:10
Serg
Я полагал, что из названия понятно, что с помощью halscope... :)

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

Добавлено: 15 янв 2015, 01:14
PKM
... а ты попробуй открыть :)

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

Добавлено: 15 янв 2015, 08:59
Serg
Забавно... :idiot:

Тогда вот так:

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

HOME = 5.0
HOME_OFFSET = 1.0
HOME_SEARCH_VEL = -50
HOME_LATCH_VEL = 3
HOME_FINAL_VEL = 10
HOME_USE_INDEX = NO
egantry.home.png (13300 просмотров) <a class='original' href='./download/file.php?id=40565&sid=1c44e7e18c5d0c2e5b9d2492d5505620&mode=view' target=_blank>Загрузить оригинал (131.36 КБ)</a>

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

HOME = 5.0
HOME_OFFSET = 1.0
HOME_SEARCH_VEL = -50
HOME_LATCH_VEL = 3
HOME_FINAL_VEL = 10
HOME_USE_INDEX = YES
egantry.home-index.png (13300 просмотров) <a class='original' href='./download/file.php?id=40566&sid=1c44e7e18c5d0c2e5b9d2492d5505620&mode=view' target=_blank>Загрузить оригинал (126.38 КБ)</a>

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

Добавлено: 15 янв 2015, 12:05
PKM
Ждет пока сработают все датчики и тогда хоум. То самое с индексами. Отлично
Будешь исходники выкладывать?

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

Добавлено: 15 янв 2015, 12:20
Serg
Да, именно так.
Исходники выложу, но там ещё надо доделать коррекцию, чтоб не попадать датчиками/индексами в одинаковое место на осях и выравнивание моторов при активации приводов.

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

Добавлено: 15 янв 2015, 18:51
umerov
У меня похожая задача - не стандартная кинематика с серво с обратной связью.
две сервы на оси Y.

https://github.com/gmoccapy/machinekit/ ... antry.comp
вот компонент как его импользовать? он будет выполняться в реалтайме?

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

Добавлено: 15 янв 2015, 19:27
Serg
Только вот он правильно хомиться не умеет, а при
HOME_USE_INDEX = YES
у него вообще крыша съезжает и утаскивает за собой LinuxCNC.

Собственно я тоже с этого начинал, можно было догадаться по названию пинов на скриншотах. ;) Но в итоге полностью переписал.
Взяться за это пришлось именно из-за сдвоенной оси на сервах. На шаговиках в принципе и штатная gantrykins работает неплохо. Но вот с сервами возникают жестокие засады.
Самая гадкая:
Как правило в портале всегда есть внутренние напряжения, от колебаний температуры, от выравнивания при хомлении и т.п.
Если после хомления (и работы) понадобится выключить станок (по F2) или пришлось нажать E-STOP, то сервы выходят из режима удержания позиции и внутренние напряжения портала приводят к тому, что его края немного сдвигаются друг относительно друга. Т.к. для получения положения обратной связи для всей оси используется фидбэк только одного мотора, то возникает разница между положениями двух моторов. Теперь если попробовать снова включить станок в режиме world, или после включения переключится в world, gantrykins за первый-же сервоцикл изменит заданную позицию второго мотора на текущую позицию первого (согласно его фидбэка) и PID второго мотора отреагирует на это согласно своему предназначению - с фактически максимальными скоростю и ускорением постарается повернуть мотор в заданную позицию... На практике портал улетает куда попало с жутким грохотом. :shock:

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

Добавлено: 15 янв 2015, 19:41
umerov
по пинам там понятно, будет он выполняться в реальном времени?

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

Добавлено: 16 янв 2015, 00:36
Serg
Да, стандартно в сервоцикле.

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

Добавлено: 16 янв 2015, 02:00
PKM
Мне бы такое нужно для всех осей. То есть синхронизированный хоуминг. Посмотрю как у тебя сделано, может идеи придут :) Основа уже есть http://timeguy.com/gitweb?p=linuxcnc.gi ... zed-homing