知能ロボコン出場にあたり、LiDARユニットGS2を使いました。
競技台の特定箇所で壁との相対姿勢を計測し、ロボットが移動するの際の位置と向きの基準をリセットするために使用しました。
RGB-Dカメラがあるのでこの使い方は本来不要かもしれませんが、元々新ROBO-剣に向けて床面検出用にと購入していたもので、昨年・一昨年の時点では結局使っていなかったのでこの際使ってみました。YDLIDARの提供するROSパッケージを使うと、ROSで類似したセンサーを扱う際に一般的なsensor_msgs/LaserScan型のメッセージとして受け取ることができます。LiDARから得られる情報は、方向角それぞれに応じて反射した物体との距離および反射強度(更に信頼度合いconfidenceがある場合も)、となるのでそれを表す型になります。但しGS2の場合は2つのイメージングセンサーを持っており、それら各々の画像で独立して三角測量を行えるため、視野の重複部分は1つの角度に対して複数の点があることになります。そのため、このROS用ライブラリでは適当に結果を統合して1つのセンサーをエミュレートしているのではないかと考えられます。(実際、別の専用アプリを使うとその前のデータを確認することができます。)
LaserScanのデータから線分を構成する点群を探し出すためには、仮説(線分の位置と回転)の生成・フィッティング・最適化等の処理が必要になりますが、それらはlaser_line_extractionというそのものずばりのパッケージがあったのでこれを使用しました。
図: GS2によるlaserscanとlaser_line_extractionで線分として検出した部分の可視化。GS2と知能ロボコンでの使用に合わせてパラメータは調整した。
なお余談ですが、LiDARといえばレーザー光を回転させて様々な角度でToFの原理による距離測定を行うものと思っていたのですが、"light detection and ranging"または"laser imaging, detection, and ranging"の短縮語とされて(https://en.wikipedia.org/wiki/Lidar)いるので、仮にラインレーザーのように同時に複数点を照らす光切断法のような計測方法でも広い意味でレーザー光と検出器を使った距離測定ではあるのでありなのか、ということに気づきました。ソフトウェア上ではデータフォーマットとしては上記のように同一視して扱いますが、アーティファクト(現実と違う意図しない計測結果)の出方等で異なる特性があるかもしれません。