CanSatローバーの全景写真

次はあの台を調べよう。

Xperia+ESP32-S3+ギヤドモータ+自作筐体で、1人で開発を続けてきたCanSatローバーです。 スマホのスクリーンに格子上のレーザーを出した様子を、カメラで撮影することで地面の傾きや段差を推定でき、手軽で精密な「面」の検査を目指しています。

作品の説明

モバイル開発が流行しているいま、ハードとしての性質は無視されがちです。
「スマホが動いたっていいはずだ。」
その思いから、このCanSatローバーを開発しました。 高価なLiDARを使わずに、スマートに地面の形状を計測できます。

スマホ画面に表示した格子パターンを、視野角を絞るフィルムで線光状に近づけて地面に投影します。 その反射をカメラで撮影し、LoGフィルタや骨格化、2D-DTWを用いて格子の歪みを解析することで、 地面の緻密な凹凸を推定することを目指しています。

  • ① 格子状レーザー照射
  • ② 地面に反射
  • ③ カメラで撮影
  • ④ 格子点の位置をカメラとスクリーンの両方から調べる
  • ⑤ 3次元位置を特定
  • ⑥ 全ての格子点に④⑤を繰り返して面を再現
  • ⑦ 動く(次のカメラ画面に切り替わる)
  • ⑧ ①〜⑦を繰り返す。得られた面は2d-DTW法で同期を図る。

システム概要

CanSatシステム構成図

スマートフォン(SO53C)、ESP32-S3、モータドライバDRV8835、 エンコーダ付きギヤドモータJGA25-371、SN-VCF、AWSバックエンドの関係を示したシステム図です。

技術スタック

  • Android / App: Kotlin, Jetpack Compose, ARCore, Camera
  • Embedded: ESP32-S3 (C/C++), モータドライバ DRV8835, エンコーダ付きモータ JGA25-371
  • Cloud: AWS API Gateway, Lambda, S3(走行ログ・解析結果の保存),SageMaker
  • Vision / Math: C++ / OpenCV(LoG, skeletonization), Python(プロトタイピング) / Lie群・Lie代数(SO(3)の姿勢更新), DTW(格子パターンの整合)

主要コンポーネント

  • スマートフォン(SO53C): ローバーのメインコンピュータ。画面で格子パターンを投影し、カメラとセンサで画像・姿勢・地形を取得。
  • SN-VCF(VCF1002000-PC200): スマホ画面の視野角を絞り、格子パターンをレーザーのような線光に近づける拡散防止フィルム。(11/21到着予定)
  • ESP32-S3: モータ制御を担当するマイコン。スマホとシリアル通信で速度指令やエンコーダ値をやり取り。
  • DRV8835: ESP32からのPWM信号を受け取り、左右のギヤドモータの正転・逆転を駆動。
  • JGA25-371: エンコーダ付きギヤドモータ。左右独立の速度制御により、8の字走行など任意軌道を生成。
  • AWSバックエンド: 各時刻での姿勢、モータのデューティ比、カメラの画像、画面をAWS S3に保存し、後から可視化・分析できる基盤。

技術解説

CANSAT DRIVING / LIE ALGEBRA

CanSatの運転とLie代数による姿勢更新

モータのパルスの周波数が高いことから、回転を無限小回転の生成子が張るリー代数とみなしました。
 これを元に、最尤判定を用いて回転の最適化を行うことにしました。

TRIANGULATION

従来の三角測量と「投影パターン主導」の三角測量

従来の三角測量では、複数カメラから特徴点を対応付け、 カメラ内部パラメータ行列と姿勢を用いて3次元点を復元します。 しかし地面は特徴点が乏しく、誤対応(アウトライア)が多くなる問題があります。

本研究では、スマホ画面の格子パターンをあらかじめ既知の3次元構造として利用し、 iPhoneの顔認証のように「投影するパターン側」を制御することで、 地面の傾き推定を安定させるアプローチを取っています。

IMAGE PROCESSING

LoG・骨格化・交差点抽出による格子の構造化

格子パターンの歪みを解析するために、まずLoGフィルタによるゼロ交差を用いて線の輪郭を抽出します。 細かく途切れた部分は膨張処理で補完し、その後細線化アルゴリズムで骨格化します。 最後に3×3近傍で次数が3以上の画素を交差点として検出し、 格子のトポロジーと変形量を解析可能な形に変換しています。

2D-DTW

2次元DTW法による格子パターンの整合

格子パターンが理想状態からどのように歪んでいるかを評価するために、 1次元のDynamic Time Warping(DTW)を2次元格子に拡張した手法を検討しています。 まず1次元DTWで列同士の距離と累積コストを定義し、それを縦横方向の2次元パスに一般化することで、 地面の局所的な伸び縮みや傾きに対して頑健な整合度指標を得ることを目指しています。

