gpt4 book ai didi

python - 如何使用 python evdev 访问游戏 handle 的操纵杆?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:19:54 26 4
gpt4 key购买 nike

我是 evdev 的新手,目前正在尝试使用 xbox Controller 来控制小型机器人。我对每个按钮都很成功,但我似乎无法弄清楚如何从操纵杆获得有效读数。

此代码仅适用于按钮响应。

编辑:每当按下 ABXY 按钮时,EV_ABS 事件也会发生。我不确定如何区分这些值和操纵杆的实际值。此外,来自操纵杆移动的事件代码不一致。这是我当前正在运行的代码:

from evdev import InputDevice, categorize, ecodes
dev = InputDevice('/dev/input/event1')

print(dev)

for event in dev.read_loop():
if event.type == ecodes.EV_KEY:
print("button is pressed")
elif event.type == ecodes.EV_ABS:
print(event)

感谢任何建议!谢谢!

最佳答案

Python 不是我最喜欢的语言,可能有更好的校准方法,但我把它放在一起。希望对您有所帮助。

所有映射和最大值都是从我的 Xbox One 无线 Controller 测量的,因此您可能需要试验/调整常量以适应您自己的 Controller 。

from evdev import list_devices, InputDevice, categorize, ecodes

CENTER_TOLERANCE = 350
STICK_MAX = 65536

dev = InputDevice( list_devices()[0] )
axis = {
ecodes.ABS_X: 'ls_x', # 0 - 65,536 the middle is 32768
ecodes.ABS_Y: 'ls_y',
ecodes.ABS_Z: 'rs_x',
ecodes.ABS_RZ: 'rs_y',
ecodes.ABS_BRAKE: 'lt', # 0 - 1023
ecodes.ABS_GAS: 'rt',

ecodes.ABS_HAT0X: 'dpad_x', # -1 - 1
ecodes.ABS_HAT0Y: 'dpad_y'
}

center = {
'ls_x': STICK_MAX/2,
'ls_y': STICK_MAX/2,
'rs_x': STICK_MAX/2,
'rs_y': STICK_MAX/2
}

last = {
'ls_x': STICK_MAX/2,
'ls_y': STICK_MAX/2,
'rs_x': STICK_MAX/2,
'rs_y': STICK_MAX/2
}

for event in dev.read_loop():

# calibrate zero on Y button
if event.type == ecodes.EV_KEY:
if categorize(event).keycode[0] == "BTN_WEST":
center['ls_x'] = last['ls_x']
center['ls_y'] = last['ls_y']
center['rs_x'] = last['rs_x']
center['rs_y'] = last['rs_y']
print( 'calibrated' )

#read stick axis movement
elif event.type == ecodes.EV_ABS:
if axis[ event.code ] in [ 'ls_x', 'ls_y', 'rs_x', 'rs_y' ]:
last[ axis[ event.code ] ] = event.value

value = event.value - center[ axis[ event.code ] ]

if abs( value ) <= CENTER_TOLERANCE:
value = 0

if axis[ event.code ] == 'rs_x':
if value < 0:
print('left')
else:
print('right')
print( value )

elif axis[ event.code ] == 'ls_y':
if value < 0:
print('foreward')
else:
print('backward')
print( value )

关于python - 如何使用 python evdev 访问游戏 handle 的操纵杆?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44934309/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com