とりあえず、ハードウェアの準備までは到達しました。
僕の当初の構想では、DualShock3のスティックでステアリング操作、フットペダルでアクセル/ブレーキ操作、画像処理でドライブバイワイヤ化/AT制御、これでグランツーリスモ5を走る予定だったのですが、コントローラの重複使用は無理(できたとしてもコントローラのプロトコル的にいっておそらく不具合が出るかもしれないなぁ)なので、ラジコンのプロポでのステアリング操作に変更しました。。。要するにステアリングバイワイヤ化もやれっ、さらに自動運転もやれってことになってくると思うのですが、あまり制御内容が増えるととっちらかるので、ぼちぼち慣れながら遊んで行きましょうかね。
接続設定としては、
PS3 -> XFPS4.0 Force
XFP4.0 Force -> PC
PC -> Arduino
Arduino -> ラジコンプロポのコントローラ
Arduino -> フットペダル
って感じです。
Arduinoはラジコンプロポのステアリングとフットペダルの位置(アクセル/ブレーキ)をA/D変換して取得し、PCにUSB経由シリアル出力で渡す。
PCは、取得した値を整形してXFPS4.0 Forceのデバイスドライバ(HID)の用意するパイプに書き込む。
昔買った京商ミニッツレーサーのコントローラを引っ張り出してきました。
ステアリングと(今は使わないけど)スロットルのポテンショメータに配線。
左のトリムも活かそうかどうか迷ったけど、どうせステアリングバイワイア化するんだし必要ないかって省略しました。(回路を活かしつつ組み込むのがめんどくさかったともいうw)
フットペダルは、、、ハンコン買いましたよ><フットペダルのためだけに。
昔MadCatzのハンコン持ってたけど邪魔すぎて売っちゃったし。
買っても損しないようにPCでも使える汎用性の高いのをってことで、マルチレーシングコントローラSuperSports3Xってのを買いました。さすがにロジのハンコン(GTForceとか?)は、この遊びには高すぎて買えない、、、
ためしにこのハンコンでグランツーリスモ5やってみたけど、慣れの問題もあるのだろうけど走れるものじゃなかったですw
あぁ、ステアリングの方は捨てちゃおっかなぁ。でかくて邪魔だし。
これ、品質的に値段相応じゃないなぁって思いますね。上の京商のラジコンプロポですが、ミニッツレーサー用で安物ではあるんだけど、さすがに実走で遊ぶための品質は確保されていて、ポテンショメータの範囲調整がよく出来て出荷されてます。でもこのペダル、ポテンショメータの位置がいい加減でポテンショメータの測定範囲の半分しか使い切ってません。配線も2線のみ。リファレンス電圧に対して位置を求めてないで単純に抵抗値だけで位置を求めています。
ポテンショメータの電圧のA/D変換は、Arduinoの端子につないでA/D変換し、PCにシリアル出力してるだけです。
簡単簡単♪
PC側のシリアル制御コードは、こちらを利用。これを使って、USBのCOM(115200bps)からRead()するごとにメッセージを飛ばすようにコーディング。なので、ちょいとラグが出ているかもしれませんね。メッセージ使う場合、即座に処理できるんだったっけ?1ms位のウェイト?まぁ、ラグが酷いようなら改善の余地はまだ少しあります。
画面はこんな感じ。右のダイアログは画像が潰れてしまってますが、各種ボタンを操作するパネルです。ゲーム画面はSD出力をキャプチャしてKMPlayerで表示させます。画質的には、一旦RGB24に変換しているためか、キャプチャをそのまま出力させるよりも見辛いかも。。。(例えばインターレース処理はキャプチャのダイレクト出力とは違和感があります)
まぁ、慣れの問題だと思うし、どうしても受け入れ難かったら普通にPS3から直接表示させればいいわけで。
これに自作のフィルターを組み込んで、画像処理をさせようって魂胆です。左の赤数字はサンプルとして昔作ったフィルターによるもの。次の目標は、フィルター内で得た画像データをOpenCVで画像解析して車速/回転数を認識することかな?
さて、とりあえず試走してみましたが、アクセル/ブレーキはまだしも、ステアリング操作の非線形さに慣れが必要です。もともとグランツーリスモ5のソフト側でスティックの値を操作してるはずで、その非線形曲線を把握しないと理想的な制御の非線形曲線は得られないのだろうなぁ><
でもまぁ、やっぱこれですよねぇ。グランツーリスモ5は、お気に入りの車に乗って楽な姿勢で鼻くそほじりながらw流して走りたいじゃないですかw
0 件のコメント:
コメントを投稿