PS3控制器驱动程序->;输入->;python以某种方式

PS3控制器驱动程序->;输入->;python以某种方式,python,ps3,Python,Ps3,我试图在Ubuntu上阅读python中的PS3控制器,但运气不太好。我从Willow车库的ps3joy司机开始(http://www.ros.org/wiki/ps3joy)据推测,它将PS3控制器的所有重要部分发布到我从未听说过的“uinput”中。显然,这是一个linux特性,它允许用户空间驱动程序提供系统事件。。。既然WG驱动程序是一个用户空间驱动程序,那么为什么它需要root访问权限,这是我无法理解的,但这不是我的问题 不管怎样,我试图让它工作的当前状态是,我已经让驱动程序工作了,并且

我试图在Ubuntu上阅读python中的PS3控制器,但运气不太好。我从Willow车库的ps3joy司机开始(http://www.ros.org/wiki/ps3joy)据推测,它将PS3控制器的所有重要部分发布到我从未听说过的“uinput”中。显然,这是一个linux特性,它允许用户空间驱动程序提供系统事件。。。既然WG驱动程序是一个用户空间驱动程序,那么为什么它需要root访问权限,这是我无法理解的,但这不是我的问题

不管怎样,我试图让它工作的当前状态是,我已经让驱动程序工作了,并且我已经验证了它对控制器上的按钮按下做出了响应,但是我不知道如何提取任何数据以便使用它

我的第一个猜测是使用pygame(希望)读取/dev/uinput(我很确定驱动程序将数据发送到该位置):

但它不起作用。问题中最能说明问题的部分是,如果我根本没有运行WG驱动程序,它也会做同样的事情


我确信这很简单,我只是没有阅读正确的信息,但谷歌搜索并没有帮助我找到正确的信息,我感到疲惫和绝望。

你不需要司机。假设控制器将自身暴露为HID,您可以使用直接从设备读取控制器事件。

现在解决类似问题:在GNU/Linux中使用python从PS3 bluetooth remote通信/接收数据

我觉得有用的是:

  • PS3控制器的调试
  • 看起来像是正在工作的项目,对于PS3 Remote(它需要先修补bluez),还没有测试
  • pybluez BT包装器(立即检查)
  • 试一试

    pygame.event.pump()


    在你读操纵杆之前。我需要它与360控制器配合使用

    我相信您至少需要以下几点:

    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) 没有显示。init()

    资料来源: 和


    “输入队列在很大程度上依赖于pygame显示模块。”

    我知道这已经太晚了,但是如果有人需要该代码或正在与之斗争,您可以使用我的代码。我用python编写了一个脚本,从USB获取ps3数据,并通过PC的蓝牙将其发送到特定的MAC地址(您只能对数据使用ps3controller.py)。 这是为我的四架直升机项目做的


    如何确定控制器是否将自身暴露为HID?请查看系统日志。当你插上电源时,你会看到“HID”过去了。我不确定它是否那么简单。控制器是蓝牙的,但它的行为很奇怪。当我运行蓝牙向导时,它会在设备列表上反复闪烁,我无法连接到它。当我打开控制器电源、运行向导或使用WG驱动程序成功连接时,dmesg中没有显示任何内容。编辑:检查,有一项内容确实出现,但我没有注意到。每次使用WG驱动程序,我都会得到一个新的输入:[11270.347066]输入:Sony Playstation SixAxis/DS3 as/devices/virtual/input/input19这只是一个如何读取该文件的问题。Edit2:该文件不存在。。。我真的很困惑。您可以尝试打开ps3joy驱动程序并添加打印行以转储发送到uinput的值列表,然后您可以按下按钮并查看值的更改。就目前而言,这就是我所做的;我只是将驱动程序合并到我的程序中,这样我就可以完全绕过它。这是一个可怕的黑客攻击,但至少它是有效的。请阅读这篇关于提供您自己的OSS解决方案的帖子:。如果你能举例说明你的图书馆应该如何使用和/或它是如何解决问题的,这会很有帮助。
    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()
        ....