困っている人の助けになればいいなと思います.
準備
RPLiDAR C1でセンサーデータをする準備をします.
LiDAR
SLAMTEC RPLiDAR C1
環境
WSL2:ubuntu-22.04
環境を整える方法については以下の記事などを参考にしてもらえるといいと思います.
WSL上でLiDARが認識されるようにする
参考サイトを置いときます.
power shellを開いてusbipdをインストールします.
winget install --interactive --exact dorssel.usbipd-win
自分はWSLでlinux-toolをインストールしなくてもうまくいった気がします.ダメだったら上の参考記事に解決策が乗っているので試してみてください
そしたら,LiDARをPCに挿して以下のコマンドを叩いてみてください.
usbipd list
出力結果としては以下のようなリストが表示されると思います.
Connected:
BUSID VID:PID DEVICE STATE
2-2 10c4:ea60 Silicon Labs CP210x USB to UART Bridge (COM3) Shared
2-5 27c6:538d Goodix fingerprint Not shared
2-6 0bda:565a Integrated Webcam Not shared
2-10 0cf3:e007 Qualcomm QCA61x4A Bluetooth Not shared
もしこれで表示されない場合は,silicon labsのCP210x USB-UARTブリッジVCPドライバをインストールしてみてください.
LiDARだと思われる項目が出てきたら,以下のコマンドでBUSIDを指定してアタッチします.
usbipd attach -w --busid 2-2
アタッチができたらもう一度```usbipd list````をしてみてください.以下のようにSTATEがAttachedになってると思います.
Connected:
BUSID VID:PID DEVICE STATE
2-2 10c4:ea60 Silicon Labs CP210x USB to UART Bridge (COM3) Attached
ついでにWSL上でls /dev/ttyUSB0
をしてみてください.いると思います.そいつがLiDARです.
一応アクセス権限を与えておいてください
sudo chmod 777 /dev/ttyUSB0
もう少し続きます.がんばりましょう.
gitからrplidar_sdkをクローンする
gitからクローンして自分のホームディレクトリに落とします
sudo git clone https://github.com/Slamtec/rplidar_sdk.git
持ってこれましたでしょうか
次にSDKの中には「Makefile」と呼ばれるファイルがあっちこっちに入っています.
LiDARのデータを取得する
このファイルがあるディレクトリでsudo make
を唱えることで必要なファイルがコンパイルされます.
makeを使えるようにするため「make」「g++」をインストールします.
sudo apt install make g++
そしたら方端からsudo make
していきます.
「~/sdk/rplidar_sdk/app」でmakeコマンドをたたくと,以下のようなディレクトリが出力されると思います.
custom_baudrate/ Makefile* ultra_simple/ frame_grabber/ simple_grabber/
各ファイルには「main.cpp」と「Makefile」が入っています.
READ MEによると
ultra_simple
はスキャンデータをコンソールに表示する
simple_grabber
はPCとRPLIDARを接続した後,RPLIDARのシリアル番号,ファームウェア バージョン,および正常状態を取得するプロセスを表示する
frame_grabber
はGUI でリアルタイムのレーザースキャンを表示でき,Windowsプラットフォームでのみ使用可能らしい.
今現在は開発を中止しており,その代わりにSlamtec RoboStudioというソフトウェアを使用してほしいとのこと.下にSlamtec RoboStudioのURLを貼っときます.
custom_baudrate
これについての記述はありませんでした.
いざ実行
とりあえず各ディレクトリにある「Makefile」をsudo make
したら
「~/sdk/rplidar_sdk/output/Linux/Release/」に以下のファイルがコンパイルされると思います.これらのファイルを動かすとセンサーがデータを取得して値を表示するようになります.
custom_baudrate* libsl_lidar_sdk.a simple_grabber* ultra_simple*
例としてultra_simpleを実行する際は以下のコマンドをプロンプトに打ち込んでください.
./ultra_simple --channel --serial /dev/ttyUSB0 460800
「460800」はボーレート(baudrate)と呼ばれるものです(多分).RPLidarごとに決まってるのかな,C1は460800を指定しないと動きませんでした.ですがこれに近い値,例えば450000とかでも一応起動します.
ボーレートについて詳しくわかる人は教えてほしいです.
実行結果
Ultra simple LIDAR data grabber for SLAMTEC LIDAR.
Version: 2.1.0
SLAMTEC LIDAR S/N: B5F6E1F4C2E398C0BCEA9AF33B2D4806
Firmware Ver: 1.01
Hardware Rev: 18
SLAMTEC Lidar health status : 0
theta: 0.15 Dist: 01058.00 Q: 47
theta: 0.70 Dist: 01058.00 Q: 47
theta: 1.23 Dist: 01058.00 Q: 47
theta: 1.78 Dist: 01059.00 Q: 47
theta: 2.32 Dist: 01061.00 Q: 47
~~~~~~~~~~~~~~~~~~(まだまだ続きます↓)
注意!
データを取得すると「Q:」のところは基本的に47という数字が出力されますが時々「0」が出力されます.0が出力された場合データの取得が行われておらず,distanceの値が0になってしまいます.
現在原因を探っています.わかる人がいたら教えてください.
siliconlabsのcp210x USB-UARTブリッジを使用しているため,もしかしたらそのあたりが原因で落としてしまっているかもしれないです.
もし,テキストファイルとかに出力したい人は上のコマンドにteeコマンドをくっつけてもいいと思います.それか「~/sdk/rplidar_sdk/app」にあるmain.cppをいじって出力するようにしてもいいと思います.
注意してほしいのがmain.cppを変更した場合は必ずsudo make
をしてください.反映されないと思います.
以上です.お疲れ様です.技術的なブログを書いたことがないのと,自分自身わからないことだらけなのがよくないのですが,誰かの解決策になったらいいなと思います.
意外とgitのisueを見てみると同じことで悩んでいる人や解決策をくれてる人がいるので見てみましょう.
あとは,RPLiDAR C1のマスターした方...ぜひご教授ください.