LiDARもどきをつくる

ロボットの周りの壁の状況を取得したいと思うことって割と身近にあると思います。
しかしLiDARを載せるほどでもなかったり、スペースがなかったり、そこまでサンプリングレートがいらないという場合もあります。そこでToFとジャイロセンサを用いて擬似的にLiDAR的somethingを作れないかと思いさくっと作ってみました。
動作
この動画に全て凝縮されています。
ToFとBNO055を使ってLiDAR的なことをしてみたよー! pic.twitter.com/mMqPaN3D3r
— しろくま🥒胡瓜 Blend (@shirokuma89dev) October 3, 2022
ToFで取得した距離情報とジャイロセンサから得られる姿勢角で表される極座標をデカルト座標系(直交座標系)に変換してるだけです。結構シンプル。
構成
ハードウェア
- Arduino UNO
- VL53L0X
- BNO055
- その他ブレッドボード類
環境
- PlatformIO
- Processing 4.x
PlatformIOはマイコンへの書き込み用、ProcessingはMacbookの画面に表示するUIを構築するためにつかいました。
数式
しょうもない式なので「はたいふべきにあらず」で終わらせようかとも思いましたが一応書いておきます。ガウス平面から攻めていくのが、図示とかしなくても数式追ってくだけなので楽だと思います。
ガチでこんだけ。難しくもなんともないでしょ?
実際のコートでやってみた
今日setukaと一緒にレスキューメイズ用のミニコートを組み立てたので実際にこのLiDARもどきを試してみました。
UI側ですが近いところは赤、遠いところは紫と色相環の順でグラデーションとなるようになっています。なので壁の角のところはまぁまぁ近いので緑になっています。
コートのT字の形状を結構しっかり読み取れています。精度もまぁ十分でしょう。
これは何に役立つの?
一つのセンサを乗っけたモジュールを回転させてこのように周囲の地図を取得すること自体はあまりないかもしれませんが、例えば足回りにエンコーダーをつけておいてフィールドを進みながら計測したデータを地図上に蓄積していけば自己位置推定や最適なルート検索に役立つ可能性があります。
また今年のBlendのロボットには距離センサを上部に12個設置する予定のため、$\frac{\pi}{6}$ロボットが回転しただけで全方位の状況を取得することができます。比較的目印になりやすい角のマスや行き止まりのマスでは確実に方向転換の動作が必要になるので、蓄積したデータを「足跡」として利用することができます。要するにスタートタイルへの帰還に活用できるのではと思ったわけです。
とまぁ書き連ねましたが実際にこれがうまくいくのかは作ってみるまではわかりません。どっかできっと役立つんじゃないですかね、知らんけど。
情報公開
30分ほどでさくっと書いたコードなので汚い部分や不合理な部分もあると思いますが、公開するという姿勢自体に意義があると思うのでこちらに載せておきます。
ライセンスはお馴染みのCC BY-NC-SA 4.0です。
かなり短い記事でしたが読んでくれてありがとう。またね👋
Comments