この記事はアドベントカレンダー2024/12/07の記事です
目次
DDProを使ってラジコンを操作して遊びたいぁ…
ちっちゃいところから始めていこう!
DDProのステアリング操作、アクセル操作、ブレーキ操作に応じてM5BugC2が動作する
DDPro+PC+M5BugC2
Wireshark+USBPcap
VSCode
Python : 3.13
ArduinoIDE : 2.3.4
CoolTerm
DDPro(https://fanatec.com/ja-jp/dd//gran-turismo-dd-pro-8-nm)
Forza Horizon 4
WiresharkでUSBPcap1を選択
文字列ディスクリプタのbString: FANATEC Wheelを探す
usb.bString == "FANATEC Wheel"
sourceのID的なものでフィルターをかける
usb.src == "source"
デバイスディスクリプタの中にVIDとPIDがある
idVendor: Endor AG(VID)
idProduct: Unknow(PID)
となっている
参考までに他のデバイスの例(G703h)
idVendor: Logitech, Inc . (VID)
idProduct: Lightspeed Receiver (PID)
→文字列ディスクリプタをみないとFANATECのデバイスかどうかわからない….
Endor AGはFANATECの親会社だった
URB_INTERRUPT inにあるHID Dataを右クリックしCopyでField Nameを選択、クリップボードにフィールド名をコピー
Columnで右クリック→Edit ColumnでTitleにフィールド名をペースト、TypeをCustom、Fieldsにもフィールド名をペースト
ここまでできるとHID Dataを一覧に並べることができる(不要なものを非表示にしてる)
↓のデータはステアリング操作のデータ
ステアリング操作時、アクセル操作時、ブレーキ操作時を比較して見る
がそれっぽい
予測が正しいか検証する
バイトの変化をグラフ化して実際の操作に対応しているか調査
間違っていなさそう
Pythonで指定のバイトをUDPで送信(PC)
C++でデータの受信(M5BugC2)
うまく送れていそう
M5BugC2用のライブラリの追加
https://github.com/m5stack/M5Hat-BugC
M5BugC2用のコードを追加
※音量注意
https://youtube.com/shorts/tFZkxMHYJfs?feature=share
WiresharkとUSBPcapを用いてDDProのHID Dataの一部解析を行った
UDPを用いてDDProとM5BugC2間で通信を行った
DDProの操作でM5BugC2を動かした
モーター制御のコードが不十分なため、動作が期待通りにはいかなかった。(DDProの仕様に合っていない:DDProは同じ動作をしている時データを送信しない?)
また、M5BugC2のバランスや足の問題なのかコードの通りに動かない問題も見られた。
解析していないボタンの解析
予想している原因を改善し期待通りの動作が可能かを検証
フォースフィードバックの実装(M5BugC2に載っているMPU6886を試しに使ってみよう)
https://fanatec.com/ja-jp/faq/details/id/80
↓
ラジコンに換装
やりたいことはある程度できたけど、M5BugC2の問題なのかコード通りの動作をしなくて、直進させようとしても回転してしまうのが残念。
いろいろ勉強できたし、結構楽しくできたから、DirectInputの勉強もしてフォースフィードバックの実装とかラジコンへの換装とか結構楽しみ
それとChatGPT便利すぎる