BEIKE blog

備忘録です

gmappingのマップの更新速度について

概要

「gmappingのパラメータであるmap_update_intervalを0.1などにしても /mapトピックの配信頻度が0.5Hz程度ぐらいになってしまう」という話を聞いたので調べてみた。

〜map_update_interval ( float 、デフォルト:5.0)
    マップの更新間の時間(秒単位)。 
   この数を減らすと、計算負荷が大きくなりますが、占有グリッドがより頻繁に更新されます。 

調査

ソースコードを読む

1.まず、/map配信頻度は/scanの配信頻度に依存している。

github.com

2.その上で/map配信頻度はmap_update_intervalのパラメータに依存している。

github.com

3.また、temporalUpdateというパラメータにも依存している。(↓関係がある場所のリンクを色々ペタペタ)

github.com

github.com

github.com

github.com

github.com

github.com

github.com

実際に動かしてみる

実機

環境

  • raspicat

  • 2D LiDAR

    • UST-30LX(/scan 30Hz)
  • ノートPC

gmapping

youtu.be

gmapping nodelet

youtu.be

rosbag

あとで載せます。実機と変わらず、cpuは100%に張り付いていて、/mapの配信頻度は0.3Hzぐらいだった。そして、徐々に配信頻度は下がっていった。

まとめ

ということで、map_update_intervaltemporalUpdateのパラメータを調整すれば、/map配信頻度を20Hzぐらいまで高くできるかというと、そうでもないみたい。すくなくとも、自分の環境では1Hzぐらいで頭打ちになってしまった。また、マッピングをし続けていくと/map配信頻度が徐々に下がっていくことがわかった。cpuに関してはgmappingのプロセスは100%まで張り付いてしまう。普通に処理が間に合ってなさそう。

hector slamもやってみた

hector slamは使ってみた所、cpu使用率が低く、/mapの配信頻度を300Hzまで高くしたら cpuが100%に張り付いた。今度、コードを読んでみます。(gmappingとの違いを探す)

youtu.be