@@ -45,13 +45,13 @@ class NewtonOptimizer : public Optimizer
4545 const std::vector<typename RobotModel::StateT> & x_tracked,
4646 const std::vector<typename RobotModel::StateT> & x_trajectory);
4747
48- void setIterationNumber (const int iteration_number);
48+ void setIterationNumber (const size_t iteration_number);
4949 void setAlpha (const double alpha);
5050
5151private:
5252 RobotModel robot_model_;
5353 double alpha_;
54- int iteration_number_;
54+ size_t iteration_number_;
5555};
5656
5757template <typename RobotModel>
@@ -67,18 +67,18 @@ std::vector<MatrixXd> NewtonOptimizer<RobotModel>::backwardPass(
6767 const MatrixXd & R, const double dt)
6868{
6969
70- auto trajectory_size = x_feasible.size ();
7170 auto state_dimension = Q.rows ();
7271 auto input_dimension = R.rows ();
7372
7473 MatrixXd P_tilda = MatrixXd::Identity (state_dimension + 1 , state_dimension + 1 );
7574 P_tilda.topLeftCorner (state_dimension, state_dimension) = Q;
7675
77- std::vector<MatrixXd> K_gain (trajectory_size);
76+ std::vector<MatrixXd> K_gain (x_feasible.size (),
77+ MatrixXd::Zero (input_dimension, state_dimension + 1 ));
7878
79- for (int i = trajectory_size - 2 ; i >= 0 ; i--) {
79+ for (auto i = std::distance (x_feasible. begin (), std::prev (x_feasible. end (), 2 )) ; i >= 0 ; i--) {
8080 auto x_offset =
81- robot_model_.applySystemDynamics (x_feasible[i] , u_feasible[i], dt) - x_feasible[i + 1 ];
81+ robot_model_.applySystemDynamics (x_feasible. at (i) , u_feasible[i], dt) - x_feasible[i + 1 ];
8282
8383 MatrixXd A_tilda = MatrixXd::Identity (state_dimension + 1 , state_dimension + 1 );
8484 auto A = robot_model_.getStateMatrix (x_feasible[i], u_feasible[i], dt);
@@ -117,7 +117,10 @@ std::tuple<std::vector<typename RobotModel::StateT>,
117117
118118 // assert trajectory_size > 0
119119 x_tracked[0 ] = x_feasible[0 ];
120- for (int i = 0 ; i < trajectory_size - 1 ; i++) {
120+ for (typename std::vector<typename RobotModel::StateT>::difference_type i = 0 ,
121+ max_difference = std::distance (x_feasible.begin (), std::prev (x_feasible.end (), 1 ));
122+ i < max_difference; ++i)
123+ {
121124 auto x_error = x_tracked[i] - x_feasible[i];
122125 Vector<double , 4 > z_error;
123126 z_error << x_error, alpha;
@@ -149,17 +152,19 @@ std::vector<typename RobotModel::InputT> NewtonOptimizer<RobotModel>::optimize(
149152 const Matrix2d & R, const double dt)
150153{
151154 // assert trajectory_size > 0
152- const auto trajectory_size = x_trajectory. size ();
155+
153156 double alpha = alpha_;
154157
155158 std::vector<typename RobotModel::StateT> x_best_trajectory;
156159 std::vector<typename RobotModel::InputT> u_best_trajectory;
157- std::vector<typename RobotModel::InputT> u_optimized (trajectory_size - 1 ,
160+ std::vector<typename RobotModel::InputT> u_optimized (std::distance (
161+ x_trajectory.begin (),
162+ std::prev (x_trajectory.end (), 1 )),
158163 RobotModel::InputT::Zero ());
159164
160165 double best_trajectory_cost = std::numeric_limits<double >::infinity ();
161166 double previous_best_trajectory_cost = best_trajectory_cost;
162- for (int i = 0 ; i < iteration_number_; i++ ) {
167+ for (size_t i = 0 ; i < iteration_number_; ++i ) {
163168 auto K_gain_list = this ->backwardPass (x_trajectory, u_optimized, Q, R, dt);
164169 auto [x_tracked, u_tracked] = this ->forwardPass (
165170 x_trajectory, u_optimized, K_gain_list, dt,
@@ -191,18 +196,18 @@ double NewtonOptimizer<RobotModel>::cost(
191196 const std::vector<typename RobotModel::StateT> & x_tracked,
192197 const std::vector<typename RobotModel::StateT> & x_trajectory)
193198{
194-
195- auto trajectory_size = x_trajectory.size ();
196199 double trajectory_cost = 0 ;
197- for (size_t i = 0 ; i < trajectory_size; i++) {
200+ for (typename std::vector<typename RobotModel::StateT>::size_type i = 0 ; i < x_trajectory.size ();
201+ ++i)
202+ {
198203 trajectory_cost += (x_tracked[i] - x_trajectory[i]).squaredNorm ();
199204 }
200205
201206 return trajectory_cost;
202207}
203208
204209template <typename RobotModel>
205- void NewtonOptimizer<RobotModel>::setIterationNumber(const int iteration_number)
210+ void NewtonOptimizer<RobotModel>::setIterationNumber(const size_t iteration_number)
206211{
207212 iteration_number_ = iteration_number;
208213}
0 commit comments