2024年7月31日水曜日

小ネタ


 リモコンが見守り機器に変身 「電池」を入れ替えるだけ:乾電池型IoTデバイスで - EE Times Japan

 同メーカーが出してる、玩具等に乾電池フォームファクタでIoT機能を追加するヤツの一種だけど、おもちゃに入れてアプリで遠隔操作できるようなデバイスはユーザーがそれを使っている実感がある利点がある。一方で見守り機器の場合はユーザーがそれを使っていることを認識しづらい欠点がある。リモコンの電池が切れた段階で捨てられそう。ただでさえ電池が小さくなって、IoT機器分で消費電力が増えるわけだから、電池の交換頻度も増えるだろうし。テレビとかエアコンみたいに細長い筐体(電池を側面方向に入れる場合)はアダプタ自体をリモコンに接着してしまう、みたいな無理やりな解決策も考えられるけど。

 あと、見守り対象者にもスマホが必要なのが微妙な気がする。スマホ持ってるならそれで監視すればいいじゃねーか、という気が(バックグラウンドで動き続けるロガーがストアに許されるかは別の話として)。


https://www.hs.chuo-u.ac.jp/contents/wp-content/themes/chu-fu/pdf/bulletin/issue31/issue31_pdf06.pdf

 ヤングの実験の解説。レーザーで実験する場合でも、レーザーのコヒーレンシーは必要ないよ、みたいな話とか。レーザーは光源が小さくて輝度が高いから観察に便利なだけで、十分に暗い部屋があれば細いフィラメントの電球でも二重スリットだけで干渉縞が出せる、と。


 YouTube Music、以前はシャッフルボタンを押すと問答無用でシャッフルしてたけど、仕様変更して一旦ソート(追加順?)を挟むようになったんだな。地味に便利な気もする。単純にシャッフルしたいときは2回押さなきゃいけないので面倒ではあるけど。

 YouTubeのトップ画面、仕様変更したらしく、チャンネルアイコンを中クリックしても新しいタブで開けなくなったのが地味に不便(左クリックで飛ぶことはできる)。チャンネル名じゃなくアイコンで開くクセが付いてるので、チャンネルを開こうとして画面が盛大にスクロールする。なんでアイコンで開けなくしたのか謎い。


***


 この間のプライムデーでOLIGHTのArkfeld Proを買ってみた。普段使いしているI3Tのスイッチが怪しくなってきたので。Ark Proの割引率がI3Tの単価を超えているので、Ark Proを買えばI3Tが無料でついてくる、みたいなノリで両方を購入(買った方のI3Tはしばらく塩漬け状態になる予定)。

 Ark Proは白色ライト、緑色レーザー、UVライトの3種類の光源が乗っているライト。白色とレーザは「同時使用できなくはない」程度のもので、お世辞にも使い勝手がいいとは言えない。せめて白色を使用中にセレクタでレーザを選んだら白色を維持したままにする、みたいな状態遷移であれば便利だったのに、そういう気が利く機能がない。レーザと白色を併用すると白色は問答無用でほぼ最大輝度になる。

 レーザーとUVは比較的直感的な操作感。


 白色LEDは操作が非常に煩雑で、直感的に(とっさに)操作することができない。アクティブな防犯用途(イザというときに使う)には使いづらい。もちろんタクティカルな用途など望むべくもなく(まあ、このガワでタクティカルな用途に使おうとする人もいないだろうけど)。

 輝度は最弱(Moonlight)・弱(Low)・中(Mid)・強(High)・最強(Turbo)の5段階。

 消灯から長押し(1s)すると最弱で点灯する(さらに長押しを続けるとロックモードに入り、再度長押ししないと操作を受け付けなくなるので注意)。任意の状態で2回押しするとストロボモードに入る。電池残量75%以上の任意の状態で3回押しするとターボモードに入る。点灯状態で長押しすると弱・中・強をサイクルする。

 レーザーを選択中は1回押しでレーザが点灯、続けてもう一度押すと白色が強で点灯する。レーザー点灯中に2回押しでも強が点灯する。レーザー使用中に白色を点灯させた場合、長押しで輝度がサイクルする。レーザー使用中の輝度は白色モードのメモリへ保存される。

 白色LEDやレーザーは点灯中に2回押し(あるいは3回押し)の操作があるから、点灯中に1回押ししても即消灯せず、一呼吸待って続く操作が無いことが確定した段階で消灯するので、消灯させるのにワンテンポ遅れがある。

 せめてレーザと白色の連携をもう少しマトモに作り込んでくれれば非常に便利なのに、その1点だけでこの製品全体の評価を押し下げている感があって残念。例えばレーザ使用中に白色を点灯させた場合は白色で記憶した輝度を使用するとか、レーザ使用中に長押しで弱・中・強へサイクルする(最初から最大輝度で点灯させない)とか、白色点灯中にレーザを選択したら白色の輝度を維持してレーザを点灯させるとか、そういう状態遷移があればすごく便利なのに、なぜかそういう気が利くモードが一切無い。

 白色を低輝度で起動したい場合(高輝度で起動したくない場合)は、消灯中に長押しして最弱を起動し、必要に応じて長押しして弱へ切り替える、といった操作が必要になる。最弱は光が非常に弱いから、真っ暗な場所でもなければ点灯したか分かりづらい。長く押しすぎるとロックモードに入るから、離すタイミングが難しい。LEDを覗きながら操作すれば点灯したことはわかるが、いかにも馬鹿らしい。点灯時や輝度変更時にはバッテリーインジケーターが点灯するから、長押ししてバッテリーインジケーターが光ったタイミングで離す、という手もある。ただし普通に持つとバッテリーインジケーターは指で隠れるから、視認できない。せめてバッテリーインジケーターをスイッチより先端側に配置してあればよかったのに。


 スイッチが先端部にあるから、普通に持つ分には押しやすいけど、逆手で持とうとすると小指とか薬指で押す必要がある。もう少し後ろにあれば中指とかで押せて便利だろうに(バッテリーと位置の取り合いとか難しいんだろうけど)。

 表面の光学系を容易に触れられる形状なので、レーザーには手の油脂等がめちゃくちゃ強い干渉縞(orスペックルノイズ)として出てくる。指で拭うと指を動かした方向と直交する方向の線が出る。綺麗なクリーニングクロスで丁寧に拭けばやがて消える。

 白色とレーザを同時に使いたい(暗い場所で遠くのものを指し示したりしたい)場合にはこの製品は使いづらい。それ以外の(それぞれの光源を独立に使いたい)場合は特に問題はない。若干重いかな、という程度。ライトとレーザを1つの製品で出せるものはあまり多くないから、そういうのが欲しい場合はこの製品は良い選択肢(見た目を気にしないならPEQとか買う手もあるけど、品質とか法規制とか諸々考えると色々とな。。。)。

 Ark Proは本体サイズが大きいのでクリップを使わずにポケットに入れていると椅子に座ったりしたときにすぐ落ちる。Ark Proは本体質量も大きいからクリップのテンションも強くて、片手でクリップを挟むのはかなり難しい。

