Orbbec Gemini 335LをPi 5で動かす — 産業用ステレオカメラの導入から動作確認まで

ステレオカメラは、人間の両目と同じように左右の視差も利用するなど、複数のカメラや機能が搭載されています。主に距離情報をリアルタイムで取得できるデバイスです。
今回利用したステレオカメラはOrbbec Gemini335Lというモデルで、画像のように赤外線カメラ、レーザープロジェクターなど複数のカメラで構成されています。
ステレオカメラとRaspberry Piだけで、手軽に実現できる仕組みでした。

1.ステレオカメラで何ができるか

ステレオカメラの仕組みはシンプルです。
人間が両目を使って対象の距離感を掴むのと同じように、2つのカメラで撮影した映像の差(視差)から「その物がどれだけ離れているか」を計算します。
カメラ自体にデータ処理をするチップが搭載されているため、転送先の処理負荷が低く、Raspberry Piのような非力なデバイスでも扱えるメリットがあります。
接続もUSBケーブル1本で動作するため、導入のハードルが低いのも特徴です。

① 距離計測と障害物検知

産業用途で考えると、工場内を自動走行する無人搬送車(AMR)や、ロボットアームが作業する現場では、ステレオカメラを通して「前に何があるか」「それが何センチ先か」といった情報をリアルタイムで把握することができます。障害物を検知して停止させたり、迂回するといった制御に利用します。ステレオカメラは照明条件の変化が多い環境でも精度の高い動作を実現します。

② 寸法の計測

ステレオカメラを使えば、ベルトコンベア上を流れる荷物の縦・横・高さを非接触で自動計測することもできます。
倉庫や物流センターで人間が手動でサイズ計測をする必要がなくなるため、作業効率の向上や計測ミスの削減に繋がります。取得したデータからさらに応用も期待できます。

③ 人物検知と動線分析

Depth情報(深度情報)を使うと、カラー映像だけでは難しい定量的な検知が可能になります。
人の混雑度や導線の把握など、人の動きだけを捉えることができます。
深度は色で表現するため、個人を特定しないプライバシーに配慮した運用がしやすくなります。
工場以外の商業用途でも活用できます。

④ 品質検査

製造現場での部品(商品)検査は、作業者の熟練度によって左右されることがあります。ステレオカメラを使うことで、3Dデータとして検査することができるため、異常の検出が一定に保てます。
通常のカメラ映像と組み合わせれば、色の異常検出も同時に検出できて精度が上がるでしょう。結果として検査の速度アップも期待できます。

⑤ Pi 5で素早く検証できる

本格的な運用の前に、Pi 5といった安価なデバイスを用いてすぐに検証が可能です。専用のSDKとViewerソフトウェアを導入するだけで確認できます。接続もUSBケーブル1本です。
小規模の現場なら、産業用Raspberry Piだけでも十分な運用になるでしょう。

その他

Orbbec Geminiシリーズは、ROS2対応でロボティクス開発にもそのまま投入可能です。

2.今回の環境とViewer

以下の環境で確認しました。

環境確認

  • Raspberry Pi 5
  • Raspberry Pi OS 64bit (Bookworm)
  • Orbbec Gemini 335L(ステレオカメラ)
  • ファームウェア1.4.60
  • SDK v2.2.8
  • OrbbecViewer

OrbbecViewer

SDKとは別にダウンロードしたOrbbecViewerは、左ペインと上部メニューボタンに主に5つの機能がすぐに試せました。

  • Color
  • Depth
  • IR Left/Right
  • IMU
  • PointCloud

Color

Colorは通常のカメラ映像です。単体で使う場面は少なく、Depthと組み合わせて「どの物体が何メートル先にあるか」を視覚的に確認することで利用します。
露出やホワイトバランス、解像度などの画質調整を確認するのにも使います。基本の映像です。

Depth

Depth(深度)は、距離情報を疑似カラーで表示します。サンプルプログラムでは遠いほど赤色、近いほど青色に色分けされます。計測されない箇所は黒色でした。

IR Left/Right

IR Left/RightInfrared(赤外線)ステレオ計算に使う左右の赤外線カメラ映像で、Depthの元データです。

IMU

IMU(Inertial Measurement Unit)は慣性計測装置です。
カメラの傾きや振動を検出する加速度センサー+ジャイロセンサーの値。ロボットやドローンなど移動物体へカメラを搭載すると有用的な数値です。

PointCloud

DepthをXYZ座標の点の集合として3D表示したもの。空間の形状把握に使えます。

3.SDKとViewerのセットアップ

各種インストール前にステレオカメラの接続を確認しておきます。
USBケーブルを接続すれば、lsusbコマンドでGemini 335Lの認識を確認できます。
ちゃんとGemini 335Lの表記がありますね。

lsusb
Bus 002 Device 002: ID 2bc5:0804 Orbbec 3D Technology International, Inc Orbbec Gemini 335L

lsusb -tコマンドでUSB3.0(5000M)の接続も確認しておきましょう。
Bus 002がOrbbec Gemini 335Lでしたから、Bus 02が5000Mと分かります。

