JoyHandle - компонент для построения нелинейного джойстика.
- torvn77
- Мастер
- Сообщения: 2442
- Зарегистрирован: 02 июн 2012, 22:12
- Репутация: 215
- Откуда: Россия,Санкт-Петербург
- Контактная информация:
JoyHandle - компонент для построения нелинейного джойстика.
Тема сделана для обсуждения компонента joyhandle
http://www.linuxcnc.org/docs/html/man/m ... dle.9.html
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 - компонент для построения нелинейного джойсти
Сделан этот компонент не совсем рационально
Update:
Ещё хорошо бы для кнопок сделать компонент вот с такой логикой работы:
Пример приёмников сигналов gamepad_func_button_N-analog-mode и gamepad_func_button_N-continue_mode:
И их секция ini
- Нет входа 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
#----------------
Код: Выделить всё
#----------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
Код: Выделить всё
[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 - компонент для построения нелинейного джойсти
Название JOYHANDLE может ввести в заблуждение, что это какой-то многофункциональный компонент. На самом деле пока у компонента одна и очень конкретная задача - сделать реакцию на отклонение рукоятки джойстика (или регулятора какого-нибудь) квадратично зависимой от отклонения (вместо линейно зависимой по умолчанию). Не стоит ожидать от него других "чудес".
- torvn77
- Мастер
- Сообщения: 2442
- Зарегистрирован: 02 июн 2012, 22:12
- Репутация: 215
- Откуда: Россия,Санкт-Петербург
- Контактная информация:
Re: JoyHandle - компонент для построения нелинейного джойсти
Пусть так,но ведь то что я попросил за исключением последнего пункта об объединении в один модуль вещи простые.
Не ужели их так сложно добавить?
Не ужели их так сложно добавить?
- torvn77
- Мастер
- Сообщения: 2442
- Зарегистрирован: 02 июн 2012, 22:12
- Репутация: 215
- Откуда: Россия,Санкт-Петербург
- Контактная информация:
Re: JoyHandle - компонент для построения нелинейного джойсти
Текущии конфиг в стабильном состоянии
Подключение через команду source Gamepad-devl/Gamepad.hal которую надо поместить в ваш hal файл
Подключение конфига к джойстика к вашему производится через редактирование файла Halui.hal
Параметрические настройки разбросаны по конфигу.
Осторожно!Скорость быстрого перемещения в конфиге 130 мм/сек! Архив с полным конфигом машины:
Осторожно!Скорость быстрого перемещения в конфиге 130 мм/сек!
Подключение через команду source Gamepad-devl/Gamepad.hal которую надо поместить в ваш hal файл
Подключение конфига к джойстика к вашему производится через редактирование файла Halui.hal
Параметрические настройки разбросаны по конфигу.
Осторожно!Скорость быстрого перемещения в конфиге 130 мм/сек! Архив с полным конфигом машины:
Осторожно!Скорость быстрого перемещения в конфиге 130 мм/сек!
Последний раз редактировалось torvn77 03 ноя 2014, 23:06, всего редактировалось 1 раз.
- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5181
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: JoyHandle - компонент для построения нелинейного джойсти
Совсем не сложно. Просто, берёшь и добавляешь.torvn77 писал(а):Пусть так,но ведь то что я попросил за исключением последнего пункта об объединении в один модуль вещи простые.
Не ужели их так сложно добавить?
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
- torvn77
- Мастер
- Сообщения: 2442
- Зарегистрирован: 02 июн 2012, 22:12
- Репутация: 215
- Откуда: Россия,Санкт-Петербург
- Контактная информация:
Re: JoyHandle - компонент для построения нелинейного джойсти
Хочу чтобы вы сделали такой компонент и добавили в релиз 2.7
- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5181
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: JoyHandle - компонент для построения нелинейного джойсти
Куда прислать смету?
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: JoyHandle - компонент для построения нелинейного джойсти
Это лучше делать через axis.N.jog-enabletorvn77 писал(а):Нет входа joyhandle.N.block для блокировки работы джойстика.
Из-за отсутствия этого пина приходится городить огород с обнулением пина halui.jog-speed при отпускании клавиши "Разблокировка" на джойстике.
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.
Что такое input.N.abs-hat0y-position?torvn77 писал(а):Логично это сделать подмешиванием input.N.abs-hat0y-position в joyhandle.N.out через joyhandle.N.offset
Там в формуле все уже предусмотренно. Мнимальная скорость это offset, также есть встроенный deadband.torvn77 писал(а):Сделать пин joyhandle.N.minimal_speed который будет задавать минимальный |модуль| выходного значения.
От пина joyhandle.N.offset отличатся будет тем,что для положительных значении будет к ним прибавляться,а для отрицательных значений убавляться.
Например скорости менее 16 мм/мин в моём понимании при ручной установке нуля неоправданно медлительны.
Вот пусть изменение пина joyhandle.N.out с него и начинается.
Не только квадратично, там хитрая формула .verser писал(а):Название JOYHANDLE может ввести в заблуждение, что это какой-то многофункциональный компонент. На самом деле пока у компонента одна и очень конкретная задача - сделать реакцию на отклонение рукоятки джойстика (или регулятора какого-нибудь) квадратично зависимой от отклонения (вместо линейно зависимой по умолчанию). Не стоит ожидать от него других "чудес".
y = (scale * (a*x^power + b*x)) + offset
И еще есть всякие deadband и прочее.
- Алексс
- Почётный участник
- Сообщения: 2210
- Зарегистрирован: 20 июл 2012, 15:49
- Репутация: 266
- Заслуга: IQ32
- Настоящее имя: Алексей
- Откуда: Прага
- Контактная информация:
Re: JoyHandle - компонент для построения нелинейного джойсти
sum2/mult2/mux2torvn77 писал(а):сделать подмешиванием
достаточно посмотреть в код компонента, чтобы понять, что offset имеет тот-же знак что и входящее значение.torvn77 писал(а):отличатся будет тем,что для положительных значении будет к ним прибавляться,а для отрицательных значений убавляться
вся прелесть linuxcnc в том, что из простых компонентов можно сложить как угодно сложную систему.torvn77 писал(а):Может чтобы не городить кучу пинов слить экземпляры в один четырёхканальный комплекс?
Каждая собака, бегущая на поводке впереди хозяина, думает, что ведет его за собой.
- torvn77
- Мастер
- Сообщения: 2442
- Зарегистрирован: 02 июн 2012, 22:12
- Репутация: 215
- Откуда: Россия,Санкт-Петербург
- Контактная информация:
Re: JoyHandle - компонент для построения нелинейного джойсти
Это пин копонента hal_input.1,который является "драйвером джойстика" и выдающий или нуль,или положительное или отрицательное значение пинаNick писал(а):Что такое input.N.abs-hat0y-position?
Опс,а вдокументации пина нет.
А у меня вот в halshow такой пин есть.
В общем на пине input.N.abs-hat0y-position появляется значение пина input.0.abs-hat0x-scale помноженное на вектор соответствующий
цифровым клавишам вперёд/назад/вправо/влево.
- torvn77
- Мастер
- Сообщения: 2442
- Зарегистрирован: 02 июн 2012, 22:12
- Репутация: 215
- Откуда: Россия,Санкт-Петербург
- Контактная информация:
Re: JoyHandle - компонент для построения нелинейного джойсти
Сообщение удвоилось,лишнее удалил.
Последний раз редактировалось torvn77 05 ноя 2014, 18:24, всего редактировалось 1 раз.
- torvn77
- Мастер
- Сообщения: 2442
- Зарегистрирован: 02 июн 2012, 22:12
- Репутация: 215
- Откуда: Россия,Санкт-Петербург
- Контактная информация:
Re: JoyHandle - компонент для построения нелинейного джойсти
Сначала в одном конфиге,потом в соседнем.В результате у меня путаница,Алексс писал(а): сделать подмешиванием
sum2/mult2/mux2
а начинающему пользователю написанные мной модули вообще будет не подключить к своему конфигу.
Хватит того что я для комутации кнопок 26 экземпляров and2 в конфиг запихнул.
А ещё скромные два not и один mux4.И вот придёт с винды новичёк и будет это вместо баранов на ночь пересчитывать.
возможности то грузить один тип элемента по нескольку раз нету и не будет.
Скажем так,я с кодингом LinuxCNC соотношусь примерно так же,как сисадмин сайта с разработкой вебсервера по верх которого этот сайт работает.Алексс писал(а):достаточно посмотреть в код компонента
- torvn77
- Мастер
- Сообщения: 2442
- Зарегистрирован: 02 июн 2012, 22:12
- Репутация: 215
- Откуда: Россия,Санкт-Петербург
- Контактная информация:
Re: JoyHandle - компонент для построения нелинейного джойсти
Вопрос с блокировкой у меня решён,но есть вот какое соображение.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 - компонент для построения нелинейного джойсти
это линукс, детка. начинающему пользователю нужно или напрягать серое вещество или юзать mach3.torvn77 писал(а):начинающему пользователю
даже на уровне школьного курса информатики ?torvn77 писал(а):соотношусь примерно так же
Каждая собака, бегущая на поводке впереди хозяина, думает, что ведет его за собой.