ステレオカメラ調査(2023年版）



なるべく自前のカメラを作らないこと

今後も供給されるであろうステレオビジョン・ToFカメラなどを用いること

・自前のステレオライブラリを必要としないこと
・自前のIMUやタイムスタンプを必要としないこと
- image sensorそのISP(image signal processor)のレベルで以下の問題を解決していること
    - トンネルの出口での白飛びによって、トンネルの外の車両などを見失わないこと。
    - 夜間の暗い環境で、黒い衣類を着た人物を見失わないこと。
    - LEDの信号の表示が、サンプリング周期の影響で、点灯していないように見えないこと。
- 複数のカメラで
    - 複数のカメラで同期がとれた撮影ができること
- Image センサ
    - グローバルシャッタ方式であること
- システムでのステレオ画像を取得できるまでの遅延は何 msec になるのか？
- そのモジュールの外部に計算資源を必要とするのかどうか？
- 必要な計測範囲の奥行きは何m ~ 何 m なのか？
- 必要な視野角は？

そういうことに留意して、あなたの用途のステレオカメラを選んでほしい。


XVISIO　の利用



kinectは消えてしまった。
realsense機種によっては 消えてしまった。
https://www.intelrealsense.com/depth-camera-d435/
利用例 CRANE-X7 https://rt-net.jp/humanoid/archives/5069



画像データを取得できる部分



[ステレオカメラって何？原理や用途、車載用の最新動向もチェック！](https://freelance-aid.com/articles/%E8%87%AA%E5%8B%95%E8%BB%8A-articles/2007.html)

車載カメラの視覚
- リコー
    - リコー[車載ステレオカメラ](https://industry.ricoh.com/automotive/stereo-camera)
    - ![](https://industry.ricoh.com/-/Media/Ricoh/Sites/industry/automotive/stereo-camera/img/jp/stereo_camera_img02.jpg)
    - リコー[車載カメラ](https://industry.ricoh.com/automotive/camera)
- [日立オートモティブシステムズ(現　日立Astemo株式会社)](https://www.hitachiastemo.com/jp/products/ad-adas/)
- [ZMP ADAS/自動運転用ステレオカメラRoboVision3](https://www.zmp.co.jp/products/sensor/robovision/robovision3)
- ZF（ドイツ）
- ボッシュ（ドイツ）
- http://www.bosch.co.jp/tms2017/pdf/CC-ProductDataSheet-SVC-JA.pdf
- https://www.bosch-mobility.com/en/solutions/camera/multi-purpose-camera/


----
## ライブラリが供給されているステレオカメラを利用するのがよいと考える。
理由：
- 自分たちが勝負するところは、ステレオ計測ではないはずだ。
- タイムスタンプ問題、IMUを持っているか。

https://www.e-consystems.com/jp/default-jp.asp
[USB 3 カメラ Tara-USBステレオビジョンカメラ](https://www.e-consystems.com/jp/3D-USB-stereo-camera-jp.asp#software)
![](https://www.e-consystems.com/images/See3cam/See3CAM_Stereo/thumb-tara_usb3_stereo_camera-with-casing.png)
![](https://www.e-consystems.com/images/See3cam/See3CAM_Stereo/Tara-SDK-Block-Diagram.png)
OpenCV Layerを持つ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83761/dd01fd56-c6da-8481-d11d-5bd868256d61.png)

ブロック図の中にIMUが含まれている。

## [ITD Lab Intelligent Stereo Camera](https://itdlab.com/wordpress/)


[基線長(baseline lenghth) Resolution FOV での距離精度](https://itdlab.com/technology/)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83761/83133f23-e84b-1e04-9333-dbdeb8ec4d59.png)
[引用元](https://itdlab.com/business/)

<iframe width="560" height="315" src="https://www.youtube.com/embed/VZojpU3QpP8?si=FCD_y0lUPlMZQ-Xj" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>

pdf [製品カタログ　Intelligent Stereo Camera 評価ユニット ISC-1000VM, ISC-100XC](https://itdlab.com/wordpress/wp-content/uploads/2020/12/isc100_profile_j.pdf)
残念なことに、タイムスタンプの問題と、IMUについての情報が不足している。
近距離側が 0.5mからと遠方側に性能がでることを優先する設計になっている。


このITD Labの代表取締役会長　は実吉敬二さんで、(株)SUBARU でステレオカメラの開発を行った方である。
そのため、車載カメラで距離計測をする分野での距離範囲を意図したものになっている。
FPGAでの使用を前提としており、いわばステレオカメラ開発キットのような状況であり、USBカメラをつないですぐ使えるタイプのカメラとは違っている。

----
[SeerSense™ DS80 Module]()
https://www.stereolabs.com/zed-2/
---------------------------
## [stereolab zed-x](https://www.stereolabs.com/zed-x/)
グローバルシャッターで 1200p 60fps
IMUがちゃんとある。
Neural Depth Engine 2
stereolabで開発したDepth計算のライブラリを使っている。
OpenCVには深層学習以前のステレオ計算のライブラリが含まれている。
OpenCVに含まれる従来の対応点の視差を元にdepthを算出しているものでは、欠損点ができて、その点に対してdepthの推定ができないものになっている。
深層学習によって、単眼カメラでも視差を推定できる学習が存在する。
もちろん、ステレオ画像を用いたものの方が、十分に根拠のある奥行きを算出できる。
"Neural Depth Engine 2" とはきっとそのようなライブラリなのではないかと推測する。

>マルチカメラ同期
接続されている複数のデバイスのハードウェア同期をフレームレベルで 100 マイクロ秒以内に実行します。 同じシーンの複数の RGB イメージと深度イメージをすべて位置を合わせてキャプチャします。

SDK Downloads を読むと、たとえば CUDA 12のサポートOSにWindows, Ubuntu, Jetpackが含まれている。 

### [ZED MINI](https://store.stereolabs.com/en-jp/products/zed-mini)
こちらbaseline が 50 mm と短いタイプ。
そのためDepth rangeはZED Xの半分になる。

この会社のステレオカメラのインタフェースとしては、USBのものの他にGMSL2のインタフェースによりものとがある。各人の用途によって使い分けること。

#### Stereolab ZED シリーズに関連したソフトウェア
https://github.com/stereolabs/zed-unity
https://github.com/stereolabs/zed-ros2-wrapper
Github [Visual SLAM using Stereo Camera for Autonomous Vehicles.](https://github.com/Pooja71/Visual-SLAM-using-Stereo-Camera-for-Autonomous-Vehicles)

#### StereoLabs のdepthmap
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83761/a79562fa-bd4d-2768-6cc7-f560a06b68f4.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83761/b108ba55-9220-01ac-86e4-77f145274378.png)

[引用元](https://stereolabs.medium.com/depth-tracking-and-detection-in-computer-vision-using-rgb-images-7647e0d04237)

 StereoLabs は深層学習を用いたdepth計算をしている。そのため、従来の対応点マッチングで視差を算出できた点についてだけdepthが求まるライブラリと結果が違ってくる。対応点がとれない画素についても、depthが返ってくる。


## Teledyne FLIR

[ステレオビジョン](https://www.flir.jp/iis/machine-vision/stereo-vision/)

[深度認識のためのカスタム埋め込みステレオシステムの構築方法](https://www.flir.jp/discover/iis/machine-vision/how-to-build-a-custom-embedded-stereo-system-for-depth-perception/)

## XVISIO
ToF カメラであると同時にFisheye Stereo カメラ(grayscale)を持ち、stereo depthを計算するengineを持つ(更にRGBカメラ)。RGBカメラがToFの視野角に近いので、ToFの画像とRGB画像を対応付けやすい。

https://www.hms-global.com/product/A-series
https://www.xvisiotech.com/product-center/
https://www.xvisiotech.com/product/seersense-ds80/

#### 推測：
fisheye camera がgrayscale なのは以下の理由によると推測する。
- 通常の視差計算ライブラリはgrayscale で行う。
- だからRGB画像をグレースケールに変換する処理がないほうが遅延が減る。
- 魚眼カメラになると周辺部ほど変化が大きくなる。
- そのため、beyer配列での各画素でのRGBの推定では、影響を受けやすい。
- そのような周辺部のRGB画素値をグレースケール化するよりは、最初からグレースケールで撮影したほうがのぞましい。

## RealSense
https://www.intelrealsense.com/
https://www.intelrealsense.com/depth-camera-d457/
[Introduction to Intel® RealSense™ Visual SLAM and the T265 Tracking Camera](https://dev.intelrealsense.com/docs/intel-realsensetm-visual-slam-and-the-t265-tracking-camera)
intel RealSense [NVIDIA Jetson installation](https://dev.intelrealsense.com/docs/nvidia-jetson-tx2-installation)
Github [SLAM with D435i](https://github.com/IntelRealSense/realsense-ros/wiki/SLAM-with-D435i)

## [Leopard Imaging](https://leopardimaging.com/stereoscopic-cameras/)

同社では、図に示したタイプのステレオカメラを提供している。
カメラの取り付け位置を自由に変更できるものが多い。
![Screenshot from 2023-12-18 14-47-44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83761/1eba53dd-edb5-cd85-4799-28fd5cc62a93.png)

[引用元](https://leopardimaging.com/stereoscopic-cameras/)



[ロボット開発に最適なAI機能搭載ステレオカメラ「M4.5S」「M4.3WN」とSoC[NU4000」取扱い開始のお知らせ](https://www.value-press.com/pressrelease/305156)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83761/26c17761-2c79-73a6-7a20-4f5aa9048f5e.png)
[引用元](https://www.value-press.com/pressrelease/305156)

## 比較表に含めるべき項目
FoV(水平)	
FoV(垂直)	
FoV（対角)	
画素数(水平)	
画素数(垂直)	
サンプリングレート	
グローバルシャッター	
IMUの有無	
基線長(baseline)	
深度範囲	
インタフェース	
計算リソースの有無


### 基線長(baseline) を選べるステレオカメラがほしいときには
- カメラの位置を固定する前のステレオカメラモジュールを販売している業者があります。
- それを適切に機械的な要因や温度変化でたわんだりしないようなベースに固定してします。
- それをキャリブレーションを実施して利用する。

#### そのようなステレオカメラの部品の例
https://docs.arducam.com/Nvidia-Jetson-Camera/Multi-Camera-CamArray/Multi-Camera-CamArray/


----
以下のページでは奥行きの推定のためにどういう手法があるのか、それぞれの手法の特徴を書いている。

https://www.inrevium.com/product/depth_sensing/

---

https://www.macnica.co.jp/business/semiconductor/articles/analog_devices/136049/

## ロボットの視覚

https://nextage.kawadarobot.co.jp/3183669

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83761/7a0046aa-0135-f407-7b4e-f0910549ca12.png)


---------------------------------
アシモの場合、頭部の視覚センサの他に腹部に床面センサを持っている。

![Screenshot from 2023-09-03 20-39-46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83761/4ddd994e-1ec6-6408-6bb6-13b845eb10a2.png)

https://www.honda.co.jp/factbook/asimo/201111/ASIMO2011-11_ja.pdf


[SDKがオープンソース化したステレオカメラが市販されている](https://qiita.com/nonbiri15/items/320591d7cd80b1d304d5)

[ZED2はステレオカメラ以上のものになろうとしている](https://qiita.com/nonbiri15/items/e3fd6ec51f7c97ddd077)

[市販 Stereo Cameraについて調査中](https://qiita.com/nonbiri15/items/d341e68f9aa9345211a2)

[全方位ステレオカメラを調査中](https://qiita.com/nonbiri15/items/e902681ef1f2570af1e9)

[カメラ関連の自前記事の整理](https://qiita.com/nonbiri15/items/df5a18cd6007594e0924)

[ステレオカメラの領域にも深層学習が及んできている](https://qiita.com/nonbiri15/items/72be0f44a7cea2c3b397)

[市販ＴoＦカメラについて調査中](
https://qiita.com/nonbiri15/items/ada1219d5a5f9ef8a32e)

------------------------------
[人共存型双腕スカラロボット「duAro」](https://mavic.ne.jp/indutrialrobot-sucara-duaro/)

[【協働ロボットデモ】双腕ロボットによる組み立て](https://www.youtube.com/watch?v=HoLpJseZ7wU)

[入れ損ねても仲間がカバー、2台の人型協働ロボットが食材盛り付け連携](https://monoist.itmedia.co.jp/mn/articles/2306/14/news082.html)


## ROS2で動作が確認できているステレオカメラ
- [LIPSedge](https://www.lips-hci.com/ja)
- ZED
- [RealSense](https://www.intelrealsense.com/)
    - [英語のWiki](https://en.wikipedia.org/wiki/Intel_RealSense)でも状況の説明は書かれている。
それによると、RealSense部門を縮小している。いくつかの製品のEOLが発布されているが、
ステレオ製品ラインの大部分はまだ入手可能であり、その間に新製品がリリースされましたとのことである。

- [ティアフォー社製カメラ](https://www.paltek.co.jp/solution/tier4/index.html)
ティアフォー社のカメラは、車載向けに特化したカメラになっている。
    - ハイダイナミックレンジ(HDR)
    - 高感度・低ノイズ
    - LEDフリッカー抑制
- [Orbbec](https://www.orbbec.com/)のステレオカメラもROS2対応している。
[OrbbecSDK_ROS2](https://github.com/orbbec/OrbbecSDK_ROS2)
- OAK-D もROS2に対応している。
[Deploy with Raspberry Pi](https://docs.luxonis.com/hardware/platform/deploy/to-rpi/)
[Luxonis OAK-D-LITE Depth AIカメラ（固定焦点版）](https://www.switch-science.com/products/7651?srsltid=AfmBOoq2mCRcP3Foi21C4FXdiNMODuIuVVrUOyBAuUdzPYo7hPoj3vNy)

[ROS2でOAK-D lite depth AI Cameraを動作させる 1](https://qiita.com/Nkn4ryu/items/3637e8454ddac6c7ed29)

# マシンビジョンの場合のアプローチ
- パターン光をプロジェクタで照射して、カメラで撮影する「AI＋産業用ロボットの領域において、
産業用3Dカメラ＋画像処理ソフトウェア＋ロボット経路計画ソフトウェアを
独自開発・製造・販売する3Dカメラメーカー」ことで、3D計測する手法がある。
- 構造光法、構造化照明型3Dカメラとか、構造光型3Dスキャンとか、光切断法とか、いろんな呼び方がある。
- ２台のカメラだけでは、輪郭近くで対応点がとれない部分が生じる。
- ４台のカメラを４正方形状に配置して、それらから3D計測を行っている例もある。
　この場合、輪郭近くでの対応点の欠損が減る。
 ## マシンビジョンのソリューションを提供している会社の例
 ## Keyence
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83761/e2113c61-be29-b05d-ca9d-19ce9a40cd21.png)

## [Mech Mind](https://mech-mind.co.jp/)

「AI＋産業用ロボットの領域において、
産業用3Dカメラ＋画像処理ソフトウェア＋ロボット経路計画ソフトウェアを
独自開発・製造・販売する3Dカメラメーカー」


商用ライブラリでステレオ計測について提供しているソフトウェア会社
## 例：　MATLAB
[ステレオ ビデオからの深度推定](https://jp.mathworks.com/help/vision/ug/depth-estimation-from-stereo-video.html)

>例題の内容：
ステレオ平行化のための算出済みのパラメータを読む。
左カメラの動画、右カメラの動画を読む。
左カメラのフレーム、右カメラのフレームをステレオ平行化する。
disparityMap = disparitySGM(frameLeftGray, frameRightGray);
を計算する。
３次元の点群に換算する。
人を画像を検出して、人までの３次元的な距離を求める。

[Lidar Toolbox 入門](https://jp.mathworks.com/help/lidar/getstarted.html)
Velodyne だけサポートしている。

こういったライブラリを使うことで、
最初のとっかかりをつかむことができます。

## LINX 社 HALCON ライブラリ

https://linx.jp/product/mvtec/halcon/3d_vision/

マルチステレオビジョン・光切断による3D計測ライブラリを含む。
ただし、光切断による計測には、光源・カメラなどがいるので、単にライブラリを買ってくるだけではいけない。
光源・カメラの選択・データ取得の問題が別にある。

## ライブラリ
- そのステレオカメラは、どれだけライブラリをサポートしていますか。
- また、そのカメラでの利用実績はどれくらいありますか。

## そのステレオカメラはどれくらい継続して供給されてきましたか
- 継続的に生産が続いてくれそうですか。

## 組み込み屋が、ステレオカメラ・ToFカメラを検討するときに考慮すること
- 利用する対象のCPU/GPUボードで、その機種が対応されているかどうか
- CPUの種類
- OSの種類とバージョン
- GPU利用の有無
- カメラとのボード間のインタフェース(例：USB3.1 type C)
- デバイスドライバの状況
- SDKの状況
- CPUボード側に必要なライブラリ
	例：CUDAのライブラリ
	例：OpenCVのライブラリ
	例：OpenVinoのライブラリ
こういったものを考えること。



### NVIDIA Jetson Xavier AGX 開発キットで複数の ZED カメラを使用する
[Using multiple ZED cameras on NVIDIA Jetson Xavier AGX devkit](https://support.stereolabs.com/hc/en-us/articles/360043104833-Using-multiple-ZED-cameras-on-NVIDIA-Jetson-Xavier-AGX-devkit)


## Microsoft がKinectの開発を停止しましたが、継承先があります。
[マイクロソフトが「Azure Kinect DK」生産終了、中国メーカーが技術継承へ](https://www.moguravr.com/azure-kinect-dk-discontinued/)

https://www.orbbec.com/products/


---
英語での役立ちそうな情報
https://rosindustrial.org/3d-camera-survey

## そのStereoCameraはどの程度サポートされているか、使われているか
- 対象のボードの種類、対象のインタフェース、対象OS
- 物理的に接続できていることと、デバイスドライバーが提供されていることとは別物である。
- ROS, ROS2を使う場合、利用例の情報が入手できるか？
- 利用できる言語とそのバージョンはどうか？

## シミュレーション環境でもそのカメラを使いたいかどうか？
- シミュレーション環境でもそのデバイスが使いたい場合には、そのシミュレーション環境でそのカメラのシミュレータが用意されているかを調査する。
- 用意されている場合には、環境の点群データから、カメラの入力画像を計算したり、そのカメラが算出するはずのdepthを取得できるらしい。


以上のように利用する目的によっては、利用できるステレオカメラが絞られる。