DualSenseのアダプティブトリガーを使いたい!


本記事の内容を試す際は自己責任でお願いします。
また、Sonyからの何らかの権利の申し立てがあった場合には、記事の修正や削除を行います。

PS5のコントローラーであるDualSense には、アダプティブトリガーという機能が搭載されている。
これは、コントローラー側面にあるL2,R2のトリガーボタンを押した際に、内部のモーターが作動することでトリガーの抵抗感が変えることのできる機能である。
これにより、弓を引き絞る感覚などの力感覚を提示でき、よりリアリティのある体験を提供できるようになるらしい。

このアダプティブトリガーを自由に使えれば手軽な力覚提示デバイスとして使えると思い、どのようにすれば使用できるかを調べた。
以下で詳細を記載する。

注意事項

Sony公式が推奨している方法ではないため、試す際は自己責任でお願いします。
情報が正確でない可能性があります。ご了承ください。

方法

DualSenseをusbデバイスとして扱い、InterfaceClassHuman Interface Device となっているInterface の OUT Endpoint に対して48バイト長のデータをいい感じに設定し送信すればアダプティブトリガーを起動できる。

InterfaceやEndpointを指定する際の番号は(lsudb)[https://linux.die.net/man/8/lsusb] コマンドなどを使えば調べられる。

以下のようなデータを送信すると、R2トリガーの抵抗感が明確に強くなる。

[0x02, 0xff, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]

パラメータの詳細は不明だが、参考のリポジトリでデータを送信している部分のデータを見ると、

  • 12番目の値: R2トリガーのモード
  • 13~22番目の値: R2トリガーの力に関するパラメータ
  • 23番目の値: L2トリガーのモード
  • 24~33番目の値: L2トリガーの力に関するパラメータ
    のように見受けられる、
    ただし、参考にできそうな公式のデータシート等は発見できなかったので、間違っている可能性もある。

追記(2025/1/24)

rust で実装したサンプルをgithubに公開した。
https://github.com/KurotaGonbee/DualSense-minimum-usb-sample-rust

参考