Skip to content

rt-net/jetson_nano_csi_cam_ros

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

26 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

jetson_nano_csi_cam

Jetson Nano DevKit B01 + dual CSI cameraのROSドライバです。

このROSパッケージはJetson Nano DevKit B01に取り付けたCSI camera(1つまたは2つ)の画像をGStreamerまたはJetson Linux Multimedia API経由で取得し、ROSのsensor_msgs/Imageとして配信するためのものです。

launchファイルでgscamを呼び出し、GStreamerまたはJetson Linux Multimedia APIを経由して

  • 解像度とフレームレートの設定
  • カメラのキャリブレーション
  • 複数のCSIカメラ画像の取得・配信

を実現しています。


インストール方法

jetson_nano_csi_camを動かすためには本リポジトリとその依存関係にあるソフトウェアをダウンロードします。

gscamの詳細については、ROS Wikiまたはros-drivers/gscam@GitHubを参照してください。

以下のソフトウェアがインストールされたNVIDIA Jetson Nano DevKit B01にSainSmart IMX219 Camera Module for NVIDIA Jetson Nano Board (160 Degree FoV)を2つ接続して動作確認をしています。

依存関係

  • GStreamer-1.0 または Jetson Linux Multimedia API(JetPackとともにインストールされます)
  • ROS Melodic
  • GStreamer-1.0をサポートしたgscam

1. jetson_nano_csi_camのダウンロード

このリポジトリをcatkin_wsにダウンロードします。

cd ~/catkin_ws/src
git clone https://github.com/rt-net/jetson_nano_csi_cam_ros.git 

2. gscamのダウンロードとGStreamer-1.0対応

まずはじめにgscamに必要なgstreamerの関連パッケージをインストールします。

sudo apt-get install gstreamer1.0-tools libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-good1.0-dev

gscamcatkin_wsにダウンロードします。

cd ~/catkin_ws/src
git clone https://github.com/ros-drivers/gscam.git

ダウンロード後、./gscam/Makefileを編集してCMakeのオプションを変更します。以下のように-DGSTREAMER_VERSION_1_x=Onを追加します。

EXTRA_CMAKE_FLAGS = -DUSE_ROSBUILD:BOOL=1 -DGSTREAMER_VERSION_1_x=On

ダウンロードしてきたgscamディレクトリ内で以下のコマンドを実行すると簡単に編集できます。

sed -e "s/EXTRA_CMAKE_FLAGS = -DUSE_ROSBUILD:BOOL=1$/EXTRA_CMAKE_FLAGS = -DUSE_ROSBUILD:BOOL=1 -DGSTREAMER_VERSION_1_x=On/" -i Makefile

3. ビルド&セットアップ

jetson_nano_csi_camgscamをビルドしセットアップします。

cd ~/catkin_ws
catkin build
source devel/setup.bash

使い方

Quick Start

CAM0として接続されたカメラストリームのデータを/csi_cam_0/image_rawのROSトピックとして配信するには以下のコマンドを端末で実行します。

roslaunch jetson_nano_csi_cam jetson_csi_cam.launch sensor_id:=0 width:=<image width> height:=<image height> fps:=<desired framerate>

CAM0とCAM1に接続されたカメラストリームのデータをそれぞれ/csi_cam_0/image_raw/csi_cam_1/image_rawのROSトピックとして同時に配信するには以下のコマンドを実行します。

roslaunch jetson_nano_csi_cam jetson_dual_csi_cam.launch width:=<image width> height:=<image height> fps:=<desired framerate>

映像取得・配信

映像配信

ROSトピックとしてカメラの映像を配信するには以下のコマンドを実行します。

roslaunch jetson_csi_cam jetson_csi_cam.launch

このlaunchでは配信用のノードを起動するだけです。配信されている映像を確認するには何かしら別の手段を利用します。
映像が配信されているかを簡単に確認するには、端末を起動してrostopic listを実行し、配信中のROSトピック一覧から/csi_cam_0/image_rawという名前のトピックを探します。

オプション

roslaunchする際のオプションで映像配信のパラメータを決めることができます。

roslaunch jetson_csi_cam jetson_csi_cam.launch width:=1920 height:=1080 fps:=15

その他の引数についてはroslaunchの際に<arg_name>:=<arg_value>形式でオプションを指定できます。

jetson_csi_cam.launchの引数
  • sensor_id (default: 0) -- カメラのID
  • width (default: 640) -- 配信する映像の横幅
  • height (default: 480) -- 配信する映像の高さ
  • fps (default: 30) -- 配信するフレームレート(解像度次第ではこのフレームレートに満たない場合があります)
  • cam_name (default: csi_cam_$(arg sensor_id)) -- camera infoに対応したカメラ名
  • frame_id (default: /$(arg cam_name)_link) -- tfに使用するカメラのフレーム名
  • sync_sink (default: true) -- appsinkを同期設定(フレームレートを低く設定して問題が起きたときにこのオプションをfalseにすると、問題が解決する場合があります)
  • flip_method (default: 0) -- 映像配信する際の画像の反転オプション

映像配信のテスト

カメラ映像の確認

簡単にカメラ映像を確認するには、GNOME等のデスクトップ環境で端末を起動してrqt_img_viewを実行します。
起動した画像ビューアの左上のプルダウンメニューからカメラ映像のトピックを選択します。 jetson_csi_cam.launchのデフォルト設定の場合は/csi_cam_0/image_rawです。

フレームレートの計測

次のコマンドでROSトピックの更新頻度を確認できます。

rostopic hz /csi_cam_0/image_raw

カメラ映像のROSトピックの更新頻度 == 配信されている映像のフレームレートではありませんが、ほぼ一致します。 設定したフレームレートよりも低い場合は以下の原因が考えられます。

  • Jetson NanoのPowerManagementがパフォーマンスを制限するモードになっている
  • Jetson Nanoと映像を受信しているコンピュータ間のネットワークが不安定
  • 接続しているカメラモジュールの最大フレームレート以上の値を指定した

カメラのキャリブレーション

jetson_nano_csi_camはカメラのキャリブレーションを簡単にできるようにカメラ情報もROSトピックとして配信しています。
カメラ情報を実際に使用しているカメラに合わせるにはROS Wikiのmonocular camera calibration guideに従ってキャリブレーションしてください。キャリブレーションをしなくてもカメラ映像の配信は可能です。 その際、以下の情報を参考にしてください。

  1. ROS Wikiの説明にあるようにチェッカーボードの印刷が必要です。

  2. 映像配信にて説明したroslaunchコマンドでカメラの映像配信をします。

  3. imagecameraオプションとチェッカーボードのサイズを以下のコマンドのように指定し、キャリブレーションを行います。

rosrun camera_calibration cameracalibrator.py --size 8x6 --square <square size in meters> image:=/csi_cam_0/image_raw camera:=/csi_cam_0

カメラに映る範囲内である程度チェッカーボードを動かすと「CALIBRATE」ボタンが押せるようになるので、キャリブレーションファイルを書き出します。

ライセンス

(C) 2020 RT Corporation

各ファイルはライセンスがファイル中に明記されている場合、そのライセンスに従います。特に明記されていない場合は、Apache License, Version 2.0に基づき公開されています。
ライセンスの全文はLICENSEまたはapache.org/licenses/LICENSE-2.0から確認できます。

謝辞

関連資料