6

我正在尝试从 Ubuntu 上的 Python 中的 PS3 控制器读取数据,但运气不佳。我从 Willow Garage (http://www.ros.org/wiki/ps3joy) 的 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 驱动程序,它会做同样的事情。

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

4

5 回答 5

3

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

于 2012-05-27T03:43:14.173 回答
2

我知道为时已晚,但如果有人需要该代码或正在努力使用它,您可以使用我的。我在 python 中编写了一个脚本,它从 USB 获取 ps3 数据并通过 PC 的蓝牙将其发送到特定的 MAC 地址(您只能将 ps3controller.py 用于数据)。这是为我的四轴飞行器项目制作的。

https://github.com/urbanzrim/ps3controller

于 2015-11-26T18:23:50.013 回答
1

我相信您至少需要以下内容:

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 显示模块。”

于 2013-02-15T17:37:25.260 回答
1

尝试

pygame.event.pump()

在阅读操纵杆之前。我需要它与 360 控制器一起使用

于 2012-06-05T17:16:40.483 回答
0

现在解决类似的问题:在 GNU/Linux 中使用 python 从 PS3 蓝牙遥控器通信/接收数据。

我发现有帮助:

  1. 调试 PS3 控制器http://www.pabr.org/sixlinux/sixlinux.en.html
  2. 看起来像工作项目,PS3 Remote http://kitlaan.twinaxis.com/projects/bluez-ps3remote/(它需要修补 bluez 1st)尚未测试。
  3. pybluez BT 包装http://code.google.com/p/pybluez/ (现在检查)
于 2012-06-05T10:49:47.833 回答