充電ケーブルは磁力で張り付くリング状のやつだけど、以前買ったOLIGHTの別の製品の充電ケーブルとは、物理寸法はほぼ互換だが、磁石の極性が逆という謎仕様。磁気の極性は逆だけど、電気の極性は同じ(電気極性は同じなので、最低限10Vを短絡するみたいな馬鹿みたいなことにはならない)。なかなか謎い。


 結局、インドアメインで日常的に使うのであればI3Tが最強という結論に戻る。ポケットの外側につけていても邪魔にならないし、片手で操作できる程度のクリップのテンションだし、必要であれば口に咥えてハンズフリーで使える。単4電池1本で使えるから電池の入手性もよく、時々電池を交換してやれば充電を気にせず使える。


 Arkfeld Proが一番有効に使えるシチュエーションは建設現場の現場監督とかかな、という気がする。レーザーで物を指し示したり、蛍光マーカーで書いたマーキングをUVで強調表示したりできる。停電時には白色LEDで最低限の明かりを確保できる(白色LEDはバックアップとしての用途)。ただ、建設現場の現場監督とかだとレーザー距離計くらいは標準装備のような気もするのよな。例えばボッシュのGLM 50-23だと緑色レーザだから、それをレーザーポインター代わりに使える(レーザー距離計はたいていクラス2レーザーなので積極的に人に向けないとかの配慮は必要としても、それはクラス1だって守るべきだし)。Ark ProはUVイルミネーターと白色イルミネーターがついているのが若干優位な点。あと、レーザー距離計に比べれば安価だし光学機器ほど丁寧に扱う必要はないので、気軽に使えるのが優位。

 それ以外だと、白色・レーザー・UVが一体になった製品が便利なシチュエーションってあんまり思いつかない。実際にその仕事をしている人からすると、この製品があれば便利、という状況もあるんだろうけど。


