6

UbuntuのPythonでPS3コントローラーから読み込もうとしていますが、うまくいきません。私は、Willow Garage (http://www.ros.org/wiki/ps3joy) の ps3joy ドライバーから始めました。これは、PS3 コントローラーのすべての重要なビットを、私が聞いたことのない「uinput」と呼ばれるものに公開していると思われます。どうやら、ユーザースペースドライバーがシステムイベントを提供できるようにするのはLinuxの機能です。...おそらくユーザー空間ドライバーであると思われるWGドライバーがルートアクセスを必要とする理由は私にはわかりませんが、それは私の質問ではありません。

とにかく、それを機能させようとしている私の現在の状態は、ドライバーが機能していることです。コントローラーのボタンを押すとドライバーが応答することを確認しましたが、それを引き出す方法がわかりません使えるようにデータアウトしました。

私の最初の推測は、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

手遅れであることはわかっていますが、誰かがコードを必要とする場合や苦労している場合は、私のコードを使用できます。USBからps3データを取得し、PCのBluetooth経由で特定のMACアドレスに送信するPythonでスクリプトを作成しました(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 Bluetooth リモートからデータを通信/受信します。

私が役に立ったと思ったこと:

  1. PS3 コントローラのデバッグhttp://www.pabr.org/sixlinux/sixlinux.en.html
  2. PS3 リモートhttp://kitlaan.twinaxis.com/projects/bluez-ps3remote/ (bluez 1st にパッチを当てる必要があります)の作業プロジェクトのように見えますが、まだテストされていません。
  3. pybluez BT ラッパーhttp://code.google.com/p/pybluez/ (現在チェック中)
于 2012-06-05T10:49:47.833 に答える