ROSのナビゲーションamclについて理解を深めてみる

ROSのロボットの動作計画のスタック(パッケージの集合)としてnavigationスタックが有名です.
そこで今回はamclを使いこなせるようになってみたいと思います.

まだ執筆途中なので,知識が増え次第情報を更新していこうと思います.
とりあえず私が使用しているlaunchファイルでのパラメータを貼り付けておきます.

min_particles :   パーティクルフィルタで使用するパーティクル数の最小値

max_particles :   パーティクルフィルタで使用するパーティクル数の最大値

kid_err :   真値と推定値との誤差???真値とは???

kid_z :   1-p. 1-kid_err???

update_min_d :   update_min_d[m]前進する毎にフィルタをアップデート.

update_min_a :  update_min_a[rad]回転する毎にフィルタをアップデート.

resample_interval :   パーティクルをリサンプルする頻度.何回フィルタをアップデートした後にリサンプルを行うかということ?

transform_tolerance :   センサデータやtfなどのtimestampと現在時刻とのズレの許容範囲.センサデータの更新が無い場合には処理が停止してしまうのではないかと思われる.[sec]

recoverry_alpha_slow :  ランダムパーティクルをばら撒くことでのリカバリを試みる.0.0で無効に.ROS Wikiでの推奨値は0.001.

recoverry_alpha_fast : ランダムパーティクルをばら撒くことでのリカバリを試みる.0.0で無効に.ROS Wikiでの推奨値は0.1.

 

initial_pose_x, y, a :   ロボットの初期姿勢.x,y,yaw.

initial_cov_xx, yy, aa :   ロボットの初期姿勢の分散.値が大きくなるほどばらまくパーティクルの分布,角度が広がる.

 

gui_publish_rate :   rviz等で可視化するためにpublishされるトピックの周波数.[Hz]

save_pose_rate :   ガウシアン(平均(姿勢)と分散)をパラメータサーバに保存する周波数.[Hz] 保存された姿勢は後の走行でフィルタを初期化するために使用される??? -1.0で無効に.

use_map_topic :   サービスによって得られるマップを使用する代わりに,mapトピックをsubscribeする.

first_map_only :   一番最初のmapを使用する.新しいmapを受信しても無視する.

 

 

ここから先は測域センサのパラメータとなります.

<レーザのパラメータ 執筆中>

このレーザのパラメータの説明は正確ではありません.ただ,直感的に理解しやすいようにそれっぽい言葉で説明してあります.

例えばロボットが持っている地図情報から,ロボットの前方に障害物があることが分かっているとします.

ロボット正面を観測しているレーザ1本のデータが

laser_z_hit :   正しい値(障害物までの距離)を計測してくれる確率.

laser_z_short :   地図にはない障害物を検出して,正しい値より低い値を計測する確率.

laser_z_max :   レーザの反射光を受信できない等の計測失敗により,計測値が計測可能レンジの最大値をとってしまう確率.

laser_z_rand :   原因不明のランダムな雑音が発生する確率.

レーザモデルがscanの場合,上記4つのパラメータをすべて使用する.

レーザモデルがlikelihood_field(_prob)の場合はlaser_z_hitとlaser_z_randのみが使用される.

(後に示すが,レーザのモデルを指定するパラメータがある.)

上記4つ(2つ)のパラメータの合計値は1とならなければいけない.

 

laser_sigma_hit :   レーザが正しい値を計測するとき,そのモデルをガウス分布で表現する.その時の分散の値.

laser_lambda_short :   レーザが地図に無い障害物などにより正しい値よりも低い値を取るとき,その確率の分布は曲線を表す.(ロボットに近い物体を検出する確率が高く,ロボットから遠い物体を検出する確率は低い.同じ大きさの障害物が遠くにある時と近くにある時で,レーザが障害物に当たる本数を考えればイメージしやすいのでは...)その曲線の傾き?のようなものを決定してくれるパラメータなのではないかと考えている...

laser_likelihood_max_dist :   調査中.

 

odom_model_type :   オドメトリのデータタイプ."diff", "omni", "diff-corrected" or "omni-corrected"のタイプがあるらしい.

odom_arpha1 :   ロボットの回転運動によるオドメトリの回転成分のズレ.

odom_arpha2 :   ロボットの回転運動によるオドメトリの並進成分のズレ.

odom_arpha3 :   ロボットの並進運動によるオドメトリの並進成分のズレ.

odom_arpha4 :   ロボットの並進運動によるオドメトリの回転成分のズレ.

odom_frame_id :   オドメトリのデータのトピック名の指定.

base_frame_id :   ロボットの足元のframe.

global_frame_id :   自己位置推定の結果がpublishされるframe.(map)

tf_broadcast :   [bool, default true] global_frameからodom_frameへのtfをpublishするかどうか.