かみやんの技術者ブログ

主にプログラムの話です

Top-URG(UTM-30LX)によるマッピング

オドメトリ機能の誤差の問題は、まだ片付いていないのですが、今日はロボットを動かす環境になかったので、オドメトリログとTop-URG(UTM-30LX)のログを合成して可視化しました。
AibiUI(PC側メイン制御ソフト)に、水平スクロールバーを1つ追加しました。ログをロードして、このスクロールバーをスライドすると、ログの先頭から最後までロボットが移動します。Top-URG(UTM-30LX)のログは、ログの最初からロボットの位置まで描画します。
まずは、動画で。

オドメトリログに問題がまだあるので、この動画では、オドメトリログからのロボットの推定位置が10%ほど進んでしまっているので、割り戻しています。
なんか、まだ、誤差があるな〜と何度も動画を確認したところ、どうもTop-URG(UTM-30LX)のログが遅れて来ているようです。そういえば、リアルタイムでTop-URG(UTM-30LX)のログを可視化したときも、Top-URG(UTM-30LX)の向きを変えてから0.3秒ぐらい遅れて描画されました。Top-URG(UTM-30LX)がもともとそういうものなのか、シリアル通信が遅いのか、ログの記録の仕方が悪いのか、ログの可視化がいい加減なのか原因はまだ調べてないですが、遅れがあるようです。
ログの可視化でいい加減なところというのは、まだ、ログの時刻をピッタリあわせてないことです。PCとオドメトリログ(マイコン H8/3069F)とTop-URG(UTM-30LX)には、それぞれ時刻を持っていて、ログに吐いています。PCは、何年何月何日何時何分何秒という時刻が、マイコン(というかToppers/JSP)側は、Toppers/JSPが起動してからの時間がms単位で、Top-URGはTop-URGが起動してからの時間がmsで、持っていてそれをログに出しています。現状では、時刻の調整をせずに、ログに出力されている順で、可視化しています。きちんと時刻を調整できれば(これまた微妙に時刻あわせが合っているかどうかを検証するのが難しいのだが)、改善されるかも。


上の動画の最後のフレームに、ちょっと説明をつけてみた。机が7〜8個あるオフィスを走らせた絵。

次は、オドメトリ機能の旋回方向の誤差は、このTop-URG(UTM-30LX)のログから、ICP(Iterative Closest Point)法で、補正しようと思っている。
それで、マッピングの精度が上がったら、大域経路入力のGUIを作成。次に、大域経路上を走るプログラムを作成。次に、マップからランドマークを探して、絶対位置補正のプログラムを作成。次に、近接迂回経路機能の作成と行きたい(全然間に合う気がしないのだが。つくばチャレンジ2008まであと20日!)