我正在尝试从Ubuntu上的python中读取PS3控制器而我没有太多运气。我开始使用Willow Garage的ps3joy驱动程序(http://www.ros.org/wiki/ps3joy),该驱动程序据称将PS3控制器的所有重要部分发布到我从未听说过的称为“uinput”的部分。显然它是一个Linux功能,允许用户空间驱动程序提供系统事件。 ...为什么WG驱动程序需要root访问权限,因为它应该是一个用户空间驱动程序超出我的范围,但这不是我的问题。
无论如何,我试图让它工作的当前状态是我让驱动程序工作,我已经验证它响应按钮按下控制器,但我不知道如何拉任何这些数据都可以使用它。
我的第一个猜测是使用pygame(希望)从/ dev / uinput读取(我很确定驱动程序发送数据的位置):
from pygame import joystick
if not joystick.get_init():
joystick.init()
js = joystick.Joystick(0) # there is only one joystick... even if the driver isn't running(!)
js.init()
print js.get_numbuttons() # perhaps coincidentally correctly prints 17 which is the number of buttons on a PS3 controller
for i in range(js.get_numaxes()):
print js.get_axis(i) # always prints 0, no matter what I'm doing with the controller
但它不起作用。问题中最有说服力的部分是,如果我根本没有运行WG驱动程序,它会做同样的事情。
我确信这很容易,我只是没有阅读正确的信息,但谷歌搜索并没有帮助我找到正确的信息,而是我已经厌倦和绝望。
答案 0 :(得分:3)
您不需要驱动程序。假设控制器将自身公开为HID,您可以使用event subsystem直接从设备读取控制器事件。
答案 1 :(得分:1)
尝试
pygame.event.pump()
在你阅读操纵杆之前。我需要它来使用360控制器
答案 2 :(得分:1)
我知道现在为时已晚,但如果有人需要代码或者正在努力使用它,你可以使用我的代码。我在python中编写了一个脚本,它从USB获取ps3数据并通过PC的蓝牙将其发送到特定的MAC地址(您只能将ps3controller.py用于数据)。 这是我的四轴飞行器项目。
答案 3 :(得分:0)
立即解决类似问题:在GNU / Linux中使用python与PS3蓝牙遥控器通信/接收数据。
我觉得有用:
答案 4 :(得分:0)
我相信你至少需要以下内容:
from pygame import joystick, event, display
display.init()
joystick.init()
js=joystick.Joystick(0)
js.init()
...
for foo in bar:
event.pump()
...
if foo:
event.pump()
...
while bar:
event.pump()
...
我相信display.init()必须存在,因为事件处理需要它......
此外,您可以使用
跳过很多内容import pygame
pygame.init()
js=pygame.joystick.Joystick(0)
js.init()
...
for foo in bar:
pygame.event.pump()
...
if foo:
pygame.event.pump()
...
while bar:
pygame.event.pump()
....
我可能错了,但我认为你的问题是: A)if / while / for子句中没有event.pump B)没有display.init()
来源: http://webcache.googleusercontent.com/search?q=cache:I56GyE7I4CkJ:iamtherockstar.com/archive/making-hid-devices-easier-using-pygame-joysticks/+&cd=1&hl=en&ct=clnk&gl=us 和 http://www.pygame.org/docs/ref/event.html
“输入队列严重依赖于pygame显示模块。”