お疲れ様です。
UnityでROSシリーズ、今回は
- 各種センサーの使い方
について解説します。
なお、本記事は以下記事の手順を実施済みであることを前提として話を進めます。
目次
本記事では、各センサーごとに独立して解説するため、試したいセンサーの章のみをご覧いただいでも問題ありません。
カメラ
前記事で作成したロボットに、RGBカメラを取り付ける手順を解説します。
センサの取り付け
最初に、sensor_linkに「RGB Camera Sensor」スクリプトを追加します。
次に、sensor_linkに「Camera Info Msg Publisher」スクリプトを追加し、以下のように設定します。
- Topic Name:/camera/color/camera_info
- Serializer/Source:sensor_linkオブジェクト
- 解説:「ICameraInterface」を継承したスクリプト(ここでは、「RGB Camera Sensor」)がアタッチされたオブジェクトを指定
- Serializer/Header/Source:sensor_linkオブジェクト
- Serializer/Header/Frame_id:sensor_link
次に、sensor_linkに「Image Msg Publisher」スクリプトを追加し、以下のように設定します。
- Topic Name:/camera/color/image
- Serializer/Source:sensor_linkオブジェクト
- Serializer/Header/Source:sensor_linkオブジェクト
- Serializer/Header/Source Texture:Texture 1
- Serializer/Header/Frame_id:sensor_link
最後に、sensor_linkに「Compressed Image Msg Publisher」スクリプトを追加し、以下のように設定します。
- Topic Name:/camera/color/image/compressed
- Serializer/Source:sensor_linkオブジェクト
- Serializer/Header/Source:sensor_linkオブジェクト
- Serializer/Header/Source Texture:Texture 1
- Serializer/Header/Frame_id:sensor_link
動作確認
シーンを再生し、Topicsタブ → /camera/color/image/compressedを選択すると、カメラから取得した画像が表示されることが分かります。
2D LiDAR
前記事で作成したロボットに、2D LiDARを取り付ける手順を解説します。
センサの取り付け
2D LiDARには「Robotics-Nav2-SLAM-Example」リポジトリのサンプルコードを使用します。
以下、リポジトリをダウンロードしてください。
ダウンロードしたリポジトリを解凍し、「Nav2SLAMExampleProject/Assets/Scripts」内の
- Clock.cs
- TimeStamp.cs
- LaserScanSensor.cs
をAsstes/Scriptに格納します。
次に、sensor_linkオブジェクトに「Laser Scan Sensor」スクリプトを追加し、各パラメータを以下のように設定します。
- Topic:/scan
- Scan Angle Start Degrees:-359
- Scan Angle End Degrees:0
- Num Measurements Per Scan:360
- Frame Id:sensor_link
上記の設定の場合、「スキャンの角度の範囲が-359〜0度」、「点群数が360」なので
- 点どおしの間隔は「角度範囲/点群数 = 360/360 = 1度」
となります。
動作確認
シーンを再生し、Topicsタブ → /scanを選択すると、スキャンがヒットした位置に点群が描画されます。
3D LiDAR
前記事で作成したロボットに、3D LiDARを取り付ける手順を解説します。
センサの取り付け
最初に、sensor_linkに「RayCast LiDAR Sensor」スクリプトを追加し、以下のように設定します。
- ScanPattern:Mid-360
- 解説:ここに設定した内容に応じて、点群のパターンが変更される
- Points Num Per Scan:20000
- 解説:一回あたりのスキャン数。この値が多くなると点群の数が多くなる
- Gaussian Noise Sigma:0.02
- 解説:センサにノイズを加える
次に、「LiDAR Point Cloud 2 Msg Publisher」スクリプトを追加し、以下のように設定します。
- Topic Name:/pointcloud
- Serializer/Header/Source:sensor_linkオブジェクト
- Serializer/Header/Frame_id:sensor_link
- Source:sensor_linkオブジェクト
- 解説:「IPointCloudInterface」を継承したスクリプト(ここでは、「Raycast LiDAR Sensor」)がアタッチされたオブジェクトを指定
動作確認
シーンを再生し、Topicsタブ → /pointcloudを選択すると、スキャンがヒットした位置に点群が描画されます。
IMU
前記事で作成したロボットに、IMUを取り付ける手順を解説します。
センサの取り付け
最初に、sensor_linkに「Imu Sensor」スクリプトを追加します。
次に、sensor_linkに「Imu Msg Publisher」スクリプトを追加し、以下のように設定します。
- Topic Name:/imu
- Serializer/Source:sensor_linkオブジェクト
- 解説:「IImuDataInterface」を継承したスクリプト(ここでは、「Imu Sensor」)がアタッチされたオブジェクトを指定
- Serializer/Header/Source:sensor_linkオブジェクト
- Serializer/Header/Frame_id:sensor_link
動作確認
シーンを再生し、Topicsタブ → /imuを選択すると、IMUセンサの状態が表示されます。
base_footprintのPositionやRotationを適当に変更すると、IMUの値が変化することを確認できます。
GNSS
前記事で作成したロボットに、GNSSを取り付ける手順を解説します。
センサの取り付け
最初に、Planeに「Geo Coordinate System」スクリプトを追加します。
次に、sensor_linkに「GNSS Sensor」スクリプトを追加し、以下のように設定します。
- Coordinate System:Planeオブジェクト
- 解説:ここに指定したオブジェクトの位置を基準として、そこからsensor_linkがどれだけ離れたかで座標が計測される
次に、sensor_linkに「Nav Sat Fix Msg Publisher」スクリプトを追加し、以下のように設定します。
- Topic Name:/navsat
- Serializer/Source:sensor_linkオブジェクト
- 解説:「IGeoCoordinateInterface」を継承したスクリプト(ここでは、「GNSS Sensor」)がアタッチされたオブジェクトを指定
- Serializer/Header/Source:sensor_linkオブジェクト
- Serializer/Header/Frame_id:sensor_link
動作確認
シーンを再生し、Topicsタブ → /navsratを選択すると、GNSSのセンサ値が表示されます。
base_footprintのPositionを適当に変更すると、センサ値が変化することを確認できます(緯度、経度は少し変化させただけだとほとんど変化しないので、大きめに移動させてみてください)。
最後に
今回は、様々なセンサーの使い方ついて解説しました。
次回は、
- 移動ロボットをcmd_velで動かす
について解説します。
次回:移動ロボットをcmd_velで動かす

















