なんとなく

誰得感満載な記事が多いかも。Mono関係とLinuxのサーバ関係、レビューとか。

DELANCLiPを使ったETS2の視点移動(Raspberry PiとPC間をOpentrackでつないで)

はじめに

DELANCLiPを購入して、steamlink越しに使用しようと試してみたら使えなかったので、Raspberry PiでOpentrackのPointTrackerを使えるようにして、Raspberry PiとPC間をOpentrackでつないで、ETS2に視点移動のデータを渡すというものを構築してみた。

takeshich.hatenablog.com

takeshich.hatenablog.com

のつづきで、実際にETS2で遊べるようにするまでの設定および得られた知見について触れていく。

RaspberryPiのOpentrack設定

f:id:takeshich:20200517135405p:plain

Inputは、PointTracker1.1にして、OutputはUDP over networkにする。Filterは設定しない。

Filter,MappingについてはRaspberry Pi,PCどちらで対応しても問題ないが、PC側で設定を調整したほうが楽なのは明白なのでPC側のOpentrackで設定している。 Filterについては設定せず、Options、Mappingについてはデフォルトの設定のままにしている。

PointTracker1.1の設定

f:id:takeshich:20200517135430p:plain

320x240,125FPSでcolor channelはBlue Onlyにしている。 また、Point extractionのAutomatic thresholdはチェックを外し、無効にしている。デフォルトは有効になっているが、無効にして、184/255にしているのは、有効にした場合の誤検知がカメラのゲイン値によってはかなり発生したため。

UDP over networkの設定

f:id:takeshich:20200517135501p:plain

PCのIPアドレスを固定にしておいて、そのアドレスおよびポートを設定する。 ポートはPC側で設定したデフォルトのものを使用している。

カメラの設定

カメラについては、

PlayStationEye

PlayStationEye

  • 発売日: 2010/10/21
  • メディア: Video Game

を改造したもので、センサーとレンズの間にIRフィターが入っている。

設定についてはRaspberry Piでv4l2-ctlを使って設定する。

カメラとクリップの位置(距離と角度)に加えてカメラの設定(fpsとゲイン)の調整が必要になる。それぞれの変化によってOpentrackでの検出に影響が出てくる。そして、その有効な範囲が思いの外狭い。

PSEYEは、320x240 187fpsを出せる性能を持っているが、Opentrackで検出する際にRaspberry Pi3のCPU性能では処理落ちが発生しているようで、データに欠損のようなものが生じ、実際にゲームで使用する際に視線が安定せずガタガタするという症状が出た。

そこで、FPSを落とし、試したところ125fpsでは問題が生じないように思えたため、125fpsで使用している。

そのため、PSEYE を320x240 125fpsで使う。

カメラ接続のたびに設定値がデフォルトになってしまうので、都度設定する必要がある。

Opentrackでstartを押下する前に

$ v4l2-ctl -d /dev/video1 --set-fmt-video=width=320,height=240 --set-parm=125 --set-ctrl=gain_automatic=0,gain=25

としている。

キャプチャ開始後、--set-fmt-videoと--set-parmは変更できない。ゲインの変更はできる。

キャプチャ中のカメラの設定については、PointTracker1.1の設定からCamera SettingsのOpenを押下してGUIで設定できる。 GUIでいろいろ調整するとここらへんという値が得られる。

再度使用する場合にカメラ接続時に設定値がデフォルトに戻ってしまうので、都度、調整した値をコマンド入力すると楽なので上記の方法を採っている。

なお、ビデオデバイスが/dev/video1となっているのは、Raspberry Pi Camera がすでにあり、それが、/dev/video0として存在するためである。

ETS2で遊ぶためのPC側のOpentrack設定

f:id:takeshich:20200517141426p:plain

Inputは、UDP over networkにして、Outputはfreetrack 2.0 Enhancedにする。FilterはAccelaにし、設定値はデフォルトのままにしている(フィルターは任意)。

Filterについては、Accelaを使用しているが、値のばらつきを抑えるためのアルゴリズム(移動平均など)を用いているので試してみてあったものにすれば良いと思われる。合うのであれば、ないよりあったほうがいいが、合わないものを選択するとないほうがよい。

UDP over networkの設定

f:id:takeshich:20200517141459p:plain

リッスンするポートを設定する。設定値はデフォルト(4242)のままにしている。

freetrack 2.0 Enhancedの設定

f:id:takeshich:20200517141512p:plain

設定値はデフォルトのままにしている。

Options

Optionsについては、

まず、Shortcutsとして、

f:id:takeshich:20200517141738p:plain

センターに戻すのをテンキーの5に、トラッキングの停止、再開を2に割り当てている。 ゲーム開始時にセッターに戻したり、動きがおかしくなったように感じたときはセンターに戻すことをするので押しやすい場所に割り当てておいたほうが良い。 また、ETS2においては高速道路走行時などは視点移動がさほど重要ではなく、また、トラッキングしたまま飲み物を飲んだりするとかなり画面が乱れるので、一度トラッキングを停止させ、再度再開するという行為を度々するので、これも押しやすい場所に割り当てておいたほうが良い。

