JoyHandle - компонент для построения нелинейного джойстика.

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.
Аватара пользователя
torvn77
Мастер
Сообщения: 2442
Зарегистрирован: 02 июн 2012, 22:12
Репутация: 215
Откуда: Россия,Санкт-Петербург
Контактная информация:

JoyHandle - компонент для построения нелинейного джойстика.

Сообщение torvn77 »

Тема сделана для обсуждения компонента joyhandle
http://www.linuxcnc.org/docs/html/man/m ... dle.9.html
Последний раз редактировалось torvn77 03 ноя 2014, 01:34, всего редактировалось 1 раз.
Аватара пользователя
torvn77
Мастер
Сообщения: 2442
Зарегистрирован: 02 июн 2012, 22:12
Репутация: 215
Откуда: Россия,Санкт-Петербург
Контактная информация:

Re: JoyHandle - компонент для построения нелинейного джойсти

Сообщение torvn77 »

Сделан этот компонент не совсем рационально
  • Нет входа joyhandle.N.block для блокировки работы джойстика.
    Из-за отсутствия этого пина приходится городить огород с обнулением пина halui.jog-speed при отпускании клавиши "Разблокировка" на джойстике.
  • По моему замыслу аналоговые оси отвечают за точное позиционирование на низких скоростях,а кнопки Left/Right/Up/Down отвечают за быстрое перемещение.
    Логично это сделать подмешиванием input.N.abs-hat0y-position в joyhandle.N.out через joyhandle.N.offset
    Но тут я в LinuxCNC 2.7 столкнулся с новшеством,которое по логике следовало ожидать:
    Пробрасывать сигналы на вход типа "параметр" нельзя.
    Может добавите пин-другой для подмешивания сигнала?
  • И хорошо бы аналоговое и continius'ное движение с джойстика переключать логическими пинами
    joyhandle..N.exact-jog-enable и joyhandle.N.rapid-jog-enable для того,чтобы на джойстике их можно было развести на разные кнопки,что я пока не пробовал,но думаю что будет удобным.
    (Напряжение в кисти руки может привести к операторским ошибкам)
  • Сделать пин joyhandle.N.minimal_speed который будет задавать минимальный |модуль| выходного значения.
    От пина joyhandle.N.offset отличатся будет тем,что для положительных значении будет к ним прибавляться,а для отрицательных значений убавляться.
    Например скорости менее 16 мм/мин в моём понимании при ручной установке нуля неоправданно медлительны.
    Вот пусть изменение пина joyhandle.N.out с него и начинается.
  • Может чтобы не городить кучу пинов слить экземпляры в один четырёхканальный комплекс?
    Хотя черт знает,может есть джойстики с 5-7 осями.
Пока вроде всё
Update:
Ещё хорошо бы для кнопок сделать компонент вот с такой логикой работы:

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

net gamepad_func_button_1 <= input.0.btn-joystick 
net gamepad_func_button_2 <= input.0.btn-thumb 
net gamepad_func_button_3 <= input.0.btn-thumb2
net gamepad_func_button_4 <= input.0.btn-top 
net gamepad_func_button_5 <= input.0.btn-top2
#net gamepad_func_button_6 <= input.0.btn-pinkie
net gamepad_func_button_7 <= input.0.btn-base 
#net gamepad_func_button_8 <= input.0.btn-base2 
net gamepad_func_button_9 <= input.0.btn-base3 
net gamepad_func_button_10 <= input.0.btn-base4
net gamepad_func_button_11 <= input.0.btn-base5
net gamepad_func_button_12 <= input.0.btn-base6 

#----------------
# Нажатие на клавишу включает аналоговый режим перемещения
net gamepad_analog_jog-enable   <= input.0.btn-base2
#Нажатие на клавишу включает режим перемещения с постоянной скоростью
net gamepad_continue_jog-enable <= input.0.btn-pinkie

loadrt not count=2
addf not.0 servo-thread
addf not.1 servo-thread

net gamepad_analog_jog-enable       => not.0.in
net gamepad_analog_jog-enable-not   <= not.0.out
net gamepad_continue_jog-enable     => not.1.in
net gamepad_continue_jog-enable-not <= not.1.out

