見出し画像

Isaac Sim で ROS 2 Camera を試す

「Isaac Sim」で「ROS 2 Camera」を試したのでまとめました。

・Isaac Sim 5.1


前回

1. ROS 2 Camera

ROS 2 Camera」は、「Isaac Sim」上のカメラセンサーの情報を ROS 2 のトピックとして配信する仕組みです。「Isaac Sim」のシーン内に配置したカメラから、次のようなデータを ROS 2 側へ送ることができます。

・RGB
・Depth
・PointCloud
・CameraInfo
・Semantic labels
・Instance labels
・2D / 3D BoundingBox

たとえば「Isaac Sim」内のカメラ映像を /rgb トピックとして publish すると、ROS 2 側では RViz2 や rqt_image_view を使って画像を確認できます。

ros2 topic list
ros2 run rqt_image_view rqt_image_view /rgb

つまり「ROS 2 Camera」は、Isaac Sim の仮想カメラを ROS 2 のカメラセンサーとして扱うための機能になります。実機カメラを使わなくても、シミュレータ上で画像認識、Depth、PointCloud、TF の確認などを試すことができます。

2. Viewport

Viewport」は、Isaac Sim のシーンを表示・操作するための画面です。通常、Isaac Sim を開いたときに中央に表示されている 3D画面が Viewport です。Viewport では、シーン内を自由に見回したり、ロボットやオブジェクトの位置を確認したり、配置したカメラから見た映像を確認したりできます。

Viewportの表示視点には、主に次の2種類があります。

・Perspective
作業用の自由視点です。マウス操作でシーン内を自由に見回せます。

・Camera_1
シーンに配置したカメラから見た視点です。ROS 2 Camera として publish される画像に近い見え方を確認できます。

Perspectiveの基本操作は、次のとおりです。

(1) メニュー「Create → Environments → Simple Room」で部屋を準備。

(2) マウスとキーでカメラ操作。

・右クリック + ドラッグ : 視点の向きを変える
・中クリック + ドラッグ : 平行移動する
・マウスホイール : ズームイン / ズームアウト
・右クリック + W : 前に移動
・右クリック + S : 後ろに移動
・右クリック + A : 左に移動
・右クリック + D : 右に移動
・右クリック + Q : 下に移動
・右クリック + E : 上に移動
・オブジェクト選択 + F : 選択オブジェクトに視点を合わせる

3. カメラの追加

(1) メニュー「Create → Camera」を選択。
Stage に Camera が追加されます。必要に応じて、名前を「Camera_1」などに変更します。

(2) Viewport 左上の Camera メニューから、作成したカメラを選択。
配置したカメラの映像を確認します。

(3) Stage で追加したカメラを選択し、Property で Transform を調整。

・Translate : カメラの位置
・Rotate : カメラの向き
・Scale : 基本的には変更しない

少し上の手前からシーン全体を見る場合は、次のように設定します。

Translate X : 3.0
Translate Y : 0.0
Translate Z : 0.0

Rotate X : 90
Rotate Y : 90
Rotate Z : 0

(4) 必要に応じて画角なども調整。

・Focal Length
レンズの焦点距離です。値を大きくすると望遠になり、画角が狭くなります。
・Horizontal Aperture
カメラセンサーの横幅です。画角や CameraInfo の内部パラメータ計算に影響します。
・Vertical Aperture
カメラセンサーの縦幅です。縦方向の画角や CameraInfo の内部パラメータ計算に影響します。
・Clipping Range
カメラが描画する最小距離と最大距離です。この範囲外にあるオブジェクトは表示されません。

4. RGBのpublish

4-1. RGBのpublish

(1) 「Tools → Robotics → ROS 2 OmniGraphs → Camera」を選択。

(2) 以下の設定を入力して、OKをクリック。
CameraのAction Graphが追加されます。

・Camera Prim : /World/Camera_1
・Topic Name : rgb
・Frame ID : camera_1

(3) Playをクリック。

4-2. RGBの確認

(1) ROSをセットアップ済のターミナルを開く。

