Scoutロボット標準カメラのROS1画像トピック配信方法

使用するノードと必要パッケージ

Scoutロボットに初期搭載されている標準カメラから映像を取得しROS1で配信するには、カメラ用のROSドライバノードを起動します。標準構成のScoutでは一般にUSB接続のカメラが搭載されているため、ROS1用USBカメラドライバパッケージであるusb_camを使用しますqiita.com。まずROSパッケージがインストールされていない場合、ros-<ディストリビューション>-usb-camをAPTでインストールしてください(例: ROS Melodicならros-melodic-usb-cam)。また、映像表示のためのツールとしてimage_viewパッケージも利用しますqiita.com

備考: 一部のScout R&Dキットでは深度カメラとしてIntel RealSense (例: D435i) が搭載されている場合がありますgeneral-laser.at。その場合、標準的なUSBカメラドライバではなくIntel提供の**realsense2_cameraパッケージ**を使用してRGBカメラ映像や深度画像をトピック配信します。RealSense用ドライバを起動すると、カラー画像は/camera/color/image_raw、深度画像は/camera/depth/image_rect_rawなどのトピックに配信されますmedium.com。以下では主にUSBカメラ(usb_cam)を例に手順を説明します。

カメラノードの起動と設定

  1. カメラデバイスの確認: ScoutのオンボードPC(例: JetsonやNUC)にカメラが接続されていることを確認し、デバイスファイルを調べます。典型的にはカメラは/dev/video0に割り当てられます。ターミナルで```bash ls /dev/video*

    ライティング

  2. ROSマスタ起動: カメラノードを立ち上げる前にROS Master(roscore)を起動しておきます(roscore コマンドを実行)。これはroslaunchを使う場合は自動で立ち上がりますが、手動でノードを起動する場合は必要です。

  3. カメラノードの起動: usb_camパッケージのノードを起動し、カメラ画像をトピック配信します。起動方法は直接ノードを実行するか、launchファイルを使用します。簡単な動作確認であれば以下のように直接コマンドを実行できます。

    rosrun usb_cam usb_cam_node

    上記コマンドではデフォルトで/dev/video0が使用され、usb_camノードが映像を取得して/usb_cam/image_rawというトピックで画像を配信しますqiita.comqiita.com。カメラデバイスが複数ある場合や別のデバイス名を使う場合、_video_device:=<デバイス名> 引数で指定できます(例: /dev/video1を使う場合はrosrun usb_cam usb_cam_node _video_device:=/dev/video1qiita.com

  4. パラメータ設定(launchファイル使用): 継続的な利用や細かな設定を行うには、usb_camノード用のlaunchファイルを作成すると便利です。launchファイル内でノードを定義し、以下の主要パラメータを設定できますqiita.comqiita.com

    • video_device: 使用するビデオデバイスファイルパス(デフォルト: /dev/video0qiita.com

    • image_width / image_height: 取得する画像の解像度(幅と高さ)qiita.com

    • pixel_format: カメラのピクセルフォーマット(例: "mjpeg""yuyv""uyvy" 等)qiita.com

    • framerate: フレームレート(例: 30FPS)qiita.com

    例えば、640x480のMJPEG映像を30FPSで配信する場合、launchファイル内で上記のようなパラメータ指定を行います。必要に応じて明るさ(brightness)、コントラスト(contrast)、オートフォーカス(autofocus)などの設定項目も指定できますqiita.com。作成したlaunchファイルを用いて```bash roslaunch usb_cam <作成したlaunchファイル名>.launch

ROSトピックと動作確認

カメラノード起動後、画像データはROSトピック上で配信されます。usb_camノードをデフォルト設定で動かした場合、画像トピック/usb_cam/image_raw (型: sensor_msgs/Image) となります。また、カメラのフレームIDに対応したTFフレームやカメラ情報(camera_info)も必要に応じて設定できますが、基本的な映像取得だけであれば上述の設定で十分です。

動作確認として、ターミナルでrostopic listを実行し該当トピックが発行されていることを確認します。さらに画像が実際に配信されているかを可視化するには、ROS標準の画像ビューアを使います。例えば別のターミナルで以下を実行すると、ウィンドウにカメラ映像が表示されますqiita.com

rosrun image_view image_view image:=/usb_cam/image_raw