***


 QRコードでキャリブレーションボードを作れないかなと思って試しに試作

 切り出しマーカーやドットを円形で構成しているので、それぞれの位置を楕円でフィッティングすれば中心が求められる。QRコードのドットは離散的な配置だから、中心位置から元の位置を求めることで歪みを求めることができる。QRコードにはある程度任意の情報を埋め込めるから、ドットの間隔やマーカーのIDを埋め込むことで、一部のマーカーしか見えていなくても全体的な位置関係を把握できる。というような目論見。

 ある程度高性能なQRコード検出器だとこういうスカスカなQRコードもデコードできるけど、OpenCVのQRCodeDetectorだと認識できない。ということで、この手法は廃案となった。


 普通のAsymmetricCirclesGrid

 グリッドの周囲に幅・高さ・間隔・パリティをArUcoで配置している。幅はオフセット100、高さはオフセット150、間隔はオフセット200、パリティはオフセット300で、間隔はミリメートル単位、パリティの計算式は幅*高さ+間隔でエンコード。

 画像を読み込んで、キャリブレーションフラグがONのときは、まずArUcoのIDでキャリブレーションボードの有無と大きさの取得を行う。キャリブレーションボードがない場合(正常にパリティが解決できない場合)はキャリブレーションボードの認識は行わない。ドットの間隔や数はArUcoで取得できるから、広角レンズなら大面積のボードを、狭角レンズなら小面積のボードを、みたいな感じで使い分けられるし、いちいちパラメータを手動で設定する必要はない。キャリブレーションボードの自動認識はだいぶ便利。

 欲を言えば、ArUcoが他の用途のマーカーと衝突するので、別のエンコード方式を使いたい。アドレス空間(10^3)が地味に狭いのが不便なのよなー。

 幅・高さ・間隔は2桁あれば十分で、パリティは3,4桁欲しいので、トータルで10桁くらいの情報量。となると、12x12のDataMatrixに入る大きさだけど、DataMatrixは読み取りが難しい。QRコードだとバージョン1のHでも17文字入るからちょっと冗長。あと、バーコードはドットが小さいので読み取りが難しい欠点もある。ArUcoは6x6ピクセルだから多少ボケてても読める。結局OpenCVの上に乗せるならArUcoの事前定義辞書を工夫して使うのが手軽なんだよなー。


***


 試しに直方体の展開図を作成

 11種類の展開図は必ず左上向きの組(ある面の右と下に面が続く)があるから、その場所に右手座標系(反時計回り)に従ってXYZを配置し、その対面にxyzを配置してある。


 変形の形で並べ替えるとこんな感じかな

 上2段6個が1-4-1型、3段目が1-3-2型、Jが2-2-2型、Kが3-3型。

 G→Kを除く全ての変形は一つの面が隣に移動する。G→KはXの上にあるyがzの横に移動する(G→KはH→KでもI→Kでも大して変わりはない)。


***


 ArUcoのキューブをいくつか作って画像処理


 マーカーベースの姿勢・位置推定なんて簡単やろ、と思ってたけど、精度良く、かつ指で摘んで動かしたりしても問題ないような推定はかなり難しい。

 ArUcoキューブは6面に6個のArUcoが配置されていて、キューブ毎に全くユニークなArUcoを割り当てているので、例えばID0-100であれば16個のキューブが作成できる。見えているIDがどのキューブのどの面かはID/6でキューブ番号が、ID%6で面番号が得られるから、複数のキューブを混同せずに追尾できるし、面番号がわかればキューブ座標系でのマーカーの位置も得られるから、SolvePnPでキューブの位置や姿勢を推定できる。


 4x4のマーカーだとIDを誤認することが多いので、7x7のマーカーでキューブを18個作成(A4用紙1枚で9個入るので、それ2枚分)。さすがにこれだけ数を作ると慣れてくる。切り出すのがすごく面倒くさいけどな。レーザーで切りたい。。。



 ある程度正しく処理できるけど、1面しか見えていないキューブは推定誤差で姿勢が若干暴れたりする。あるいはマーカーによっては場所が飛ぶことがある。2面や3面見えているマーカーはSolvePnPで適当に位置を合わせてくれるのでほとんど暴れない。

 ArUcoは遮蔽に弱いので、例えば右下の重なっているやつの下段みたいに、少しでもマーカーが隠れると認識できなくなる。複数台のカメラで様々な方向から認識して合成させるとかすれば解決できるけど、カメラの位置関係のキャリブレーションとかが面倒になる。マーカーを小さくすれば相対的に隠れる確率が低くなるけど、今度はそもそもの認識率だったり、認識したときの姿勢の精度だったりでペナルティがありそう。


 適当に処理してテクスチャの貼り付け


 奥行きは直方体(重心原点)のカメラからの距離でソートしている。場所と姿勢によってはたまに前後関係が正しくない時がある。面単位で処理しようとすると座標変換が増えるので面倒(3Dレンダリングエンジンを作りたいわけじゃないので、そこまでは求めない)。

 テクスチャはそのまま貼るとアフィン変換が奥行きに非対応なので、綺麗に貼れない(右下の角がズレる)。テクスチャを2枚にコピーしたうえで、対角線で区切って右下を透過したものと左上を透過したものを用意しておいて、2回に分けて(1枚の四角形のポリゴンを2枚の三角形にテッセレーション処理したイメージで)貼り付けると比較的綺麗に貼れる。大面積で表示する破綻するけど、小さいスケールで表示している分には気にならない。

 これ以上複雑な描画をやりたいなら位置と姿勢をTCPとかでUnityあたりに丸投げして処理したほうが楽そう。


0 件のコメント:

コメントを投稿