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側では
- センサへPixel Grabberの指令を出す
- レジスタから1pixel毎に361 ( =19x19 ) 回読み出す
- 読み出した値をUART通信でPCへ転送する
対して,PC側では
- UART通信で転送されてきたデータを読み出す
- データを元に描画する(必要であれば動画・画像の保存を行う)
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
DHARMAPOINT DRTCPW30S
DHARMAPOINT DRTCPW35CS
DHARMAPOINT DRTCPW35GR
DHARMAPOINT DRTCPW35HB
DHARMAPOINT DRTCPW35RS
DHARMAPOINT DRTCPW35SD
Appendix. 滑走時の動画
Steelseries QcKの表面の様子を撮影した動画は以下のようになります.埋め込みサイズが小さいですが,小さい方がわかりやすいと思うのでこのままどうぞ.動画を見ていただければ分かる通り,フレームレートは低めです.PC側ではなくマイコン側でデータの取得やら転送でかなり時間がかかっています.
前は速度を出すために色々やっていたのですが,ガリガリに最適化して書いていたらちょっと転けてしまって開発中断したので今回は手堅く行きました.
1-Day Projectにするつもりが丸々2日かかってしまいました.
最後にやったのが6月でソースコードや環境が散逸してしまい,それの回収と復旧の方にかなりの時間がかかった気がします XD
systema様
返信削除たった2日でこんなにもバリューの高い開発ですか。systema様には驚かされっぱなしです:o
肉眼では真っ黒に見えるパッドも
良い感じにランダムなコントラスト出てるのですねぇ。
QckとTaitoはよく似てますね。エアーパッドだけモワっとしてて特殊な感じです。
動画で見れるのも素晴らしいです:)
光源波長を色々と変えてみて
実際の像がどのような変化を見せるか試してみたいです。
AGCを切ってShutter値を固定にしないと余り変わらないのかもですが。
あとはソール重ね張りマウス検証として
レンズ焦点を外した場合の像変化も見てみたく思いました。
なんか私ばかりコメントしててすいません:p
そのうち↓こうなりそうです。
rafa has been banned permanently from #LogicalGaming.(Comments Trolling)
rafa様
削除いつもコメントありがとうございます.更新のモチベーションになっているのでありがたいです.
光源波長について :
エアーパッドは結構使い込んだので,凹凸が削れたのかも知れません :D
そういう意味でも色々と調べ甲斐はありそうです.
今回使ったADNS-5090はシャッター値が制御出来ないので,多少光源が暗くなった程度であまり変化は無いと思います.
見ている凹凸の大きさは0.01mmオーダだと考えていて,それに対して光源波長が有意な影響を与えることはないのかなと予想しています.
「滑走面に対するレンズの距離による見え方の違い」は自分もとても気になっていて調べたいトピックなので記事にしようと思います.