Jetson Orin Nanoカメラモジュール選び方と接続方法まとめ

Jetson Orin Nanoカメラモジュール選び方と接続方法まとめ

Jetson Orin Nanoでカメラを使いたいけれど、どのモジュールを選べばいいか迷っている方は多いはずです。CSIカメラとUSBカメラの違い、接続方法、動作確認コマンドまで実機で試した内容をまとめました。

この記事でわかること

  • Jetson Orin Nanoで使えるカメラの種類と選び方の基準
  • CSIカメラとUSBカメラそれぞれの接続手順
  • カメラが認識しないときのトラブルシューティング
  • OpenCVとGStreamerを使った映像取得の方法
  • 用途別のカメラモジュールおすすめ構成
  • Jetson Orin Nanoで使えるカメラの種類

    Jetson Orin Nanoに接続できるカメラは大きく2種類あります。

    CSI接続カメラ(ミピーカメラ)

    CSI(Camera Serial Interface)は、Raspberry Piのカメラモジュールでも採用されている規格です。Jetson Orin Nanoには22ピンのCSIコネクタが搭載されており、対応したカメラモジュールを15pin-22pin変換ケーブルで接続して使います。

    特徴をまとめると以下のとおりです。

  • 低レイテンシで映像を取得できる
  • CPUへの負荷が低く、ISP(画像処理プロセッサ)を通じて処理できる
  • ケーブル長は短め(15〜30cm程度が一般的)
  • ドライバが必要なものが多く、JetPack 6.xのバージョンとの相性に注意が必要
  • USB接続カメラ(UVCカメラ)

    UVC(USB Video Class)に対応したUSBウェブカメラです。ドライバ不要で接続直後から使えるものが多く、手軽さが魅力です。

  • 対応機器が多く入手しやすい
  • ドライバ不要で「挿せば使える」ことが多い
  • CSIカメラに比べてCPU負荷が高くなりやすい
  • 4K対応モデルや広角モデルなど選択肢が豊富
  • カメラモジュール Raspberry Pi Camera Module V2(Amazon) は用途によって選ぶべきものが変わってきます。物体検出や推論をリアルタイムで行うなら、低レイテンシのCSIカメラが有利です。プロトタイプや検証用途であればUSBカメラで十分なケースも多いです。

    CSIカメラの接続方法と動作確認

    対応モジュールの確認

    JetsonシリーズでよくつかわれるCSIカメラには以下があります。

  • Raspberry Pi Camera Module V3(Sony IMX708搭載)
  • Raspberry Pi Camera Module V2(Sony IMX219搭載)
  • Waveshare IMX219シリーズ
  • NVIDIA公式でサポートしているのはIMX219/IMX708ベースのモジュールです。JetPack 6.x系ではIMX219/IMX708のドライバが標準で含まれているので、特別なDevice Tree設定で使えます。Orin Nano Super Developer Kit(67TOPS)では最大4K/60fpsの処理が可能。

    CSIカメラの物理的な接続手順

    1. Jetson Orin Nanoの電源を切る

    2. ボード上のCSIコネクタのロックを引き上げる

    3. 15pin-22pin変換ケーブルの金属端子面を確認し、向きを合わせて差し込む

    4. ロックを押し下げてケーブルを固定する

    5. 電源を入れてOSを起動する

    ケーブルの向きを間違えると認識しないだけでなく、最悪の場合センサーを破損します。金属端子面の向きは必ず確認してください。

    GStreamerで映像を確認する

    接続後、以下のコマンドで映像が出るか確認します。

    
    gst-launch-1.0 nvarguscamerasrc sensor-id=0 ! \
      'video/x-raw(memory:NVMM), width=1280, height=720, framerate=30/1' ! \
      nvvidconv ! \
      'video/x-raw, format=BGRx' ! \
      videoconvert ! \
      autovideosink
    

    映像ウィンドウが表示されれば接続成功です。nvarguscamerasrcはJetson専用のGStreamerプラグインで、CSIカメラの映像取得に使います。sensor-idでCAM0/CAM1を指定。

    OpenCVでCSIカメラを開く

    Pythonで扱う場合は以下のコードを使います。

    
    import cv2
    
    def gstreamer_pipeline(width=1280, height=720, fps=30):
        return (
            f"nvarguscamerasrc sensor-id=0 ! "
            f"video/x-raw(memory:NVMM), width={width}, height={height}, "
            f"framerate={fps}/1 ! "
            f"nvvidconv ! video/x-raw, format=BGRx ! "
            f"videoconvert ! video/x-raw, format=BGR ! appsink"
        )
    
    cap = cv2.VideoCapture(gstreamer_pipeline(), cv2.CAP_GSTREAMER)
    
    while True:
        ret, frame = cap.read()
        if not ret:
            break
        cv2.imshow("CSI Camera", frame)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    
    cap.release()
    cv2.destroyAllWindows()
    

    GStreamerパイプラインを文字列として渡すのがポイントです。cv2.VideoCapture(0)のような番号指定だけではCSIカメラが開けないことがあります。

    USBカメラの接続方法と動作確認

    デバイスの確認

    USBカメラを挿したあと、以下のコマンドでデバイスが認識されているか確認します。

    
    ls /dev/video*
    

    /dev/video0/dev/video1が表示されれば認識されています。

    どのデバイスがどのカメラか確認したい場合は以下を実行します。

    
    v4l2-ctl --list-devices
    

    OpenCVでUSBカメラを開く

    
    import cv2
    
    cap = cv2.VideoCapture(0)
    cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1280)
    cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 720)
    
    while True:
        ret, frame = cap.read()
        if not ret:
            break
        cv2.imshow("USB Camera", frame)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    
    cap.release()
    cv2.destroyAllWindows()
    

    USBカメラはデバイス番号で指定できるので、CSIカメラより扱いが簡単です。

    カメラが認識しないときのチェックリスト

    実機で試していて詰まりやすいポイントをまとめます。

    CSIカメラが認識しない場合

  • ケーブルの向きが逆になっていないか確認する(15pin-22pin変換必須)
  • JetPack 6.xのバージョンとカメラモジュールの対応を確認する
  • 以下のコマンドでカメラデバイスが存在するか確認する
  • 
    ls /dev/video*
    dmesg | grep -i camera
    
  • nvarguscamerasrcのデーモンが動いているか確認する
  • 
    sudo systemctl status nvargus-daemon
    

    停止していた場合は以下で起動します。

    
    sudo systemctl start nvargus-daemon
    

    USBカメラが認識しない場合

  • USBポートを変えてみる(Jetson Orin NanoにはUSB 3.2とUSB 2.0が混在している)
  • 電力不足の可能性があるため、セルフパワーのUSBハブを経由してみる
  • lsusbでOS側でデバイスが見えているか確認する
  • 
    lsusb
    

    用途別のカメラ選びまとめ

    | 用途 | 推奨カメラ | 理由 |

    |——|———–|——|

    | 物体検出・リアルタイム推論 | CSIカメラ(IMX219/IMX708) | 低レイテンシ、ISPによる前処理が使える |

    | 顔認識・人物追跡 | CSIカメラまたは広角USBカメラ | 画角の広さで選ぶ |

    | ドキュメントスキャン・静止画処理 | 高解像度USBカメラ | 取り回しの良さ |

    | プロトタイプ・動作確認 | UVC対応USBウェブカメラ | ドライバ不要、すぐ試せる |

    Jetson Orin Nanoで物体検出を動かす場合、カメラの選択がパフォーマンスに直接影響します。本番運用に近い環境を作るなら、CSIカメラ Raspberry Pi Camera Module V2(Amazon) を最初から選んでおくほうが後から作業が少なくなります。

    NVMe SSD Western Digital SN770 500GB NVMe(Amazon) と組み合わせてシステムを高速化しておくと、カメラ映像を処理しながら推論する構成も安定して動きます。

    まとめ

    Jetson Orin Nanoで使えるカメラはCSIとUSBの2種類があり、それぞれ特徴が異なります。手軽に始めるならUSBカメラ、低レイテンシや推論との組み合わせを重視するならCSIカメラが適しています。

    CSIカメラは物理的な接続とGStreamerパイプラインの書き方に慣れるまでに時間がかかりますが、一度動かせてしまえばその後の開発はスムーズです。カメラが認識しない場合はnvargus-daemonの状態確認とケーブルの向きを最初にチェックしてみてください。

    次はこちら

    カメラを接続したら、次はリアルタイム物体検出に挑戦してみましょう。

  • Jetson Orin NanoでYOLOv8をリアルタイム物体検出する方法
  • Jetson Orin Nano 対応カメラモジュール おすすめ5選
  • Jetson Orin Nano TensorRT高速化チュートリアル
  • コメント

    タイトルとURLをコピーしました