(2) トピックの確認。

ros2 topic list
/camera_info
/rgb

(3) rqt_image_view で確認。

ros2 run rqt_image_view rqt_image_view /rgb

(4) RViz2 で確認。

rviz2

「Add → By display type → Image」で「Image」を追加し、「Topic」に「/rgb」 を指定します。

4-3. CameraInfoの確認

CameraInfo は画像として表示するものではなく、カメラ内部パラメータを公開するトピックです。

(1) トピック内容の確認。

ros2 topic echo /camera_info
header:
  stamp:
    sec: 37
    nanosec: 283335277
  frame_id: camera_1
height: 720
width: 1280
distortion_model: plumb_bob
d:
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
k:
- 1108.5125019853992
- 0.0
- 640.0
- 0.0
- 1108.5125019853992
- 360.0
- 0.0
- 0.0
- 1.0
r:
- 1.0
- 0.0
- 0.0
- 0.0
- 1.0
- 0.0
- 0.0
- 0.0
- 1.0
p:
- 1108.5125019853992
- 0.0
- 640.0
- 0.0
- 0.0
- 1108.5125019853992
- 360.0
- 0.0
- 0.0
- 0.0
- 1.0
- 0.0
binning_x: 0
binning_y: 0
roi:
  x_offset: 0
  y_offset: 0
  height: 0
  width: 0
  do_rectify: false
---

5. ROS 2 Camera で publish できるデータの種類

「ROS 2 Camera」では、Isaac Sim 上のカメラから RGBだけでなく、Depth、PointCloud、Instance、Semantic、BoundingBox などのデータも publish できます。

5-1. RGB

通常のカラー画像です。カメラから見た映像を ROS 2 の画像 topic として publish します。

ロボットの画像認識、物体検出、カメラ映像の確認などで使います。

/rgb

5-2. Depth

カメラから各ピクセルまでの距離を表す画像です。近い場所と遠い場所が、距離情報として保存されます。RGBと違い、色ではなく「距離」を持つ画像です。障害物検出、距離推定、3D認識などで使います。

/depth

5-3. Depth Point Clouds

Depthから生成した PointCloud です。各点が 3D 空間上の座標を持ちます。Depth が「画像形式の距離情報」なのに対して、Depth Point Clouds は「3D 点群データ」です。RViz2 では PointCloud2 display で確認できます。物体の形状確認、3D マッピング、ロボットの空間認識などで使います。

/point_cloud

5-4. Instance

物体のインスタンス単位のラベル情報です。同じ種類の物体でも、個別の物体として区別できます。たとえば、シーン内に箱が 3 つある場合、Semantic ではすべて「box」ですが、Instance では「box_1」「box_2」「box_3」のように別々の物体として扱えます。複数物体の個別認識や、インスタンスセグメンテーションの検証に使います。

5-5. Semantic

物体の意味カテゴリを表すラベル情報です。ピクセルやオブジェクトに対して、「机」「床」「壁」「ロボット」などの意味を付けます。Instance と違い、同じカテゴリの物体は同じラベルとして扱われます。セマンティックセグメンテーションや、物体カテゴリ認識の検証に使います。

5-6. BoundingBox2D Tight

画像上の物体を囲む 2D バウンディングボックスです。物体の見えている部分にできるだけぴったり合う矩形になります。RGB上で、対象物がどこに写っているかを表します。物体検出モデルの学習データや、2D detection の検証に使います。

5-7. BoundingBox2D Loose

画像上の物体を囲む 2D バウンディングボックスですが、Tight よりも広めの矩形です。物体全体を含むように囲むため、Tight より余裕があります。遮蔽や見切れがある場合でも、対象物全体を表す box として使いやすいです。


5-8. BoundingBox3D

3D 空間上の物体を囲むバウンディングボックスです。画像上の 2D 矩形ではなく、シミュレーション空間内での位置、向き、サイズを持ちます。3D 物体検出、姿勢推定、空間認識、ロボットの把持位置推定などで使います。

次回



いいなと思ったら応援しよう!