ROS move baseでdwa local plannerを使ってみる

ROSのmove_baseにdwa_local_planner(DWAPlannerROS)というものがあったので,そちらを使用してみました.
ちなみにmove_baseのデフォルト設定ではbase_local_planner(TrajectryPlannerROS)というものを使用しています.
このプランナーがどのような動きをするのかはまだ不明ですが,情報が分かり次第アップしていこうと思います.
とりあえず見ていきましょう.

パラメータはbase_local_planner(TrajectoryPlannerROS)と同じようなものが多いですが,
パラメータの名称違いがあるので注意しましょう.例えば acc_lim_theta -> acc_lim_th など.
rotation_velなどの回転速度パラメータが絶対値になっていることにも注意が必要です.

 

 

Robot Configuration Parameters   -ロボット速度系のパラメータ-

~<name>/acc_lim_x (double[m/s], default: 2.5)
~<name>/acc_lim_y (double[m]/s, default: 2.5)
~<name>/acc_lim_th (double[rad/s], default: 3.2)
ロボットの加速度のパラメータ.acc_lim_yの値は全方向ロボット(ホロノミックなロボット)の場合に使用します.

~<name>/max_trans_vel (double, default: 0.55)
~<name>/min_trans_vel (double, default: 0.1)
~<name>/max_vel_x (double, default: 0.55)
~<name>/min_vel_x (double, default: 0.0)
~<name>/max_vel_y (double, default: 0.1)
~<name>/min_vel_y (double, default: -0.1)
~<name>/max_rot_vel (double, default: 1.0)
~<name>/min_rot_vel (double, default: 0.4)
ロボットの前進速度と回頭速度を決めます.

 

 

Goal Tolerance Parameters   -ゴール到達に関するパラメータ-

~<name>/yaw_goal_tolerance   (double [rad], default: 0.05)
目標角度と現在角度の差がyaw_goal_tolerance以下になった時,目標地点に到達したと判定する.

~<name>/xy_goal_tolerance   (double [m], default: 0.1)
目標地点と現在地点との距離がxy_goal_tolerance以下となった時,目標地点に到達したと判定する.

~<name>/latch_xy_goal_tolerance   (bool, default: false)
調査中.ゴール到達に角度判定を入れない?

 

 

Forward Simulation Paramaters   -ロボットの移動シミュレーションのパラメータ-

~<name>/sim_time   (double [sec], default 1.7)
ロボットの移動を何秒間シミュレートするか.

~<name>/sim_granularity   (double [m], default 0.025)
算出する経路のきめ細かさ.

~<name>/angular_sim_granularity   (double [rad], default sim_granularity)
回頭速度をシミュレートする際のステップ数

~<name>/vx_samples   (int, default 3)
何段階速度をシミュレートするか.

~<name>/vtheta_samples   (int, default 20)
何段階回頭速度をシミュレートするか.

~<name>/controller_frequency   (double [Hz], default 20.0)
シミュレーションの頻度.

 

 

Trajectory Scoring Parameters   -経路生成のコストパラメータ-

~<name>/path_distance_bias   (double, default: 32.0)
base_local_plannerのpdist_scaleと同じ.
base_local_plannerではmeter_scoreingのパラメータがあったが,dwa_local_plannerでは最初からピクセルベースではなく距離ベースでコストが計算されている.

~<name>/goal_distance_bias   (double, default: 24.0)
base_local_plannerのgdist_scaleと同じ

~<name>/occdist_scale   (double, default: 0.01)
base_local_plannerのoccdist_scaleと同じ

~<name>/forward_point_distance   (double [m], default: 0.325)
追加scoreing pointの場所.
base_local_plannerでいうheading_lookaheadというパラメータと同じ役割をしていると思われる.

~<name>/stop_time_buffer (double, default: 0.2)
調査中.

~<name>/scaling_speed (double, default: 0.25)
調査中.ソースコードを追いかけてみたが,このパラメータはどうやら内部では使われていないようです.

~<name>/max_scaling_factor (double, default: 0.2)
調査中.こちらのパラメータも同様に内部では使用されていないみたいです.
なぜパラメータとして設定されているか不思議ですが...

 

 

Oscillation Prevention Parameters

~<name>/oscillation_reset_dist   (double [m], default: 0.05)
ソースコードを少し追ってみたのですが,ロボットが震動する(例えば,右旋回と左旋回を繰り返すなど)事があった際にrecovery_behaviorに移行することがあるらしい.
ロボットがoscillation_reset_distすすむと,振動のカウントがリセットされるということではないか.

 

 

Global Plan Parameters

~<name>/prune_plan   (bool, default: true)
global_plannerから受け取ったグローバルパスの既にロボットが通過した部分を切り取るかどうか.
切りとる場合はロボットからうしろ1mだけパスを残し,残りの部分を消去します.