Outputについては、

f:id:takeshich:20200517141804p:plain

  • yaw
  • pitch
  • Z

を有効とし、 他の

  • Roll
  • X
  • Y

は無効としている。

上下左右の回転は必要だが首を左右に傾ける値はETS2では必要ないと感じ、また、それが安定しない要素にもなるので、Rollは無効にしている。 また、X,Y軸の並行移動に関してもETS2においてはさほど必要ないので、不安定になるのを防ぐためにも無効にしている。

Game Detectionについては、

f:id:takeshich:20200517142414p:plain

ProfileをETS2.iniとしETS2の実行ファイルを指定している。

Mapping

MappingについてはETS2でプレイしながら調整をしていき、いまのところ下図に落ち着いている。左ハンドルでプレイしている。

  • yaw

f:id:takeshich:20200517142506p:plain

  • pitch

f:id:takeshich:20200517142530p:plain

  • Z

f:id:takeshich:20200517142600p:plain

遊びを多めにしないとプレイ中に結構頭を動かすので視点がずれる場合がある。気になる場合はセンターと思われる場所に頭があるときにテンキーの5を押し、センターに戻す。

実際のプレイ動画

イスタンブールを軽く走ったのを録画してみた。あとから気づいたことだが、音を入れずに録画してしまった。すみません。 それと見返してみて運転がとても荒いことに気づいた。 参考になればという程度でみてほしい。

youtu.be

得られた知見

Raspberry PiとPC間をOpentrackでつないで、DELANCLiPを使ったETS2の視点移動をできるようにしてみて、得られた知見を以下に挙げていく。

  • カメラとクリップの有効な位置(距離と角度)がある。それに加えてカメラのfpsとゲインの微妙な調整が必要。

    • OpentrackでPSEYEとDELANCLiPとの距離は100cm未満が妥当。90cmを超えると検出が微妙になってくる。DELANCLiPではないが、同様のクリップを使われる方も同じように感じているようだ。*1

    • Opentrackで検出を安定させるには、カメラとクリップはなるべく平行のほうがよい。

    • カメラのゲインの設定が重要で、Opentrackのデフォルト設定で自動しきい値にしておくとゲインの値が低すぎるとクリップの位置角度によっては3点以上を検知してしまうようになる。

    • カメラの設置場所、コントローラの位置や座る場所などゲームに合わせて設定が必要。

  • ETS2も含めた知見

    • ETS2は、レースゲームとは違い、トラックでの配送なので同じ姿勢を保つのが難しい。安定した視点にするために、設定での遊びを少し多く取る必要ある。

    • ETS2プレイ中、後傾になることが多く、PSEYEとDelanclipとの距離が100cmを超える場合があるので注意する必要がある。(検出が微妙になるため、値が荒ぶりカクカクする。視点が飛ぶ症状が出る。)

    • ETS2プレイ開始時にセンター位置と思われる場所で、センターに戻す。視点がおかしくなったらセンターに戻すことを心がける。

    • 視点移動が必要ないと思われる時は、トラッキングを停止するのも、長時間プレイ時には必要。

    • 必要性の低い軸を有効にしない。ほぼ使わないのでrollと平行移動のx,yをdisableすると視点が安定する。

    • yawは右ハンドル、左ハンドルに合わせて非対称に設定する。

  • Raspberry Piも含めた知見

    • Raspberry Piでは、PSEYEはVirtualhere for steamlinkでは使えない。

    • Raspberry Piでは、PSEYEはカメラの設定を320x240 187fpsにして設定し、Opentrackで使用することはできるが、Pi3では処理落ちが発生する。120fpsだと処理落ちは気にならない。

    • Raspberry Pi とPC間のOpentrackのUDPによるデータ量は200Kbps程度。

    • Raspberry Pi 上のOpentrackのwindowは検出時表示させているとCPU負荷が高いため、最小化する。最小化することで4割程度負荷が減る。

まとめ

いろいろな要素が絡んで設定がとても面倒くさい、ホント面倒くさい。普通に使えるようにするまでにかなりの試行錯誤があり、時間を要した。 TrackIRを使ったことがないから、はっきりとは言えないけど、DELANCLiPは設定が面倒なことは確かであり、設定の試行錯誤も含めて楽しめないのであれば、TrackIRのほうが安いように思える。

視点移動にトラッキングを考えている方は、TrackIR関連ではなく、一番最初にカメラの改造も必要ない、手を出しやすいARマーカーとWebcam(PSEYE)を使ったものを試したほうがいいと思う。

実際にDELANCLiP購入後に、ARマーカーをアベノマスクにセットして、トラッキングするのを試してみたらそちらのほうが手数も少なく楽だったと感じた。もしかするとDELANCLiPでの知見を踏まえた後のことだからとても楽に感じたのかもしれないが。

つぎは、そのARマーカーとWebcamを使ったトラッキングについて書こうと思う。