EMC2 LinuxCNC и Joystick

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: EMC2 и Joystick

Сообщение nkp »

shvv писал(а): визуализация присутствует только в симе, в "нормальном" станке её нет
а в чем проблема??
вот создал на скорую руку конфиг
Выделение(041).jpg (4690 просмотров) <a class='original' href='./download/file.php?id=8779&sid=a45e1385cc41de9a42d28b1816064b25&mode=view' target=_blank>Загрузить оригинал (92.6 КБ)</a>
FOAM.rar
(4.81 КБ) 541 скачивание
вроде бы все работает
в чем подвох???? :thinking:
Аватара пользователя
verser
Мастер
Сообщения: 1875
Зарегистрирован: 21 июл 2013, 22:28
Репутация: 1275
Настоящее имя: Сергей
Откуда: Тбилиси
Контактная информация:

Re: EMC2 LinuxCNC и Joystick

Сообщение verser »

Есть такой hal файл для управления станком джойстиком Logitech Freedom 2.4
joypad.hal
(21.25 КБ) 1163 скачивания
Работает неплохо, но хотелось бы улучшить пару моментов:
-максимальная скорость перемещений задается жестко в joypad.hal, а было бы удобнее её привязать к той что выставляется слайдером во вкладке "Ручное управление [F3]";
-после запуска программы LinuxCNC для корректной работы (чтобы оси самопроизвольно не стартовали при включении станка) надо перед включением станка пошевелить на джойстике оси X и Y (типа разбудить что ли) а уже после этого можно включать станок. Как то это неудобно.
Думаю если это дружно подправить - получим идеальное решение для любого джойстика(только надо пины под свой джойстик переназначить).
Последний раз редактировалось verser 22 июл 2013, 22:51, всего редактировалось 1 раз.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: EMC2 LinuxCNC и Joystick

Сообщение Nick »

verser писал(а):максимальная скорость перемещений задается жестко в joypad.hal, а было бы удобнее её привязать к той что выставляется слайдером во вкладке
Это странно, я бы вообще эту скорость завязал на какую-нибудь дополнительную ось... На какой-нибудь thrust....
verser писал(а):-после запуска программы LinuxCNC для корректной работы (чтобы оси самопроизвольно не стартовали при включении станка) надо перед включением станка пошевелить на джойстике оси X и Y (типа разбудить что ли) а уже после этого можно включать станок. Как то это неудобно
Ишь ты оно как, я правда не совсем понял, где это задается... а не может это сам джойстик "засыпать"?
Или оно все вот тут делается:

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

#------------------------------------------------------
# Set up X axis one-shot
#------------------------------------------------------
# To set up the jogs as a one-shot, we have to build a small Rube Goldberg machine.
# A window comparator will tell you if there IS a trigger, not which direction the 
# pulse should go. That's where the invert output comes in. 

# If the second comparator shows that we're in the lower half, then we offset the 
# inverse of the pulse wave to get a negative pulse. We also use that second comparator
# to trigger the mux to determine whether to send a positive of negative pulse.

# All these conversions are required because the required components will only work with

# certain types of inputs. Edge detection sends out a bit, and a mux requires a float.
net Xwindow wcomp.0.in => deadzone.3.out
net Xwindow wcomp.1.in => deadzone.3.out
net XwindowInv not.0.in => wcomp.0.out
net Xedge edge.0.in => not.0.out
net Xupconv1 conv-bit-s32.0.in => edge.0.out
net Xupconv2 conv-s32-float.0.in => conv-bit-s32.0.out

net Xupconvinv1 conv-bit-s32.1.in => edge.0.out-invert
net Xupconvinv2 conv-s32-float.2.in => conv-bit-s32.1.out
net Xupconvinv3 offset.0.in => conv-s32-float.2.out

net Xjogleft mux2.3.in0 => conv-s32-float.0.out
net Xjogright mux2.3.in1 => offset.0.out
net XjogDirection mux2.3.sel => wcomp.1.out
net Xjoglink mux2.0.in1 => mux2.3.out
#At this point, mux2.0 has the one-shot Xpulse as one of the inputs. 

