2013年9月14日土曜日

gmappingのパラメータ(昨日の続き)

gmappingについて
自己位置が不用意に動くというのは、おそらく、センサから得たデータとマッチングしているためではないか
つまり、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 件のコメント:

コメントを投稿