Skip to content

Commit 4f124d3

Browse files
committed
Storing last command velocity
Signed-off-by: Chanh Hoang <chanhhoang999x@gmail.com>
1 parent 47d13ce commit 4f124d3

File tree

2 files changed

+17
-3
lines changed

2 files changed

+17
-3
lines changed

nav2_mppi_controller/include/nav2_mppi_controller/optimizer.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -288,6 +288,8 @@ class Optimizer
288288
std::nullopt, std::nullopt}; /// Caution, keep references
289289

290290
rclcpp::Logger logger_{rclcpp::get_logger("MPPIController")};
291+
292+
geometry_msgs::msg::Twist last_command_vel_{};
291293
};
292294

293295
} // namespace mppi

nav2_mppi_controller/src/optimizer.cpp

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,12 @@ void Optimizer::reset(bool reset_dynamic_speed_limits)
172172
parent_, name_ + ".TrajectoryValidator",
173173
costmap_ros_, parameters_handler_, tf_buffer_, settings_);
174174

175+
if (settings_.open_loop) {
176+
last_command_vel_.linear.x = 0.0;
177+
last_command_vel_.angular.z = 0.0;
178+
last_command_vel_.linear.y = 0.0;
179+
}
180+
175181
RCLCPP_INFO(logger_, "Optimizer reset");
176182
}
177183

@@ -214,6 +220,12 @@ std::tuple<geometry_msgs::msg::TwistStamped, Eigen::ArrayXXf> Optimizer::evalCon
214220
utils::savitskyGolayFilter(control_sequence_, control_history_, settings_);
215221
auto control = getControlFromSequenceAsTwist(plan.header.stamp);
216222

223+
if (settings_.open_loop) {
224+
last_command_vel_.linear.x = control.twist.linear.x;
225+
last_command_vel_.angular.z = control.twist.angular.z;
226+
last_command_vel_.linear.y = control.twist.linear.y;
227+
}
228+
217229
if (settings_.shift_control_sequence) {
218230
shiftControlSequence();
219231
}
@@ -352,16 +364,16 @@ void Optimizer::updateInitialStateVelocities(models::State & state) const
352364
{
353365
const bool open = settings_.open_loop;
354366

355-
const float vx0 = open ? control_sequence_.vx(0) :
367+
const float vx0 = open ? last_command_vel_.linear.x :
356368
static_cast<float>(state.speed.linear.x);
357-
const float wz0 = open ? control_sequence_.wz(0) :
369+
const float wz0 = open ? last_command_vel_.angular.z :
358370
static_cast<float>(state.speed.angular.z);
359371

360372
state.vx.col(0) = vx0;
361373
state.wz.col(0) = wz0;
362374

363375
if (isHolonomic()) {
364-
const float vy0 = open ? control_sequence_.vy(0) :
376+
const float vy0 = open ? last_command_vel_.linear.y :
365377
static_cast<float>(state.speed.linear.y);
366378
state.vy.col(0) = vy0;
367379
}

0 commit comments

Comments
 (0)