@@ -51,11 +51,13 @@ class NewtonOptimizer : public Optimizer
5151 const MatrixXd & P);
5252 std::tuple<std::vector<typename RobotModel::StateT>,
5353 std::vector<typename RobotModel::InputT>> forwardPass (
54+ const typename RobotModel::StateT & x0,
5455 const std::vector<typename RobotModel::StateT> & x_feasible,
5556 const std::vector<typename RobotModel::InputT> & u_feasible,
5657 const std::vector<MatrixXd> & K_gains, const double dt, const double alpha);
5758
5859 std::vector<typename RobotModel::InputT> optimize (
60+ const typename RobotModel::StateT & x0,
5961 const std::vector<typename RobotModel::StateT> & x_feasible, const Matrix3d & Q,
6062 const Matrix2d & R, const double dt);
6163 double cost (
@@ -122,6 +124,7 @@ std::vector<MatrixXd> NewtonOptimizer<RobotModel>::backwardPass(
122124template <typename RobotModel>
123125std::tuple<std::vector<typename RobotModel::StateT>,
124126 std::vector<typename RobotModel::InputT>> NewtonOptimizer<RobotModel>::forwardPass(
127+ const typename RobotModel::StateT & x0,
125128 const std::vector<typename RobotModel::StateT> & x_feasible,
126129 const std::vector<typename RobotModel::InputT> & u_feasible,
127130 const std::vector<MatrixXd> & K_gains, const double dt, const double alpha)
@@ -133,7 +136,7 @@ std::tuple<std::vector<typename RobotModel::StateT>,
133136 std::vector<typename RobotModel::InputT> u_applied (input_size);
134137
135138 // assert trajectory_size > 0
136- x_tracked[0 ] = x_feasible[ 0 ] ;
139+ x_tracked[0 ] = x0 ;
137140 for (typename std::vector<typename RobotModel::StateT>::difference_type i = 0 ,
138141 max_difference = std::distance (x_feasible.begin (), std::prev (x_feasible.end (), 1 ));
139142 i < max_difference; ++i)
@@ -165,6 +168,7 @@ std::tuple<MatrixXd, MatrixXd> NewtonOptimizer<RobotModel>::solveDiscreteLQRProb
165168
166169template <typename RobotModel>
167170std::vector<typename RobotModel::InputT> NewtonOptimizer<RobotModel>::optimize(
171+ const typename RobotModel::StateT & x0,
168172 const std::vector<typename RobotModel::StateT> & x_trajectory, const Matrix3d & Q,
169173 const Matrix2d & R, const double dt)
170174{
@@ -183,7 +187,7 @@ std::vector<typename RobotModel::InputT> NewtonOptimizer<RobotModel>::optimize(
183187 double previous_best_trajectory_cost = best_trajectory_cost;
184188 for (size_t i = 0 ; i < iteration_number_; ++i) {
185189 auto K_gain_list = this ->backwardPass (x_trajectory, u_optimized, Q, R, dt);
186- auto [x_tracked, u_tracked] = this ->forwardPass (
190+ auto [x_tracked, u_tracked] = this ->forwardPass (x0,
187191 x_trajectory, u_optimized, K_gain_list, dt,
188192 alpha);
189193 u_optimized = u_tracked;
0 commit comments