1.2. ADLINK ROSCube RQX-59G 用 TIER IV カメラスタートガイド#
注意
このドキュメントはADLINK RQX-59Gのユーザー向けです
1.2.1. 準備#
1.2.1.1. 必須項目#
ADLINK ROSCube-X RQX-59G
JetPack5.1.2 (L4T R35.4.1)がインストール済み
GMSL2 同軸ケーブル (FAKRA - mini FAKRA、1:4)
TIER IV 車載 HDR カメラ C1, C2 または C3
1.2.1.2. カメラ接続#
まず、RQX-59G の電源がオフになっていることを確認します。
カメラをケーブルの FAKRA コネクタ (シングル FAKRA コネクタ側) に接続します。次に、ケーブルのミニ FAKRA コネクタを RQX-59G の GMSL2 ポートに挿入します。
FAKRA コネクタおよびミニ FAKRA コネクタのロックピエロの方向が正しいことを確認してください (図 1 ~ 3)。
1.2.2. 電源を入れてカメラの画像ストリーム出力を確認します#
1.2.2.1. 電源オン#
RQX-59Gの電源を投入し、パワーオンLEDが青色に点灯することを確認します。
1.2.2.2. ログイン#
起動ウィンドウで、パスワードを入力してログインします。
デフォルトの設定は以下のとおりです。
ユーザー |
ロス |
パスワード |
アドリンククロス |
1.2.2.3. カメラドライバーのインストール#
バージョン 1.5.0 で追加: Unified driver deb PKG can be used for RQX-59G. Before 1.5.0, please use dedicated deb PKG as described below.
Githubからカメラ ドライバー deb パッケージを入手します。
提供されたドライバー パッケージ ファイル (tier4-camera-gmsl_1.4.2_59g_arm64.deb
) を RQX-59G 内の任意のディレクトリ (例 ~/driver
) にコピーします。次に、以下のコマンド ラインの指示に従います。
apt パッケージを更新しています。インターネット接続が必要です。次に、「apt install」コマンドを使用してドライバーをインストールします。
*.dtbo
ファイルが/boot
に生成されていることを確認してください。# Install sudo apt update sudo apt install make debhelper dkms sudo apt install ~/driver/tier4-camera-gmsl_*.*.*_arm64.deb # Confirm /boot/tier4-*.dtbo exists ls /boot/*.dtbo /boot/tier4-imx490-gmsl-device-tree-overlay-roscube-orin-r354.dtbo /boot/tier4-isx021-gmsl-device-tree-overlay-roscube-orin-r354.dtbo /boot/tier4-isx021-imx490-gmsl-device-tree-overlay-roscube-orin-r354.dtbo ...
各ポートにカメラを割り当てるには、
configure-by-hardware.py
スクリプトを使用できます。詳細については、カメラ ドライバーの README ページ を参照してください。ユーザーは、各ユーザーの設定に適切なオーバーレイ コマンドを指定する必要があります。# For RQX-59G # Please be noted that you need to specify "1=" (not "2=") sudo /opt/nvidia/jetson-io/config-by-hardware.py -n 1="TIERIV ISX021 GMSL2 Camera Device Tree Overlay" # Confirm kernel_tegra234-p3701-0004-rqx590-nosuspend-user-custom.dtb has been generated ls /boot/*.dtb /boot/kernel_tegra234-p3701-0004-rqx590-nosuspend.dtb /boot/kernel_tegra234-p3701-0004-rqx590-nosuspend-user-custom.dtb # Then, shutdown the system sudo shutdown -h now
/opt/nvidia/jetson-io/config-by-hardware.py -l
を実行して、利用可能なオーバーレイ オプションを確認できます。sudo /opt/nvidia/jetson-io/config-by-hardware.py -l [sudo] password for ros: Header 1 [default]: Jetson AGX CSI Connector Available hardware modules: 1. TIERIV IMX490 GMSL2 Camera Device Tree Overlay 2. TIERIV IMX728 GMSL2 Camera Device Tree Overlay 3. TIERIV ISX021 GMSL2 Camera Device Tree Overlay 4. TIERIV ISX021 IMX490 GMSL2 Camera Device Tree Overlay 5. TIERIV ISX021 IMX490 IMX728 GMSL2 Camera Device Tree Overlay
たとえば、すべての GMSL ポートを C2 カメラに割り当てるには、overlay コマンドは次のようにする必要があります。
sudo /opt/nvidia/jetson-io/config-by-hardware.py -n 1="TIERIV IMX490 GMSL2 Camera Device Tree Overlay"
C1 と C2 の両方に GMSL ポートを割り当てるには、overlay コマンドを次のようにする必要があります。
sudo /opt/nvidia/jetson-io/config-by-hardware.py -n 1="TIERIV ISX021 IMX490 GMSL2 Camera Device Tree Overlay"
この場合、ポート 1、2、5、6 は C1 に割り当てられ、ポート 3、4、7、8 は C2 に割り当てられます。
デバイス オーバーレイの詳細については、デバイス ドライバー GitHub リポジトリを参照してください。
1.2.2.4. RQX-59Gがカメラを認識するか確認する#
ターミナル ウィンドウを開き、次のコマンドを入力します。 /dev/videoX
が返された場合、カメラはビデオ デバイスとして正しく認識されています。
ls /dev/video*
/dev/video0
/dev/video1
.
.
.
/dev/video7 # When 8 cameras are connected
1.2.3. GStreamer を使用してカメラ出力を視覚化する#
ターミナル ウィンドウを開き、次のコマンドを入力します。 Gstreamerが起動し、新しいウィンドウにカメラ画像ストリームが表示されます(図1)。 4、図5)。
さまざまな GStreamer の例については、GStreamer コマンドの例 も参照してください。
1.2.3.1. ケース 1: 1 台の C1 カメラが接続されている#
# If cameras are running in slave mode, execute this i2cset command first
i2cset -f -y 2 0x66 0x04 0xff
# Start streaming
gst-launch-1.0 v4l2src io-mode=0 device=/dev/video0 do-timestamp=true ! 'video/x-raw, width=1920, height=1280, framerate=30/1, format=UYVY' ! videoscale ! xvimagesink sync=false
1.2.3.2. ケース 2: 8 台の C1 カメラが接続されている#
# If cameras are running in slave mode, execute this i2cset command first
i2cset -f -y 2 0x66 0x04 0xff
# Start streaming
gst-launch-1.0 v4l2src io-mode=0 device=/dev/video0 do-timestamp=true ! \
'video/x-raw, width=1920, height=1280, framerate=30/1, format=UYVY' ! \
xvimagesink sync=false v4l2src io-mode=0 device=/dev/video1 do-timestamp=true ! \
'video/x-raw, width=1920, height=1280, framerate=30/1, format=UYVY' ! xvimagesink sync=false \
v4l2src io-mode=0 device=/dev/video2 do-timestamp=true ! \
'video/x-raw, width=1920, height=1280, framerate=30/1, format=UYVY' ! xvimagesink sync=false \
v4l2src io-mode=0 device=/dev/video3 do-timestamp=true ! \
'video/x-raw, width=1920, height=1280, framerate=30/1, format=UYVY' ! xvimagesink sync=false \
v4l2src io-mode=0 device=/dev/video4 do-timestamp=true ! \
'video/x-raw, width=1920, height=1280, framerate=30/1, format=UYVY' ! xvimagesink sync=false \
v4l2src io-mode=0 device=/dev/video5 do-timestamp=true ! \
'video/x-raw, width=1920, height=1280, framerate=30/1, format=UYVY' ! xvimagesink sync=false \
v4l2src io-mode=0 device=/dev/video6 do-timestamp=true ! \
'video/x-raw, width=1920, height=1280, framerate=30/1, format=UYVY' ! xvimagesink sync=false \
v4l2src io-mode=0 device=/dev/video7 do-timestamp=true ! \
'video/x-raw, width=1920, height=1280, framerate=30/1, format=UYVY' ! xvimagesink sync=false \
参考
複数カメラを接続し、上記のコマンドでカメラを起動してカメラの起動が不安定な場合、こちらのページを参照ください。
1.2.3.3. ケース 3: C2 カメラ 1 台が接続されている場合#
gst-launch-1.0 v4l2src io-mode=0 device=/dev/video0 do-timestamp=true ! 'video/x-raw, width=2880, height=1860, framerate=30/1, format=UYVY' ! videoscale ! xvimagesink sync=false
1.2.3.4. ケース 4: C3 カメラ 1 台が接続されている場合#
gst-launch-1.0 v4l2src io-mode=0 device=/dev/video0 do-timestamp=true ! 'video/x-raw, width=3840, height=2160, framerate=20/1, format=UYVY' ! videoscale ! xvimagesink sync=false
複数のC2/C3カメラを接続する場合
RQX-59G では、8 つの GMSL ポートに対して 4 つのデシリアライザが実装され、2 つの GMSL ポートが 1 つのデシリアライザとその帯域幅を共有します。
2 つの C2 カメラが 1 つのデシリアライザーで動作できることを確認しましたが、特に最大 4 つのカメラを接続している場合は、デシリアライザーごとに 1 つのカメラだけを使用するのが最善です。
例えば:
ポート 1 および 2 ... 推奨されません
ポート 3 および 4 ... 推奨されません
ポート 1 とポート 3 ... 推奨
ポート 1 および 5 ... 推奨
1.2.4. 映像データをrosbag(ROS形式のログデータ)として記録#
1.2.4.1. ROS melodic と gscam (GStreamer 用の ROS カメラドライバー) をインストールします。#
コマンドラインの指示に従って、ROS melodic と gscam をインストールします。
注意
インストールコマンドは変更される可能性があります。次のコマンドが機能しない場合は、ROS 公式ドキュメント を参照してください。
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -
sudo apt update
sudo apt install ros-melodic-desktop
echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
sudo apt install -y ros-melodic-gscam
1.2.4.2. gscam を実行し、画像トピックを視覚化します。#
指示に従って gscam を実行します。
新しいターミナルを開き、次のコマンドを実行してroscoreを起動します
roscore
別のターミナルを開き、次のコマンドを実行します
export GSCAM_CONFIG="v4l2src device=/dev/video0 ! video/x-raw,framerate=30/1 ! videoconvert" rosrun gscam gscam
トピック(ROS形式のメッセージデータ)camera/image_rawが公開されたので、rqt_image_viewでトピックを可視化します。 rqt_image_view を起動するには、別のターミナルを開いて次のコマンドを実行します。
rosrun rqt_image_view rqt_image_view
このコマンドは、画像トピックを視覚化するためのウィンドウを開きます。ウィンドウ左上のプルダウンメニューをクリックして、camera/image_rawを選択します(図6)。
複数のカメラで gscam を実行するには、次の XML メッセージを含むテキスト ファイルを作成し、~/2cameras.launch
として保存します。この .launch ファイルは 2 台のカメラでのストリーミング用です。
<launch>
<arg name="frame_rate" default="30"/>
<node name="gscam_driver_v4l_port_1" pkg="gscam" type="gscam" output="screen" ns="port_1">
<param name="camera_name" value="port_1"/>
<param name="frame_id" value="port_1"/>
<param name="camera_info_url" value="package://gscam/examples/uncalibrated_parameters.ini"/>
<param name="gscam_config" value="v4l2src device=/dev/video0 ! video/x-raw,format=UYVY,width=1920,height=1280,framerate=30/1 ! videoconvert"/>
<param name="sync_sink" value="true"/>
</node>
<node name="gscam_driver_v4l_port_2" pkg="gscam" type="gscam" output="screen" ns="port_2">
<param name="camera_name" value="port_2"/>
<param name="frame_id" value="port_2"/>
<param name="camera_info_url" value="package://gscam/examples/uncalibrated_parameters.ini"/>
<param name="gscam_config" value="v4l2src device=/dev/video1 ! video/x-raw,format=UYVY,width=1920,height=1280,framerate=30/1 ! videoconvert"/>
<param name="sync_sink" value="true"/>
</node>
</launch>
注意
C1の設定です。 C2またはC3の場合は、必要に応じて「width」、「height」、「framerate」を変更してください。
/home/ros/2cameras.launch
を作成したと仮定して、次のコマンドを実行して複数のカメラで gscam を実行します。
roslaunch /home/ros/2cameras.launch
注釈
さらにカメラを追加するには、適切なノード名、namespace(ns)、camera_name、frame_id、および gscam_config を使用してノードを追加します。
1.2.4.3. ロスバッグを記録する#
gscam の実行中に、次の方法で rosbag (ROS 形式のログ ファイル) を記録できます。
rosbag record -a
rosbag info で rosbag の情報を確認することもできます。
rosbag info <recorded rosbag file name>
# example output
path: 2022-03-29-17-42-07.bag
version: 2.0
duration: 3.1s
start: Mar 29 2022 17:42:07.97 (1648543327.97)
end: Mar 29 2022 17:42:11.07 (1648543331.07)
size: 365.7 MB
messages: 113
compression: none [53/53 chunks]
types: rosgraph_msgs/Log [acffd30cd6b6de30f120938c17c593fb]
sensor_msgs/CameraInfo [c9a58c1b0b154e0e6da7578cb991d214]
sensor_msgs/Image [060021388200f6f0f447d0fcd9c64743]
topics: /port_1/camera/camera_info 26 msgs : sensor_msgs/CameraInfo
/port_1/camera/image_raw 26 msgs : sensor_msgs/Image
/port_2/camera/camera_info 26 msgs : sensor_msgs/CameraInfo
/port_2/camera/image_raw 26 msgs : sensor_msgs/Image
/rosout 8 msgs : rosgraph_msgs/Log (3 connections)
/rosout_agg 1 msg : rosgraph_msgs/Log
1.2.5. 構成#
ドライバー構成を変更するには、構成ファイル /etc/modprobe.d/tier4-*.conf
を編集します。 (次のセクションを参照してください)。設定ファイルにはデフォルトで次の行が含まれています。 (C1の場合です)
options tier4_isx021 trigger_mode=0 enable_auto_exposure=1 enable_distortion_correction=1
設定を適用するには、編集後に RQX-59G を再起動します。
1.2.5.1. ドライブモードを切り替える#
注意
カメラをスレーブモードで動作させるには、RQX-59Gからフレーム同期信号を入力する必要があります。カメラをスレーブ モードで駆動するには、Shutter triggering over GMSL2 をチェックしてください。
RQX-59Gからトリガー信号を生成する方法については、トリガー入力に関するADLINKのドキュメントを参照してください。
1.2.5.1.1. C1の場合#
設定ファイルを編集することで、カメラの駆動モードをマスター モードからスレーブ モード (またはその逆) に切り替えることができます。
マスターモード: 30fpsのフリーランニングモード(デフォルト)
スレーブモード:シャッタートリガーモード、シャッタータイミング、フレームレートはFSYNC信号周波数によって調整可能(RQX-59Gで設定可能)
モードを切り替えるには、「/etc/modprobe.d/tier4-isx021.conf」のtrigger_modeを編集します。 (以下の事例を参照)
ドライブモード |
フレームレート |
トリガーモード= |
マスター |
30fps |
0 |
スレーブ |
FSYNC入力周波数に依存 |
1 |
1.2.5.1.2. C2の場合#
C2の場合、/etc/modprobe.d/tier4-imx490.conf
を編集することで以下のモードを選択することができます。次の表に、使用可能な設定を示します。
The following table shows the available settings.
ドライブモード |
フレームレート |
トリガーモード= |
マスター |
10fps |
0 |
スレーブ |
10fps |
1 |
マスター |
20fps |
2 |
スレーブ |
20fps |
3 |
マスター |
30fps |
4 |
スレーブ |
30fps |
5 |
1.2.5.2. レンズ歪み補正 (LDC) を有効/無効にする#
注釈
この設定は C1, C2 および C3 に共通です。
LDC を有効にするには、フラグ enable_distortion_correction=1
(デフォルト) を設定します。 LDC を無効にするには、フラグ「enable_distortion_correction=0」を設定します。
1.2.5.3. 自動露出 (AE) を有効/無効にする#
注釈
この設定は C1, C2 および C3 に共通です。
AE を有効にするには、フラグ enable_auto_exposure=1
(デフォルト) を設定します。 AEを無効にするには、フラグ「enable_auto_exposure=0」を設定します。
1.2.5.4. 露光時間の設定#
1.2.5.4.1. C1の場合#
C1 の場合、ユーザーは shutter_time_min
、shutter_time_mid
、および shutter_time_max
という名前の変数を介して 3 種類の露光時間を指定できます。 C1 の実際の露光時間は、照度に応じてこれら 3 つの値 (および線形補間値) を推移します。変数の値はマイクロ秒単位で指定する必要があります。任意の照度条件下で露光時間を固定したいユーザーは、これらの変数にまったく同じ値を設定できます。たとえば、「/etc/modprobe.d/tier4-isx021.conf」の次の設定では、露出時間が 11 ミリ秒に固定されます。
shutter_time_min=11000 shutter_time_mid=11000 shutter_time_max=11000
1.2.5.4.2. C2の場合#
C1と同様に、C2、C3 にも、shutter_time_min
および shutter_time_max
という名前の変数を介して 2 種類の露光時間を設定する機能があります。これらの変数の値の単位もマイクロ秒です。たとえば、/etc/modprobe.d/tier4-imx490.conf
の次の設定では、露出時間が 11 ミリ秒に固定されます。
shutter_time_min=11000 shutter_time_max=11000
1.2.6. GMSL2 経由のシャッタートリガー#
スレーブ モードでのカメラ操作には、GMSL2 を介したトリガー信号入力 (FSYNC 入力) が必要です。 FSYNC パラメータと GPIO 設定の構成方法については、ADLINK のドキュメント を参照してください。
1.2.6.1. スレーブモードでカメラを駆動するための準備#
端末で「i2cget -f -y 2 0x66 0x01」を実行して RQX-59G の HW バージョンを確認し、以下の手順に従ってください。
返される値が少なくとも 0x24
であることを確認してください。
i2cget -f -y 2 0x66 0x01
0x24
1.2.6.2. C1のFSYNC周波数を入力#
30fps より遅い任意の周波数を入力できます。
1.2.6.3. C2のFSYNC周波数を入力#
C2 の場合、許可される FSYNC 周波数はドライブ モードによって異なります。以下のリストを参照してください。
30fps モード (
trigger_mode=5
) の場合: 15 < f <= 30 fps20fps モード (
trigger_mode=3
) の場合: 10 < f <= 20 fps10fps モード (
trigger_mode=1
) の場合: 5 < f <= 10 fps
1.2.6.4. FPSチェック#
視覚化されたビデオで FPS 設定を確認するには、次のコマンドを実行してください。
カメラはポート 1 にのみ接続されています
gst-launch-1.0 v4l2src io-mode=0 device=/dev/video0 do-timestamp=true ! 'video/x-raw, width=1920, height=1280, framerate=30/1, format=UYVY' ! fpsdisplaysink video-sink=xvimagesink sync=false
カメラはポート 1 と 2 に接続されています
gst-launch-1.0 v4l2src io-mode=0 device=/dev/video0 do-timestamp=true ! 'video/x-raw, width=1920, height=1280, framerate=30/1, format=UYVY' ! xvimagesink sync=false v4l2src io-mode=0 device=/dev/video1 do-timestamp=true ! 'video/x-raw, width=1920, height=1280, framerate=30/1, format=UYVY' ! fpsdisplaysink video-sink=xvimagesink sync=false