Jetson Nanoでカメラ画像のPublish/Subscribeをやってみる(ROS2)


Jetson Nanoで学習済みモデルを使って、いろいろやってみる(8-1)ROS2(DDS)

Jetsonからラズパイにメッセージを届けてみる(ROS2/DDS)などではテキストをメッセージとしてpublish / subscribe していました。

ここでは、カメラ画像(イメージ)をpublish /  subscribe してみます。

 

 


Jetson NanoのOSイメージは、ともにJetpack 4.5.1

まずROS2(Eloquent)のドッカーイメージを作成します。

イメージが作成されているか確認

ros:eloquent-ros-base-l4t-r32.4.4

ビルドスクリプトの作成時期によっては、ros:eloquent-ros-base-l4t-r32.5.1になっている場合もあります。要確認!


Nano(4GB)

my_ros2_camという名前でコンテナを作成

カメラを使うのでdeviceオプションを使います。

補助的にXも使います。

sudo docker create -it --name my_ros2_cam --gpus all --network host -e DISPLAY=$DISPLAY --device /dev/video0:/dev/video0 -v /tmp/.X11-unix/:/tmp/.X11-unix ros:eloquent-ros-base-l4t-r32.4.4

 

コンテナ起動

アップデート&アップグレード、 パッケージのインストール

ROS2環境をアンダーレイに指定

NVIDIAのイメージにはimage_toolsパッケージが入っていません。インストールしておきます。

 


Nano(2GB)

ドッカーイメージは4GBと同様に、作成したros:eloquent-ros-base-l4t-r32.4.4を使います。

my_ros2_camという名前でコンテナを作成。

カメラは使わないのでdeviceオプションは不要です。

sudo docker create -it --name my_ros2_cam --gpus all --network host -e DISPLAY=$DISPLAY -v /tmp/.X11-unix/:/tmp/.X11-unix ros:eloquent-ros-base-l4t-r32.4.4

コンテナ起動

アップデート&アップグレード、 パッケージのインストール

ROS2環境をアンダーレイに指定

同じく image_toolsパッケージをインストールしておきます。

 


Nano(4GB)からカメラ画像をpublishしてみます。

同じコンテナでターミナルをもう一つ開いて、subscribeしてみます。

XWindowを使うので、ホストでXを起動しておきます。

こんな感じ。

左がPublisherのターミナル、右がSubscriberのターミナル。


Nano(2GB)でpublishされている画像をsubscribeします。

こんな感じで受信しています。

 

/cam2image , /showimage がノード名、 /image がtopic名です。


ros2コマンドを使ってtopic名でsubscribeすれば、画像のヘッダとデータを取得できます。

こんな感じ。


オプション(QoS)

以下のオプション設定だと、デフォルトの倍のサイズの画像でも比較的安定にpublish / subscribe できるようです。

カメラデバイスの番号:0:デフォルト:0

Reliability QoS:best_effort:デフォルト reliable

横サイズ:640(px):デフォルト 320

縦サイズ:480(px):デフォルト 240

frequency:30.0(Hz):デフォルト 30

Publish

ros2 run image_tools cam2image --ros-args -p device_id:=0 -p reliability:=best_effort -p width:=640 -p height:=480 -p frequency:=30.0

Subscribe

 

Usage: cam2image

Options:
-h, –help Display this help message and exit

Parameters:
reliability  Reliability QoS setting. Either ‘reliable’ (default) or ‘best_effort’
history  History QoS setting. Either ‘keep_last’ (default) or ‘keep_all’.
If ‘keep_last’, then up to N samples are stored where N is the depth
depth  Depth of the publisher queue. Only honored if history QoS is ‘keep_last’. Default value is 10
frequency  Publish frequency in Hz. Default value is 30
burger_mode  Produce images of burgers rather than connecting to a camera
show_camera Show camera stream. Either ‘true’ or ‘false’ (default)
width  Width component of the camera stream resolution. Default value is 320
height  Height component of the camera stream resolution. Default value is 240

Note: try running v4l2-ctl –list-formats-ext to obtain a list of valid values.

burger_mode はOpenCVを使ってキャプチャするかどうかに関するオプションのようですが、よく分かりません。USBカメラを使うかCSIカメラを使うかってこと?参考ページ

 

Usage: showimage

Options:
-h, –help Display this help message and exit

Parameters:
reliability  Reliability QoS setting. Either ‘reliable’ (default) or ‘best_effort’
history  History QoS setting. Either ‘keep_last’ (default) or ‘keep_all’.
If ‘keep_last’, then up to N samples are stored where N is the depth
depth  Depth of the publisher queue. Only honored if history QoS is ‘keep_last’. Default value is 10
show_image  Show the image. Either ‘true’ (default) or ‘false’


Appendix

ラズパイでpublish。ここが参考になるかも….。

Raspberry Pi + ROS 2 + Camera

ラズパイでsubscribeしてみました。

ラズパイ4のコンテナーにROS2をインストール、Pub/Subもやってみる

 


Appendix2

ROS2のdemosのソースなど

 


 

Be the first to comment

Leave a Reply

Your email address will not be published.


*