産業用UVCカメラのすすめ 産業用UVCカメラのすすめ

Jetson Nano × FPD-Link IIIカメラ2台で同時にライブ表示

概要

このサンプルではJetson Nanoと防水防塵に対応したカメラDFK36CR0234-I67を使って、OSを立ち上げたときに2つのカメラのビデオストリームを同時に表示しています。

【ハードウェア構成】

【OS立ち上げ時】

サンプルイメージ

サンプルデータはPCにてダウンロードをお願いいたします。
モバイルサイトではご利用いただけません。

検証デバイス

対象ハードウェア NVIDIA Jetson Nano
検証時に使用したデバイス ・FPD-Link IIIカメラ(DFK36CR0234-I67)×2
・デシリアライザボード(MDSER-FPD-2CH)
・FAKRA IP67ケーブル1m(CA-FAKRA-IP67-1m)×2
・ミニレンズ(TBN 6 5MP)×2

■お客様にて用意していただくもの
・Jetson Nano 開発者キット B01(MIPI-CSIコネクタが二つ)
・HDMIケーブル・マウス・キーボード・モニタ・SDカード
サンプルイメージのOS OpenEmbeddedシステム
手順1.デバイスのセットアップ

Jetson Nano 開発者キット B01にFPD-Link IIIカメラを接続する際には下図のようにデシリアライザボードをJetson GPIOピンに差し込み、15ピンリボンフラットケーブルでJetson Nano開発者キットとデシリアライザーを接続するようにします。
Jetson NanoとFPD-Link IIIカメラの接続構成については下記を参照してください。

https://www.argocorp.com/UVC_camera/JetsonNano_MIPI.html

次に、カメラ本体側はIP67に対応したケーブルをカメラ本体に差して、ミニレンズに付属のゴムチューブと固定リングをはめ込んでください。この時レンズに指紋が付かないように注意してください。

上図のレンズを下記のようにカメラ本体に取り付けた後、カメラ本体にFAKRAケーブルを取り付けます。

ピントの調整をするためにモニタで画像を確認する必要があるので上図のように取り付けた状態で手順2に進みます。ピント調整が終わったら下図のようにキャップを閉めます。

※注意事項
Jetson Nano本体の電源が入っている状態でFAKRA ケーブルの抜き差しは行わないでください。

手順2.Jetson本体の電源を入れる

上記にあるサンプルイメージをmicroSDカードにイメージ書き込みます。SDカードは32GB以上のものを用意ください。イメージを書き込み後、Jetsonの電源を入れてください。
その際、下図のようにデシリアライザボードのランプが緑色ではない場合には正常に通信ができていない状態になります。

その場合、カメラに対応するドライバを更新し、再起動することで動作します。

手順3.ドライバを更新する

デシリアライザボードのランプが緑色の場合は適切なドライバが選択されていますので、この手順を飛ばしてください。
ドライバを更新するにはJetson Nanoを起動後に下図のような画面が表示されます。デスクトップにある下記のWelcomeをクリックしてブラウザを開いてください。

下記のページのFirst time setupをクリックしてください。

次に下図の「Image Sensor Configuration」の欄で該当するカメラを選択します。

上記を設定したらデバイスを再起動し、デシリアライザボードのランプが緑色であることを確認し、カメラの画面が立ち上げればセットアップ完了です。

手順4.カメラの設定内容を変更

サンプルイメージではデフォルトでデスクトップにあるStartUP.shのシェルスクリプトをログイン時に起動するようにしています。

StartUP.shの内容を書き換えるには下記の手順で実現することが可能です。

手順4ー1.カメラ表示設定を編集するコマンド

下記のようにコマンドを入れてviアプリを立ち上げます。

vi /home/Jupiter/Desktop/StartUP.sh

viとはテキストを編集するためのコマンドやソフトのことでWindowsの「メモ帳」の機能に該当します。Linux上でテキストを編集する際には、viにて編集する必要があります。ここでは詳細な解説は行いませんのでご了承ください。

手順4ー2.viで編集する

下記のテキストファイルが表示されます。下記のテキストファイルが2台のカメラを分割表示するためのスクリプトファイルです。
下記を編集するためにキーボード iを押下で編集モードにします。

camera_width=1920
camera_height=560

