Xperia+ESP32-S3+ギヤドモータ+自作筐体で、1人で開発を続けてきたCanSatローバーです。 スマホのスクリーンに格子上のレーザーを出した様子を、カメラで撮影することで地面の傾きや段差を推定でき、手軽で精密な「面」の検査を目指しています。
モバイル開発が流行しているいま、ハードとしての性質は無視されがちです。
「スマホが動いたっていいはずだ。」
その思いから、このCanSatローバーを開発しました。
高価なLiDARを使わずに、スマートに地面の形状を計測できます。
スマホ画面に表示した格子パターンを、視野角を絞るフィルムで線光状に近づけて地面に投影します。 その反射をカメラで撮影し、LoGフィルタや骨格化、2D-DTWを用いて格子の歪みを解析することで、 地面の緻密な凹凸を推定することを目指しています。
スマートフォン(SO53C)、ESP32-S3、モータドライバDRV8835、 エンコーダ付きギヤドモータJGA25-371、SN-VCF、AWSバックエンドの関係を示したシステム図です。
モータのパルスの周波数が高いことから、回転を無限小回転の生成子が張るリー代数とみなしました。
これを元に、最尤判定を用いて回転の最適化を行うことにしました。
従来の三角測量では、複数カメラから特徴点を対応付け、 カメラ内部パラメータ行列と姿勢を用いて3次元点を復元します。 しかし地面は特徴点が乏しく、誤対応(アウトライア)が多くなる問題があります。
本研究では、スマホ画面の格子パターンをあらかじめ既知の3次元構造として利用し、 iPhoneの顔認証のように「投影するパターン側」を制御することで、 地面の傾き推定を安定させるアプローチを取っています。
格子パターンの歪みを解析するために、まずLoGフィルタによるゼロ交差を用いて線の輪郭を抽出します。 細かく途切れた部分は膨張処理で補完し、その後細線化アルゴリズムで骨格化します。 最後に3×3近傍で次数が3以上の画素を交差点として検出し、 格子のトポロジーと変形量を解析可能な形に変換しています。
格子パターンが理想状態からどのように歪んでいるかを評価するために、 1次元のDynamic Time Warping(DTW)を2次元格子に拡張した手法を検討しています。 まず1次元DTWで列同士の距離と累積コストを定義し、それを縦横方向の2次元パスに一般化することで、 地面の局所的な伸び縮みや傾きに対して頑健な整合度指標を得ることを目指しています。
画像に対してLoG+骨格化を適用し、 アルゴリズムの動作確認を行いました。
CanSatであるからには高所からの落下実験も大切です。
以下は3階の建物からパラシュートをつけて速度の落下実験を行ったものです。
現時点では、静止画ベースで格子の歪みを解析できる状態ですが、SN-VCFがまだ届いていません。(11/21到着)
走行中動画からリアルタイムに歪みを推定して地面の3次元形状にマッピングする部分はまだ途中段階です。
実機ローバーの走行、および光格子GUIの動作、画像処理パイプラインのデモ動画です。
現在、Canvasでは格子状の線光を描画していますが、これはまだ非効率的です。 DTW法による対応関係を用いて、より多く情報を知りたい場所に描画する予定です。
例えば、傾きや段差の分布をヒートマップやベクトル場として描画し、 危険な箇所や歪みの大きい領域を一目で把握できるようにします。 将来的にはAIを用いて、「どこを走行し、どのように照らせば効率よく情報が増えるか」を提案するシステムに発展させたいと考えています。
今後の開発を、ハードウェア・画像処理・クラウド連携・UI改善の4軸に分けて進めます。
(※まだプロジェクト進行中なので、ここは途中経過のふり返りメモとして書いています)
・モバイルとハードウェアを両方触るプロジェクトは、想像以上に配線や物理でつまずくことが多かった。
・一方で、スマホに足を生やせた時は感動した。
・技育博の〆切に追われる中で、「とりあえず動くもの」と「ちゃんと数理で説明できるもの」のバランスの難しさも実感した。