エンコーダを使ってオドメトリ

エンコーダを使ってオドメトリ

先日、Amazonで買ったエンコーダ付きのモータについて記事にしましたが、これを使ってオドメトリを試してみました。

オドメトリ法

オドメトリのアルゴリズムについて、ブログに書こうと思ったのですが、数式だけでなく画像も用意する必要があり、折角なので動画にしました。

考え方や数式はとても単純なものです。

プログラム

ロボット全体のプログラムを載せると長くなるので、オドメトリクラスを載せておきます。

簡単に解説すると、 モータが回るとcnt_chk関数が呼ばれてパルスカウントします。そしてプログラムのメインループで、calc_dataを呼び出して、各数値を計算します。motor_cntl関数はモータの制御をしていて、今回はジョイスティックからの値を元にして動くようにしています。

動作

動作については動画の後半にあります。オドメトリによって推定した位置をリアルタイムでグラフに描画しています。なお、グラフ表示には定番のMatplotlibを使っています。

動画では動作時間が短いのでそれなりに推定できるように見えますが、やはり動作し続けていると誤差は大きくなっていきます。ロボットの向きに関してはジャイロセンサなどを使えば精度が上がると思います。もう少し精度が上がればSLAMにも調整してみたいです。