loadrt and2 count=26
addf and2.0 servo-thread
addf and2.1 servo-thread
addf and2.2 servo-thread
addf and2.3 servo-thread
addf and2.4 servo-thread
addf and2.5 servo-thread
addf and2.6 servo-thread
addf and2.7 servo-thread
addf and2.8 servo-thread
addf and2.9 servo-thread
addf and2.10 servo-thread
addf and2.11 servo-thread
addf and2.12 servo-thread
addf and2.13 servo-thread
addf and2.14 servo-thread
addf and2.15 servo-thread
addf and2.16 servo-thread
addf and2.17 servo-thread
addf and2.18 servo-thread
addf and2.19 servo-thread
addf and2.20 servo-thread
addf and2.21 servo-thread
addf and2.22 servo-thread
addf and2.23 servo-thread
addf and2.24 servo-thread
addf and2.25 servo-thread
net gamepad_analog_jog-enable        => and2.0.in0
net gamepad_continue_jog-enable-not  => and2.0.in1
net gamepad_sel_button_mode_analog   <= and2.0.out
net gamepad_continue_jog-enable      => and2.25.in0
net gamepad_analog_jog-enable-not    => and2.25.in1
net gamepad_sel_button_mode_continue <= and2.25.out

#----------------Button 1-------
#
net gamepad_func_button_1 => and2.1.in0
net gamepad_sel_button_mode_analog => and2.1.in1
#Клавиша 1 геймпада будет интерпретирована как функция активируемая сигналом gamepad_func_button_1-analog-mode
net gamepad_func_button_1-analog-mode <= and2.1.out

net gamepad_func_button_1 => and2.2.in0
net gamepad_sel_button_mode_continue => and2.2.in1
net gamepad_func_button_1-continue_mode <= and2.2.out
#Клавиша 1 геймпада будет интерпретирована как функция активируемая сигналом gamepad_func_button_1-continue-mode
#----------------Button 2-------
net gamepad_func_button_2 => and2.3.in0
net gamepad_sel_button_mode_analog => and2.3.in1
net gamepad_func_button_2-analog-mode <= and2.3.out

net gamepad_func_button_2 => and2.4.in0
net gamepad_sel_button_mode_continue => and2.4.in1
net gamepad_func_button_2-continue_mode <= and2.4.out

#----------------Button 3-------
net gamepad_func_button_3 => and2.5.in0
net gamepad_sel_button_mode_analog => and2.5.in1
net gamepad_func_button_3-analog-mode <= and2.5.out

net gamepad_func_button_3 => and2.6.in0
net gamepad_sel_button_mode_continue => and2.6.in1
net gamepad_func_button_3-continue_mode <= and2.6.out

#----------------Button 4-------
net gamepad_func_button_4 => and2.7.in0
net gamepad_sel_button_mode_analog => and2.7.in1
net gamepad_func_button_4-analog-mode <= and2.7.out

net gamepad_func_button_4 => and2.8.in0
net gamepad_sel_button_mode_continue => and2.8.in1
net gamepad_func_button_4-continue_mode <= and2.8.out

#----------------Button 5-------
net gamepad_func_button_5 => and2.9.in0
net gamepad_sel_button_mode_analog => and2.9.in1
net gamepad_func_button_5-analog-mode <= and2.9.out

net gamepad_func_button_5 => and2.10.in0
net gamepad_sel_button_mode_continue => and2.10.in1
net gamepad_func_button_5-continue_mode <= and2.10.out

#----------------Button 6-------
net gamepad_func_button_6 => and2.11.in0
net gamepad_sel_button_mode_analog => and2.11.in1
net gamepad_func_button_6-analog-mode <= and2.11.out

net gamepad_func_button_6 => and2.12.in0
net gamepad_sel_button_mode_continue => and2.12.in1
net gamepad_func_button_6-continue_mode <= and2.12.out

#----------------Button 7-------
net gamepad_func_button_7 => and2.13.in0
net gamepad_sel_button_mode_analog => and2.13.in1
net gamepad_func_button_7-analog-mode <= and2.13.out

net gamepad_func_button_7 => and2.14.in0
net gamepad_sel_button_mode_continue => and2.14.in1
net gamepad_func_button_7-continue_mode <= and2.14.out