これにより、usb_camノードが配信している生のカメラ画像 (/usb_cam/image_raw) をimage_viewノードが購読し、画面に表示しますqiita.com。同様にrqt_image_viewを使用してトピックを選択表示することもできます。以上の手順と設定により、Scout標準搭載カメラの映像をROS1上でトピック配信し、実機で取得・確認することが可能です。必要に応じてカメラキャリブレーションを行い、camera_infoを提供することで、画像処理やナビゲーションでより正確なデータ利用もできるでしょう。

参考文献・情報源: Scout開発キットの説明書並びにROS Wikiqiita.comqiita.comqiita.com、ならびにIntel RealSense ROSドライバ資料general-laser.atmedium.comなどを参照して手順を整理しています。

Sources:

  1. Qiita記事:「ROSの勉強 第40弾:USBカメラ」– USBカメラノードusb_camの使用方法解説qiita.comqiita.comqiita.comqiita.com

  2. AgileX Scout Mini R&Dキット 製品仕様 – 標準センサー構成(Intel RealSense D435i 深度カメラ搭載)general-laser.at

  3. Intel RealSense ROSパッケージ (realsense2_camera) ドキュメント – RealSenseカメラ起動と配信トピック例medium.com

 

SCOUT-Eなので初めからカメラがある仕様です。画像を ROS に publish する方法を探して下さい

Scout-E標準カメラをROS1で画像トピック配信する方法

Scout-Eに搭載されたカメラの種類と特徴

Scout-E(Moorebot社のScout Eモデル)には、1080p対応の2メガピクセルCMOSカメラが標準搭載されていますmoorebot.com。視野角は約120度の広角で、機械式IRカットフィルタ付き(赤外線照明によるナイトビジョン対応)の単眼カメラですmoorebot.com。これは深度センサ付きのIntel RealSenseのようなRGB-Dカメラではなく、通常のRGBカメラ(モノクロ/カラー映像のみ取得)です。そのため、RealSense専用のrealsense2_cameraパッケージ等は不要で、汎用のUSB/CSIカメラ用ドライバを使用して映像をROSトピックとして扱います。

Scout-E内部ではROSベースのソフトウェア「Roller Eye」が動作しており、このカメラ映像はH.264形式にエンコードされたフレームとしてROSトピック/CoreNode/h264上で配信されています。この/CoreNode/h264トピックは独自定義のメッセージ型(roller_eye/msg/frame.msg)で映像データを提供しており、音声についても同様に/CoreNode/aacトピックで配信されます。標準構成では、この方法でカメラ映像をストリーミングし、スマホアプリやAlexa連携などに利用しています。ただし、このままでは一般的なROSの画像ビューアでは直接表示できないため、標準的なROSイメージ形式でトピック配信し直す必要があります。

カメラ映像配信用に使用するROSパッケージ

ROS1環境でScout-Eのカメラ映像を取得・配信するには、汎用のUSBカメラドライバパッケージであるusb_camを使用する方法が一般的です。Scout-E搭載カメラは内部的におそらくV4L2対応デバイス(例えば/dev/video0)として認識されるため、usb_camノードを用いてそのデバイスから画像を読み取り、ROSのセンサメッセージsensor_msgs/Image)としてトピック発行できます。。usb_camパッケージはROS公式のドライバで、USB接続のUVCカメラやV4L対応カメラから映像を取得し、標準的なトピック(画像データおよびカメラ情報)を提供します。

Scout-Eでは既に独自ノードがカメラを使用中ですが、開発者向けにROSネットワークへカメラ画像を流すには、usb_camノードを別途起動する方法が有効です。ROS Melodic/Noetic環境でusb_camを使用するには、事前にパッケージをインストールする必要があります(例:sudo apt-get install ros-melodic-usb-cam)。インストール後、ロボット上またはネットワーク経由でカメラデバイスにアクセス可能なコンピュータ上でノードを起動します。なお、Raspberry PiのCSIカメラモジュールを使用するロボットの場合はraspicam_nodeなど専用ドライバを使いますが、Scout-Eのカメラは標準的なV4L2デバイスとして扱えるためusb_camで対応可能です。

カメラノードの起動とLaunchファイル例

usb_camノードはLaunchファイルまたはコマンドラインから起動できます。Launchファイルの例を以下に示します。この例ではScout-Eのカメラが/dev/video0にマップされていると仮定し、1280x720解像度・15fps・MJPEGフォーマットで配信します。

