2022年1月25日火曜日

2D LiDAR LDS-006を買ってみた。

 Aliexpressを見ていたらロボット掃除機のLiDARが10ドルで売ってたのでつい買ってしまった。送料いれて15ドルだった。

シールからはEcovacs RoboticsのLDS-006っていうセンサーだということがわかる。
レーザーToFセンサーによる回転式のLiDAR。仕様は不明…
一応台座ごとプチプチに包まれて届いたので届いた。台座が付いてるのでそのまま平面部に置ける。
センサー部を回すのはベルト駆動のDCモーター。ベルトなのでまあまあ静か。ちなみにセンサー部めっちゃ回してるけど、センサー部の電力はコイルで非接触で給電してる模様。
通信は回転中心に赤外線LEDとそれの受光部があってセンサーから台座には一方通行でシリアル通信してるみたい。
接続はPHコネクタっぽい。
分解画像とピンアサインはLDS-006 Lidarを参照した。
赤が5V、緑がRX、青がTX、黒がGNDらしい。
とりあえずPHコネクタがピッタリ入った。ピッチが2.0mmなのでピンヘッダとかそのままさせないのよねぇ。UARTのレベルは3.3VらしいのでCP2102のUSBのドングルを使用した。5V電源もそちらからとった。

少し調べてみると中国語の情報だけどこのLDS-006を解析している人がいたので参考にさせてもらった。
Laser-Radar-LDS-006-Drive-Test
色んなサイトを見ているとモーターのコントロールを別にやらないとダメそうなんだけど試しにstartlds$コマンドを送ってみたら回ってデータも取れてそう。
回り始めると22バイトずつのデータがめっちゃ流れてくる。おそらく4°ずつのデータかな。
ただ、距離は4個分入っているので分解能としては1°って言うことでいいのかなぁ?
ちなみに止めるときはstoplds$らしい。
CamsenseX1用に表示プログラムを作った人が公開してくださっていたのでこれをLDS-006のプロトコルに対応するようにテキトーに改造して試してみた。
とりあえず取れてそう。センサー本体を回すと平面部の角度が変化する。
距離はどのぐらい飛ぶんだろうなぁ
これを作ってから気がついたんだけど、通信プロトコルがNeato XV11 LIDARのfirmware v2.4とv2.6のプロトコルにそっくりである。もしかしてまんまそのままだったりして?
LDS-006の解析結果との違いは距離の2bytesのうちの上位2bit分がエラーflagとして使われているぐらいなもんだし。
掃除機の部品で角度の分解能がいまいちとはいえ、LiDARも安く手に入るようになったなぁ
カスタムファーム開発してる人もいるっぽいんだけど分解能とか改善できるのかね。

追記:LDS-006のプロトコルが実はXV11と一緒なんじゃないかというところが気になって後日距離データの上位2bit分を解析してみた。やっぱりXV11と同様、距離データは14bitでHigh byteの上位2bit分が0以外になるとLow byteがエラーコード?になるようで16bit目がHighになると距離のLow byteは0x88とか0x99固定になってた。
XV11用に開発されたツールとかも使えたりするんじゃないかな。