diff --git a/guided_mrmp/planners/db_guided_mrmp.py b/guided_mrmp/planners/db_guided_mrmp.py index bd095f23943d7eef40a612382ed5f9e9fe0fd061..f16a6173f5aac8b176dc88342dcf81dfec0e2108 100644 --- a/guided_mrmp/planners/db_guided_mrmp.py +++ b/guided_mrmp/planners/db_guided_mrmp.py @@ -118,9 +118,10 @@ class GuidedMRMP: return conflicts - def get_next_controls_and_trajectories(self, screen): + def get_next_controls_and_trajectories(self,screen): """ Get the next control for each robot. + """ from joblib import Parallel, delayed @@ -140,14 +141,22 @@ class GuidedMRMP: mpc = MPC(self.dynamics_models[idx], self.T, self.DT, self.Q, self.Qf, self.R, self.P, self.settings['model_predictive_controller']) - # dynamics w.r.t robot frame - curr_state = np.array([0, 0, 0]) - x_mpc, u_mpc = mpc.step(curr_state, target_traj, np.array(r.control)) + if r.last_mpc_trajectory is not None: + # dynamics w.r.t robot frame + initial_guess = {'X': r.last_mpc_trajectory, 'U': r.last_mpc_controls} + curr_state = np.array([0, 0, 0]) + x_mpc, u_mpc = mpc.step(curr_state, target_traj, np.array(r.control), initial_guess) + + else: + # dynamics w.r.t robot frame + curr_state = np.array([0, 0, 0]) + x_mpc, u_mpc = mpc.step(curr_state, target_traj, np.array(r.control)) - # self.add_vis_target_traj(screen, self.scaling_factor, r, x_mpc) - # only the first one is used to advance the simulation control = [u_mpc[0, :], u_mpc[1, :]] + + r.last_mpc_trajectory = x_mpc + r.last_mpc_controls = u_mpc return np.asarray(control), self.ego_to_global(r, x_mpc) diff --git a/guided_mrmp/utils/robot.py b/guided_mrmp/utils/robot.py index e717bbb133c385f24f5009e812ecb21e4e084bca..59e76fc581b8e846658b98a98524735c459a8c0b 100644 --- a/guided_mrmp/utils/robot.py +++ b/guided_mrmp/utils/robot.py @@ -12,6 +12,9 @@ class Robot: self.rrtpath = rrtpath self.dynamics_model = dynamics_model self.waypoints = waypoints + + self.last_mpc_trajectory = None + self.last_mpc_controls = None self.next_step = None self.next_control = None