daohu527/dig-into-apollo

New planning algorithm when braking?

Opened this issue · 0 comments

It is necessary to plan the braking curve when parking. The current PID is adjusted according to the speed and position, which does not conform to human braking habits. There will be slipping, excessive braking, etc.

When parking, I suggest using the following acceleration curve, and the control module considers braking according to the acceleration.

        --------
      /
     / 
-----

Current implementation

For now they use a fix in control module(modules\control\controller\lon_controller.cc), but I don't think it’s very elegant

  // At near-stop stage, replace the brake control command with the standstill
  // acceleration if the former is even softer than the latter
  if ((trajectory_message_->trajectory_type() ==
       apollo::planning::ADCTrajectory::NORMAL) &&
      ((std::fabs(debug->preview_acceleration_reference()) <=
            control_conf_->max_acceleration_when_stopped() &&
        std::fabs(debug->preview_speed_reference()) <=
            vehicle_param_.max_abs_speed_when_stopped()) ||
       std::abs(debug->path_remain()) <
           control_conf_->max_path_remain_when_stopped())) {
    acceleration_cmd =
        (chassis->gear_location() == canbus::Chassis::GEAR_REVERSE)
            ? std::max(acceleration_cmd,
                       -lon_controller_conf.standstill_acceleration())
            : std::min(acceleration_cmd,
                       lon_controller_conf.standstill_acceleration());
    ADEBUG << "Stop location reached";
    debug->set_is_full_stop(true);
  }