#----------------Button 8-------
net gamepad_func_button_8 => and2.15.in0
net gamepad_sel_button_mode_analog => and2.15.in1
net gamepad_func_button_8-analog-mode <= and2.15.out

net gamepad_func_button_8 => and2.16.in0
net gamepad_sel_button_mode_continue => and2.16.in1
net gamepad_func_button_8-continue_mode <= and2.16.out

#----------------Button 9-------
net gamepad_func_button_9 => and2.17.in0
net gamepad_sel_button_mode_analog => and2.17.in1
net gamepad_func_button_9-analog-mode <= and2.17.out

net gamepad_func_button_9 => and2.18.in0
net gamepad_sel_button_mode_continue => and2.18.in1
net gamepad_func_button_9-continue_mode <= and2.18.out

#----------------Button 10-------
net gamepad_func_button_10 => and2.19.in0
net gamepad_sel_button_mode_analog => and2.19.in1
net gamepad_func_button_10-analog-mode <= and2.19.out

net gamepad_func_button_10 => and2.20.in0
net gamepad_sel_button_mode_continue => and2.20.in1
net gamepad_func_button_10-continue_mode <= and2.20.out

#----------------Button 11-------
net gamepad_func_button_11 => and2.21.in0
net gamepad_sel_button_mode_analog => and2.21.in1
net gamepad_func_button_11-analog-mode <= and2.21.out

net gamepad_func_button_11 => and2.22.in0
net gamepad_sel_button_mode_continue => and2.22.in1
net gamepad_func_button_11-continue_mode <= and2.22.out

#----------------Button 12-------
net gamepad_func_button_12 => and2.23.in0
net gamepad_sel_button_mode_analog => and2.23.in1
net gamepad_func_button_12-analog-mode <= and2.23.out

net gamepad_func_button_12 => and2.24.in0
net gamepad_sel_button_mode_continue => and2.24.in1
net gamepad_func_button_12-continue_mode <= and2.24.out
#----------------
Пример приёмников сигналов gamepad_func_button_N-analog-mode и gamepad_func_button_N-continue_mode:

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

#----------Function Buttons------
net gamepad_func_button_1-continue_mode => halui.program.pause
net gamepad_func_button_1-analog-mode   => halui.mdi-command-00
net gamepad_func_button_2-continue_mode => halui.program.step
net gamepad_func_button_2-analog-mode   => halui.mdi-command-01
net gamepad_func_button_3-analog-mode   => halui.mdi-command-02
net gamepad_func_button_4-continue_mode => halui.program.resume
net gamepad_func_button_4-analog-mode   => halui.mdi-command-03
И их секция ini

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

[HALUI]
MDI_COMMAND = G10 L20 P1 X0
MDI_COMMAND = G10 L20 P1 Y0
MDI_COMMAND = G10 L20 P1 Z0
MDI_COMMAND = G10 L20 P1 A0
Последний раз редактировалось torvn77 03 ноя 2014, 21:28, всего редактировалось 8 раз.
Аватара пользователя
verser
Мастер
Сообщения: 1883
Зарегистрирован: 21 июл 2013, 22:28
Репутация: 1278
Настоящее имя: Сергей
Откуда: Тбилиси
Контактная информация:

Re: JoyHandle - компонент для построения нелинейного джойсти

Сообщение verser »

Название JOYHANDLE может ввести в заблуждение, что это какой-то многофункциональный компонент. На самом деле пока у компонента одна и очень конкретная задача - сделать реакцию на отклонение рукоятки джойстика (или регулятора какого-нибудь) квадратично зависимой от отклонения (вместо линейно зависимой по умолчанию). Не стоит ожидать от него других "чудес".
Аватара пользователя
torvn77
Мастер
Сообщения: 2442
Зарегистрирован: 02 июн 2012, 22:12
Репутация: 215
Откуда: Россия,Санкт-Петербург
Контактная информация:

Re: JoyHandle - компонент для построения нелинейного джойсти

Сообщение torvn77 »

Пусть так,но ведь то что я попросил за исключением последнего пункта об объединении в один модуль вещи простые.
Не ужели их так сложно добавить?
Аватара пользователя
torvn77
Мастер
Сообщения: 2442
Зарегистрирован: 02 июн 2012, 22:12
Репутация: 215
Откуда: Россия,Санкт-Петербург
Контактная информация:

