2018/04/06:対決!低価格LIDAR(3) ROS対応

ROS対応

RPLIDAR A2とSweepは,それぞれSDKが公開されているので自作のソフトウェアからデータを使うことが可能です.しかしやはりロボットに使うのであれば,ROSを使わない手はないでしょう.ここではROSの対応状況を見てみます.

RPLIDAR, Sweepともに,ROSドライバのコードがすでに作成されています.

Sweepはまだリリースはされておらず,ソースからのビルドが必要です.

RPLIDARはすでにリリースされているので,aptでインストールすることが可能です.

$ sudo apt install ros-kinetic-rplidar-ros

センサの起動

どちらも付属のlaunchファイルで簡単にデータを取得してrvizで見ることができます.

RPLIDAR A2:

$ roslaunch rplidar_ros view_rplidar.launch

Sweep:

$ roslaunch sweep_ros view_sweep_pc2.launch

メッセージの違い

rolidar_rosは,sensor_msgs/LaserScanメッセージを出力します.

一方sweep_rosは,sensor_msgs/PointCloud2を出力します.これは,前述したように,Sweepの計測が回転と同期していないためだと思われます.ただし,scan_tools/pointcloud_to_laserscanを使うことで,PointCloud2メッセージをLaserScanメッセージに変換することができます.

Rvizで表示

同じ場所でデータを可視化してみました.

RPLIDAR A2(10Hz)

RPLIDAR A2はデフォルトの設定で部屋の形がよく分かります.ロボットの地図生成や自律移動に充分使えることも確認しています.

一方のSweepですが,デフォルトの状態で同じ10Hzで回転させた時のデータがこちらです.

Sweep(10Hz, sample_rate=500Hz)

うーん,やはり同じ速度だとSweepの粗さが目立ちますが,しかし,なんだかさすがに解像度が低すぎないかな?

と思ってチェックしたら,sweep_rosノードのデフォルトのサンプルレートが500Hzで最大仕様(1kHz)の半分になっていることに気づきました.うーんこれはデフォルトで最大性能が出るようにしておいてもらいたいところですが,サンプルレートのパラメータsample_rateを1000に設定して,もう一度データをとってみました.

Sweep (10Hz, sample_rate=1kHz)

だいぶ詳細度が上がりました.しかし,RPLIDAR A2に比べると,部屋の形状がかなり分かりにくいですね.

そのまま,スキャン速度を3Hzに落としてみます.

Sweep (3Hz, sample_rate=1kHz)

このくらいなら部屋の形が分かりますね.回転速度が下がった分,RPLIDAR A2よりも更新周期が3倍程度長くなっています.

次は,動画でデータを比べてみましょう.