自己位置が不用意に動くというのは、おそらく、センサから得たデータとマッチングしているためではないか
つまり、gmappingはマッチングを優先させてしまっているのではないか
だから、自己位置がズレてしまうのではないか
それが原因だとすると、対処としては…
(1) 自己位置を優先させてマッチングさせる→できるかどうか不明
(2) マッチングの回数(頻度)を減らす→ブレを減らすため
(3) あんまり正確にマッチングさせない(?)→アバウトにすることで、自己位置を動かないようにする
とりあえず、gmappingのパラメータを洗うところから
http://wiki.ros.org/gmapping#Parameters
関係ありそうなのは、
- ~map_update_interval (float, default: 5.0)
- ~transform_publish_period (float, default: 0.05)
次点で、
- ~throttle_scans (int, default: 1)
- ~maxUrange (float, default: 80.0)
- ~sigma (float, default: 0.05)
以下、google翻訳を使って調べてみた
- ~inverted_laser (string, default: "false")
- 反転レーザー(?)。反転させるかどうかみたいな?
- ~throttle_scans (int, default: 1)
- どれだけスキャンデータをスキップ(無視)するか
- この数値を増やせば、その分だけスキップする
- たとえば、数値を3に設定すると、3回に1回データを取る
- ~map_update_interval (float, default: 5.0)
- 更新頻度に関わるパラメータ
- 数値を減らすと、更新頻度が短くなり、負荷が大きくなる
- 更新頻度が短くなれば、それだけ地図が正確になるのだろうか?
- ~maxUrange (float, default: 80.0)
- レーザーの最大範囲
- この数値を下げたら、マップとして認識する範囲が短くなる
- デフォルトでは、80(m?)以上はマップとして認識しない
- ~sigma (float, default: 0.05)
- 欲張り法における数値(?)
- 数値を大きくすると、新しいマッチングが追加されなくなる(つまり、数値以下であれば、同じマッチングだと認識する)
- 実験して確かめてみるしかなさそう
- ~kernelSize (int, default: 1)
- マッチングを見る範囲の大きさみたいな?
- マッチングの範囲が小さければ、マッチングは合う可能性が高いが、マッチングの範囲が広ければ、マッチングが合わなくなる可能性が高い
- しかし程度が分からないので、実験して調べてみる
- ~lstep (float, default: 0.05)
- 平行移動におけるズレ
- よくわからない
- ~astep (float, default: 0.05)
- 回転におけるズレ
- ~iterations (int, default: 5)
- スキャンマッチャーの対応の回数
- マッチングを何回繰り返すか?
- つまり、マッチング回数が多ければ正確になるが、処理は重くなる
- ~lsigma (float, default: 0.075)
- 尤度計算に使用されるビームのシグマ
- ビームを足し合わせるってこと?
- そもそもビームってなに?
- ~ogain (float, default: 3.0)
- 尤度の評価中に再サンプリングの効果を平滑化するため、使用するゲイン。
- ゲイン???
- よくわからない
- ~lskip (int, default: 0)
- 各スキャンでスキップするビームの数。
- だからビームとは?
- ~srr (float, default: 0.1)
- オドメトリ(ρ/ρ)の誤差
- ~srt (float, default: 0.2)
- 回転動作におけるオドメトリ(ρ/θ)の誤差
- ~str (float, default: 0.1)
- 回転オドメトリ(θ/ρ)の誤差
- ~stt (float, default: 0.2)
- 回転動作における回転オドメトリ(θ/θ)の誤差
- ~linearUpdate (float, default: 1.0)
- ロボットが引数分だけ動いたら、スキャンを更新する
- つまり、デフォルトでは1m動いたらスキャンを更新する
- 小さくした方が良いように思われる
- ~angularUpdate (float, default: 0.5)
- ロボットが引数分だけ回転したら、スキャンを更新する
- 小さくした方が良いように思われる
- ~temporalUpdate (float, default: -1.0)
- 時間毎のスキャンの更新
- デフォルトでは、時間毎の更新はオフになっている
- ~resampleThreshold (float, default: 0.5)
- ネフベースのリサンプリングのしきい値。
- ネフベースとは?
- ~particles (int, default: 30)
- フィルター中の粒子の数
- パーティクルを増やすと正確になる
- ~xmin (float, default: -100.0)
- 初期マップサイズ
- ~ymin (float, default: -100.0)
- 初期マップサイズ
- ~xmax (float, default: 100.0)
- 初期マップサイズ
- ~ymax (float, default: 100.0)
- 初期マップサイズ
- ~delta (float, default: 0.05)
- マップの解像度
- ~llsamplerange (float, default: 0.01)
- 尤度のための翻訳サンプリングの範囲
- ~llsamplestep (float, default: 0.01)
- 尤度のための翻訳サンプリングの範囲
- ~lasamplerange (float, default: 0.005)
- 尤度のための角度サンプリングの範囲
- ~lasamplestep (float, default: 0.005)
- 尤度のための角度サンプリングの範囲
- ~transform_publish_period (float, default: 0.05)
- tfパブリッシュの間をどれだけとるか(秒)
- ~occ_thresh (float, default: 0.25)
- 障害物のある確率
- 高ければマップが更新されない(?)
- ~maxRange (float)
- センサの最大範囲
0 件のコメント:
コメントを投稿