Когда я думал о том, чтобы использовать джойстик, я хотел на гашетку завязать enable от перемещений, чтобы от случайного задевания джойстика станок не начал куда-нибудь ломиться :)


ЗЫ вообще очень красиво вес конфиг написан :good:, где ты такой нашел?
Аватара пользователя
verser
Мастер
Сообщения: 1875
Зарегистрирован: 21 июл 2013, 22:28
Репутация: 1275
Настоящее имя: Сергей
Откуда: Тбилиси
Контактная информация:

Re: EMC2 LinuxCNC и Joystick

Сообщение verser »

Здесь взял:
http://wiki.linuxcnc.org/cgi-bin/wiki.p ... NC_Machine
Внес минимальные исправления под Freedom:
мертвые зоны,
назначил пины "под себя".
Максимальная скорость при управлении джойстиком у меня получается 959мм/мин и выше пока никак не поднимается.
Это при том что в LinuxCNC у меня стоит максимальная скорость при ручном управлении больше 2000мм/мин.
Сейчас постараюсь с этим моментом разобраться.

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

Re: EMC2 LinuxCNC и Joystick

Сообщение Nick »

verser писал(а):Максимальная скорость при управлении джойстиком у меня получается 959мм/мин и выше даже при увеличении коэф mux2.6.in0 не поднимается.
Странно...
Может все дело в encoder-ах? Кстати, для чего там такая хитрая система с mux.out => sim-encoder => encoder => jog.counts ??? Есть же jog по скорости...
Аватара пользователя
verser
Мастер
Сообщения: 1875
Зарегистрирован: 21 июл 2013, 22:28
Репутация: 1275
Настоящее имя: Сергей
Откуда: Тбилиси
Контактная информация:

Re: EMC2 LinuxCNC и Joystick

Сообщение verser »

Nick писал(а):Кстати, для чего там такая хитрая система с mux.out => sim-encoder => encoder => jog.counts ??? Есть же jog по скорости...
Так реализована одним махом возможность при зажатой кнопке base (для моего джойстика например) вместо плавного перемещения делать 1 шаг либо на расстояние mux2.6.in0(если выбрано "быстрое" перемещение кнопкой thumb2) или на расстояние mux2.6.in1(если было выбрано "медленное" перемещение кнопкой top).
mux2.6.in0 и mux2.6.in1 лучше всего сделать = 0.1 и 0.01 соответственно - красиво шагает тогда, ровненько по метрической шкале.
Правда максимальная скорость вообще до 750 мм/мин ограничивается. Думаю пока.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: EMC2 LinuxCNC и Joystick

Сообщение Nick »

Ишь как хитро замутили :).
А если попробовать сделать через integ и mux в котором будет либо oneshot либо множитель по скорости и все это в jog-position?

Что-то нравится мне последнее время этот integ, так и хочется его везде засунуть :)
Аватара пользователя
verser
Мастер
Сообщения: 1875
Зарегистрирован: 21 июл 2013, 22:28
Репутация: 1275
Настоящее имя: Сергей
Откуда: Тбилиси
Контактная информация:

Re: EMC2 LinuxCNC и Joystick

Сообщение verser »

Подкорректировал несколько глюков
(в режиме джойстика под кодовым названием "step" ;) оси X и Y двигались только в одном направлении, максимальная скорость теперь деиствительно максимальная)
joypad.hal
(21.25 КБ) 1169 скачиваний
Но главные позиции пока не решены
verser писал(а):Работает неплохо, но хотелось бы улучшить пару моментов:-максимальная скорость перемещений задается жестко в joypad.hal, а было бы удобнее её привязать к той что выставляется слайдером во вкладке "Ручное управление [F3]";-после запуска программы LinuxCNC для корректной работы (чтобы оси самопроизвольно не стартовали при включении станка) надо перед включением станка пошевелить на джойстике оси X и Y (типа разбудить что ли) а уже после этого можно включать станок. Как то это неудобно.Думаю если это дружно подправить - получим идеальное решение для любого джойстика(только надо пины под свой джойстик переназначить)

