コンテンツにスキップ

core_path_follower

経路追従コントローラパッケージです。nav_msgs/Path を追従して geometry_msgs/Twist を出力します。

概要

core_path_planner        core_path_follower        core_body_controller
 /planned_path ────────▶ PathFollowerNode ────────▶ BodyControlNode
 (chassis_link)           └── Controller             cmd_vel → CAN
               /odom ────────┘   │
                                 ▼
                          /goal_reached

MPPIとの使い分け

navigation.launch.py ではMPPIコントローラが使用されます。path_followerは単体テストやMPPIを使わない構成で利用します。

座標フレームモード

モード use_local_frame フレーム 説明
ローカル(デフォルト) true chassis_link ロボットが原点、odom不要
ワールド false map / odom nav2スタイルのグローバルプランナ用

コントローラタイプ

タイプ アルゴリズム
cascade(デフォルト) 外側PID: 方位誤差→ω_ref、内側PID: ω_ref - ω_cur→ω_cmd
pid 単一PID: 方位誤差→ω_cmd
pure_pursuit ω = k * 2v*sin(α)/L、内側PIDで追従

補間

A*経路のスムージング:

方式 説明
none そのまま
spline Catmull-Romスプライン
bezier グローバルベジエ

入力

トピック QoS 説明
/planned_path nav_msgs/Path reliable(10) 追従経路
/odom nav_msgs/Odometry reliable(50) 姿勢・角速度

出力

トピック QoS 説明
/cmd_vel geometry_msgs/Twist reliable(10) linear.x, linear.y, angular.z
/goal_reached std_msgs/Bool reliable(10) ゴール到達時にtrue

パラメータ

設定ファイル: param/default_params.yaml

パラメータ デフォルト 説明
use_local_frame bool true ローカルフレームモード
controller_type string cascade cascade / pid / pure_pursuit
linear_speed double 0.6 前進速度 [m/s]
lookahead_dist double 0.5 ルックアヘッド距離 [m]
goal_tolerance double 0.15 ゴール判定距離 [m]
control_rate double 20.0 制御ループ周波数 [Hz]
reset_on_new_path bool true 新経路受信時にPIDリセット
outer_kp / ki / kd double 1.2 / 0.0 / 0.15 外側PIDゲイン
inner_kp / ki / kd double 2.0 / 0.0 / 0.05 内側PIDゲイン
pure_k double 1.0 Pure Pursuitゲイン
interpolation string spline none / spline / bezier
spline_samples_per_segment int 10 スプライン密度
bezier_samples int 100 ベジエ密度

テスト

テスト用パスパブリッシャが付属しています:

# デフォルト(直進)
ros2 launch core_path_follower test_path_follower.launch.py

# 形状を変更
ros2 launch core_path_follower test_path_follower.launch.py path_type:=figure8

# body_controllerも含めたフルパイプライン
ros2 launch core_path_follower test_path_follower.launch.py with_body_controller:=true

プリセット経路

名前 形状 テスト対象
straight 直線 基本追従
square 四角形 90度旋回
slalom 正弦波 連続ステアリング
circle 定常旋回
figure8 8の字 左右切替
diamond 菱形(斜め) メカナム斜め走行
lateral Y方向直線 メカナム横移動