Re: JoyHandle - компонент для построения нелинейного джойсти

Сообщение torvn77 »

Текущии конфиг в стабильном состоянии
Подключение через команду source Gamepad-devl/Gamepad.hal которую надо поместить в ваш hal файл
Подключение конфига к джойстика к вашему производится через редактирование файла Halui.hal
Параметрические настройки разбросаны по конфигу.
:attention: Осторожно!Скорость быстрого перемещения в конфиге 130 мм/сек!
Gamepad-devl.tar.gz
(2.97 КБ) 866 скачиваний
Архив с полным конфигом машины:
:attention: Осторожно!Скорость быстрого перемещения в конфиге 130 мм/сек!
mill-5i25-7i76.tar.gz
(6.36 КБ) 906 скачиваний
Последний раз редактировалось torvn77 03 ноя 2014, 23:06, всего редактировалось 1 раз.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: JoyHandle - компонент для построения нелинейного джойсти

Сообщение Serg »

torvn77 писал(а):Пусть так,но ведь то что я попросил за исключением последнего пункта об объединении в один модуль вещи простые.
Не ужели их так сложно добавить?
Совсем не сложно. Просто, берёшь и добавляешь. :)
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
torvn77
Мастер
Сообщения: 2442
Зарегистрирован: 02 июн 2012, 22:12
Репутация: 215
Откуда: Россия,Санкт-Петербург
Контактная информация:

Re: JoyHandle - компонент для построения нелинейного джойсти

Сообщение torvn77 »

775969879.gif
775969879.gif (29.88 КБ) 5212 просмотров
Я этот конфиг за полтора дня написал.
Хочу чтобы вы сделали такой компонент и добавили в релиз 2.7
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: JoyHandle - компонент для построения нелинейного джойсти

Сообщение Serg »

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

Re: JoyHandle - компонент для построения нелинейного джойсти

Сообщение Nick »

torvn77 писал(а):Нет входа joyhandle.N.block для блокировки работы джойстика.
Из-за отсутствия этого пина приходится городить огород с обнулением пина halui.jog-speed при отпускании клавиши "Разблокировка" на джойстике.
Это лучше делать через axis.N.jog-enable
axis.N.jog-enable IN BIT
When TRUE (and in manual mode), any change to "jog-counts" will result in motion. When false, "jog-counts" is ignored.
torvn77 писал(а):Логично это сделать подмешиванием input.N.abs-hat0y-position в joyhandle.N.out через joyhandle.N.offset
Что такое input.N.abs-hat0y-position?
torvn77 писал(а):Сделать пин joyhandle.N.minimal_speed который будет задавать минимальный |модуль| выходного значения.
От пина joyhandle.N.offset отличатся будет тем,что для положительных значении будет к ним прибавляться,а для отрицательных значений убавляться.
Например скорости менее 16 мм/мин в моём понимании при ручной установке нуля неоправданно медлительны.
Вот пусть изменение пина joyhandle.N.out с него и начинается.
Там в формуле все уже предусмотренно. Мнимальная скорость это offset, также есть встроенный deadband.
verser писал(а):Название JOYHANDLE может ввести в заблуждение, что это какой-то многофункциональный компонент. На самом деле пока у компонента одна и очень конкретная задача - сделать реакцию на отклонение рукоятки джойстика (или регулятора какого-нибудь) квадратично зависимой от отклонения (вместо линейно зависимой по умолчанию). Не стоит ожидать от него других "чудес".
Не только квадратично, там хитрая формула ;).
y = (scale * (a*x^power + b*x)) + offset
И еще есть всякие deadband и прочее.
Аватара пользователя
Алексс
Почётный участник
Почётный участник
Сообщения: 2210
Зарегистрирован: 20 июл 2012, 15:49
Репутация: 266
Заслуга: IQ32
Настоящее имя: Алексей
Откуда: Прага
Контактная информация:

Re: JoyHandle - компонент для построения нелинейного джойсти

Сообщение Алексс »

