【问题标题】:How to convert USB Joystick Gamepad data output to angle如何将 USB 操纵杆游戏手柄数据输出转换为角度
【发布时间】:2020-12-14 17:35:40
【问题描述】:

我目前正在使用 raspberry pi 3 和 Python 进行家庭自动化项目。我的目标是通过 Thrustmaster T16000M USB 操纵杆控制电机伺服系统,但我坚持将操纵杆值“转换”为以度为单位的角度。

例如,X 轴从 0 到 16383。但我想将其转换为从 0° 到 180°。我的问题是以度为单位的角度值与操纵杆值之间的映射。我的印象是我必须使用带有“光标”的列表,例如:0° = 0 用于操纵杆,90° = 8192 用于操纵杆,180° = 16383。

我能理解其中的逻辑,但实现起来比较复杂,因为我不知道这是否是正确的方法,尤其是是否可行。

我还研究了向量、矩阵等,但经过一天的研究,我能够理解其中的逻辑,但实现起来更复杂,因为我不知道它是否是正确的方法,尤其是如果这是可能的。我对如何做有点困惑。

【问题讨论】:

  • y 值的范围是多少?对于 x 轴和 y 轴,当操纵杆竖直向上(垂直)时,读数是否介于最小值和最大值之间?
  • 是的。 Y和X轴的值从最小值0变化到最大值16383。当操纵杆处于正常位置时,X和Y是8191。左边X = 0,Y = 8191。右边,X = 16383和 Y = 8191。反之亦然,具体取决于所使用的轴。
  • 仅将值范围映射到 0..180 与将 x 和 y 位置 togetehre 转换为角度并不完全相同——我认为这是一个角度如果试图测量它们所代表的角度,考虑到控制器的顶部(x = 8191,y = 16383)为北 0°。这样做需要做一些相对简单的三角函数——我相信math.atan2()

标签: python raspberry-pi joystick


【解决方案1】:

如果我没有误解你的问题,这应该很容易。

x_max = 16383
output_max = 180

# Assume x is an arbitrary value between 0 and x_max
output = x / x_max * output_max

就是这样。输出将是 0 到 16383 之间的 x 值到 0 到 180 范围的映射。

【讨论】:

  • 这正是我的问题的答案!我刚刚对此进行了测试,并且可以很好地恢复角度值。非常感谢您提供这个非常快速和正确的答案。确实解决方案不是很困难,我不明白为什么我在不应该复杂的地方寻找复杂的东西。非常感谢您的帮助:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-09
  • 1970-01-01
  • 2022-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多