2018年3月13日火曜日

Riftのパケット間隔変更

Oculus純正のコードでRiftを動かしたあとだと送ってくるパケットが雑になるのだけれど、これをどうにかできないものかとまずは何が起きているのか調査してた。とりあえず設定値を取得して比べてみることに...

まずはデフォルトの設定

  distortion_k: 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000
  eye_to_screen_distance: 39620, 39620
  lens_separation: 63500
  vertical center: 30840
  screen size: 119340 x 66300
  resolution: 2160 x 1200
  distortion_type: 1
  command id: 0
display info:56
  keep alive interval: 3
  packet interval: 59392
    sensor coordinates: 0
    motion command keep alive: 1
    motion keep alive: 0
    auto calibration: 0
    use calibration: 0
    calibration test: 0
    raw mode: 0
  flags: 20
  command id: 0
sensor config
getconfig returns:7
  mag scale:1300
  rotate scale:2000
  accel scale:4
getscale returns:8

そしてこれがデータが雑になってる時の設定

  distortion_k: 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000
  eye_to_screen_distance: 39620, 39620
  lens_separation: 63500
  vertical center:  30840
  screen size:  119340 x 66300
  resolution: 2160 x 1200
  distortion_type: 1
  command id: 0
display info:56
  keep alive interval: 3
  packet interval: 59411
    sensor coordinates: 0
    motion command keep alive: 1
    motion keep alive: 0
    auto calibration: 0
    use calibration:  0
    calibration test: 0
    raw mode: 0
  flags: 20
  command id: 0
sensor config:7
  mag scale:1300
  rotate scale:2000
  accel scale:4
sensor scale:8

ログ順の関係で上が新しいので逆に読む。で、見ると異なるのはsensor config/packet intervalだけで、デフォルトが59392、雑データの時が59411になる。これは16進だとE800とE813になる。雑データはゲインが1/10になっているのかと思っていたがデータの名前から考えてΔtが10倍になっているようだ。まぁRiftの姿勢取得は2ms間隔と結構煩いので使ってない時は頻度を落とすとかしているんだろう。

おそらくこれは何らかのカウンタの値で上位を変えるとどうしようもない状態になるっぽい。もともとデフォルト値を設定することが目的なのでそこは深く考えないことにする。考えたところで誰かが勝手に決めた仕様に過ぎないし。

それにしてもdistortion_kに値が入ってないとか...これは光学系の歪み補正パラメタで、最初の3つは自乗項、四乗項、六乗項、あとの3つはRGBそれぞれの色収差補正値が入っているべきだったものだ。

ともかく、sensor configを取得してpacket intervalがデフォルトでなかったらデフォルト値にして設定すればおkってとこなのでそのように組むとしよう。

0 件のコメント:

コメントを投稿

引っ越すことにした。

引っ越し先。 見えるかな。