torvn77 писал(а):сделать подмешиванием
sum2/mult2/mux2
torvn77 писал(а):отличатся будет тем,что для положительных значении будет к ним прибавляться,а для отрицательных значений убавляться
достаточно посмотреть в код компонента, чтобы понять, что offset имеет тот-же знак что и входящее значение.
torvn77 писал(а):Может чтобы не городить кучу пинов слить экземпляры в один четырёхканальный комплекс?
вся прелесть linuxcnc в том, что из простых компонентов можно сложить как угодно сложную систему.
Каждая собака, бегущая на поводке впереди хозяина, думает, что ведет его за собой.
Аватара пользователя
torvn77
Мастер
Сообщения: 2442
Зарегистрирован: 02 июн 2012, 22:12
Репутация: 215
Откуда: Россия,Санкт-Петербург
Контактная информация:

Re: JoyHandle - компонент для построения нелинейного джойсти

Сообщение torvn77 »

Nick писал(а):Что такое input.N.abs-hat0y-position?
Это пин копонента hal_input.1,который является "драйвером джойстика" и выдающий или нуль,или положительное или отрицательное значение пина
Опс,а вдокументации пина нет.
А у меня вот в halshow такой пин есть.
В общем на пине input.N.abs-hat0y-position появляется значение пина input.0.abs-hat0x-scale помноженное на вектор соответствующий
цифровым клавишам вперёд/назад/вправо/влево.
Аватара пользователя
torvn77
Мастер
Сообщения: 2442
Зарегистрирован: 02 июн 2012, 22:12
Репутация: 215
Откуда: Россия,Санкт-Петербург
Контактная информация:

Re: JoyHandle - компонент для построения нелинейного джойсти

Сообщение torvn77 »

Сообщение удвоилось,лишнее удалил.
Последний раз редактировалось torvn77 05 ноя 2014, 18:24, всего редактировалось 1 раз.
Аватара пользователя
torvn77
Мастер
Сообщения: 2442
Зарегистрирован: 02 июн 2012, 22:12
Репутация: 215
Откуда: Россия,Санкт-Петербург
Контактная информация:

Re: JoyHandle - компонент для построения нелинейного джойсти

Сообщение torvn77 »

Алексс писал(а): сделать подмешиванием
sum2/mult2/mux2
Сначала в одном конфиге,потом в соседнем.В результате у меня путаница,
а начинающему пользователю написанные мной модули вообще будет не подключить к своему конфигу.
Хватит того что я для комутации кнопок 26 экземпляров and2 в конфиг запихнул.
А ещё скромные два not и один mux4.И вот придёт с винды новичёк и будет это вместо баранов на ночь пересчитывать.
возможности то грузить один тип элемента по нескольку раз нету и не будет.
Алексс писал(а):достаточно посмотреть в код компонента
Скажем так,я с кодингом LinuxCNC соотношусь примерно так же,как сисадмин сайта с разработкой вебсервера по верх которого этот сайт работает.
Аватара пользователя
torvn77
Мастер
Сообщения: 2442
Зарегистрирован: 02 июн 2012, 22:12
Репутация: 215
Откуда: Россия,Санкт-Петербург
Контактная информация:

Re: JoyHandle - компонент для построения нелинейного джойсти

Сообщение torvn77 »

Nick писал(а):Это лучше делать через axis.N.jog-enable
axis.N.jog-enable IN BIT
Вопрос с блокировкой у меня решён,но есть вот какое соображение.
axis это внутренние взаимодействия,halui это средство подключения интерфейса пользователя.
В общем хотелось бы полного разделения сущностей.

Пусть будет пин axis.N.jog-enable,но для машины,чтобы разрешить или запретить jog'и из соображений технологического процесса.
А для включения jog'а человеком кнопкой джойстика или с панели оператора пусть появится пин halui.jog-enable,
так как аппаратные и программные средства взаимодействия с оператором подключаются через halui,для чего он и предназначен.
Аватара пользователя
Алексс
Почётный участник
Почётный участник
Сообщения: 2210
Зарегистрирован: 20 июл 2012, 15:49
Репутация: 266
Заслуга: IQ32
Настоящее имя: Алексей
Откуда: Прага
Контактная информация:

Re: JoyHandle - компонент для построения нелинейного джойсти

Сообщение Алексс »

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

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