gmappingのマップの更新速度について
概要
「gmappingのパラメータであるmap_update_interval
を0.1などにしても
/mapトピックの配信頻度が0.5Hz程度ぐらいになってしまう」という話を聞いたので調べてみた。
〜map_update_interval ( float 、デフォルト:5.0) マップの更新間の時間(秒単位)。 この数を減らすと、計算負荷が大きくなりますが、占有グリッドがより頻繁に更新されます。
調査
ソースコードを読む
1.まず、/map配信頻度は/scanの配信頻度に依存している。
2.その上で/map配信頻度はmap_update_interval
のパラメータに依存している。
3.また、temporalUpdate
というパラメータにも依存している。(↓関係がある場所のリンクを色々ペタペタ)
実際に動かしてみる
実機
環境
raspicat
2D LiDAR
- UST-30LX(/scan 30Hz)
ノートPC
- core i7-10750H
- RTX2060
- melodic
gmapping
gmapping nodelet
rosbag
あとで載せます。実機と変わらず、cpuは100%に張り付いていて、/mapの配信頻度は0.3Hzぐらいだった。そして、徐々に配信頻度は下がっていった。
まとめ
ということで、map_update_interval
とtemporalUpdate
のパラメータを調整すれば、/map配信頻度を20Hzぐらいまで高くできるかというと、そうでもないみたい。すくなくとも、自分の環境では1Hzぐらいで頭打ちになってしまった。また、マッピングをし続けていくと/map配信頻度が徐々に下がっていくことがわかった。cpuに関してはgmappingのプロセスは100%まで張り付いてしまう。普通に処理が間に合ってなさそう。
hector slamもやってみた
hector slamは使ってみた所、cpu使用率が低く、/mapの配信頻度を300Hzまで高くしたら cpuが100%に張り付いた。今度、コードを読んでみます。(gmappingとの違いを探す)