@@ -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