Isaac Sim で RTX LiDAR Sensors を試す
「Isaac Sim」で「RTX LiDAR Sensors」を試したのでまとめました。
・Isaac Sim 5.1
前回
1. LiDARとは
「LiDAR」(Light Detection and Ranging) は、レーザー光を使って距離を測るセンサーです。
仕組みは次のようなイメージです。
(1) センサーからレーザーを発射する
(2) レーザーが物体に当たる
(3) 反射して戻ってくる
(4) 戻ってくるまでの時間から距離を計算する
この測定を、さまざまな方向に対して高速に行うことで、周囲の形状を立体的に把握できます。
自動運転車の屋根についている回転するセンサーや、移動ロボットの上に載っている小さな円筒形のセンサーを見たことがある人も多いかと思います。あれが「LiDAR」です。
2. RTX Lidar Sensors
「RTX LiDAR Sensors」は、Isaac Sim に搭載されているGPUレイトレーシング(RTX)を使った高精度「LiDAR」シミュレーション機能です。
主な用途は、次のとおりです。
・自動運転のセンサー再現
・SLAM(地図作成)
・障害物検知
・強化学習用センサ
出力データは、次のとおりです。
・LaserScan(2D)
・/laser_scan
・平面スキャン
・PointCloud2(3D)
・/point_cloud
・立体点群
「RTX」はNVIDIAのGPU技術で、
・光線(レーザー)をシミュレーション
・反射・遮蔽・距離を物理的に計算
つまり「レーザーを飛ばす → 物体に当たる → 距離を測る」をリアルに再現します。
3. Isaac Sim で RTX LiDAR Sensors を試す
3-1. Isaac Sim のシーンの作成
(1) メニュー「File → New」を選択。
(2) メニュー「Create → Physics → Ground Plane」を選択。
(3) メニュー「Create → Shapes → Cube」で4つのCubeを作成し、以下のように指定。
・Trasnlate (0, 10, 0.5)、Scale (20,1,1)
・Trasnlate (0, -10, 0.5)、Scale (20,1,1)
・Trasnlate (10, 0, 0.5)、Scale (1,20,1)
・Trasnlate (-10, 0, 0.5)、Scale (1,20,1)

3-2. RTX LiDARの追加
(1) メニュー「Create → Sensors → RTX Lidar → NVIDIA → Example Rotary 2D」を選択し、以下のように指定。
「Example Rotary 2D」を追加します。
・Trasnlate (0, 0, 0.5)、Scale (1,1,1)
(2) メニュー「Create → Sensors → RTX Lidar → NVIDIA → Example Rotary」を選択し、以下のように指定。
「Example Rotary」を追加します。
・Trasnlate (0, 0, 0.5)、Scale (1,1,1)
3-3. Action Graphの準備
(1) メニュー「Tools → Robotics → ROS 2 OmniGraphs → RTX Lidar」を選択し、以下のように設定し、「OK」をクリック。
「Example Rotary 2D」の Action Graph を追加します。

・Graph Path : /Graph/ROS_LidarRTX_2D
・Lidar Prim : World/Example_Rotary_2D
・Laser Scan : チェックあり
・Point Cloud : チェックなし
(2) メニュー「Tools → Robotics → ROS 2 OmniGraphs → RTX Lidar」を選択し、以下のように設定し、「OK」をクリック。
「Example Rotary」の Action Graph を追加します。

・Graph Path : /Graph/ROS_LidarRTX
・Lidar Prim : World/Example_Rotary
・Laser Scan : チェックなし
・Point Claud : チェックあり
(3) メニュー「Window → Graph Editors → Action Graph」を選択し、「Edit Action Graph」をクリックし、確認する Action Graph を選択。
追加された Action Graph の中身を確認できます。

