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だけパスを残し,残りの部分を消去します.