Skip to content
Snippets Groups Projects
Commit b5f6ae91 authored by rachelmoan's avatar rachelmoan
Browse files

Collision check over horizon instead of dt

parent 6e02bdcc
No related branches found
No related tags found
No related merge requests found
...@@ -85,34 +85,37 @@ class GuidedMRMP: ...@@ -85,34 +85,37 @@ class GuidedMRMP:
return trajectory return trajectory
def find_all_conflicts(self, desired_controls, dt): def find_all_conflicts(self, desired_controls, desired_trajs, dt):
""" """
Loop over all the robots, checking for both node conflicts and edge Check for any conflicts that will occur between robots in the next time horizon
conflicts.
""" """
conflicts = [] conflicts = []
for r1_idx, r1 in enumerate(self.robots): for r1_idx, r1 in enumerate(self.robots):
control = desired_controls[r1_idx] # control = desired_controls[r1_idx]
print(f"next control = {control}") traj1 = desired_trajs[r1_idx]
next_state = self.dynamics_models[r1_idx].next_state(r1.current_position, control, dt) traj1 = list(zip(traj1[0],traj1[1]))
circ1 = Point(next_state[0],next_state[1])
circ1 = circ1.buffer(r1.radius)
for r2_idx, r2 in enumerate(self.robots): for r2_idx, r2 in enumerate(self.robots):
if r1.label == r2.label: if r1.label == r2.label:
continue continue
control = desired_controls[r2_idx] # control = desired_controls[r2_idx]
next_state = self.dynamics_models[r2_idx].next_state(r2.current_position, control, dt) traj2 = desired_trajs[r2_idx]
circ2 = Point(next_state[0],next_state[1]) traj2 = list(zip(traj2[0],traj2[1]))
circ2 = circ2.buffer(r2.radius)
for p1, p2 in zip(traj1, traj2):
circ1 = Point(p1[0],p1[1])
circ1 = circ1.buffer(r1.radius)
circ2 = Point(p2[0],p2[1])
circ2 = circ2.buffer(r2.radius)
# check if the robots overlap
if circ1.intersects(circ2):
if (r1,r2) not in conflicts and (r2,r1) not in conflicts:
print(f"conflict between {r1.label} and {r2.label}")
conflicts.append((r1,r2))
# check if the robots overlap
if circ1.intersects(circ2):
if (r1,r2) not in conflicts and (r2,r1) not in conflicts:
print(f"conflict between {r1.label} and {r2.label}")
conflicts.append((r1,r2))
return conflicts return conflicts
...@@ -122,12 +125,13 @@ class GuidedMRMP: ...@@ -122,12 +125,13 @@ class GuidedMRMP:
return False return False
return True return True
def get_next_controls(self,screen): def get_next_controls_and_trajectories(self,screen):
""" """
Get the next control for each robot. Get the next control for each robot.
""" """
next_controls = [] next_controls = []
next_trajs = []
for idx, r in enumerate(self.robots): for idx, r in enumerate(self.robots):
state = r.current_position state = r.current_position
...@@ -141,17 +145,11 @@ class GuidedMRMP: ...@@ -141,17 +145,11 @@ class GuidedMRMP:
self.DT) self.DT)
mpc = MPC(self.dynamics_models[idx], self.T, self.DT, self.Q, self.Qf, self.R, self.P) mpc = MPC(self.dynamics_models[idx], self.T, self.DT, self.Q, self.Qf, self.R, self.P)
# dynamics w.r.t robot frame # dynamics w.r.t robot frame
curr_state = np.array([0, 0, 0]) curr_state = np.array([0, 0, 0])
x_mpc, u_mpc = mpc.step( x_mpc, u_mpc = mpc.step(curr_state, target_traj, r.control)
curr_state,
target_traj,
r.control
)
self.add_vis_target_traj(screen, r, x_mpc) self.add_vis_target_traj(screen, r, x_mpc)
...@@ -159,7 +157,8 @@ class GuidedMRMP: ...@@ -159,7 +157,8 @@ class GuidedMRMP:
control = [u_mpc.value[0, 0], u_mpc.value[1, 0]] control = [u_mpc.value[0, 0], u_mpc.value[1, 0]]
next_controls.append(np.asarray(control)) next_controls.append(np.asarray(control))
return next_controls next_trajs.append(self.ego_to_global(r, x_mpc.value))
return next_controls, next_trajs
def advance(self, screen, state, time, dt=0.1): def advance(self, screen, state, time, dt=0.1):
...@@ -173,10 +172,10 @@ class GuidedMRMP: ...@@ -173,10 +172,10 @@ class GuidedMRMP:
""" """
# get the next control for each robot # get the next control for each robot
next_desired_controls = self.get_next_controls(screen) next_desired_controls, trajectories = self.get_next_controls_and_trajectories(screen)
# find all the conflicts at the next timestep # find all the conflicts at the next timestep
# conflicts = self.find_all_conflicts(next_desired_controls, dt) conflicts = self.find_all_conflicts(next_desired_controls, trajectories, dt)
# resolve the conflicts using the database # resolve the conflicts using the database
# resolver = TrajOptDBResolver(10, 60, conflicts, self.robots) # resolver = TrajOptDBResolver(10, 60, conflicts, self.robots)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment