Страница 1 из 14

EMC2 LinuxCNC и Joystick

Добавлено: 07 фев 2011, 11:04
Nick
Откопал джойстик и решил подключить его к станку посредством EMC2.

Но, в следствии тяжелого похмелья после вечера встреч с одноклассниками, меня хватило только на подключение джойстика к компьютеру и беглый обзор проблемы :mrgreen:.

Джойстик у меня такой: Logitech Freedom 2.4 Cordless Joystick.

Для подключения к Linux ничего особенного делать не пришлось. Включил его в USB и он вроде заработал. Но как проверить, что он действительно работает? Для этого используем утилиту jstest из пакета joystick (sudo apt-get install joystick), итак запускаем jstest /dev/input/js0 и видим, что все отлично работает. В нашем распоряжении есть 4 аналоговых оси, две оси с дискретным пределом и 10 кнопок. На что все это использовать :roll:? Ну предположим две оси на X и Y, одна на Z. Три кнопки для переключения режимов, кнопка на старт и кнопка на остановку программы. Ось throtle можно использовать для feed override. Когда доделаю свой чпу раскладчик можно будет использовать четвертую ось для поворота по оси A.

Итак, что удалось накопать по подключению джойстика к EMC2:

Первый вариант, подмена событий нажатия на кнопки джойстика нажатиями на соответствующие хоткеи средствами xorg. Для этого редактируем /etc/X11/xorg.conf, и добавляем примерно следующее:

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

	Identifier      "joystick"
	Driver		"joystick"
# proper path to your joypad could be found by looking into '/dev/input/by-id' directory
	Option "Device"		"/dev/input/event2"
# axis -X
	Option "MapButton1"	"key=Left"
# axis -Y
	Option "MapButton2"	"key=Down"
# axis +X
        Option "MapButton3"	"key=Right"
# axis +Y
	Option "MapButton4"	"key=Up"
# axis "step program"
	Option "MapButton5"	"key=t"
# axis "continus program"
	Option "MapButton7"	"key=s"
# axis -Z
	Option "MapButton6"	"key=Prior"
# axis +Z
	Option "MapButton8"	"key=Next"
# axis "continuos jogging"
	Option "MapButton9"	"key=c"
# axis "zero G54 offset on selected axis"
	Option "MapButton10"	"key=Shift_L,Home"
# axis "change jogging speed"
	Option "MapAxis1"	"mode=accelerated keylow=comma keyhigh=period"
# axis "change jogging step"
	Option "MapAxis2"	"mode=accelerated keylow=i, keyhigh=Shift_L,i"
EndSection
Но в этом варианте есть много недостатков. Джойстик будет выдавать ложные события не только в EMC2. Все перемещения будут дискретными и не получится плавно перемещаться.

Второй вариант, настроить джойстик через hal. Для этого в hal есть специальная штука simulated encoder. При помощи нее будем обрабатывать команды с джойстика. Таким образом можно будет контролировать скорость перемещения и осуществлять плавные передвижения на любой скорости. Но подробнее об этом позже - когда разберусь и все настрою у себя :hehehe: (хотя все выглядит просто и логично). Пока дам ссылку на английскую статью по этому поводу: http://wiki.linuxcnc.org/emcinfo.pl?Usi ... NC_Machine.

Re: EMC2 и Joystick

Добавлено: 04 мар 2011, 15:46
Nick
Эх... все никак не найду времени, чтобы засесть за настройку джойстика плотняком. Но постоянно думаю об этой настройке.
Что надумал:
1. Я хочу, чтобы сам джойстик управлял осью в режиме скорости, а не положения. Т.е. чтобы была прямая связь джойстика и станка.
2. Для точного позиционирования нужно вывести на кнопки перемещения на заданный отступ.


1. По идее, нужно подключить оси джойстика к пинам jog_counts и поставить jog-vel-mode в true для всех осей.
Поэтому нужно будет вывести включение выключение джойстика на отдельную кнопку. Я думаю гашетка для этого самое то.

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

# включаем управление от джойстика
net joystick_enable <= input0.button.0 => axis.0.jog-enable
net joystick_enable => axis.1.jog-enable
net joystick_enable => axis.2.jog-enable

# устанавливаем режим скорости
setp axis.0.jog-vel-mode  true
setp axis.1.jog-vel-mode  true
setp axis.2.jog-vel-mode  true

# подсоединяем оси джойстика к осям станка
net X_jog_count <= input0.axis.0 => axis.0.jog-counts 
net Y_jog_count <= input0.axis.1 => axis.1.jog-counts 
net Z_jog_count <= input0.axis.2 => axis.2.jog-counts 

# подсоединяем четвертую ось к дополнительному контролю скорости
net jog_sped <= input0.axis.4 => axis.0.jog-scale
net jog_sped => axis.1.jog-scale
net jog_sped => axis.2.jog-scale
Теперь осталось подключить остальные кнопки джойстика.

Re: EMC2 и Joystick

Добавлено: 06 мар 2011, 00:48
Nick
Ура наконец-то появилось немного времени!

