sgunji’s blog

ものづくりやプログラミングなど…最近はXamarinを少々

ROSで Tara - USB Stereo Vision Cameraを使う

ROSを触る機会があったので・・・。

安いステレオカメラを買いました。
Tara - USB Stereo Vision Cameraってやつです。
後から気づきましたがROSをサポートしているようです。
仕様を確認しないで買うのはやめましょう。
www.e-consystems.com

ROSのセットアップの仕方はこちら(英語)
www.e-consystems.com

グーグルさんの力を借りて日本語にしてみました。
以下本文になりますが,
当方の環境にあわせて改変しております。

Jetson TX2
Jetpack 4.2
Ubuntu 18.04LTS

TaraのROSサポート
Dilip Kumar J - Camera Team

前書き


TaraはON SemiconductorのMT9V024ステレオセンサーをベースにしたUVC準拠の3Dステレオカメラで、USB 3.0上で60fpsのWVGA((2 * 752)x 480)を非圧縮形式でサポートします。このステレオカメラは2つの同期センサーフレームデータをUSB 3.0インターフェイスを介してホストマシンに並べて提供します。それはまたユーザーが実時間でカメラの3Dスペース傾斜を読むことを可能にする作り付けのIMUの破片を収容する。

Taraは、お客様がステレオカメラのアルゴリズムを開発するために使用することも、ステレオカメラを製品設計に統合することを希望するお客様も使用することができます。

e-con Systems 3Dステレオカメラは、奥行き検知、視差図、点群、マシンビジョン、ドローン、3Dビデオ録画、外科用ロボットなどの用途に最適です。

このドキュメントでは、以下について説明します。
ROSを実行しているシステムでSee3CAM_Stereo USBカメラからの画像データを使用する方法。
サンプルROSベースのアプリケーションを構築する方法。
現在のカメラのプロパティを識別する方法
露出、明るさなどのカメラのプロパティを変更する方法。

範囲


この文書は、ROSを実行しているシステムでSee3CAM_Stereoカメラからの画像を使用したいアプリケーション開発者のための入門ガイドとしてのものです。

前提条件


現在のROSディストリビューション(Jade)は、ubuntu 14.04を実行しているPCにインストールする必要があります。インストール手順はこちらにあります。システムにはUSB3.0バイスを接続するための準備も必要です。See3CAM_Stereo USBカメラがTara-SDKに含まれているいくつかのサンプルアプリで正常に動作していることを確認してください。これもe-conによって提供されています。

開発者はまた、ROSとそのコアとなる作業概念についての基本的な知識が必要です。ROSの基本およびROSでのサンプルアプリケーションの作成に関する詳細については、次のリンクを参照してください。

注意:
ros-jade-ros-baseパッケージをインストールしても問題ありません。しかし、ros-jade-desktop-fullパッケージをインストールすると、後で依存関係をインストールする必要がなくなります。

ROSカメラドライバのインストール


ROS用のカメラドライバをインストールする前に、ROS関連のすべての作業が行われるワークスペースディレクトリを作成してください。

 mkdir〜/ ROS_WS / src -p
 cd〜/ ROS_WS / src

HID拡張ユニットをサポートしているROS用のuvc_cameraドライバの修正バージョンをインストールします。次のコマンドを使ってインストールできます。

 git clone https://github.com/dilipkumar25/see3cam
 cd see3cam

公式では

 git checkout tara_v1.2

となっていますが,そんなのないので無視します。

次にソースを直していきます。

see3cam/src/nodelets.cppの52-53行目

-PLUGINLIB_DECLARE_CLASS(uvc_camera, CameraNodelet, uvc_camera::CameraNodelet, nodelet::Nodelet);
-PLUGINLIB_DECLARE_CLASS(uvc_camera, StereoNodelet, uvc_camera::StereoNodelet, nodelet::Nodelet);
+PLUGINLIB_EXPORT_CLASS(uvc_camera::CameraNodelet, nodelet::Nodelet)
+PLUGINLIB_EXPORT_CLASS(uvc_camera::StereoNodelet, nodelet::Nodelet)

see3cam/src/tara_ros.cppの450行目

-		if (foutLeft == NULL)
+		if (!foutLeft)

see3cam/src/tara_ros.cppの456行目

-		if (foutLeft == NULL)
+		if (!foutLeft)

ROSのカメラ関係をインストールしていきます。