実験・結果・課題

画像解析

画像に対してLoG+骨格化を適用し、 アルゴリズムの動作確認を行いました。

元の格子パターン画像
(a)元画像
LoG+骨格化後の画像
(b)LoGフィルタ
LoG+骨格化後の画像
(c)輪郭塗りつぶし
LoG+骨格化後の画像
(d)骨格化
LoG+骨格化後の画像
(e)分岐点・交差点の検出

落下実験

CanSatであるからには高所からの落下実験も大切です。
以下は3階の建物からパラシュートをつけて速度の落下実験を行ったものです。

LoG+骨格化後の画像
加速度の時間積分で測定したので上振れています。
5m/s以下なので安全性は十分でしょう。

現在の課題

現時点では、静止画ベースで格子の歪みを解析できる状態ですが、SN-VCFがまだ届いていません。(11/21到着)
走行中動画からリアルタイムに歪みを推定して地面の3次元形状にマッピングする部分はまだ途中段階です。

リアルタイム推定は未実装 SN-VCF到着後の再実験

動画リンク

実機ローバーの走行、および光格子GUIの動作、画像処理パイプラインのデモ動画です。

  • アプリSerial USB Terminalで速度を調整
  • 常に北を向く光格子GUIのデモ
アプリSerial USB Terminalで速度を調整
常に北を向く光格子GUIのデモ

まだできていない部分と今後

深層学習を用いたCanvasの効果的な使い方

現在、Canvasでは格子状の線光を描画していますが、これはまだ非効率的です。 DTW法による対応関係を用いて、より多く情報を知りたい場所に描画する予定です。

例えば、傾きや段差の分布をヒートマップやベクトル場として描画し、 危険な箇所や歪みの大きい領域を一目で把握できるようにします。 将来的にはAIを用いて、「どこを走行し、どのように照らせば効率よく情報が増えるか」を提案するシステムに発展させたいと考えています。

  • 短期: SN-VCF到着後の実機実験で静止画の精度を評価
  • 中期: 走行中動画からのリアルタイム歪み推定と効率的なCanvas表示
  • 長期: AIによる走行経路提案・Canvas上での効果的な解析

これからの改善点と開発計画

今後の開発を、ハードウェア・画像処理・クラウド連携・UI改善の4軸に分けて進めます。

  • ハードウェア: SN-VCF装着時の光量・パターン最適化、ローバー筐体の堅牢化
  • 画像処理: 実機映像に対するLoG+骨格化のチューニング・連結数の判定の工夫、2D-DTWへの実装・検証
  • クラウド: AWS上での深層学習
  • UI / Canvas: スクリーンの最適化
17
18
19
20
21
22
23
24
25
26
27
28
29
30
SN-VCFの実測
画像処理 Gフィルタ後の塗りつぶし(トポロジー)
画像処理 連結数の計算を改良
AIの最適化 描画最適化
AIの最適化 走行最適化

このプロジェクトを通して

まだ開発途中で感じていること

(※まだプロジェクト進行中なので、ここは途中経過のふり返りメモとして書いています)

・モバイルとハードウェアを両方触るプロジェクトは、想像以上に配線や物理でつまずくことが多かった。
・一方で、スマホに足を生やせた時は感動した。
・技育博の〆切に追われる中で、「とりあえず動くもの」と「ちゃんと数理で説明できるもの」のバランスの難しさも実感した。

今の自分へのメモ

  • ・SN-VCFが届いたら、まずは「一番シンプルな実験」を丁寧にやること。
  • ・動画と数式とコード、すべてをちゃんとリンクさせて残すこと(自戒の念を込めて)。

最後に

    中高の学生時代はずっと数学をしていました。
    いつしかそれは数学オリンピックが目標になり、数学的センスを磨く毎日でした。
    振り返ってみればもう少し頑張れたところも十分にあるのですが、当時は私なりにがむしゃらに進んでいました。
    しかし、数学オリンピックで華々しい活躍を見せることはありませんでした。
    5年ほど貫いてきた技術が身を結ばなかったことに私は、私の人生を疑わざるを得ませんでした。
    ですが今回のプロジェクトを通して「本質を残したDTW法の拡張が、自分なりに磨いてきた数学的センスの証」であると確信できました。
    今までやってきたことは無駄ではなかった。
    中高時代の自分の努力と、このチャンスを与えてくれた技育博の皆さんには感謝しても仕切れません。
    今回のような場所を作っていただきありがとうございました。

リファレンス & リンク

リファレンス

  • 3次元コンピュータビジョン計算ハンドブック/金谷健一、菅谷保之、金澤靖
  • 3次元回転 パラメータ計算とリー代数による最適化/金谷健一
  • 実践 画像処理入門/内村圭一・上瀧剛
  • Face ID Security Guide /iPhone

リンク