В общем сделал так:

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

loadusr hal_input -W -KRAL +Logitech Dual Action

# включаем управление от джойстика
net joystick_enable <= input.0.btn-trigger => axis.0.jog-enable
net joystick_enable => axis.1.jog-enable
net joystick_enable => axis.2.jog-enable

# устанавливаем режим скорости
setp axis.0.jog-vel-mode 1
setp axis.1.jog-vel-mode 1
setp axis.2.jog-vel-mode 1

# подсоединяем оси джойстика к осям станка
net X_jog_count <= input.0.abs-x-counts => axis.0.jog-counts 
net Y_jog_count <= input.0.abs-y-counts => axis.1.jog-counts 
net Z_jog_count <= input.0.abs-rz-counts => axis.2.jog-counts

# устанавливаем скорость
net jog_scale <= input.0.abs-throttle-position => axis.0.jog-scale
net jog_scale => axis.1.jog-scale
net jog_scale => axis.2.jog-scale

И все практически заработало :cheesy: !
Практически, потому, что jogging похоже все равно работает в режиме положения, а не скорости, несмотря на: setp axis.0.jog-vel-mode 1

Re: EMC2 и Joystick

Добавлено: 13 мар 2011, 15:36
Гость
/etc/X11/xorg.conf не нашел этот файл( и вообще как открыть разрешение файла ( conf )

Re: EMC2 и Joystick

Добавлено: 13 мар 2011, 15:42
Nick
Это обычные текстовые файлы. В Linux все файлы настройки - это обычные текстовые файлы, это сделано для того, чтобы настройки можно было менять без спец программ.

В новых версиях файл xorg.conf не используется. Но его можно создать самостоятельно, взяв за пример старую версию.

Для подключения джойстика к EMC2 лучше использовать специальный компонент hal - hal_input, как описано сообщением выше.

ЗЫ а какой у тебя joystick и для каких функций ты хочешь его использовать?

Re: EMC2 и Joystick

Добавлено: 04 апр 2011, 10:36
Гость
Джостик джениюс, хотелось бы управлять осями станка)

Re: EMC2 и Joystick

Добавлено: 04 апр 2011, 11:16
Nick
Наверное все будет примерно также только нужно будет поменять строку:
loadusr -W hal_input -KRAL Logitech
Вместо Logitech нужно будет вставить id твоего джойстика. Дома гляну, как его можно определить.

Кстати, проверь, как он у тебя работает:
Сначала устанавливаем joystick (sudo apt-get install joystick), и потом
jstest /dev/input/js0

Re: EMC2 и Joystick

Добавлено: 28 май 2012, 21:04
Виталий
Ник а можете написать порядок действий для тупых.джой у меня logitech в терминале смог поигратся кнопками а вот даьше не понятно с etc/X11/xorg.conf
-редактированию не поддается(может не туда лезу)

Re: EMC2 и Joystick

Добавлено: 28 май 2012, 22:21
Nick
Виталий писал(а):-редактированию не поддается(может не туда лезу)
Это потому, что для этого нужны права администратора. Но лучше выполнить все вот таким образом - через hal_input
EMC2 и Joystick #3

Т.е. открываешь свой hal файл и дописываешь все, что в сообщении выше и пробуешь запустить.
Кстати, а чем ты хочешь с джойстика управлять? (осями, шпинделем или чем-то еще?)

Re: EMC2 и Joystick

Добавлено: 28 май 2012, 22:59
Виталий
да я пробывал так .но емс тогда не запукается появляется окно с ошибкой. вкладываю свой hal и ошибку

Re: EMC2 и Joystick

Добавлено: 28 май 2012, 23:01
Виталий
да и джойстик другой genius

Re: EMC2 и Joystick

Добавлено: 28 май 2012, 23:09
Lexxa
Nick писал(а):Практически, потому, что jogging похоже все равно работает в режиме положения, а не скорости
а если производную взять?

Re: EMC2 и Joystick

Добавлено: 29 май 2012, 00:09
Nick
По ошибке:
No input device matching 'Genius' was found (1 devices checked)

выполни в консоле
cat /proc/bus/input/devices
И вывод давай сюда.
Если будет очень много вывода, так, что не поместится в консоле сделай cat /proc/bus/input/devices >1.txt и содержимое файла сюда.
Там можно будет найти имя твоего джойстика.

Да, текст ошибок и прочую текстовую информацию лучше просто пихай в тэг

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

, так проще смотреть и не надо файлы скачивать.

[quote="Lexxa"]а если производную взять?[/quote]
Это давно было, я тогда в emc2 плохо разбирался, добился того, что приблизительно работает и бросил :freak:

Re: EMC2 и Joystick

Добавлено: 29 май 2012, 19:40
Виталий

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

vitaliy@vitaliy-desktop:~$ cat /proc/bus/input/devices 
I: Bus=0019 Vendor=0000 Product=0001 Version=0000
N: Name="Power Button"
P: Phys=PNP0C0C/button/input0
S: Sysfs=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0C:00/input/input0
U: Uniq=
H: Handlers=kbd event0 
B: EV=3
B: KEY=100000 0 0 0

