Skip to content

Commit 4f09ac5

Browse files
TomohitoAndokyoichi-sugaharapre-commit-ci[bot]
authored andcommitted
refactor(mpc_lateral_controller): add debug info of qp solver (autowarefoundation#5459) (#1098)
* add debug info of qp solver * no info for EigenLeastSquareLLT * return 0 in base class --------- Signed-off-by: kyoichi-sugahara <kyoichi.sugahara@tier4.jp> Co-authored-by: Kyoichi Sugahara <kyoichi.sugahara@tier4.jp> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
1 parent 756a818 commit 4f09ac5

File tree

4 files changed

+21
-0
lines changed

4 files changed

+21
-0
lines changed

control/mpc_lateral_controller/include/mpc_lateral_controller/qp_solver/qp_solver_interface.hpp

+4
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,10 @@ class QPSolverInterface
4545
const Eigen::MatrixXd & h_mat, const Eigen::MatrixXd & f_vec, const Eigen::MatrixXd & a,
4646
const Eigen::VectorXd & lb, const Eigen::VectorXd & ub, const Eigen::VectorXd & lb_a,
4747
const Eigen::VectorXd & ub_a, Eigen::VectorXd & u) = 0;
48+
49+
virtual int64_t getTakenIter() const { return 0; }
50+
virtual double getRunTime() const { return 0.0; }
51+
virtual double getObjVal() const { return 0.0; }
4852
};
4953
} // namespace autoware::motion::control::mpc_lateral_controller
5054
#endif // MPC_LATERAL_CONTROLLER__QP_SOLVER__QP_SOLVER_INTERFACE_HPP_

control/mpc_lateral_controller/include/mpc_lateral_controller/qp_solver/qp_solver_osqp.hpp

+4
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,10 @@ class QPSolverOSQP : public QPSolverInterface
5353
const Eigen::VectorXd & lb, const Eigen::VectorXd & ub, const Eigen::VectorXd & lb_a,
5454
const Eigen::VectorXd & ub_a, Eigen::VectorXd & u) override;
5555

56+
int64_t getTakenIter() const override { return osqpsolver_.getTakenIter(); }
57+
double getRunTime() const override { return osqpsolver_.getRunTime(); }
58+
double getObjVal() const override { return osqpsolver_.getObjVal(); }
59+
5660
private:
5761
autoware::common::osqp::OSQPInterface osqpsolver_;
5862
rclcpp::Logger logger_;

control/mpc_lateral_controller/include/mpc_lateral_controller/qp_solver/qp_solver_unconstraint_fast.hpp

+7
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,13 @@ class QPSolverEigenLeastSquareLLT : public QPSolverInterface
5353
const Eigen::MatrixXd & h_mat, const Eigen::MatrixXd & f_vec, const Eigen::MatrixXd & a,
5454
const Eigen::VectorXd & lb, const Eigen::VectorXd & ub, const Eigen::VectorXd & lb_a,
5555
const Eigen::VectorXd & ub_a, Eigen::VectorXd & u) override;
56+
57+
int64_t getTakenIter() const override { return 1; };
58+
// TODO(someone): calculate runtime and object value, otherwise just return 0 by base class
59+
// double getRunTime() const override { return 0.0; }
60+
// double getObjVal() const override { return 0.0; }
61+
62+
private:
5663
};
5764
} // namespace autoware::motion::control::mpc_lateral_controller
5865
#endif // MPC_LATERAL_CONTROLLER__QP_SOLVER__QP_SOLVER_UNCONSTRAINT_FAST_HPP_

control/mpc_lateral_controller/src/mpc.cpp

+6
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,9 @@ Float32MultiArrayStamped MPC::generateDiagData(
145145
const double wz_predicted = current_velocity * std::tan(mpc_data.predicted_steer) / wb;
146146
const double wz_measured = current_velocity * std::tan(mpc_data.steer) / wb;
147147
const double wz_command = current_velocity * std::tan(ctrl_cmd.steering_tire_angle) / wb;
148+
const int iteration_num = m_qpsolver_ptr->getTakenIter();
149+
const double runtime = m_qpsolver_ptr->getRunTime();
150+
const double objective_value = m_qpsolver_ptr->getObjVal();
148151

149152
typedef decltype(diagnostic.data)::value_type DiagnosticValueType;
150153
const auto append_diag = [&](const auto & val) -> void {
@@ -168,6 +171,9 @@ Float32MultiArrayStamped MPC::generateDiagData(
168171
append_diag(nearest_k); // [15] nearest path curvature (not smoothed)
169172
append_diag(mpc_data.predicted_steer); // [16] predicted steer
170173
append_diag(wz_predicted); // [17] angular velocity from predicted steer
174+
append_diag(iteration_num); // [18] iteration number
175+
append_diag(runtime); // [19] runtime of the latest problem solved
176+
append_diag(objective_value); // [20] objective value of the latest problem solved
171177

172178
return diagnostic;
173179
}

0 commit comments

Comments
 (0)