RPLiDAR A1M8-R6 を Mac で動かした時のメモ（Slamtec/rplidar_sdk を使った簡単な動作確認）

タイトルの通りで、以下のオンラインサイトから購入した 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 の組み合わせは問題なさそうでした。
![サポートされているプラットフォーム](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/58832415-d92d-ae06-ba00-b4c314f9749b.png)

### Mac で「ultra_simple」を動かしてみる
それでは、 `ultra_simple` を試していきます。SDK は執筆時点の最新版を試しました。

Mac用のクイックスタートを見てみると、g++ が利用できる状態で makeコマンドを使えば良いようです。
![Mac用のクイックスタート](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/c9564926-4d6e-c3fa-1500-f7b316ca0ab5.png)

それに必要な情報として、シリアルポートを `ls -l /dev/tty.*` で確認しておきます。そして、そこで得られたシリアルポートの情報を利用して、 `ultra_simple` のコマンドを実行します。

GitHub上の説明だと `ultra_simple /dev/ttyUSB0` などという使い方が書かれていましたが、コマンドを実行すると以下のフォーマットで実行するよう説明が出ました。

```bash
$./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 のほうで動いていない原因はよく分からずです。
![バージョンの記載.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/6f51698e-9341-2fad-39d8-30c136a05076.jpeg)

なお、この時の `ultra_simple` の実行コマンドは、上で使ったものではなく以下となりました。

```bash
$./ultra_simple /dev/tty.【シリアルポートに関する文字列】
```

そして得られた出力は以下のとおりです。

```bash
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 と同じ形です。

```bash
$./simple_grabber /dev/tty.【シリアルポートに関する文字列】
```

そして、以下の実行結果を無事に得られました。
![simple_grabberの実行](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/117b0b3c-d9ff-87b4-685d-cbdf14609658.png)