I: Bus=0019 Vendor=0000 Product=0003 Version=0000
N: Name="Sleep Button"
P: Phys=PNP0C0E/button/input0
S: Sysfs=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0E:00/input/input1
U: Uniq=
H: Handlers=kbd event1 
B: EV=3
B: KEY=4000 0 0 0 0

I: Bus=0019 Vendor=0000 Product=0001 Version=0000
N: Name="Power Button"
P: Phys=LNXPWRBN/button/input0
S: Sysfs=/devices/LNXSYSTM:00/LNXPWRBN:00/input/input2
U: Uniq=
H: Handlers=kbd event2 
B: EV=3
B: KEY=100000 0 0 0

I: Bus=0017 Vendor=0001 Product=0001 Version=0100
N: Name="Macintosh mouse button emulation"
P: Phys=
S: Sysfs=/devices/virtual/input/input3
U: Uniq=
H: Handlers=mouse0 event3 
B: EV=7
B: KEY=70000 0 0 0 0 0 0 0 0
B: REL=3

I: Bus=0003 Vendor=1a2c Product=0002 Version=0110
N: Name="USB USB Keykoard"
P: Phys=usb-0000:00:02.0-1/input0
S: Sysfs=/devices/pci0000:00/0000:00:02.0/usb2/2-1/2-1:1.0/input/input4
U: Uniq=
H: Handlers=kbd event4 
B: EV=120013
B: KEY=10000 7 ff800000 7ff febeffdf f3cfffff ffffffff fffffffe
B: MSC=10
B: LED=7

I: Bus=0003 Vendor=1a2c Product=0002 Version=0110
N: Name="USB USB Keykoard"
P: Phys=usb-0000:00:02.0-1/input1
S: Sysfs=/devices/pci0000:00/0000:00:02.0/usb2/2-1/2-1:1.1/input/input5
U: Uniq=
H: Handlers=kbd event5 
B: EV=1f
B: KEY=837fff 2c3027 bf004444 0 0 1 c04 a27c000 267bfa d941dfed 9e0000 0 0 0
B: REL=40
B: ABS=1 0
B: MSC=10

I: Bus=0003 Vendor=0583 Product=a000 Version=0110
N: Name="2-Axis,8-Button  "
P: Phys=usb-0000:00:02.0-8/input0
S: Sysfs=/devices/pci0000:00/0000:00:02.0/usb2/2-8/2-8:1.0/input/input6
U: Uniq=
H: Handlers=event6 js0 
B: EV=1b
B: KEY=ff 0 0 0 0 0 0 0 0 0
B: ABS=3
B: MSC=10

I: Bus=0011 Vendor=0002 Product=0005 Version=0055
N: Name="ImPS/2 Logitech Wheel Mouse"
P: Phys=isa0060/serio1/input0
S: Sysfs=/devices/platform/i8042/serio1/input/input7
U: Uniq=
H: Handlers=mouse1 event7 
B: EV=7
B: KEY=70000 0 0 0 0 0 0 0 0
B: REL=103

Re: EMC2 и Joystick

Добавлено: 29 май 2012, 19:44
Виталий
с 3 раза вставил :thinking:

Re: EMC2 и Joystick

Добавлено: 29 май 2012, 20:13
Nick
Похоже вот это твой джойстик:
I: Bus=0003 Vendor=0583 Product=a000 Version=0110
N: Name="2-Axis,8-Button "
P: Phys=usb-0000:00:02.0-8/input0
S: Sysfs=/devices/pci0000:00/0000:00:02.0/usb2/2-8/2-8:1.0/input/input6
U: Uniq=
H: Handlers=event6 js0
B: EV=1b
B: KEY=ff 0 0 0 0 0 0 0 0 0
B: ABS=3
B: MSC=10
хмм... теперь по строке, которой его определить.

По идее вот так дожно сработать:
loadusr -W hal_input -KRAL "2-Axis,8-Button"

но не уверен...
если не выйдет попробуй
loadusr -W hal_input -KRAL 2-Axis,8-Button
или
loadusr -W hal_input -KRAL Bus=0003 Vendor=0583 Product=a000 Version=0110
Виталий писал(а):с 3 раза вставил
А в чем проблема была?

Re: EMC2 и Joystick

Добавлено: 29 май 2012, 20:17
Виталий
не с одним с вариантов emc не стартовал

Re: EMC2 и Joystick

Добавлено: 29 май 2012, 20:31
Виталий
loadusr -W hal_input -KRAL 2-Axis,8-Button

Re: EMC2 и Joystick

Добавлено: 29 май 2012, 20:33
Виталий
loadusr -W hal_input -KRAL "2-Axis,8-Button"
похоже что устройство не определяется

Re: EMC2 и Joystick

Добавлено: 29 май 2012, 20:35
Виталий
loadusr -W hal_input -KRAL Bus=0003 Vendor=0583 Product=a000 Version=0110
тоже самое