base_local_planner: mpc_local_planner/MpcLocalPlannerROS
MpcLocalPlannerROS:

  odom_topic: odom
    
   ## Robot settings
  robot:
    type: "unicycle"
    unicycle:
      max_vel_x: 0.5
      max_vel_x_backwards: 0.3
      max_vel_theta: 0.3
      acc_lim_x: 0.4 # deactive bounds with zero
      dec_lim_x: 0.4 # deactive bounds with zero
      acc_lim_theta: 0.6 # deactivate bounds with zero

  ## Footprint model for collision avoidance
  footprint_model:
    type: "point"
    is_footprint_dynamic: False

  ## Collision avoidance
  collision_avoidance:
    min_obstacle_dist: 0.5 # Note, this parameter must be chosen w.r.t. the footprint_model
    enable_dynamic_obstacles: False
    force_inclusion_dist: 0.5
    cutoff_dist: 2.0  
    include_costmap_obstacles: True
    costmap_obstacles_behind_robot_dist: 1.5
    collision_check_no_poses: 5

  ## Planning grid 
  grid:
    type: "fd_grid"
    grid_size_ref: 20 # Set horizon length here (T = (grid_size_ref-1) * dt_ref); Note, also check max_global_plan_lookahead_dist
    dt_ref: 0.3 # and here the corresponding temporal resolution  
    xf_fixed: [False, False, False] # Unfix final state -> we use terminal cost below
    warm_start: True
    collocation_method: "forward_differences"
    cost_integration_method: "left_sum"
    variable_grid:
      enable: False # We want a fixed grid  
      min_dt: 0.0;
      max_dt: 10.0;
      grid_adaptation:
        enable: True
        dt_hyst_ratio: 0.1
        min_grid_size: 2
        max_grid_size: 50

  ## Planning options
  planning:
    objective:
      type: "quadratic_form" # minimum_time requires grid/variable_grid/enable=True and grid/xf_fixed set properly
      quadratic_form:
        state_weights: [2.0, 2.0, 0.25]
        control_weights: [0.1, 0.05]
        integral_form: False
    terminal_cost:
      type: "quadratic" # can be "none"
      quadratic:
        final_state_weights: [10.0, 10.0, 0.5]
    terminal_constraint:
      type: "none" # can be "none"
      l2_ball:
        weight_matrix: [1.0, 1.0, 1.0]
        radius: 5

  ## Controller options
  controller:
    outer_ocp_iterations: 1
    xy_goal_tolerance: 0.05
    yaw_goal_tolerance: 0.04
    global_plan_overwrite_orientation: False
    global_plan_prune_distance: 1.5
    allow_init_with_backward_motion: True
    max_global_plan_lookahead_dist: 1.0 # Check horizon length
    force_reinit_new_goal_dist: 1.0 
    force_reinit_new_goal_angular: 1.57
    force_reinit_num_steps: 0
    prefer_x_feedback: False
    publish_ocp_results: True
    
  ## Solver settings
  solver:
    type: "ipopt"
    ipopt:
      iterations: 100
      max_cpu_time: -1.0
      ipopt_numeric_options:
        tol: 1e-3
      ipopt_string_options:
        linear_solver: "mumps" 
        hessian_approximation: "exact" # exact or limited-memory
    lsq_lm:
      iterations: 10
      weight_init_eq: 2
      weight_init_ineq: 2
      weight_init_bounds: 2
      weight_adapt_factor_eq: 1.5
      weight_adapt_factor_ineq: 1.5
      weight_adapt_factor_bounds: 1.5
      weight_adapt_max_eq: 500
      weight_adapt_max_ineq: 500
      weight_adapt_max_bounds: 500

