将 ABS_X 和 ABS_Y 转换为有意义的值

Convert ABS_X and ABS_Y into meaningful values

我是游戏控制器映射的新手,我正在尝试从操纵杆中理解 ABX_X 和 ABS_Y 值 return。我的目标是采用这些值并将它们变成“向前移动”、“向后移动”、“转向”等。我似乎无法弄清楚将进入的值转换为行动的公式是什么。下面是我的 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

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

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

假设您希望操纵杆的最小值为 -1,最大值为 +1,您可以使用 minmax 中的值标准化 ABS_X AbsInfo:

normalizedValue = 2.0 * (value - min) / (max - min) - 1.0