Попробую подправить "выход из сна" джойстика при запуске LinuxCNC.

Скажу что чертовски удобно иметь джойстик рядом со станком, и с тем функционалом, который этот joypad.hal подключает, джойстик уже не "баловство" , а скорее - "must have".
Последний раз редактировалось verser 22 июл 2013, 18:41, всего редактировалось 1 раз.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: EMC2 LinuxCNC и Joystick

Сообщение Nick »

Так, но максимальная скорость решена?

Т.е. осталось решить проблему зависания?

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

ЗЫ, вот что не удобно в этом конфиге - стрелки сигналов в обратную сторону нарисованы:
вот это
net Xupconvinv3 offset.0.in => conv-s32-float.2.out
вот так понятнее выглядит:
net Xupconvinv3 offset.0.in <= conv-s32-float.2.out
или так
net Xupconvinv3 => offset.0.in <= conv-s32-float.2.out
или вообще вот так:
net Xupconvinv3 <= conv-s32-float.2.out
net Xupconvinv3 => offset.0.in
Аватара пользователя
verser
Мастер
Сообщения: 1875
Зарегистрирован: 21 июл 2013, 22:28
Репутация: 1275
Настоящее имя: Сергей
Откуда: Тбилиси
Контактная информация:

Re: EMC2 LinuxCNC и Joystick

Сообщение verser »

Да, подправил параметры sim.encoder , максимальная скорость теперь задается коректно, в зависимости от настроек станка, но не меняется в среде LinuxCNC.

Думаю что спящий джойстик отдает в LinuxCNC (в момент включения станка) вместо нулей что-то...
Буду копать в этом направлении.
Последний раз редактировалось verser 22 июл 2013, 19:07, всего редактировалось 1 раз.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: EMC2 LinuxCNC и Joystick

Сообщение Nick »

Можно попробовать покопать в сторону джойстика, убрать у него спящий режим, или как я раньше писал добавить триггер на нажатие гашетки, тогда наверняка и проблема с пробуждением отпадет, и не будет лишних движений.
Аватара пользователя
verser
Мастер
Сообщения: 1875
Зарегистрирован: 21 июл 2013, 22:28
Репутация: 1275
Настоящее имя: Сергей
Откуда: Тбилиси
Контактная информация:

Re: EMC2 LinuxCNC и Joystick

Сообщение verser »

Мне понравилась идея с гашеткой.

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

Re: EMC2 LinuxCNC и Joystick

Сообщение Nick »

Ну тогда гашетку заводим на sim-encoder.X.enable, или что-то еще надо будет?
Аватара пользователя
verser
Мастер
Сообщения: 1875
Зарегистрирован: 21 июл 2013, 22:28
Репутация: 1275
Настоящее имя: Сергей
Откуда: Тбилиси
Контактная информация:

Re: EMC2 LinuxCNC и Joystick

Сообщение verser »

Происходит так:

В нормальном положении, когда станок корректно включен, джойстик имеет нулевое положение (скажем по оси X) input.0.abs-x-counts=511, заметим это не ноль, а середина между 0 и 1023.
Теперь если не выходя из LinuxCNC просто выключить станок, подождать чтобы уснул джойстик, снова включить станок - всё отлично работает не смотря на спящий джойстик, оси стоят на месте и ждут команды от джойстика, input.0.abs-x-counts=511.
А вот если выйти из программы LinuxCNC и потом опять зайти, имеем input.0.abs-x-counts=0 !!! Включаем станок, и он понимает это так что типа джойстик наклонили до упора влево и крутит соотв. ось X на уменьшение. До тех пор пока не пошевелим джойстиком ось Х. Как только шевельнули - значение 511 прописывается в input.0.abs-x-counts.
То же и с остальными осями.
Вывод - при запуске LinuxCNC (или станка из LinuxCNC) надо первым делом как-то инициализировать следующие пины
input.0.abs-x-counts=511
input.0.abs-y-counts=511
input.0.abs-rz-counts=127
input.0.abs-x-position=0,000977 (не ноль чтобы избежать деление на 0 я так думаю)
input.0.abs-y-position=0,000977
input.0.abs-rz-position=0,00392
Кто знает как?
Последний раз редактировалось verser 22 июл 2013, 21:15, всего редактировалось 1 раз.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: EMC2 LinuxCNC и Joystick