# sudo apt-get install ros-jade-camera-info-manager
# 最新のjetson TX2(Jetpack4.2)を試す場合はmelodicを指定
# ros-melodic-desktop-full入れれば自動的にインストールされる
 sudo apt-get install ros-melodic-camera-info-manager
 sudo apt-get install libudev-dev
 cd ~/ROS_WS/
 catkin_make

インストールしたパッケージを.bashrcファイルに追加する必要があります。これは、.bashrcファイルの最後に次の行を追加することによって実行できます。

#ROS用uvc_cameraドライバのセットアップ環境
source ~/ROS_WS/devel/setup.bash


ドライバの機能の一部が機能するために必要なHIDインタフェースへの読み取りアクセスを提供するために、udev規則を更新する必要があります。これは、次のコマンドを使用して実行できます。

 cd ~/ROS_WS/src/see3cam
 sudo cp udev/99-uvc.rules /etc/udev/rules.d/
 sudo udevadm trigger

カメラストリーミング


Tara用のカメラドライバをインストールしたら、ドライバと一緒に存在するサンプル起動ファイルを使用して起動する必要があります。次のコマンドはカメラを起動し、カメラのストリーミングに使用できるROSトピックをいくつか公開します。

 roslaunch uvc_camera tara_launch.launch

カメラからのプレビューは、1つのコードを使用するか、ROS Jadeにデフォルトで提供されているrqt_image_viewなどのサンプルアプリケーションを使用して表示できます。別の端末でコマンドを使用してインストールして実行します。

 sudo apt-get install ros-jade-rqt-image-view
 rqt_image_view

図6.1サポートされているストリーミングトピックのリスト

Tara USBカメラ用のROSドライバは、左右両方の画像を同時にストリーミングするための2つのトピックをサポートしています。以下は、カメラドライバの起動時に作成されるすべてのトピックです。

/stereo/concat
/stereo/image_raw
/stereo/left/image_raw
/stereo/left/camera_info
/stereo/right/image_raw
/stereo/right/camera_info

rqt_image_viewアプリケーションは、concatまたはimage_rawノードを使用したカメラストリームの表示をサポートしています。

図6.2両方のフレームを示すカメラのプレビュー

図6.3左フレームのみを表示したカメラのプレビュー

カメラのパラメータを変更する


カメラの露出と明るさは、実行時に動的に設定できます。接続されているTara USBカメラの明るさと露出を取得するには、以下のコマンドを使用します。

 rostopic echo -n 1 /stereo/get_exposure
 rostopic echo -n 1 /stereo/get_brightness

接続されているTara USBカメラの明るさと露出を設定するには、次のコマンドを使用します。

 rostopic pub -1 /stereo/set_exposure std_msgs/Float64 "data:<value>"
Example
 rostopic pub -1 /stereo/set_exposure std_msgs/Float64 "data: 20000"

 rostopic pub -1 /stereo/set_brightness std_msgs/Float64 "data:<value>"
Example
 rostopic pub -1 /stereo/set_brightness std_msgs/Float64 "data: 6"

接続されているTara USBカメラのX、Y、Z座標を取得するには、次のコマンドを使用します。

 rostopic echo /stereo/get_IMU

追加機能


Tara USBカメラ用のROSカメラドライバは、カメラのストリーミング用およびカメラ情報の取得用のトピックのステレオノードペアを作成するように設計されています。そのため、ステレオカメラと互換性があるように設計されている他のモジュール/ドライバは、このドライバで動作するはずです。そのようなテストされていないドライバの一例がstereo_image_procです。

また、カメラは事前にキャリブレーションされており、左右のセンサーに対応するcamera_infoトピックを使用しているため、他のROSドライバーがそのデータを使用することもできます。キャリブレーション用の格子模様を使用してカメラをもう一度手動で調整する必要はありません。

既知の問題と制限


このドキュメントはROSバージョンJadeでのみカメラドライバを使用するための指示を提供します。
上記の手順は、Ubuntu 14.04 64ビットのみを実行しているシステムでテストされています。
カメラの設定ファイルを保存するディレクトリ(yaml)は、ドライバのインストール後に初めて手動で作成する必要があります(catkin_make)。作成するには、次のコマンドを使用します。

 mkdir〜/ .ros / camera_info -p
サポート


さらなるサポートについてはsales[at]e-consystems.comに連絡してください。

結論


この文書は、ROSベースのシステムでTaraを使用する際に顧客にとって役立つはずです。

とのことです。