タイトルの通りで、以下のオンラインサイトから購入した Shanghai Slamtec社の「RPLiDAR A1M8-R6」を Mac で動かしてみた話の記事です。
●Shanghai Slamtec RPLiDAR 360 Degree Laser Scanner Kit - 12M Range / A1M8-R6
https://eleshop.jp/shop/g/gL2J312/
この LiDAR の用途について、以下の別サイトの情報を見ると「一般的なロボットのナビゲーションと位置確認、環境スキャニングと3Dリモデリング、一般的な同時ローカライゼーションとマッピング(SLAM)」などと書かれていたりします。
●RPLiDAR A1M8 360度レーザースキャナーキット 12Mレーザーレンジ - Seeed Studio
https://jp.seeedstudio.com/RPLiDAR-A1M8-360-Degree-Laser-Scanner-Kit-12M-Range.html
この後は、仕様を確認してみたりしつつ、SDK を使った動作確認を進めていきます。
仕様の確認
購入元のページの情報によると、仕様は以下のとおりです。
- 仕様
- 測定周波数:2000Hz
- スキャン周期:標準5.5Hz(1~10Hz可変)
- 測定距離(半径):0.15~6m
- 測定角:全方位
- 測定誤差:±0.5mm(~1.5m)、±1.0%(1.5~6m)
- 角度分解能:1°(スキャン周期5.5Hz時)
SDK を使う
GitHub上の情報の確認
今回、Mac で動作確認をするのですが、情報を見ていくと以下の SDK を使う方法があるようです。
●Slamtec/rplidar_sdk: Open source SDK for Slamtec RPLIDAR series products
https://github.com/Slamtec/rplidar_sdk
サポートされているプラットフォームが書かれた表を見てみると、A1 + Mac の組み合わせは問題なさそうでした。
Mac で「ultra_simple」を動かしてみる
それでは、 ultra_simple
を試していきます。SDK は執筆時点の最新版を試しました。
Mac用のクイックスタートを見てみると、g++ が利用できる状態で makeコマンドを使えば良いようです。
それに必要な情報として、シリアルポートを ls -l /dev/tty.*
で確認しておきます。そして、そこで得られたシリアルポートの情報を利用して、 ultra_simple
のコマンドを実行します。
GitHub上の説明だと ultra_simple /dev/ttyUSB0
などという使い方が書かれていましたが、コマンドを実行すると以下のフォーマットで実行するよう説明が出ました。
$./ultra_simple --channel --serial /dev/tty.【シリアルポートに関する文字列】
上記を実行してみたところ、「Error, cannot bind to the specified serial port /dev/tty.【シリアルポートに関する文字列】」というエラーが出ました。
エラーの対応
上記のエラーの対応を進めていきます。
Web上の情報・以下の公式ページの内容の調査を行ってみたり、Windows に環境を変えてのお試しなどをしたりしました。Windows用の frame_grabber
を動かした際にセンサーの値がとれていたようなので、エラーはデバイス側が原因ということはなさそうでした。
●RPLIDAR-A1 360°Laser Range Scanner _ Domestic Laser Range Scanner|SLAMTEC
https://www.slamtec.com/en/Lidar/A1
いろいろと試していった結果、最終的に以下の v1.12.0 を利用すれば、Mac で問題なくセンサーの値を取得できるのを確認できました。
●Release release/v1.12.0 · Slamtec/rplidar_sdk
https://github.com/Slamtec/rplidar_sdk/releases/tag/release%2Fv1.12.0
以下を見ると、左側の矢印で示した部分は v2.0.0 に更新されているものの、右側の矢印で示した部分は「最新版 v1.12.0」となっていて、「v1.12.0 を利用するとうまくいくのかな?」と思って試してみたという流れだったのですが、v2.0.0 のほうで動いていない原因はよく分からずです。
なお、この時の ultra_simple
の実行コマンドは、上で使ったものではなく以下となりました。
$./ultra_simple /dev/tty.【シリアルポートに関する文字列】
そして得られた出力は以下のとおりです。
Ultra simple LIDAR data grabber for RPLIDAR.
Version: 1.12.0
Setting serial port baudrate...
RPLIDAR S/N: 【...】
Firmware Ver: 1.29
Hardware Rev: 7
RPLidar health status : 0
theta: 0.30 Dist: 00247.00 Q: 188
theta: 0.62 Dist: 00247.00 Q: 188
theta: 0.93 Dist: 00248.00 Q: 188
theta: 1.19 Dist: 00249.00 Q: 188
theta: 1.50 Dist: 00249.00 Q: 188
theta: 1.81 Dist: 00250.00 Q: 188
theta: 2.08 Dist: 00251.00 Q: 188
theta: 2.39 Dist: 00251.00 Q: 188
theta: 2.76 Dist: 00249.00 Q: 188
theta: 3.12 Dist: 00246.00 Q: 188
theta: 3.56 Dist: 00243.00 Q: 188
theta: 3.87 Dist: 00243.00 Q: 188
theta: 4.12 Dist: 00244.00 Q: 188
theta: 4.45 Dist: 00245.00 Q: 188
theta: 4.70 Dist: 00247.00 Q: 188
theta: 5.02 Dist: 00248.00 Q: 188
theta: 5.28 Dist: 00249.00 Q: 188
theta: 5.59 Dist: 00250.00 Q: 188
theta: 5.84 Dist: 00251.00 Q: 188
...
Mac で「simple_grabber」を動かしてみる
今度は、simple_grabber を試してみます。コマンドは、以下のように ultra_simple と同じ形です。
$./simple_grabber /dev/tty.【シリアルポートに関する文字列】