・On Playback Tick
シミュレーション再生中に毎フレーム処理をトリガーするノード
・Isaac Run One Simulation Frame
Isaac Sim を再生していない状態でも、RTX LiDAR などのセンサー計算に必要なシミュレーション1フレーム分の更新処理を明示的に実行
・ROS2 Context
ROS2通信の初期化とノード環境(Domain IDなど)を管理するノード
・Isaac Create Render Product
指定したセンサー(LiDARなど)からデータ取得用のレンダリング出力を生成するノード
・ROS2 RTX Lidar Helper
RTX LiDARのデータ(LaserScanやPointCloud)をROS2トピックとしてpublishするノード
3-4. シミュレーションの実行
(1) Playボタン(▶)をクリック。
3-5. ROS2トピックの確認
(1) ROS2トピックの確認。
ros2 topic list :
/laser_scan
:
/point_cloud
:(2) RViz2の起動。
rviz2(3) 「Fixed Frame」に「sim_lidar」を指定。
「sim_lidar」は、「ROS2 RTX Lidar Helper」の「frameId」に指定している値です。
(4) 「Add → LaserScan」で「LaserScan」を追加し、「topic」に「/laser_scan」、「Size」に「0.03」を指定。


(5) 「Add → PointCloud2」で「PointCloud2」を追加し、「topic」に「/point_cloud」、「Size」に「0.03」を指定。


【おまけ】 Solid State型とRotating型の違い
「RTX LiDAR」の種類には、「Solid State型」と「Rotating型」があります。
(1) Rotating型
「Rotating型」は、センサーを回転させながら周囲をスキャンするタイプのLiDARです。一般的な360度LiDARのイメージに近く、ロボットや自動運転車両の周囲環境を広範囲に取得する用途で使われます。
「Isaac Sim」では、次の2種類が提供されています。
・Example_Rotary_2D (2D LiDAR)
・Example_Rotary (3D LiDAR)
「Rotating型」の重要な点は、1フレームで必ず360度分のデータが揃うわけではないことです。「ROS2 RTX Lidar Helper」はLiDARが1回のフルスキャンは360度回転が完了したタイミングでメッセージをpublishします。たとえば、レンダリングステップが1/60秒、LiDARの回転レートが10Hzの場合、6フレームに1回publishされます。
(2) Solid State型
「Solid State型」は、設定された視野角の範囲をスキャンするタイプのLiDARです。カメラに近い感覚で、前方など特定方向の範囲を取得するLiDARになります。
「Isaac Sim」では、次の2種類が提供されています。
・Example_Solid_State
「Solid State型」では、フルスキャンは設定された水平視野角、つまりazimuth全体のスキャンを意味します。1フレームでフルスキャンが完了し、毎フレームpublishされます。
【おまけ】 センサー一覧
メニュー「Create → Sensors」で生成できます。
・Camera and Depth Sensors
RGB画像や深度画像を取得するカメラ系センサー。物体認識、距離推定、3D再構成などに使う。
・Contact Sensor
物体同士の接触や接触力を検出するセンサー。ロボットの足裏、グリッパー、衝突検出などに使う。
・Imu Sensor
加速度や角速度を取得する慣性センサー。ロボットや車両の姿勢推定、揺れ検出、自己位置推定に使う。
・RTX Lidar
RTXレイトレーシングを使った高精度LiDAR。レーザー反射をシミュレートし、点群データを取得する。
・RTX Radar
RTXベースのレーダーセンサー。電波の反射を使って、物体の距離や速度を検出する。
・PhysX Lidar
物理エンジンのレイキャストで距離を測る軽量なLiDAR。RTX Lidarより簡易だが高速。
・LightBeam Sensor
光線を飛ばし、遮られたかどうかを検出するセンサー。通過検知、近接検出、簡易的な安全センサーに使う。
【おまけ】 ROS 2 OmniGraphs一覧
メニュー「Tools → Robotics → Sensors」で生成できます。
・Camera
カメラ画像・カメラ情報・深度画像・深度カメラ情報を/camera_1/rgb/image_raw・/camera_1/rgb/camera_info・/camera_1/depth/image_raw・/camera_1/depth/camera_infoなどへpublishするグラフ。
・RTX Lidar
RTX LiDARのPoint Cloud・LaserScanを/point_cloud・/laser_scanなどへpublishするグラフ。
・TF Publisher
ロボットやセンサーの座標系を/tfへpublishするグラフ。
・Odometry Publisher
ロボットの位置・姿勢・速度を/odomへpublishするグラフ。
・Joint States
関節角度・速度・力などを/joint_statesへpublishするグラフ。
・Clock
シミュレーション時刻を/clockへpublishするグラフ。ROS2でsim timeを使う時に必要。
・Generic Publisher
任意のROS 2メッセージ型を指定してpublishする汎用グラフ。