DISPLAY=:0 gst-launch-1.0 \
nvarguscamerasrc exposurecompensation=0 ispdigitalgainrange=”0 1” gainrange="0 1" \
wbmode=0 aeantibanding=0 awblock=false aelock=true exposuretimerange="890000 890000" sensor-id=0 ! \
nvvidconv top=0 left=0 right=$camera_width bottom=$camera_height ! \
nv3dsink window-x=000 window-y=000 window-width=$camera_width window-height=$camera_height
nvarguscamerasrc exposurecompensation=0 ispdigitalgainrange=”0 1” gainrange="0 1" \
wbmode=0 aeantibanding=0 awblock=false aelock=true exposuretimerange="890000 890000"  sensor-id=1 ! \
nvvidconv top=0 left=0 right=$camera_width bottom=$camera_height ! \
nv3dsink window-x=000 window-y=$(($camera_height+50)) window-width=$camera_width window-height=$camera_height

上記はNVIDIAが開発したGStreamerプラグインnvarguscamerasrcを使って2台のカメラを動作させています。
nvarguscamerasrc の下記の表にあるパイプラインを使う事で、Jetson ISP(Image Signal Processor)にアクセスしカメラのパラメーターの調整することができます。1台のカメラだけ使用する場合には赤字部分をすべて削除し画面の大きさを調整してください。

パイプライン 内容
camera_width=1920
camera_height=560
1920x1080のモニタの解像度に合わせて、1台のカメラの映像を1920x560に分割して表示するように変数に格納しています。
DISPLAY=:0 ディスプレイ番号を指定します。これにより、カメラからの映像が表示されるウィンドウが、画面上のどのディスプレイに表示されるかを指定します。
gst-launch-1.0 gst-launch-1.0は、GStreamerのコマンドラインツールの1つで、GStreamerパイプラインを実行するために使用されます。
nvarguscamerasrc NVIDIAが開発したGStreamerプラグインで、NVIDIAのJetsonシリーズのデバイスからカメラキャプチャを行うために使用されます。このプラグインは、Jetsonボードに直接接続されたカメラや、USBカメラ、MIPI CSI-2カメラなど、さまざまな種類のカメラに対応しています。
exposurecompensation=0 カメラの露光補正値を指定します。
ispdigitalgainrange=”0 1" ispdigitalgainrange: デジタルゲインの範囲を指定します。このコマンドでは、最小値0、最大値1を指定しています。
gainrange="0 1" アナログゲインの範囲を指定します。このコマンドでは、最小値0、最大値1を指定しています。
wbmode=0 ホワイトバランスのモードを指定します。このコマンドでは、モード0の"off"を設定しています。
(0):off
(1):auto
(2):incandescent
(3):fluorescent
(4):warm-fluorescent
(5)daylight
(6)cloud-daylight
(7)twiltight
(8)shade
(9)manual
aeantibanding=0 色むら(バンディング)を防ぐ処理を有効にするか指定します。このコマンドでは、オフになっています。
awblock=false 自動ホワイトバランスを設定するかどうかを指定します。このコマンドでは、falseでオフになっています。
aelock=true 自動露光を指定するかどうかを指定します。このコマンドでは、falseでオフになっています。
exposuretimerange="890000 890000" 露光時間範囲を指定します。このコマンドでは、890000マイクロ秒に設定されています。
sensor-id=0 使用するカメラのセンサーIDを指定します。このコマンドでは、0に設定されています。
nvvidconv top=0 left=0
right=$camera_width
bottom=$camera_height
GStreamerのビデオコンバータープラグインで、ビデオフレームを異なるフォーマットに変換するために使用されます。このコマンドでは、カメラからの映像をリサイズするために使用されています。具体的には、top、left、right、bottomの4つのパラメーターを使用して、フレームの上下左右の位置とサイズを指定しています。これらのパラメーターは、カメラからの映像を正確に必要なサイズにトリミングし、表示するのに適したサイズに変換するために使用されます。
nv3dsink window-x=000 window-y=000 window-width=$camera_width window-height=$camera_height 表示に使用されるGStreamerのプラグインで、表示ウィンドウを作成し、カメラからの映像を表示します。このコマンドでは、ウィンドウの位置とサイズを指定しています。具体的には、window-x、window-y、window-width、window-heightの4つのパラメーターを使用して、ウィンドウの左上隅のx座標、y座標、幅、高さを指定しています。
手順4ー3.編集した内容を保存し動作確認をする

編集完了したらキーボードEscキーを押下した後に、キーボード:wqを押下し編集内容を保存します。
Escキーを押下した後に:を入力するとカーソルが左下に移動します。

その後、下記のコマンドを入力して動作確認をしてください。

./home/Jupiter/Desktop/StartUP.sh

手順4-2で設定したカメラのパラメーターでモニタに画像が表示されるか確認してください。再度変更が必要であれば再度手順4-1からやり直してください。