2014/11/25

マウスの光学センサが見ている世界を見てみる


1 概要

今回作成したのは,AVAGO製光学センサが有する機能の1つであるPixel Grabberの可視化システムです.
--------------------------------------------------------------------------------------
2014/11/25 初出
2015/01/25 COUGAR CONTROL Mouse Pad 追加
2015/05/20 Artisan 紫電改 MID 追加
2015/11/23 HORI EDGE 401 追加,レイアウトを調整
2016/01/24 DHARMAPOINT DRTCPWシリーズ 7種 追加
--------------------------------------------------------------------------------------

2 このシステムの意義

通常のマウスのセンサシステムでは単一光源(通常はLED)から光源用レンズを通して単色光が照射され,それをレンズを通してセンサは受け取っています.これは顕微鏡や虫眼鏡等の通常の光学機器での表面の観察と大きく異るので,マウスパッドの滑走面の状態がどのようにセンサ性能に影響するかについて評価する時にはあまり意味がありません.

本システムを用いることで,「マウスパッドの滑走面の状態がセンサの視点ではどのように見えているのか?」ということを直感的に理解することが出来ます.これによってセンサの性能を引き出すようなセッティングを模索する補助や,悪いセッティングであることを認識し校正する手段としての使用が期待できます.

3 マウスに搭載されている光学センサについて

マウスに搭載されているセンサを大まかに例えるとモノクロのデジタルカメラのようなものです.このカメラは解像度が19x19や30x30で,19x19の場合だとTwitterのアイコンにもならないくらいです.このように,普通のデジタルカメラと比較すると圧倒的に低解像度です.
今回使用するADNS-5090では画素数19x19のピクセルアレイを有するセンサです.

マウスが滑走面に覆いかぶさるように置いてあるので,何も照射しないままだと滑走面が暗くて何も見えません.なので,搭載されているLED(もしくはレーザ)をカメラのフラッシュ代わりにして滑走面を照らします.そして前の画像と現在の画像を比較して移動距離を算出します.移動量の算出は毎秒数千~数万枚の画像を撮影して行われます.そしてMCUと呼ばれる制御チップが適宜動いた距離を転送するように要請してくるのでそれに応じて移動距離を転送します.

4 Pixel Grabber

Pixel GrabberはAVAGOの光学センサに搭載されている機能の1つで,センサの保有するピクセルアレイの1ピクセル毎の値を読み出すことが出来ます.これによってセンサが現在どのような画像を見ているかを知ることが出来ます.

5 使用ツール

PC側で主に使用したものは以下になります.
• Python3.4
    • PySerial
    • matplotlib

MCU側では,いつものように以下の物を使用しました.
• PSOC Creator3.0 SP1
• PSoC4 4 Pioneer Kit
• 光学センサ : ADNS-5090


6 動作

システムは大まかに分けてMCU側とPC側に分けられます.

MCU側では
  1. センサへPixel Grabberの指令を出す
  2. レジスタから1pixel毎に361 ( =19x19 ) 回読み出す
  3. 読み出した値をUART通信でPCへ転送する
というステップを繰り返します.

対して,PC側では
  1. UART通信で転送されてきたデータを読み出す
  2. データを元に描画する(必要であれば動画・画像の保存を行う)
というステップを繰り返します.この時の"2"のステップ時に表示を拡大するのですが,今回は補間フィルタとしてガウシアンフィルタを使用しました.

7 結果 : ピクセルアレイの様子

各マウスパッド上で撮影したピクセルアレイの様子の画像を以下に示します.
画像は原寸から10~20%程度へ縮小表示した方が見やすいです.

Steelseries QcK


Artisan 飛燕(Hien) VE MID


Artisan 紫電改(Shiden-Kai) MID


G-Pad 小間久商店(Koma-Q)



ROCCAT Tait (Taito)



Power Support AirPad ProIII



COUGAR CONTROL Mouse Pad ( 3D Texture Surface )



HORI EDGE 401



DHARMAPOINT DRTCPW30C



DHARMAPOINT DRTCPW30S



DHARMAPOINT DRTCPW35CS



DHARMAPOINT DRTCPW35GR



DHARMAPOINT DRTCPW35HB



DHARMAPOINT DRTCPW35RS



DHARMAPOINT DRTCPW35SD


Appendix. 滑走時の動画

Steelseries QcKの表面の様子を撮影した動画は以下のようになります.埋め込みサイズが小さいですが,小さい方がわかりやすいと思うのでこのままどうぞ.



動画を見ていただければ分かる通り,フレームレートは低めです.PC側ではなくマイコン側でデータの取得やら転送でかなり時間がかかっています.
前は速度を出すために色々やっていたのですが,ガリガリに最適化して書いていたらちょっと転けてしまって開発中断したので今回は手堅く行きました.


1-Day Projectにするつもりが丸々2日かかってしまいました.
最後にやったのが6月でソースコードや環境が散逸してしまい,それの回収と復旧の方にかなりの時間がかかった気がします XD

2 件のコメント:

  1. systema様

    たった2日でこんなにもバリューの高い開発ですか。systema様には驚かされっぱなしです:o
    肉眼では真っ黒に見えるパッドも
    良い感じにランダムなコントラスト出てるのですねぇ。
    QckとTaitoはよく似てますね。エアーパッドだけモワっとしてて特殊な感じです。

    動画で見れるのも素晴らしいです:)
    光源波長を色々と変えてみて
    実際の像がどのような変化を見せるか試してみたいです。
    AGCを切ってShutter値を固定にしないと余り変わらないのかもですが。
    あとはソール重ね張りマウス検証として
    レンズ焦点を外した場合の像変化も見てみたく思いました。

    なんか私ばかりコメントしててすいません:p
    そのうち↓こうなりそうです。
    rafa has been banned permanently from #LogicalGaming.(Comments Trolling)

    返信削除
    返信
    1. rafa様

      いつもコメントありがとうございます.更新のモチベーションになっているのでありがたいです.

      光源波長について :
      エアーパッドは結構使い込んだので,凹凸が削れたのかも知れません :D
      そういう意味でも色々と調べ甲斐はありそうです.

      今回使ったADNS-5090はシャッター値が制御出来ないので,多少光源が暗くなった程度であまり変化は無いと思います.
      見ている凹凸の大きさは0.01mmオーダだと考えていて,それに対して光源波長が有意な影響を与えることはないのかなと予想しています.

      「滑走面に対するレンズの距離による見え方の違い」は自分もとても気になっていて調べたいトピックなので記事にしようと思います.

      削除