# Cặp global/local planner của từng kiểu chuyển động. move_base2 nạp trực tiếp # `robot_nav_core2::LocalPlanner`; không dùng LocalPlannerAdapter (bridge chỉ dành cho move_base cũ). position: global_planner: CustomPlanner local_planner: HybridLocalPlanner docking: # goal_frame đã được ControlLoop quy thành pose tuyệt đối. DockPlanner dùng đúng contract # makePlan(start, goal, plan), còn CustomPlanner chỉ xử lý makePlan(Order, start, goal, plan). global_planner: DockPlanner local_planner: HybridLocalPlanner go_straight: global_planner: TwoPointsPlanner local_planner: PNKXGoStraightLocalPlanner rotate: global_planner: TwoPointsPlanner local_planner: PNKXRotateLocalPlanner # Đường lùi chung cho mọi profile: planner chính trả false hoặc plan rỗng thì move_base2 đổi sang # planner này đúng MỘT lần cho request hiện tại. Backup cũng fail thì mới chạy recovery; request mới # luôn bắt đầu lại từ planner chính. Backup gọi makePlan(start, goal, plan), không mang VDA5050 # Order, để SBPLLatticePlanner (chỉ có overload ba tham số) dùng được. backup_global_planner: SBPLLatticePlanner # Compound docking quy `goal_frame` thành pose tuyệt đối; HybridLocalPlanner không đọc maker_name. # `true` chỉ dành cho PNKXDockingLocalPlanner legacy, vốn phải chọn marker trước initialize(). docking_requires_marker: false # Bảng `library_path` và tham số riêng của CustomPlanner, DockPlanner, TwoPointsPlanner cùng các # local planner nằm trong các YAML runtime đồng hành (symlink từ pnkx_nav_core/config/). Không lặp # lại chúng ở đây để tránh hai nguồn cấu hình cho cùng một plugin. ### replanning controller_frequency: 30.0 # run controller at 30.0 Hz controller_patience: 0.033333333 # [s] giữ hành vi cũ: fail controller -> recovery sau một cycle 30 Hz planner_frequency: 0.0 # don't continually replan (only when controller failed) planner_patience: 2.0 # if the first planning attempt failed, abort planning retries after 5.0 s... max_planning_retries: 0 # ... or after 10 attempts (whichever happens first) oscillation_timeout: -1 # abort controller and trigger recovery behaviors after 30.0 s oscillation_distance: 0.5 ### telemetry # # [s] Chu kỳ in bảng thông số runtime ra terminal: CPU của từng thread đã đăng ký (control loop, # thread lập plan, hai vòng cập nhật costmap), chi phí từng đoạn công việc (local planner, global # planner, cachePlans), RSS và tốc độ tăng RSS. 0 = tắt hẳn, không đo gì. # # Dòng "(không đăng ký)" trong bảng là phần CPU KHÔNG thuộc navigation stack — nó thuộc host ROS # (callback cảm biến, OPC-UA, VDA5050, TF bridge). Đọc con số đó trước khi kết luận move_base2 nặng. # # Đây là công cụ chẩn đoán: tắt lại khi đã đo xong, đừng để chạy thường trực trên robot thật. runtime_stats_period: 0.0 # Recovery gen-2 nằm ở `recovery_behaviors_params.yaml`, namespace `recovery`. recovery_behavior_enabled: true ## mission layer # # true (mặc định của move_base2): VDA5050 Order đi qua `mission_adapters` — order được cắt thành # từng chặng tại mỗi node có action, chỉ phần `released` được chạy, `orderUpdateId` nối tiếp thay vì # chạy lại từ đầu, và có `mission_timeout` làm lưới cuối. Nguồn mission và tham số của layer khai ở # `mission_adapters_params.yaml`. # # false: order đi thẳng xuống navigation như MỘT goal duy nhất — hành vi của move_base gen-1, và # cũng là hành vi đã chạy được trên sim trước 2026-07-31. Đây là đường lùi khi mission layer gây vấn # đề trên hiện trường: đổi một khoá, không phải build lại. # # Bật mà không nạp được nguồn nào thì runtime TỰ quay về đường trực tiếp kèm log cảnh báo — thiếu # plugin không được phép biến thành robot đứng im không rõ lý do. mission_layer_enabled: true MoveBase: library_path: libmove_base2