Skip to content

Commit e02dfe1

Browse files
refactor: update MPC CGMRES class to use shared_ptr for external reference
Signed-off-by: kyoichi-sugahara <kyoichi.sugahara@tier4.jp>
1 parent 2aaa0b7 commit e02dfe1

File tree

4 files changed

+13
-6
lines changed

4 files changed

+13
-6
lines changed

control/mpc_lateral_controller/include/mpc_lateral_controller/mpc_cgmres.hpp

+5-4
Original file line numberDiff line numberDiff line change
@@ -158,13 +158,14 @@ class OCP_lateral_control
158158
///
159159
void synchronize()
160160
{
161-
// std::cerr << "\n\n\n synchronize is called \n\n\n" << std::endl;
162161
if (external_reference != nullptr) {
163162
u_ref[0] = std::atan(external_reference->curvature_in_reference_trajectory * wheel_base);
164163
curvature_in_reference_trajectory = external_reference->curvature_in_reference_trajectory;
165-
std::cerr << "u_ref is updated as: " << u_ref[0] << std::endl;
166-
std::cerr << "curvature_in_reference_trajectory is updated as: "
167-
<< curvature_in_reference_trajectory << std::endl;
164+
// std::cerr << "u_ref is updated as: " << u_ref[0] << std::endl;
165+
// std::cerr << "curvature_in_reference_trajectory is updated as: "
166+
// << curvature_in_reference_trajectory << std::endl;
167+
} else {
168+
// std::cerr << "external_reference is nullptr" << std::endl;
168169
}
169170
}
170171

control/mpc_lateral_controller/include/mpc_lateral_controller/qp_solver/qp_solver_cgmres.hpp

+2
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
#include "osqp_interface/osqp_interface.hpp"
2626
#include "rclcpp/rclcpp.hpp"
2727

28+
#include <memory>
2829
#include <string>
2930

3031
namespace autoware::motion::control::mpc_lateral_controller
@@ -80,6 +81,7 @@ class QPSolverCGMRES : public QPSolverInterface
8081
rclcpp::Logger logger_;
8182
cgmres::Logger cgmres_logger_;
8283
cgmres::SolverSettings settings_;
84+
std::shared_ptr<cgmres::OCP_lateral_control::ExternalReference> external_reference_;
8385
cgmres::SingleShootingCGMRESSolver<cgmres::OCP_lateral_control, N, kmax> mpc_;
8486
cgmres::ZeroHorizonOCPSolver<cgmres::OCP_lateral_control, kmax_init> initializer_;
8587
bool is_initialized_ = false;

control/mpc_lateral_controller/src/qp_solver/qp_solver_cgmres.cpp

+5-1
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,12 @@ QPSolverCGMRES::QPSolverCGMRES(const rclcpp::Logger & logger, const std::string
3333
1e-03, // min_dummy
3434
0 // verbose_level
3535
},
36-
mpc_(ocp_, cgmres::Horizon(0.1, 0.0), settings_),
36+
external_reference_(std::make_shared<cgmres::OCP_lateral_control::ExternalReference>()),
3737
initializer_(ocp_, settings_)
3838
{
39+
ocp_.external_reference = external_reference_;
40+
mpc_ = cgmres::SingleShootingCGMRESSolver<cgmres::OCP_lateral_control, N, kmax>(
41+
ocp_, cgmres::Horizon(0.1, 0.0), settings_);
3942
}
4043

4144
bool QPSolverCGMRES::solveCGMRES(
@@ -62,6 +65,7 @@ bool QPSolverCGMRES::solveCGMRES(
6265
// set the external reference ptr
6366
ocp_.curvature_in_reference_trajectory = average_curvature;
6467
ocp_.u_ref[0] = std::atan(average_curvature * ocp_.wheel_base);
68+
external_reference_->curvature_in_reference_trajectory = average_curvature;
6569
std::cerr << "average_curvature: " << average_curvature << std::endl;
6670
std::cerr << "ocp_.u_ref[0]: " << ocp_.u_ref[0] << std::endl;
6771
// ocp_.disp(std::cerr);

control/trajectory_follower_node/test/test_controller_node.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -355,7 +355,7 @@ TEST_F(FakeNodeFixture, right_turn_convergence)
355355
tester.traj_pub->publish(ref_trajectory);
356356
};
357357

358-
const double curvature_sign = -0.05;
358+
const double curvature_sign = -0.06;
359359
constexpr size_t iter_num = 10;
360360
for (size_t i = 0; i < iter_num; i++) {
361361
// curvature_sign = curvature_sign - 0.01;

0 commit comments

Comments
 (0)