前回はルンバと通信するための計算機として用いているラズベリーパイについて紹介しました.今回は,自律移動のためのキーパーツである,レーザ距離センサについて紹介します.レーザースキャナ,LIDAR(Laser Imaging Detection And Ranging)とも呼ばれます.
弱いレーザービームを発光し,物体への反射光を計測して,その時間差により物体までの距離を測ります.計測部分を回転させながら計測(スキャン)すれば,平面内の物体までの距離が計測できます.レーザービームを複数並べたり,細かく向きを変える機構を使うことで,平面内だけでなく3次元的な計測点が得られる3次元レーザ距離センサもあります.
一般的にレーザー距離センサは,2次元のものでも数十万円していたので,そう手軽に使えるものではありませんでした.しかしRoomblockで使っている SlamTech社のRPLIDAR A2 は,なんと5万円程度と破格なのです.
RPLIDAR用のROSドライバが公開されています.
$ sudo apt install ros-kinetic-rplidar-ros
として,
$ roslaunch rplidar_ros view_rplidar.launch
とするだけで,rvizで計測した点が表示されるお手軽さです.
計測可能距離は16m, 更新周期は10Hzと,高価なレーザスキャナと比べて性能では劣るものの,通常の屋内であれば地図生成や自己位置推定に問題はありません.スキャンは1度刻みで360度なので死角がありませんが,センサ上部がむき出しのままぐるぐると回転するので,動作中に触ってしまわないように注意が必要です.インターフェースはUSB2.0で,バスパワー駆動なのもうれしいところです.
laser_scan_matcherパッケージで少し遊んでみましょう.
$ roslaunch rplidar_ros view_rplidar.launch
としてセンサを起動した後,
$ rosrun laser_scan_matcher laser_scan_matcher_node _base_frame:=laser
として,センサの水平を保ちながら,ゆっくりと動かしてみます.
初期状態ではworld座標系と一致していたlaser座標系が,センサの動きに応じて位置と姿勢がレーザのスキャンマッチングにより更新されていきます.センサを元の位置,姿勢に戻すと,だいたいworld座標系に一致しています.ただ,レーザのスキャンマッチングでは,フレーム間の移動量を推定してこれを積算するので,長く移動させるとエラーも積算されていきます.これを避けるためには,より高度な自己位置推定のアルゴリズムが必要になります.
次回はこれらの部品をルンバにのせるフレームを3Dプリンタで出力します.
Roomblockの詳細な作り方については,Instructablesで公開しています.ただし当社は,これらの内容によって生じるいかなる損害についても責任を負いません.興味がわいた方はあくまで自己責任で,チャレンジしてくださいね.
著者について