0

我是映射游戏控制器的新手,我正在尝试理解从操纵杆返回的 ABX_X 和 ABS_Y 值。我的目标是将这些价值观转化为“前进”、“后退”、“转身”等。我似乎无法弄清楚将这些价值观转化为行动的公式是什么。下面是我的 ABSInfo 数据(来自 Python InputDevice)以及一些示例值。任何能引导我朝着正确方向前进的帮助都会非常有帮助。

ABS 信息功能

('EV_ABS', 3): [(('ABS_X', 0), AbsInfo(value=32768, min=0, max=65535, fuzz=0, flat=4095, resolution=0)), (('ABS_Y', 1), AbsInfo(value=32768, min=0, max=65535, fuzz=0, flat=4095, resolution=0))

Y 的样本值

Y VALUE: 3101
Y VALUE: 5241
Y VALUE: 6931
Y VALUE: 9597
Y VALUE: 12059
Y VALUE: 14990
Y VALUE: 17467
Y VALUE: 19878
Y VALUE: 32768

X 的样本值:

X VALUE: 23596
X VALUE: 14042
X VALUE: 0
X VALUE: 818
X VALUE: 5943
X VALUE: 17212
X VALUE: 32768
4

1 回答 1

1

evdev提供与从设备接收到的轴值完全相同的轴值,未缩放。结构(python 中的input_absinfoAbsInfo)提供了边界信息,让您可以规范化操纵杆输入。

(('ABS_X', 0), AbsInfo(value=32768, min=0, max=65535, fuzz=0, flat=4095, resolution=0)),

假设您希望操纵杆的最小值为 -1,最大值为 +1,您可以ABS_X使用min和中的max值进行归一化AbsInfo

normalizedValue = 2.0 * (value - min) / (max - min) - 1.0
于 2022-01-26T00:57:57.463 回答