Skip to content

Commit d89c5a1

Browse files
Applied best practices in Cpp (#31)
1 parent 9d83706 commit d89c5a1

File tree

6 files changed

+36
-25
lines changed

6 files changed

+36
-25
lines changed

frenet_trajectory_planner/demos/plan_through_waypoint_demo.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -363,7 +363,7 @@ int main()
363363
auto frenet_trajectory_planner = frenet_trajectory_planner::FrenetTrajectoryPlanner();
364364
auto planned_cartesian_trajectory = frenet_trajectory_planner.planByWaypoint(
365365
robot_cartesian_state,
366-
truncated_waypoint_list, 1.0);
366+
truncated_waypoint_list);
367367

368368
for (const auto & cartesian_state : planned_cartesian_trajectory) {
369369
std::cout << cartesian_state[0] << ", " << cartesian_state[3] << std::endl;

frenet_trajectory_planner/include/frenet_trajectory_planner/frenet_frame_converter.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ void FrenetFrameConverter::createSegments(const std::vector<CartesianPoint> & wa
3737
// assert that waypoint_list size must be at least 2
3838
CartesianPoint last_waypoint = waypoint_list[0];
3939
for (auto waypoint_it = waypoint_list.begin() + 1; (waypoint_it + 1) != waypoint_list.end();
40-
waypoint_it++)
40+
++waypoint_it)
4141
{
4242
CartesianPoint qim1 = last_waypoint;
4343
CartesianPoint qi = *(waypoint_it);
@@ -98,7 +98,7 @@ CartesianTrajectory FrenetFrameConverter::convertFrenet2Cartesian(
9898
current_longitutal_length + segments_.at(current_segment_index)->getArclength())
9999
{
100100
current_longitutal_length += segments_.at(current_segment_index)->getArclength();
101-
current_segment_index++;
101+
++current_segment_index;
102102

103103
if (current_segment_index >= segments_.size()) {
104104
return cartesian_trajectory;

frenet_trajectory_planner/include/frenet_trajectory_planner/frenet_trajectory_planner.hpp

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,7 @@ class FrenetTrajectoryPlanner
2424

2525
CartesianTrajectory planByWaypoint(
2626
const CartesianState & robot_cartesian_state,
27-
const std::vector<CartesianPoint> & waypoint_list,
28-
const double max_time_per_point);
27+
const std::vector<CartesianPoint> & waypoint_list);
2928

3029
void addPolicy(const std::shared_ptr<policies::Policy> & policy);
3130
void addCost(const std::shared_ptr<costs::Cost> & cost);
@@ -63,8 +62,7 @@ FrenetTrajectoryPlanner::FrenetTrajectoryPlanner(
6362

6463
CartesianTrajectory FrenetTrajectoryPlanner::planByWaypoint(
6564
const CartesianState & robot_cartesian_state,
66-
const std::vector<CartesianPoint> & waypoint_list,
67-
const double max_time_per_point)
65+
const std::vector<CartesianPoint> & waypoint_list)
6866
{
6967
auto frenet_frame_converter = std::make_shared<FrenetFrameConverter>();
7068
frenet_frame_converter->createSegments(waypoint_list);
@@ -76,7 +74,7 @@ CartesianTrajectory FrenetTrajectoryPlanner::planByWaypoint(
7674
frenet_frame_converter->convertCartesian2FrenetForSegment(robot_cartesian_state, 0);
7775

7876
FrenetTrajectory planned_frenet_trajectory = {};
79-
for (int i = 0; i < frenet_trajectory_planner_config_.number_of_time_intervals; i++) {
77+
for (int i = 0; i < frenet_trajectory_planner_config_.number_of_time_intervals; ++i) {
8078
// TODO (CihatAltiparmak) : eliminate some trajectories in frenet level
8179
auto all_frenet_trajectories =
8280
frenet_trajectory_generator_->getAllPossibleFrenetTrajectories(

ilqr_trajectory_tracker/include/ilqr_trajectory_tracker/ilqr_optimizer.hpp

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -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

5151
private:
5252
RobotModel robot_model_;
5353
double alpha_;
54-
int iteration_number_;
54+
size_t iteration_number_;
5555
};
5656

5757
template<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

204209
template<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
}

nav2_frenet_ilqr_controller/src/frenet_ilqr_controller.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -273,7 +273,7 @@ geometry_msgs::msg::TwistStamped FrenetILQRController::computeVelocityCommands(
273273
params_->frenet_trajectory_planner_config);
274274
auto planned_cartesian_trajectory = frenet_trajectory_planner_.planByWaypoint(
275275
robot_cartesian_state,
276-
waypoint_list, 1.0);
276+
waypoint_list);
277277

278278
// get yaw angles from velocities along x axis and y axis in cartesian coordinate system
279279
for (auto & cartesian_state : planned_cartesian_trajectory) {

nav2_frenet_ilqr_controller/src/parameter_handler.cpp

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -173,9 +173,17 @@ ParameterHandler::dynamicParametersCallback(
173173
} else if (name == plugin_name_ + ".frenet_trajectory_planner.time_interval") {
174174
params_.frenet_trajectory_planner_config.time_interval = parameter.as_double();
175175
} else if (name == plugin_name_ + ".frenet_trajectory_planner.number_of_time_intervals") {
176-
params_.frenet_trajectory_planner_config.number_of_time_intervals = parameter.as_int();
176+
if (parameter.as_int() < 1) {
177+
params_.frenet_trajectory_planner_config.number_of_time_intervals = 2;
178+
} else {
179+
params_.frenet_trajectory_planner_config.number_of_time_intervals = parameter.as_int();
180+
}
177181
} else if (name == plugin_name_ + ".ilqr_trajectory_tracker.iteration_number") {
178-
params_.iteration_number = parameter.as_int();
182+
if (parameter.as_int() < 0) {
183+
params_.iteration_number = 20;
184+
} else {
185+
params_.iteration_number = parameter.as_int();
186+
}
179187
} else if (name == plugin_name_ + ".ilqr_trajectory_tracker.alpha") {
180188
params_.alpha = parameter.as_double();
181189
}

0 commit comments

Comments
 (0)