<launch> <node name="usb_cam" pkg="usb_cam" type="usb_cam_node" output="screen"> <!-- カメラデバイスのパス --> <param name="video_device" value="/dev/video0" /> <!-- 画像解像度(必要に応じて640x480や1920x1080に変更可) --> <param name="image_width" value="1280" /> <param name="image_height" value="720" /> <!-- フレームレート --> <param name="framerate" value="15" /> <!-- ピクセルフォーマット: Scout-EカメラがMJPEG出力対応の場合 --> <param name="pixel_format" value="mjpeg" /> </node> </launch>

上記のLaunchファイルを用意し、roslaunchコマンドで起動すると、指定したカメラデバイスから映像取得が開始されます。パラメータ設定はカメラの対応状況に合わせて調整してください。多くのUVCカメラはYUYV(YUV422)やMJPEGでの出力をサポートしています。例えば、1080pの高解像度で取得する場合、MJPEG圧縮を使うと帯域を抑えられる一方で、YUYVのような非圧縮で取得するとCPU負荷が低く処理が簡単です。Scout-Eのカメラは1080p@30fpsまで性能がありますが、CPU性能や帯域を考慮してフレームレートを下げることも有効です(例えば1080pなら5〜15fps程度に制限する)。

コマンドラインから直接起動する場合、以下のようにrosrunでパラメータを指定できます。

rosrun usb_cam usb_cam_node \ _video_device:=/dev/video0 \ _image_width:=1280 _image_height:=720 \ _framerate:=15 _pixel_format:=mjpeg

上記コマンドにより、/dev/video0から1280x720のMJPEG映像をROSトピックとして配信します。仮にScout-Eのカメラデバイスが別のパス(例えば/dev/video1)の場合は、適宜video_deviceパラメータを変更してください。pixel_formatはカメラがMJPEG出力に対応していない場合yuyvに変更できます。起動後、ターミナルにはusb_camノードのログが表示され、正常なら「Starting ... at 1280x720 ...」等のメッセージが出力されます。

発行されるトピック名とカメラ画像の確認方法

usb_camノードが起動すると、標準的なROSのカメラトピックが生成されます。デフォルトでは以下のようなトピック名になります。

  • 画像データ: /usb_cam/image_raw (型: sensor_msgs/Image

  • カメラ情報: /usb_cam/camera_info (型: sensor_msgs/CameraInfo

画像データは圧縮オプションにより/usb_cam/image_raw/compressed等も自動生成されます。トピック名はLaunchファイル内でノード名やリマップを変更することでカスタマイズ可能ですが、特に変更しなければusb_camという名前空間で配信されます。

正常にノードが動作していることを確認するには、まずrostopic listコマンドで上記トピックが一覧に現れているかをチェックします。また、画像ストリームは専用ビューアで可視化できます。簡単な確認方法として、以下のコマンドを実行してください。

rosrun image_view image_view image:=/usb_cam/image_raw

これにより、/usb_cam/image_rawトピック上の映像がウィンドウ表示されます。image_viewはROS標準の画像表示ノードで、引数image:=<トピック名>でどの画像トピックを表示するか指定します。別の方法として、rqt_image_viewプラグインを使うことも可能です(rqt_image_viewを起動し、GUI上で/usb_cam/image_rawを選択)。

さらに詳細なデバッグには、rqt_topicでトピックを監視したり、rostopic hz /usb_cam/image_rawでフレームレートを測定することもできます。画像の内容確認にはimage_viewが手軽ですが、SSH経由でGUIを表示できない環境では、rosbagに記録して後で確認する方法もあります。

以上が、Scout-E標準搭載カメラをROS1環境で画像トピックとして配信する手順です。まとめると、Scout-EのカメラはUSB/CSI接続の単眼カメラであり、ROS1ではusb_camパッケージを用いて/usb_cam/image_raw等のトピックに画像を発行できます。その映像はimage_viewrqt_image_viewでリアルタイムに確認でき、他のROSノードから標準のsensor_msgs/Imageとして利用可能になります。

参考文献:

  • Scout E 製品仕様(Moorebot公式)moorebot.com

  • Moorebot Scout オープンソースリポジトリ (Roller Eye)

  • USBカメラドライバ usb_cam の使用例

  • ROSにおける画像トピック表示方法(image_viewのリマッピング例)

  • 「Using USB cameras in ROS」ROSチュートリアル(画像トピック表示手順)

情報源