lsusb -t
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci-hcd/1p, 5000M
    |__ Port 1: Dev 2, If 0, Class=Video, Driver=uvcvideo, 5000M
    |__ Port 1: Dev 2, If 1, Class=Video, Driver=uvcvideo, 5000M
    |__ Port 1: Dev 2, If 2, Class=Video, Driver=uvcvideo, 5000M
    |__ Port 1: Dev 2, If 3, Class=Video, Driver=uvcvideo, 5000M
    |__ Port 1: Dev 2, If 4, Class=Video, Driver=uvcvideo, 5000M
    |__ Port 1: Dev 2, If 5, Class=Video, Driver=uvcvideo, 5000M
    |__ Port 1: Dev 2, If 6, Class=Human Interface Device, Driver=usbhid, 5000M

この後、SDKとViewerのダウンロード後、SDKに含まれているsetupとudevルールの設定(どちらもsh)を実行します。
インストールとビルドが終われば、Viewerやサンプルプログラムで動作確認ができます。

SDK v2.2.8のダウンロードとセットアップ

調べたところ、ファームウェア1.4.60の推奨SDKは v2.2.8です。SDK v1.xが対応しているのはファームウェアv1.3.25までで、推奨SDKはv1.10.12です。

今回試用したカメラのファームウェアが1.4.60だったため、SDKは推奨されるv2.2.8を使用しました。
なお、記事執筆時点での最新はファームウェアが1.6.0.0、SDKはv2.7.6でした。

~/stereo-camというプロジェクトフォルダを作成して作業しました。
OrbbecSDKとViewerをダウンロードして解凍します。

#SDK本体(ライブラリ、サンプル、ヘッダー)
OrbbecSDK_v2.2.8_202502141816_e0ad10e5_linux_aarch64.zip

#Viewer(GUI単体)
OrbbecViewer_v2.2.8_202502141834_3a70bf7_linux_aarch64.zip

それぞれ解凍。

mkdir ~/stereo-cam
cd ~/stereo-cam
wget https://github.com/orbbec/OrbbecSDK_v2/releases/download/v2.2.8/OrbbecSDK_v2.2.8_202502141816_e0ad10e5_linux_aarch64.zip
wget https://github.com/orbbec/OrbbecSDK_v2/releases/download/v2.2.8/OrbbecViewer_v2.2.8_202502141834_3a70bf7_linux_aarch64.zip
unzip OrbbecSDK_v2.2.8_*.zip
unzip OrbbecViewer_v2.2.8_*.zip

v2.2.8のSDK側にあるセットアップ用スクリプトを実行します。
スクリプトでは、examplesのビルドとudevルールの作成も行ってくれます。

cd ~/stereo-cam/OrbbecSDK_v2.2.8_202502141816_e0ad10e5_linux_aarch64
sudo chmod +x setup.sh
./setup.sh

途中、質問が出てきますが、どちらもyesでOKです。

4.各サンプルアプリの起動コマンド

注意:レーザー照射がされるため、カメラを目で直視しないでください。

Viewerなど、サンプルファイルを実機で実行する場合は、以下コマンドで起動できます。
SDKのフォルダ/bin内にサンプルプログラム、OrbbecViewerフォルダ直下にViewerがあります。

LIBGL_ALWAYS_SOFTWARE=1 ./OrbbecViewer

LIBGL_ALWAYS_SOFTWARE=1
OpenGLをGPUハードウェアでレンダリングせず、CPUソフトウェアレンダリングで実行させる時に指定します。

Pi 5のデフォルト(標準)設定では、ハードウェアOpenGLの設定は有効なのですが、OrbbecViewer側がWaylandセッションで未対応のため指定しました。
./OrbbecViewerだけでも起動はしますが、メイン部分が真っ黒い表示になってしまいます。

表示できない状態

同じく、Pi5 (Wayland環境) で実機からではなく、SSH接続した別のマシンから起動する場合は、更にディスプレイを指定します。
SSHセッションからはGPUに直接アクセスできないためです。

DISPLAY=:0 LIBGL_ALWAYS_SOFTWARE=1 ./OrbbecViewer

補足:
X11環境の場合は更にXAUTHORITY=$HOME/.Xauthority QT_QPA_PLATFORM=xcbオプションの追加が必要な場合があります。

5.注意点

以下、テストした時に注意する点を挙げておきます。

  • レーザー照射がされるため、人の目に直接当たらないように気をつける。
  • テストしたRaspberry Pi 5以外の一部ハードウェアでは、Depthストリームが動作しない場合がある。
  • ファームウェアのバージョンによっては、試用するSDKバージョンの組み合わせ確認が必要。
  • SDKv1.0.27のようにv1系もカメラのファームウェアバージョンによっては動作確認ができた。

画面表示の仕組みであるディスプレイサーバー がWaylandかX11かを実機で確認。

echo $XDG_SESSION_TYPE
echo $WAYLAND_DISPLAY

#結果
wayland
wayland-0

Raspberry Pi の種類やデフォルト(標準)設定によって対応が異なります。
同時に、ステレオカメラのファームウェアとSDKのバージョンによっても、構成されるファイルやスクリプトファイルの有無が異なりました。

詳しい情報は公式ドキュメントで確認してください。:https://www.orbbec.com/docs/orbbec-gemini-330-series-documentation/


記事寄稿:ラズパイダ

非エンジニアでも楽しく扱えるRaspberry Pi 情報サイト raspida.com を運営。ラズベリーパイに長年触れた経験をもとに、ラズベリーパイを知る人にも、これから始めたいと興味を持つ人にも参考になる情報・トピックを数多く発信。PiLinkのサイトへは産業用ラズベリーパイについて技術ブログ記事を寄稿。