Сообщение Nick »

verser писал(а):input.0.abs-rz-counts=127
А если в самом начале написать setp input.0.abs-rz-counts? хотя наверняка не поможет. Скорее всего надо это смотреть в компоненте input....

Может наоборот надо что-то дополнительное при выходе сбрасывать?
verser писал(а):(не ноль чтобы избежать деление на 0 я так думаю)
Там вроде деления на position быть не должно... Скорее всего оно меняется согласно counts...
Аватара пользователя
verser
Мастер
Сообщения: 1875
Зарегистрирован: 21 июл 2013, 22:28
Репутация: 1275
Настоящее имя: Сергей
Откуда: Тбилиси
Контактная информация:

Re: EMC2 LinuxCNC и Joystick

Сообщение verser »

Nick писал(а):Там вроде деления на position быть не должно... Скорее всего оно меняется согласно counts...
Да, можно сначала только counts проинициировать.
Аватара пользователя
verser
Мастер
Сообщения: 1875
Зарегистрирован: 21 июл 2013, 22:28
Репутация: 1275
Настоящее имя: Сергей
Откуда: Тбилиси
Контактная информация:

Re: EMC2 LinuxCNC и Joystick

Сообщение verser »

Поставил на "гашетку" непрерывное перемещение если она зажата и step - если не зажата.
Заодно получилось что при первом запуске станок самопроизвольно не крутит оси
(но если потом не пошевелить джойстиком оси Х-У а сразу нажать гашетку то проблема "0 vs 511" проявляется,.. это уже менее опасно и можно работать, больше пока не располагаю временем копнуть глубже поэтому оставляю так. Призываю сообщество к помощи в этом вопросе)
Спасибо Nick'у за идею с гашеткой.
joypad.hal
(21.44 КБ) 1152 скачивания
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: EMC2 LinuxCNC и Joystick

Сообщение Nick »

По идее вот тут устанавливается значение осей abs-...

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

 163         for a in self.abs_items:
 164             value = self.get(a + "-counts")
 165             scale = self.get(a + "-scale") or 1
 166             offset = self.get(a + "-offset")
 167             position = (value - offset) / scale
 168             self.set(a + "-position", position)
 169             # Use .01 because my Joystick isn't exactly zero at rest. maybe should be a parameter?
 170             self.set(a + "-is-neg", (position < -.01) )
 171             self.set(a + "-is-pos", (position >  .01) )
http://git.linuxcnc.org/gitweb?p=linuxc ... 3b41a#l163

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

Re: EMC2 LinuxCNC и Joystick

Сообщение Nick »

И еще есть: в
class HalInputDevice:
def __init__(self, comp, idx, name, parts='KRAL'):
...
98 center = (absinfo.minimum + absinfo.maximum)/2.
...
104 self.set(name + "-offset", center)
Аватара пользователя
verser
Мастер
Сообщения: 1875
Зарегистрирован: 21 июл 2013, 22:28
Репутация: 1275
Настоящее имя: Сергей
Откуда: Тбилиси
Контактная информация:

Re: EMC2 LinuxCNC и Joystick

Сообщение verser »

Nick писал(а):Может надо offset проинициировать в hal?
Как ни странно но offset при первом старте =511, с ним все в порядке, scale тоже = 511, (имеют тип IN)
counts и position имеют тип OUT - не знаю можно ли вообще тип OUT инициализировать.
Вот эта servo-thread в строке№471 joypad.hal вызывает самопроизвольный старт осей
addf sim-encoder.update-speed servo-thread
Ответить

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