
2026/10/21 5:45
ハードウェアハカーのためにステレオビジョンボードを作成した
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
著者の Ryan Walker は、低コストな Rockchip RV1103 シングルコア SoC を使用して実用的でオープンソースのステレオビジョンシステムを開発し、高価なハードウェアなしに複雑なエッジ AI が可能であることを実証しました。このプロジェクトでは、Buildroot を通じて起動可能な Linux イメージを構築するまでの完全な過程—including 特定のカーネルとドライバーの設定—から、カスタム PCB のハードウェア上の欠陥である取付位置の誤ったレンズマウントやサイズが不足したトレースなどの課題への対処(これらは将来のユニットで修正される予定)までを含んだ道のりが詳細に記されています。技術的には、このシステムは Rockchip Video Engine (RVE) を V4L2 ノードを通じて推進する専用ライブラリを活用し、基線間の相違点に対して画像パッチをマッチングさせる SAD エンジンを利用して深度を計算しています。現在のプロトタイプは参考設計として機能するだけでなく、実用的なソフトウェア最適化も備えています。Walker はコミュニティからの要望に応じて、SLAM や YOLO の統合など、今後の拡張機能を計画しています。結論的に、このイニシアチブはステレオビジョンへの低コストな参入門戸を提供し、Walker は製造上の問題を解消した時点で修正済みの PCB ユニットの販売を行う用意があり、伝統的な事前注文ではなく、重大な支援者に通知を受け取るための登録を呼び掛けています。
本文
Rockchip RV1103 による安価なステレオビジョンボードの構築と活用
本プロジェクトは、特定のチップに情熱を抱く筆者が選定した**マイクロプロセッサ「Rockchip RV1103」**を活用して開発されました。単一コア・ARM Cortex-A7 で動作し、以下の特徴を備えています。
- クロック速度: 1.1GHz
- メモリ: 64MB DDR2 RAM
- パッケージ: QFN-88(MIPI CSI-2 バス搭載)
- 用途: 内蔵演算機能と Linux 対応を兼ねた、安価でシンプルなステレオビジョンボード
このボードはロボット工学プロジェクトや単体の Linux ボードとして利用可能です。本記事ではハードウェア、ファームウェア、ソフトウェアの詳細を紹介します。
デザイン概要
PCBA(印刷回路基板)は、安価かつ高機能な4 レヤー構造を採用しています。
- トップ層: 制御インピーダンス配線(USB、MIPI、イーサネット対応)。一部信号・電源線配置。
- 内層 L1: ソリッドグラウンド(全面地)。
- 内層 L2: 信号線・電源線。
- ボトム層: 信号線・電源線。
製作上の課題と解決
初回製作では概ね成功しましたが、以下の問題が発生し、修正作業を行いました。
- SoC 不具合: リクエストしたチップが誤っており、楽しい交換作業となりました。
- レンズマウントの直径: 設計通りではなく、2.2mm ではなく 1.8mmに誤って穴が開けられていました。
- LED の発光不良: 1kΩ抵抗が小さすぎたため改善が必要でした。
- 配線幅: 0.9V 用配線が細すぎましたが、動作上問題はありませんでした。
ブートフローと起動システム
起動には、ドライバ・ブートローダー・カーネルを備えた OS が必須です。これにBuildrootを使用し、すべての要素を
sdcard.img に統合して SD カードに書き込みます。
起動段階の詳細
多くの ARM MPU システムと同様、以下の順序で起動します。
- ブート ROM (TPL): ROM に格納され、SRAM を使用して TPL(第 3 プログローダー)を実行。
- TPL: Rockchip から提供されるバイナリファイルを用いて DRAM コントローラーを設定。
- SPL (Secondary Program Loader): U-Boot を読み込み。
- U-Boot: メインのブートローダーとして動作し、カーネルを読み込む(高度な機能も備える)。
- Linux カーネル: OS コアを開始。
- イニシャルシステム (Init System): サービス開始。
Buildroot を使用することでシリアル通信経由でシェルへのアクセスが可能になり、その後 USB-C ポートをイーサネットアダプターとして利用して SSH 接続へ移行します。
ソフトウェアスタック
MVP(Minimum Viable Product)では、画像データの取得、カメラ制御、ハードウェアアクセラレーターの利用を実装しました。Buildroot がカーネル空間の要素を事前組み立てているため、ユーザー空間の構築に集中できました。
カーネル空間
抽象度の高い上位層と、ハードウェア固有の仕様を持つ低位層で構成されます。
- SoC パーフェリタル: I2C、CSI などは SoC 固有ドライバにより管理され、カメラ種別を気にせず動作します(例:OV9281)。
- 標準化: これにより V4L2(Video4Linux2)で統一されたノードと通信可能にしています。
ユーザー空間
データは
/dev/videoX を介して上位層へ送られ、カメラ制御は /dev/v4l-subdevX を経由で行われます。
- 主要デバイス:
: 画像データ取得(例:/dev/videoX
=通常キャプチャ、video0
=ストリーム ID など)。video1-3
: 露出時間設定やカメラ機能制御。/dev/v4l-subdevX
: Rockchip Video Engine にアクセス。/dev/rve
ユーザー空間アプリケーションは以下の処理を実行します。
- カメラ設定(
)/dev/v4l-subdevX - 画像データ取得(
)/dev/videoX - データ供給(
)/dev/rve
Rockchip Video Engine (RVE) プロプライエタリライブラリー
librve.a を用いてエンジンを制御し、ハードウェアビデオアクセラレーションタスクのスケジューリングを行います。
SAD エンジンとステレオビジョン原理
RVE には**SAD(Sum of Absolute Differences:絶対差の総和)**エンジンが内蔵されています。これは SoC 上で動作するハードウェアアクセラレーションブロックで、ステレオビジョンの核技術です。
SAD の計算例: 2 つの画像パッチを比較し、要素ごとの絶対差の合計を計算します。
| 画像 1 | 画像 2 | 絶対差 |
|---|---|---|
| [10, 20] | [10, 20] | [0, 0] |
| [30, 40] | [30, 40] | [0, 0] |
計算式:
SAD = 0 + 0 + 0 + 0 = 0結果として、**2 つの画像は同一(完全一致)**と判定されます。
ステレオマッチングの仕組み: 実際の大きな画像を多数のパッチに分割し、以下のように処理します。
- ベースライン: 2 つのカメラ間の距離。一方の画像を固定し、他方を水平方向にシフトさせて一致するブロックを探します。
- 深度計算:
- 非常に小さなシフトで一致 → 遠い物体
- 大きなシフトで一致 → 近距離の物体

(※イメージ: Middlebury コーンの例。緑色のボックスが SAD マッチを示し、深度ごとに視覚化されています)
次のステップと販売計画
現在、このデバイスの販売を検討しており、フィードバックを得たいと考えています。関心のある方はメール通知登録をお願いします。
- 目標: 20 件以上の登録
- 達成条件後のアクション: 修正を施した追加の 10 ボードを発注し販売予定
- 注文タイプ: 予約注文ではありません(プロジェクトを本気で支えていただける方へのご登録)
今後の開発計画
十分な関心をいただければ、以下を実装する次期プロジェクトを目指します。
- ソフトウェアのクリーンアップ
- 画像最適化
- SLAM(自律移動・マップ作成)の実装
- YOLO(物体検出)の実装
お読みいただきありがとうございます。
Ryan Walker
オープンソース技術を用いてオープンソースの世界を構築中