From 814957042ff536169efb7a41c54a35394b3c7cb5 Mon Sep 17 00:00:00 2001 From: SeungUkJeon <80089347+SeungUkJeon@users.noreply.github.com> Date: Fri, 9 Apr 2021 02:22:36 +0900 Subject: [PATCH 01/47] add mov_localizer to HW_week1 --- helper.py | 30 ++++++++++++ main.py | 116 +++++++++++++++++++++++++++++++++++++++++++++++ mov_localizer.py | 84 ++++++++++++++++++++++++++++++++++ 3 files changed, 230 insertions(+) create mode 100644 helper.py create mode 100644 main.py create mode 100644 mov_localizer.py diff --git a/helper.py b/helper.py new file mode 100644 index 00000000..511421c6 --- /dev/null +++ b/helper.py @@ -0,0 +1,30 @@ +from math import sqrt +from math import pi +from math import exp + +# Calculate normal (Gaussian) distribution probability. +# norm_pdf(x, m, s) returns the probability of a random variable +# havnig the value of x, assuming that the variable follows +# the Gaussian probability distribution with mean of m and +# standard deviation of s. +def norm_pdf(x, m, s): + one_over_sqrt_2pi = 1 / sqrt(2 * pi) + return (one_over_sqrt_2pi / s) * exp(-0.5 * ((x - m) / s) ** 2) + +# A helper class to visualize pdf evolution. +class GraphAnimator: + data = [] + graph = None + + def __init__(self, graph, data): + self.graph = graph + self.data = data + + def animate(self, frameno): + if frameno == 0: + return self.graph + if len(self.data) > 0: + d = self.data.pop(0) + for b, h in zip(self.graph, d): + b.set_height(h) + return self.graph diff --git a/main.py b/main.py new file mode 100644 index 00000000..4e5ea191 --- /dev/null +++ b/main.py @@ -0,0 +1,116 @@ +import matplotlib.pyplot as plt +import matplotlib.animation as animation +from helper import GraphAnimator + +from markov_localizer import initialize_priors +from markov_localizer import estimate_pseudo_range +from markov_localizer import motion_model +from markov_localizer import observation_model +from markov_localizer import normalize_distribution + +if __name__ == '__main__': + # Initialize graph data to an empty list + graph = [] + # Std dev for initial position + position_stdev = 1.0 + # Std dev for control (movement) + control_stdev = 1.0 + # Std dev for observation (measurement) + observation_stdev = 1.0 + # Assumed constant velocity of vehicle + mov_per_timestep = 1.0 + + # Size of the map + map_size = 25 + # Map (landmark positions) + landmark_positions = [3, 9, 14, 23] + + # Observation data + observations = [ + [1, 7, 12, 21], + [0, 6, 11, 20], + [5, 10, 19], + [4, 9, 18], + [3, 8, 17], + [2, 7, 16], + [1, 6, 15], + [0, 5, 14], + [4, 13], + [3, 12], + [2, 11], + [1, 10], + [0, 9], + [8], + [7], + [6], + [5], + [4], + [3], + [2], + [1], + [0], + [], + [], + [], + ] + + # Initialize priors (initial belief) + priors = initialize_priors( + map_size, landmark_positions, position_stdev + ) + + # Cycle through timesteps + for t in range(len(observations)): + ''' + print("---------------TIME STEP---------------") + print("t = %d" % t) + print("-----Motion----------OBS----------------PRODUCT--") + ''' + posteriors = [0.0] * map_size + # Step through each pseudo position p (to determine pdf) + for pseudo_position in range(map_size): + # Prediction: + # Calculate probability of the vehicle being at position p + motion_prob = motion_model( + pseudo_position, mov_per_timestep, priors, + map_size, control_stdev + ) + # Get pseudo range + pseudo_ranges = estimate_pseudo_range( + landmark_positions, pseudo_position + ) + # Measurement update: + # Calculate observation probability + observation_prob = observation_model( + landmark_positions, observations[t], + pseudo_ranges, observation_stdev + ) + # Calculate posterior probability + posteriors[pseudo_position] = motion_prob * observation_prob + + ''' + print("%f\t%f\t%f" % (motion_prob, + observation_prob, + posteriors[pseudo_position]) + ) + ''' + + # Normalize the posterior probability distribution + posteriors = normalize_distribution(posteriors) + + # Update priors with posteriors + priors = posteriors + + # Collect data to plot according to timestep. + graph.append(posteriors) + + # Now we generate an animated plot with the saved data. + fig, ax = plt.subplots(figsize=(10, 10), num='Markov Localization') + bgraph = plt.bar(range(map_size), [0] * map_size) + plt.ylim(0, 1) + graph_animator = GraphAnimator(bgraph, graph) + ani = animation.FuncAnimation( + fig, graph_animator.animate, blit=True, interval=1000, repeat=False, + frames=len(graph) + ) + plt.show() diff --git a/mov_localizer.py b/mov_localizer.py new file mode 100644 index 00000000..a30eb7af --- /dev/null +++ b/mov_localizer.py @@ -0,0 +1,84 @@ +from helper import norm_pdf + +# Initialize prior probabilities +# taking into account that the vehicle is initially parked +# around one of the landmarks and we do not know which. +def initialize_priors(map_size, landmarks, stdev): + # Set all probabilities to zero initially. + priors = [0.0] * map_size + # Initialize prior distribution assuming the vehicle is at + # landmark +/- 1.0 meters * stdev. + positions = [] + for p in landmarks: + start = int(p - stdev) - 1 + if start < p: + start += 1 + c = 0 + while start + c <= p + stdev: + # Gather positions to set initial probability. + positions.append(start + c) + c += 1 + # Calculate actual probability to be uniformly distributed. + prob = 1.0 / len(positions) + # Set the probability to each position. + for p in positions: + priors[p] += prob + return priors + +# Estimate pseudo range determined according to the +# given pseudo position. +def estimate_pseudo_range(landmarks, p): + pseudo_ranges = [] + # Loop over each landmark and estimate pseudo ranges + for landmark in landmarks: + dist = landmark - p + # Consider only those landmarks ahead of the vehicle. + if dist > 0: + pseudo_ranges.append(dist) + return pseudo_ranges + +# Motion model (assuming 1-D Gaussian dist) +def motion_model(position, mov, priors, map_size, stdev): + # Initialize the position's probability to zero. + position_prob = 0.0 + + for i in range(map_size): + position_prob += norm_pdf(position-i,stdev, mov)*priors[i] + + # TODO: Loop over state space for all possible prior positions, + # calculate the probability (using norm_pdf) of the vehicle + # moving to the current position from that prior. + # Multiply this probability to the prior probability of + # the vehicle "was" at that prior position. + return position_prob + +# Observation model (assuming independent Gaussian) +def observation_model(landmarks, observations, pseudo_ranges, stdev): + # Initialize the measurement's probability to one. + distance_prob = 1.0 + + if len(observations) == len(pseudo_ranges): + for i in range(len(pseudo_ranges)): + distance_prob *= norm_pdf(pseudo_ranges[i],observations[i],1) + else : distance_prob = 0 + + # TODO: Calculate the observation model probability as follows: + # (1) If we have no observations, we do not have any probability. + # (2) Having more observations than the pseudo range indicates that + # this observation is not possible at all. + # (3) Otherwise, the probability of this "observation" is the product of + # probability of observing each landmark at that distance, where + # that probability follows N(d, mu, sig) with + # d: observation distance + # mu: expected mean distance, given by pseudo_ranges + # sig: squared standard deviation of measurement + return distance_prob + +# Normalize a probability distribution so that the sum equals 1.0. +def normalize_distribution(prob_dist): + normalized = [0.0] * len(prob_dist) + total = sum(prob_dist) + for i in range(len(prob_dist)): + if (total != 0.0): + normalized[i] = prob_dist[i] / total + return normalized From 6de111bde5ffefe790bee9a3dc0b7226723950a5 Mon Sep 17 00:00:00 2001 From: SeungUkJeon <80089347+SeungUkJeon@users.noreply.github.com> Date: Fri, 9 Apr 2021 02:29:40 +0900 Subject: [PATCH 02/47] Delete helper.py --- helper.py | 30 ------------------------------ 1 file changed, 30 deletions(-) delete mode 100644 helper.py diff --git a/helper.py b/helper.py deleted file mode 100644 index 511421c6..00000000 --- a/helper.py +++ /dev/null @@ -1,30 +0,0 @@ -from math import sqrt -from math import pi -from math import exp - -# Calculate normal (Gaussian) distribution probability. -# norm_pdf(x, m, s) returns the probability of a random variable -# havnig the value of x, assuming that the variable follows -# the Gaussian probability distribution with mean of m and -# standard deviation of s. -def norm_pdf(x, m, s): - one_over_sqrt_2pi = 1 / sqrt(2 * pi) - return (one_over_sqrt_2pi / s) * exp(-0.5 * ((x - m) / s) ** 2) - -# A helper class to visualize pdf evolution. -class GraphAnimator: - data = [] - graph = None - - def __init__(self, graph, data): - self.graph = graph - self.data = data - - def animate(self, frameno): - if frameno == 0: - return self.graph - if len(self.data) > 0: - d = self.data.pop(0) - for b, h in zip(self.graph, d): - b.set_height(h) - return self.graph From e2a738ea507c1b95ad09aeaa004822e307563eb0 Mon Sep 17 00:00:00 2001 From: SeungUkJeon <80089347+SeungUkJeon@users.noreply.github.com> Date: Fri, 9 Apr 2021 02:29:53 +0900 Subject: [PATCH 03/47] Delete main.py --- main.py | 116 -------------------------------------------------------- 1 file changed, 116 deletions(-) delete mode 100644 main.py diff --git a/main.py b/main.py deleted file mode 100644 index 4e5ea191..00000000 --- a/main.py +++ /dev/null @@ -1,116 +0,0 @@ -import matplotlib.pyplot as plt -import matplotlib.animation as animation -from helper import GraphAnimator - -from markov_localizer import initialize_priors -from markov_localizer import estimate_pseudo_range -from markov_localizer import motion_model -from markov_localizer import observation_model -from markov_localizer import normalize_distribution - -if __name__ == '__main__': - # Initialize graph data to an empty list - graph = [] - # Std dev for initial position - position_stdev = 1.0 - # Std dev for control (movement) - control_stdev = 1.0 - # Std dev for observation (measurement) - observation_stdev = 1.0 - # Assumed constant velocity of vehicle - mov_per_timestep = 1.0 - - # Size of the map - map_size = 25 - # Map (landmark positions) - landmark_positions = [3, 9, 14, 23] - - # Observation data - observations = [ - [1, 7, 12, 21], - [0, 6, 11, 20], - [5, 10, 19], - [4, 9, 18], - [3, 8, 17], - [2, 7, 16], - [1, 6, 15], - [0, 5, 14], - [4, 13], - [3, 12], - [2, 11], - [1, 10], - [0, 9], - [8], - [7], - [6], - [5], - [4], - [3], - [2], - [1], - [0], - [], - [], - [], - ] - - # Initialize priors (initial belief) - priors = initialize_priors( - map_size, landmark_positions, position_stdev - ) - - # Cycle through timesteps - for t in range(len(observations)): - ''' - print("---------------TIME STEP---------------") - print("t = %d" % t) - print("-----Motion----------OBS----------------PRODUCT--") - ''' - posteriors = [0.0] * map_size - # Step through each pseudo position p (to determine pdf) - for pseudo_position in range(map_size): - # Prediction: - # Calculate probability of the vehicle being at position p - motion_prob = motion_model( - pseudo_position, mov_per_timestep, priors, - map_size, control_stdev - ) - # Get pseudo range - pseudo_ranges = estimate_pseudo_range( - landmark_positions, pseudo_position - ) - # Measurement update: - # Calculate observation probability - observation_prob = observation_model( - landmark_positions, observations[t], - pseudo_ranges, observation_stdev - ) - # Calculate posterior probability - posteriors[pseudo_position] = motion_prob * observation_prob - - ''' - print("%f\t%f\t%f" % (motion_prob, - observation_prob, - posteriors[pseudo_position]) - ) - ''' - - # Normalize the posterior probability distribution - posteriors = normalize_distribution(posteriors) - - # Update priors with posteriors - priors = posteriors - - # Collect data to plot according to timestep. - graph.append(posteriors) - - # Now we generate an animated plot with the saved data. - fig, ax = plt.subplots(figsize=(10, 10), num='Markov Localization') - bgraph = plt.bar(range(map_size), [0] * map_size) - plt.ylim(0, 1) - graph_animator = GraphAnimator(bgraph, graph) - ani = animation.FuncAnimation( - fig, graph_animator.animate, blit=True, interval=1000, repeat=False, - frames=len(graph) - ) - plt.show() From 4810baf79b4ffc39892d57c5093746a321eccff5 Mon Sep 17 00:00:00 2001 From: SeungUkJeon <80089347+SeungUkJeon@users.noreply.github.com> Date: Fri, 9 Apr 2021 02:30:01 +0900 Subject: [PATCH 04/47] Delete mov_localizer.py --- mov_localizer.py | 84 ------------------------------------------------ 1 file changed, 84 deletions(-) delete mode 100644 mov_localizer.py diff --git a/mov_localizer.py b/mov_localizer.py deleted file mode 100644 index a30eb7af..00000000 --- a/mov_localizer.py +++ /dev/null @@ -1,84 +0,0 @@ -from helper import norm_pdf - -# Initialize prior probabilities -# taking into account that the vehicle is initially parked -# around one of the landmarks and we do not know which. -def initialize_priors(map_size, landmarks, stdev): - # Set all probabilities to zero initially. - priors = [0.0] * map_size - # Initialize prior distribution assuming the vehicle is at - # landmark +/- 1.0 meters * stdev. - positions = [] - for p in landmarks: - start = int(p - stdev) - 1 - if start < p: - start += 1 - c = 0 - while start + c <= p + stdev: - # Gather positions to set initial probability. - positions.append(start + c) - c += 1 - # Calculate actual probability to be uniformly distributed. - prob = 1.0 / len(positions) - # Set the probability to each position. - for p in positions: - priors[p] += prob - return priors - -# Estimate pseudo range determined according to the -# given pseudo position. -def estimate_pseudo_range(landmarks, p): - pseudo_ranges = [] - # Loop over each landmark and estimate pseudo ranges - for landmark in landmarks: - dist = landmark - p - # Consider only those landmarks ahead of the vehicle. - if dist > 0: - pseudo_ranges.append(dist) - return pseudo_ranges - -# Motion model (assuming 1-D Gaussian dist) -def motion_model(position, mov, priors, map_size, stdev): - # Initialize the position's probability to zero. - position_prob = 0.0 - - for i in range(map_size): - position_prob += norm_pdf(position-i,stdev, mov)*priors[i] - - # TODO: Loop over state space for all possible prior positions, - # calculate the probability (using norm_pdf) of the vehicle - # moving to the current position from that prior. - # Multiply this probability to the prior probability of - # the vehicle "was" at that prior position. - return position_prob - -# Observation model (assuming independent Gaussian) -def observation_model(landmarks, observations, pseudo_ranges, stdev): - # Initialize the measurement's probability to one. - distance_prob = 1.0 - - if len(observations) == len(pseudo_ranges): - for i in range(len(pseudo_ranges)): - distance_prob *= norm_pdf(pseudo_ranges[i],observations[i],1) - else : distance_prob = 0 - - # TODO: Calculate the observation model probability as follows: - # (1) If we have no observations, we do not have any probability. - # (2) Having more observations than the pseudo range indicates that - # this observation is not possible at all. - # (3) Otherwise, the probability of this "observation" is the product of - # probability of observing each landmark at that distance, where - # that probability follows N(d, mu, sig) with - # d: observation distance - # mu: expected mean distance, given by pseudo_ranges - # sig: squared standard deviation of measurement - return distance_prob - -# Normalize a probability distribution so that the sum equals 1.0. -def normalize_distribution(prob_dist): - normalized = [0.0] * len(prob_dist) - total = sum(prob_dist) - for i in range(len(prob_dist)): - if (total != 0.0): - normalized[i] = prob_dist[i] / total - return normalized From c549b1a07117f1043842eea831fdf204730743ee Mon Sep 17 00:00:00 2001 From: SeungUkJeon <80089347+SeungUkJeon@users.noreply.github.com> Date: Fri, 9 Apr 2021 02:32:03 +0900 Subject: [PATCH 05/47] add Mov_localizer to HW_week1 --- code/week-2/mov_localizer.py | 84 ++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 code/week-2/mov_localizer.py diff --git a/code/week-2/mov_localizer.py b/code/week-2/mov_localizer.py new file mode 100644 index 00000000..a30eb7af --- /dev/null +++ b/code/week-2/mov_localizer.py @@ -0,0 +1,84 @@ +from helper import norm_pdf + +# Initialize prior probabilities +# taking into account that the vehicle is initially parked +# around one of the landmarks and we do not know which. +def initialize_priors(map_size, landmarks, stdev): + # Set all probabilities to zero initially. + priors = [0.0] * map_size + # Initialize prior distribution assuming the vehicle is at + # landmark +/- 1.0 meters * stdev. + positions = [] + for p in landmarks: + start = int(p - stdev) - 1 + if start < p: + start += 1 + c = 0 + while start + c <= p + stdev: + # Gather positions to set initial probability. + positions.append(start + c) + c += 1 + # Calculate actual probability to be uniformly distributed. + prob = 1.0 / len(positions) + # Set the probability to each position. + for p in positions: + priors[p] += prob + return priors + +# Estimate pseudo range determined according to the +# given pseudo position. +def estimate_pseudo_range(landmarks, p): + pseudo_ranges = [] + # Loop over each landmark and estimate pseudo ranges + for landmark in landmarks: + dist = landmark - p + # Consider only those landmarks ahead of the vehicle. + if dist > 0: + pseudo_ranges.append(dist) + return pseudo_ranges + +# Motion model (assuming 1-D Gaussian dist) +def motion_model(position, mov, priors, map_size, stdev): + # Initialize the position's probability to zero. + position_prob = 0.0 + + for i in range(map_size): + position_prob += norm_pdf(position-i,stdev, mov)*priors[i] + + # TODO: Loop over state space for all possible prior positions, + # calculate the probability (using norm_pdf) of the vehicle + # moving to the current position from that prior. + # Multiply this probability to the prior probability of + # the vehicle "was" at that prior position. + return position_prob + +# Observation model (assuming independent Gaussian) +def observation_model(landmarks, observations, pseudo_ranges, stdev): + # Initialize the measurement's probability to one. + distance_prob = 1.0 + + if len(observations) == len(pseudo_ranges): + for i in range(len(pseudo_ranges)): + distance_prob *= norm_pdf(pseudo_ranges[i],observations[i],1) + else : distance_prob = 0 + + # TODO: Calculate the observation model probability as follows: + # (1) If we have no observations, we do not have any probability. + # (2) Having more observations than the pseudo range indicates that + # this observation is not possible at all. + # (3) Otherwise, the probability of this "observation" is the product of + # probability of observing each landmark at that distance, where + # that probability follows N(d, mu, sig) with + # d: observation distance + # mu: expected mean distance, given by pseudo_ranges + # sig: squared standard deviation of measurement + return distance_prob + +# Normalize a probability distribution so that the sum equals 1.0. +def normalize_distribution(prob_dist): + normalized = [0.0] * len(prob_dist) + total = sum(prob_dist) + for i in range(len(prob_dist)): + if (total != 0.0): + normalized[i] = prob_dist[i] / total + return normalized From 76acec51f4155922c3ee50e2a2798f193c7c1114 Mon Sep 17 00:00:00 2001 From: SeungUkJeon <80089347+SeungUkJeon@users.noreply.github.com> Date: Mon, 12 Apr 2021 09:13:38 +0900 Subject: [PATCH 06/47] Update kalman_filter.py add EKF to HW_week2 --- code/week-3/EKF/kalman_filter.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/code/week-3/EKF/kalman_filter.py b/code/week-3/EKF/kalman_filter.py index 4f2ddf29..f841a70e 100644 --- a/code/week-3/EKF/kalman_filter.py +++ b/code/week-3/EKF/kalman_filter.py @@ -2,6 +2,7 @@ from math import sqrt from math import atan2 from tools import Jacobian +from math import pi class KalmanFilter: def __init__(self, x_in, P_in, F_in, H_in, R_in, Q_in): @@ -33,3 +34,13 @@ def update_ekf(self, z): # 6. Calculate new estimates # x = x' + K * y # P = (I - K * H_j) * P + px,py,vx,vy = self.x + H_j = Jacobian(self.x) + S = np.dot(np.dot(H_j.self.P), H_j.T) + self.R + K = np.dot(np.dot(slef.P, H_j.T),np.linalg.inv(S)) + y = z - [sqrt(px*px+py*py), atan2(py,px), (px*vx+py*vy)/sqrt(px*px+py*py)] + while(y[1] > pi): y[1] -= 2*pi + while(y[1] < -pi): y[1] += 2*pi + self.x = self.x + np.dot(k, y) + self.p = self.p - np.dot(np.dot(K, H_j), self.P) + From baaa948c6a7218e5c67c145790d9a7571f52fb1d Mon Sep 17 00:00:00 2001 From: SeungUkJeon <80089347+SeungUkJeon@users.noreply.github.com> Date: Mon, 12 Apr 2021 09:14:46 +0900 Subject: [PATCH 07/47] Add EKF to HW_week2 --- code/week-3/EKF/kalman_filter.py | 1 + 1 file changed, 1 insertion(+) diff --git a/code/week-3/EKF/kalman_filter.py b/code/week-3/EKF/kalman_filter.py index f841a70e..cb94ac17 100644 --- a/code/week-3/EKF/kalman_filter.py +++ b/code/week-3/EKF/kalman_filter.py @@ -44,3 +44,4 @@ def update_ekf(self, z): self.x = self.x + np.dot(k, y) self.p = self.p - np.dot(np.dot(K, H_j), self.P) + From c81367ab312185b38964629e1458598bbd39ea42 Mon Sep 17 00:00:00 2001 From: SeungUkJeon <80089347+SeungUkJeon@users.noreply.github.com> Date: Mon, 12 Apr 2021 09:30:07 +0900 Subject: [PATCH 08/47] Add PTF to HW_week4 --- code/week-4/particle_filter.py | 55 +++++++++++++++++++++++++++++++--- 1 file changed, 51 insertions(+), 4 deletions(-) diff --git a/code/week-4/particle_filter.py b/code/week-4/particle_filter.py index b9d54f5a..6d015953 100644 --- a/code/week-4/particle_filter.py +++ b/code/week-4/particle_filter.py @@ -1,5 +1,8 @@ import numpy as np from helpers import distance +import math +import random +from scipy.stats import multivariate_normal class ParticleFilter: def __init__(self, num_particles): @@ -93,12 +96,41 @@ def update_weights(self, sensor_range, std_landmark_x, std_landmark_y, # for all the observations. # 5. Update the particle's weight by the calculated probability. - pass + for p in self.particles: + associations = [] + for k, v in map_landmarks.items(): + dist = distance(p, v) + if dist <= sensor_range: + associations.append({ + 'id': k, + 'x': v['x'], + 'y': v['y'] + }) + + trans_landmarks = [] + for o in observations: + trans_landmarks.append({ + 'x': p['x'] + o['x']*math.cos(p['t']) - o['y']*math.sin(p['t']), + 'y': p['y'] + o['x']*math.sin(p['t']) + o['y']*math.cos(p['t']) + }) + + if not associations: + continue + + association_temp = self.associate(associations, trans_landmarks) + p['w'] = 1.0 + + for i in range(len(association_temp)): + p['w'] *= multivariate_normal([association_temp[i]['x'], association_temp[i]['y']],[[std_landmark_x**2, 0], [0, std_landmark_y**2]]).pdf([trans_landmarks[i]['x'], trans_landmarks[i]['y']]) + + p['assoc'].append(association_temp[i]['id']) + + #p['assoc'] = associations # Resample particles with replacement with probability proportional to # their weights. def resample(self): - return + # TODO: Select (possibly with duplicates) the set of particles # that captures the posteior belief distribution, by # 1. Drawing particle samples according to their weights. @@ -107,8 +139,23 @@ def resample(self): # references to mutable objects in Python. # Finally, self.particles shall contain the newly drawn set of # particles. - - pass + weights = [p['w'] for p in self.particles] + + resampled_particles = [] + r = np.random.uniform(0.0, 1/len(self.particles)) + c = weights[0] + for i in range(len(self.particles)): + U = r + (i * 1/len(self.particles)) + while U > c: + if len(self.particles) > (i+1): + i += 1 + c = c + weights[i] + else: + break + resampled_particles.append(self.particles[i]) + self.particles = resampled_particles + return + # Choose the particle with the highest weight (probability) def get_best_particle(self): From 996bc0127e2031a9f9538f8b830973b23caffa91 Mon Sep 17 00:00:00 2001 From: SeungUkJeon <80089347+SeungUkJeon@users.noreply.github.com> Date: Mon, 12 Apr 2021 09:31:16 +0900 Subject: [PATCH 09/47] Add EKF to HW_week3 --- code/week-3/EKF/kalman_filter.py | 1 - 1 file changed, 1 deletion(-) diff --git a/code/week-3/EKF/kalman_filter.py b/code/week-3/EKF/kalman_filter.py index cb94ac17..f841a70e 100644 --- a/code/week-3/EKF/kalman_filter.py +++ b/code/week-3/EKF/kalman_filter.py @@ -44,4 +44,3 @@ def update_ekf(self, z): self.x = self.x + np.dot(k, y) self.p = self.p - np.dot(np.dot(K, H_j), self.P) - From 29d52e6c7ed070309b0f43eeb2899465bd996a5d Mon Sep 17 00:00:00 2001 From: SeungUkJeon <80089347+SeungUkJeon@users.noreply.github.com> Date: Mon, 12 Apr 2021 09:32:24 +0900 Subject: [PATCH 10/47] Add Mov_localizer to HW_week2 --- code/week-2/mov_localizer.py | 1 + 1 file changed, 1 insertion(+) diff --git a/code/week-2/mov_localizer.py b/code/week-2/mov_localizer.py index a30eb7af..49a1f842 100644 --- a/code/week-2/mov_localizer.py +++ b/code/week-2/mov_localizer.py @@ -82,3 +82,4 @@ def normalize_distribution(prob_dist): if (total != 0.0): normalized[i] = prob_dist[i] / total return normalized + From 50f4061f0998a14c1db7a2d0d4619cba59bc701d Mon Sep 17 00:00:00 2001 From: SeungUkJeon <80089347+SeungUkJeon@users.noreply.github.com> Date: Mon, 12 Apr 2021 18:42:40 +0900 Subject: [PATCH 11/47] Add PTF to HW_week4 --- code/week-4/particle_filter.py | 118 +++++++++++++++++++-------------- 1 file changed, 69 insertions(+), 49 deletions(-) diff --git a/code/week-4/particle_filter.py b/code/week-4/particle_filter.py index 6d015953..ab32f05b 100644 --- a/code/week-4/particle_filter.py +++ b/code/week-4/particle_filter.py @@ -1,14 +1,12 @@ import numpy as np from helpers import distance -import math -import random -from scipy.stats import multivariate_normal class ParticleFilter: def __init__(self, num_particles): self.initialized = False self.num_particles = num_particles + # Set the number of particles. # Initialize all the particles to the initial position # (based on esimates of x, y, theta and their uncertainties from GPS) @@ -43,10 +41,12 @@ def predict(self, dt, velocity, yawrate, std_x, std_y, std_theta): xf = p['x'] + v_yr * (np.sin(p['t'] + yr_dt) - np.sin(p['t'])) yf = p['y'] + v_yr * (np.cos(p['t']) - np.cos(p['t'] + yr_dt)) tf = p['t'] + yr_dt + p['x'] = np.random.normal(xf, std_x) p['y'] = np.random.normal(yf, std_y) p['t'] = np.random.normal(tf, std_theta) + # Find the predicted measurement that is closest to each observed # measurement and assign the observed measurement to this # particular landmark. @@ -77,6 +77,7 @@ def associate(self, predicted, observations): # Gaussian distribution. def update_weights(self, sensor_range, std_landmark_x, std_landmark_y, observations, map_landmarks): + import math # TODO: For each particle, do the following: # 1. Select the set of landmarks that are visible # (within the sensor range). @@ -96,41 +97,48 @@ def update_weights(self, sensor_range, std_landmark_x, std_landmark_y, # for all the observations. # 5. Update the particle's weight by the calculated probability. - for p in self.particles: - associations = [] - for k, v in map_landmarks.items(): - dist = distance(p, v) - if dist <= sensor_range: - associations.append({ - 'id': k, - 'x': v['x'], - 'y': v['y'] - }) - - trans_landmarks = [] - for o in observations: - trans_landmarks.append({ - 'x': p['x'] + o['x']*math.cos(p['t']) - o['y']*math.sin(p['t']), - 'y': p['y'] + o['x']*math.sin(p['t']) + o['y']*math.cos(p['t']) - }) - - if not associations: + for p in self.particles: + landmarks = [] + for _id in map_landmarks: + x, y = map_landmarks[_id]['x'], map_landmarks[_id]['y'] + if self.calculate_distance(x-p['x'], y-p['y']) < sensor_range: + landmarks.append({'id': _id, 'x': x, 'y': y}) + + map_observations = [] + for observation in observations: + x = p['x'] + observation['x']*np.cos(p['t']) - observation['y']*np.sin(p['t']) + y = p['y'] + observation['x'] * np.sin(p['t']) + observation['y'] * np.cos(p['t']) + map_observations.append({'x': x, 'y': y}) + + if not landmarks: continue - - association_temp = self.associate(associations, trans_landmarks) - p['w'] = 1.0 - - for i in range(len(association_temp)): - p['w'] *= multivariate_normal([association_temp[i]['x'], association_temp[i]['y']],[[std_landmark_x**2, 0], [0, std_landmark_y**2]]).pdf([trans_landmarks[i]['x'], trans_landmarks[i]['y']]) - - p['assoc'].append(association_temp[i]['id']) - - #p['assoc'] = associations + tmp_assoc = self.associate(landmarks, map_observations) + + p['w'] = 1. + p['assoc'] = [] + for i in range(len(tmp_assoc)): + p['w'] *= self.norm_pdf(self.calculate_distance(tmp_assoc[i]['x'] - p['x'], tmp_assoc[i]['y'] - p['y']), + self.calculate_distance(observations[i]['x'], observations[i]['y']), + math.sqrt(std_landmark_x**2 + std_landmark_y**2)) + 1e-100 + + # p['w'] *= (self.norm_pdf(tmp[i]['x'] - p['x'], observations[i]['x'], std_landmark_x) * + # self.norm_pdf(tmp[i]['y'] - p['y'], observations[i]['y'], std_landmark_y)) + 1e-100 + + # p['w'] *= self.multivariate_normal(np.array([observations[i]['x'], + # observations[i]['y']]), + # 2, + # np.array([tmp[i]['x'] - p['x'], + # tmp[i]['y'] - p['y']]), + # np.array([[1, 0.], [0., 1]])) + 1e-100 + p['assoc'].append(tmp_assoc[i]['id']) + + # Resample particles with replacement with probability proportional to # their weights. def resample(self): - + import copy + import random # TODO: Select (possibly with duplicates) the set of particles # that captures the posteior belief distribution, by # 1. Drawing particle samples according to their weights. @@ -139,24 +147,21 @@ def resample(self): # references to mutable objects in Python. # Finally, self.particles shall contain the newly drawn set of # particles. - weights = [p['w'] for p in self.particles] - - resampled_particles = [] - r = np.random.uniform(0.0, 1/len(self.particles)) - c = weights[0] - for i in range(len(self.particles)): - U = r + (i * 1/len(self.particles)) - while U > c: - if len(self.particles) > (i+1): - i += 1 - c = c + weights[i] - else: + tmp = [] + _max = sum([i['w'] for i in self.particles]) + + for _ in range(self.num_particles): + r = random.uniform(0, _max) + for particle in self.particles: + if r < particle['w']: + tmp.append(copy.deepcopy(particle)) break - resampled_particles.append(self.particles[i]) - self.particles = resampled_particles - return - + else: + r -= particle['w'] + + self.particles = tmp + # Choose the particle with the highest weight (probability) def get_best_particle(self): highest_weight = -1.0 @@ -164,4 +169,19 @@ def get_best_particle(self): if p['w'] > highest_weight: highest_weight = p['w'] best_particle = p + return best_particle + + def calculate_distance(self, x, y): + return (x**2 + y**2)**(1/2) + + def norm_pdf(self, x, m, s): + from math import sqrt, pi, exp + one_over_sqrt_2pi = 1 / sqrt(2 * pi) + return (one_over_sqrt_2pi / s) * exp(-0.5 * ((x - m) / s) ** 2) + + def multivariate_normal(self, x, d, mean, covariance): + """pdf of the multivariate normal distribution.""" + x_m = x - mean + return (1. / (np.sqrt((2 * np.pi) ** d * np.linalg.det(covariance))) * + np.exp(-(np.linalg.solve(covariance, x_m).T.dot(x_m)) / 2)) From eb177386b2233412b7c49d8cc5ed37887f4d4bb7 Mon Sep 17 00:00:00 2001 From: SeungUkJeon <80089347+SeungUkJeon@users.noreply.github.com> Date: Tue, 13 Apr 2021 15:07:49 +0900 Subject: [PATCH 12/47] Add EKF to HW_week3 --- code/week-3/EKF/kalman_filter.py | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/code/week-3/EKF/kalman_filter.py b/code/week-3/EKF/kalman_filter.py index f841a70e..27cb0da6 100644 --- a/code/week-3/EKF/kalman_filter.py +++ b/code/week-3/EKF/kalman_filter.py @@ -20,6 +20,7 @@ def predict(self): def update(self, z): S = np.dot(np.dot(self.H, self.P), self.H.T) + self.R K = np.dot(np.dot(self.P, self.H.T), np.linalg.inv(S)) + # Calculate new estimates self.x = self.x + np.dot(K, z - np.dot(self.H, self.x)) self.P = self.P - np.dot(np.dot(K, self.H), self.P) @@ -27,20 +28,25 @@ def update(self, z): def update_ekf(self, z): # TODO: Implement EKF update for radar measurements # 1. Compute Jacobian Matrix H_j + px, py, vx, vy = self.x + H_j = Jacobian(self.x) + # 2. Calculate S = H_j * P' * H_j^T + R - # 3. Calculate Kalman gain K = H_j * P' * Hj^T + R + S = np.dot(np.dot(H_j, self.P), H_j.T) + self.R + + # 3. Calculate Kalman gain K = H_j * P' * H_j^T + R + K = np.dot(np.dot(self.P, H_j.T), np.linalg.inv(S)) + # 4. Estimate y = z - h(x') + y = z - [sqrt(px*px+py*py), atan2(py,px), (px*vx+py*vy)/sqrt(px*px+py*py)] + # 5. Normalize phi so that it is between -PI and +PI + while (y[1] > pi): y[1] -= 2*pi + while (y[1] < -pi): y[1] += 2*pi + # 6. Calculate new estimates # x = x' + K * y # P = (I - K * H_j) * P - px,py,vx,vy = self.x - H_j = Jacobian(self.x) - S = np.dot(np.dot(H_j.self.P), H_j.T) + self.R - K = np.dot(np.dot(slef.P, H_j.T),np.linalg.inv(S)) - y = z - [sqrt(px*px+py*py), atan2(py,px), (px*vx+py*vy)/sqrt(px*px+py*py)] - while(y[1] > pi): y[1] -= 2*pi - while(y[1] < -pi): y[1] += 2*pi - self.x = self.x + np.dot(k, y) - self.p = self.p - np.dot(np.dot(K, H_j), self.P) - + self.x = self.x + np.dot(K, y) + self.P = self.P - np.dot(np.dot(K, H_j), self.P) + From 239ce601a2ce55310dc327f2ccc7d43537337ffb Mon Sep 17 00:00:00 2001 From: SeungUkJeon <80089347+SeungUkJeon@users.noreply.github.com> Date: Thu, 15 Apr 2021 21:59:25 +0900 Subject: [PATCH 13/47] Add ReadMe to HW_week2 --- code/week-2/README.md | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/code/week-2/README.md b/code/week-2/README.md index 59901e6c..c743fdc9 100644 --- a/code/week-2/README.md +++ b/code/week-2/README.md @@ -21,3 +21,42 @@ If you correctly implement the above functions, you expect to see a plot similar ![Expected Result of Markov Localization][plot] If you run the program (`main.py`) without any modification to the code, it will generate only the frame of the above plot because all probabilities returned by `motion_model()` are zero by default. + +[HW Weeek2] + + +[1] Motion model (assuming 1-D Gaussian dist) +def motion_model(position, mov, priors, map_size, stdev): + + position_prob = 0.0 + + for i in range(map_size): + position_prob += norm_pdf(position-i,stdev, mov)*priors[i] + + return position_prob + +- Motion Model 은 차량이 이동할 수 있는 모든 직전 위치의 확률과 이동에 따른 현재 위치를 예측하여 확률로 나타낸다. +- Position Prob 는 차량 위치를 예측한 확률로, 차량이 존재할 수 있는 모든 이전 위치의 확률을 Priors 로 나타낸다 +또한 이전 위치에서 현재 차량이 존재하는 위치로 이동할 수 있는 확률은 Position 으로 , 직전 위치 확률 * 현재 위치로 올 확률로 계산한다. + +[2] Observation model (assuming independent Gaussian) +def observation_model(landmarks, observations, pseudo_ranges, stdev): + + distance_prob = 1.0 + + if len(observations) == len(pseudo_ranges): + for i in range(len(pseudo_ranges)): + distance_prob *= norm_pdf(pseudo_ranges[i],observations[i],1) + else : distance_prob = 0 + + return distance_prob + +- Observations Model 은 차량 주변의 나무(LandMark)를 관측할 수 있지만, 불확실성을 가지고 있다. +관측한 나무 위치 값을 기준으로 차량이 존재할 수 있는 위치에 대한 신뢰도를 높인다. + +-나무가 존재하여도 관측 값이 0이거나, 나무 수보다 많게 관측되면 사용할 수 없는 값으로 처리한다. +신뢰할만한 관측 결과는 (관측된 나무 위치 * 현재 차량 위치에서 나무가 관측될 확률)로 나타낼 수 있다. + +-정확도가 점차 커지는 과정은 관측된 수만큼 반복하여 차량에서 관측한 나무 사이의 거리와 나무가 그 거리에서 보일 확률을 곱하여 누적한다. +위와 같은 반복 작업으로 계산된 위치에 대한 확률과 센서 측정에 대한 확률을 이용하여 현재 차량이 위치할 수 있는 확률을 나타낸다. + From 06b4085bf41ece1fd38a2269aa6ca1ec6e26f83f Mon Sep 17 00:00:00 2001 From: SeungUkJeon <80089347+SeungUkJeon@users.noreply.github.com> Date: Thu, 15 Apr 2021 22:05:08 +0900 Subject: [PATCH 14/47] Add ReadMe to HW_week2 --- code/week-2/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/week-2/README.md b/code/week-2/README.md index c743fdc9..130884ea 100644 --- a/code/week-2/README.md +++ b/code/week-2/README.md @@ -22,7 +22,7 @@ If you correctly implement the above functions, you expect to see a plot similar If you run the program (`main.py`) without any modification to the code, it will generate only the frame of the above plot because all probabilities returned by `motion_model()` are zero by default. -[HW Weeek2] +[HW_Week2] [1] Motion model (assuming 1-D Gaussian dist) @@ -54,9 +54,9 @@ def observation_model(landmarks, observations, pseudo_ranges, stdev): - Observations Model 은 차량 주변의 나무(LandMark)를 관측할 수 있지만, 불확실성을 가지고 있다. 관측한 나무 위치 값을 기준으로 차량이 존재할 수 있는 위치에 대한 신뢰도를 높인다. --나무가 존재하여도 관측 값이 0이거나, 나무 수보다 많게 관측되면 사용할 수 없는 값으로 처리한다. +- 나무가 존재하여도 관측 값이 0이거나, 나무 수보다 많게 관측되면 사용할 수 없는 값으로 처리한다. 신뢰할만한 관측 결과는 (관측된 나무 위치 * 현재 차량 위치에서 나무가 관측될 확률)로 나타낼 수 있다. --정확도가 점차 커지는 과정은 관측된 수만큼 반복하여 차량에서 관측한 나무 사이의 거리와 나무가 그 거리에서 보일 확률을 곱하여 누적한다. +- 정확도가 점차 커지는 과정은 관측된 수만큼 반복하여 차량에서 관측한 나무 사이의 거리와 나무가 그 거리에서 보일 확률을 곱하여 누적한다. 위와 같은 반복 작업으로 계산된 위치에 대한 확률과 센서 측정에 대한 확률을 이용하여 현재 차량이 위치할 수 있는 확률을 나타낸다. From 5bfa97cd0510117ea2a206f57fe27342697507e5 Mon Sep 17 00:00:00 2001 From: SeungUkJeon <80089347+SeungUkJeon@users.noreply.github.com> Date: Thu, 15 Apr 2021 23:06:02 +0900 Subject: [PATCH 15/47] Add ReadMe to HW_week3 --- code/week-3/README.md | 49 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/code/week-3/README.md b/code/week-3/README.md index e78b110e..5c367e1d 100644 --- a/code/week-3/README.md +++ b/code/week-3/README.md @@ -52,3 +52,52 @@ The program consists of five modules: ### Assignment Complete the implementation of EKF with sensor fusion by writing the function `update_ekf()` in the module `kalman_filter`. Details are given in class and instructions are included in comments. + +[HW_week3] +Update Extended Kalman filter + +- EKF는 기존의 Kalman Filter와 유사하나 선형화하는 기준점을 계속 갱신한다는 특징을 가지고 있다. +EKF 업데이트는 레이더 관측을 활용한다. + +def update_ekf(self, z): + # TODO: Implement EKF update for radar measurements + # 1. Compute Jacobian Matrix H_j + px, py, vx, vy = self.x + H_j = Jacobian(self.x) + +- 자코비안(Jacobian) 행렬은 원소들이 모두 1차 미분 계수로 구성되어 있으며, 미소 영역에서 ‘비선형 변환’을 ‘선형 변환으로 근사화 시키는 것이 특징이다. +Jacobian 함수를 이용하여 상태변수 Jacobian 행렬을 계산한다. + + # 2. Calculate S = H_j * P' * H_j^T + R + S = np.dot(np.dot(H_j, self.P), H_j.T) + self.R + +- Kalman Gain "k" 를 구하기 위해 (자코비안 행렬 * 예측 공분산 P * 측정 에러 공분산 R)을 계산한다. + + # 3. Calculate Kalman gain K = H_j * P' * H_j^T + R + K = np.dot(np.dot(self.P, H_j.T), np.linalg.inv(S)) + +- Kalman Gain "K" 계산 + + # 4. Estimate y = z - h(x') + y = z - [sqrt(px*px+py*py), atan2(py,px), (px*vx+py*vy)/sqrt(px*px+py*py)] + +- 레이더 관측 변수 "z" 와 관측 상태변수 "y" 차이로 에러를 구한다. + + # 5. Normalize phi so that it is between -PI and +PI + while (y[1] > pi): y[1] -= 2*pi + while (y[1] < -pi): y[1] += 2*pi + +- 관측 변수의 단위는 라디안(rad)이고, 모든 각도를 pi : -pi 사이의 값을 가질 수 있다. +위 각도 범위를 벗어나지 않도록 조건을 생성한다. + + # 6. Calculate new estimates + # x = x' + K * y + # P = (I - K * H_j) * P + self.x = self.x + np.dot(K, y) + self.P = self.P - np.dot(np.dot(K, H_j), self.P) + +- 예측 상태변수 "x" 와 관측 에러 "y", Kalman Gain "K" 를 활용하여 새로운 예측 상태변수 "x" 를 구할 수 있다. +새로운 공분산 "P" 도 자코비안 "H_j" 와 Kalman Gain "K" 를 활용하여 계산할 수 있다. + +- 측정 에러와 새로운 예측을 반복하여 매 Sample 마다 위치 예측을 갱신한다. + From 2d1d27aeef912f819f1d810efa93858a017cb8b0 Mon Sep 17 00:00:00 2001 From: SeungUkJeon <80089347+SeungUkJeon@users.noreply.github.com> Date: Thu, 15 Apr 2021 23:08:13 +0900 Subject: [PATCH 16/47] Add to ReadMe HW_week3 --- code/week-3/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/week-3/README.md b/code/week-3/README.md index 5c367e1d..b0ff03c4 100644 --- a/code/week-3/README.md +++ b/code/week-3/README.md @@ -59,8 +59,8 @@ Update Extended Kalman filter - EKF는 기존의 Kalman Filter와 유사하나 선형화하는 기준점을 계속 갱신한다는 특징을 가지고 있다. EKF 업데이트는 레이더 관측을 활용한다. -def update_ekf(self, z): - # TODO: Implement EKF update for radar measurements + def update_ekf(self, z): + # TODO: Implement EKF update for radar measurements # 1. Compute Jacobian Matrix H_j px, py, vx, vy = self.x H_j = Jacobian(self.x) From 60e10c0e73dcf1bce3b6365e10300766ae996981 Mon Sep 17 00:00:00 2001 From: SeungUkJeon <80089347+SeungUkJeon@users.noreply.github.com> Date: Fri, 16 Apr 2021 17:05:56 +0900 Subject: [PATCH 17/47] Add ReadMe to HW_week3 --- code/week-3/README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/code/week-3/README.md b/code/week-3/README.md index b0ff03c4..a8f0a586 100644 --- a/code/week-3/README.md +++ b/code/week-3/README.md @@ -100,4 +100,3 @@ Jacobian 함수를 이용하여 상태변수 Jacobian 행렬을 계산한다. 새로운 공분산 "P" 도 자코비안 "H_j" 와 Kalman Gain "K" 를 활용하여 계산할 수 있다. - 측정 에러와 새로운 예측을 반복하여 매 Sample 마다 위치 예측을 갱신한다. - From a030784b038d3b04da7c2bd2ba472532abb33b71 Mon Sep 17 00:00:00 2001 From: SeungUkJeon <80089347+SeungUkJeon@users.noreply.github.com> Date: Fri, 16 Apr 2021 17:06:45 +0900 Subject: [PATCH 18/47] Add ReadMe to HW_week3 --- code/week-3/README.md | 98 +++++++++++++++++++++---------------------- 1 file changed, 49 insertions(+), 49 deletions(-) diff --git a/code/week-3/README.md b/code/week-3/README.md index a8f0a586..d47fafe1 100644 --- a/code/week-3/README.md +++ b/code/week-3/README.md @@ -1,54 +1,5 @@ # Week 3 - Kalman Filters, EKF and Sensor Fusion ---- - -[//]: # (Image References) -[kalman-result]: ./kalman_filter/graph.png -[EKF-results]: ./EKF/plot.png - -## Kalman Filter Example - -In directory [`./kalman_filter`](./kalman_filter), a sample program for a small-scale demonstration of a Kalman filter is provided. Run the following command to test: - -``` -$ python testKalman.py -``` - -This program consists of four modules: - -* `testKalman.py` is the module you want to run; it initializes a simple Kalman filter and estimates the position and velocity of an object that is assumed to move at a constant speed (but with measurement error). -* `kalman.py` implements a basic Kalman fitler as described in class. -* `plot.py` generates a plot in the format shown below. -* `data.py` provides measurement and ground truth data used in the example. - -The result of running this program with test input data is illustrated below: - -![Testing of Kalman Filter Example][kalman-result] - -Interpretation of the above results is given in the lecture. - -In addition, you can run `inputgen.py` to generate your own sample data. It will be interesting to experiment with a number of data sets with different characteristics (mainly in terms of variance, i.e., noise, involved in control and measurement). - ---- - -## Assignment - EFK & Sensor Fusion Example - -In directory [`./EKF`](./EKF), template code is provided for a simple implementation of EKF (extended Kalman filter) with sensor fusion. Run the following command to test: - -``` -$ python run.py -``` - -The program consists of five modules: - -* `run.py` is the modele you want to run. It reads the input data from a text file ([data.txt](./EKF/data.txt)) and feed them to the filter; after execution summarizes the result using a 2D plot. -* `sensor_fusion.py` processees measurements by (1) adjusting the state transition matrix according to the time elapsed since the last measuremenet, and (2) setting up the process noise covariance matrix for prediction; selectively calls updated based on the measurement type (lidar or radar). -* `kalman_filter.py` implements prediction and update algorithm for EKF. All the other parts are already written, while completing `update_ekf()` is left for assignment. See below. -* `tools.py` provides a function `Jacobian()` to calculate the Jacobian matrix needed in our filter's update algorithm. -* `plot.py` creates a 2D plot comparing the ground truth against our estimation. The following figure illustrates an example: - -![Testing of EKF with Sensor Fusion][EKF-results] - ### Assignment Complete the implementation of EKF with sensor fusion by writing the function `update_ekf()` in the module `kalman_filter`. Details are given in class and instructions are included in comments. @@ -100,3 +51,52 @@ Jacobian 함수를 이용하여 상태변수 Jacobian 행렬을 계산한다. 새로운 공분산 "P" 도 자코비안 "H_j" 와 Kalman Gain "K" 를 활용하여 계산할 수 있다. - 측정 에러와 새로운 예측을 반복하여 매 Sample 마다 위치 예측을 갱신한다. + +--- + +[//]: # (Image References) +[kalman-result]: ./kalman_filter/graph.png +[EKF-results]: ./EKF/plot.png + +## Kalman Filter Example + +In directory [`./kalman_filter`](./kalman_filter), a sample program for a small-scale demonstration of a Kalman filter is provided. Run the following command to test: + +``` +$ python testKalman.py +``` + +This program consists of four modules: + +* `testKalman.py` is the module you want to run; it initializes a simple Kalman filter and estimates the position and velocity of an object that is assumed to move at a constant speed (but with measurement error). +* `kalman.py` implements a basic Kalman fitler as described in class. +* `plot.py` generates a plot in the format shown below. +* `data.py` provides measurement and ground truth data used in the example. + +The result of running this program with test input data is illustrated below: + +![Testing of Kalman Filter Example][kalman-result] + +Interpretation of the above results is given in the lecture. + +In addition, you can run `inputgen.py` to generate your own sample data. It will be interesting to experiment with a number of data sets with different characteristics (mainly in terms of variance, i.e., noise, involved in control and measurement). + +--- + +## Assignment - EFK & Sensor Fusion Example + +In directory [`./EKF`](./EKF), template code is provided for a simple implementation of EKF (extended Kalman filter) with sensor fusion. Run the following command to test: + +``` +$ python run.py +``` + +The program consists of five modules: + +* `run.py` is the modele you want to run. It reads the input data from a text file ([data.txt](./EKF/data.txt)) and feed them to the filter; after execution summarizes the result using a 2D plot. +* `sensor_fusion.py` processees measurements by (1) adjusting the state transition matrix according to the time elapsed since the last measuremenet, and (2) setting up the process noise covariance matrix for prediction; selectively calls updated based on the measurement type (lidar or radar). +* `kalman_filter.py` implements prediction and update algorithm for EKF. All the other parts are already written, while completing `update_ekf()` is left for assignment. See below. +* `tools.py` provides a function `Jacobian()` to calculate the Jacobian matrix needed in our filter's update algorithm. +* `plot.py` creates a 2D plot comparing the ground truth against our estimation. The following figure illustrates an example: + +![Testing of EKF with Sensor Fusion][EKF-results] From b6d7cf174745fa1a9a69e3113b26c1df82d8cbce Mon Sep 17 00:00:00 2001 From: SeungUkJeon <80089347+SeungUkJeon@users.noreply.github.com> Date: Fri, 16 Apr 2021 17:07:06 +0900 Subject: [PATCH 19/47] Add Helpers to HW_week4 --- code/week-4/helpers.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/code/week-4/helpers.py b/code/week-4/helpers.py index 2c12c93b..325c4cd8 100644 --- a/code/week-4/helpers.py +++ b/code/week-4/helpers.py @@ -2,7 +2,14 @@ # Calculate Euclidean distance between two 2-D points. def distance(p1, p2): + dx = p1['x'] - p2['x'] dy = p1['y'] - p2['y'] d = np.sqrt(dx ** 2 + dy ** 2) return d + + +def norm_pdf(x, m, s): + + one_over_sqrt_2pi = 1 / np.sqrt(2 * np.pi) + return (one_over_sqrt_2pi / s) * np.exp(-0.5 * ((x - m) / s) ** 2) From daf3cbe0817579bdd0498473b1c19b50526684e7 Mon Sep 17 00:00:00 2001 From: SeungUkJeon <80089347+SeungUkJeon@users.noreply.github.com> Date: Fri, 16 Apr 2021 17:07:41 +0900 Subject: [PATCH 20/47] Add PF to HW_week4 --- code/week-4/particle_filter.py | 130 ++++++++++++++------------------- 1 file changed, 54 insertions(+), 76 deletions(-) diff --git a/code/week-4/particle_filter.py b/code/week-4/particle_filter.py index ab32f05b..858f7f01 100644 --- a/code/week-4/particle_filter.py +++ b/code/week-4/particle_filter.py @@ -1,12 +1,11 @@ import numpy as np -from helpers import distance +from helpers import * class ParticleFilter: def __init__(self, num_particles): self.initialized = False self.num_particles = num_particles - # Set the number of particles. # Initialize all the particles to the initial position # (based on esimates of x, y, theta and their uncertainties from GPS) @@ -41,12 +40,10 @@ def predict(self, dt, velocity, yawrate, std_x, std_y, std_theta): xf = p['x'] + v_yr * (np.sin(p['t'] + yr_dt) - np.sin(p['t'])) yf = p['y'] + v_yr * (np.cos(p['t']) - np.cos(p['t'] + yr_dt)) tf = p['t'] + yr_dt - p['x'] = np.random.normal(xf, std_x) p['y'] = np.random.normal(yf, std_y) p['t'] = np.random.normal(tf, std_theta) - # Find the predicted measurement that is closest to each observed # measurement and assign the observed measurement to this # particular landmark. @@ -74,94 +71,90 @@ def associate(self, predicted, observations): return associations # Update the weights of each particle using a multi-variate - # Gaussian distribution. + # Gaussian distribution. def update_weights(self, sensor_range, std_landmark_x, std_landmark_y, observations, map_landmarks): - import math # TODO: For each particle, do the following: # 1. Select the set of landmarks that are visible # (within the sensor range). + for p in self.particles: + visible_landmarks = [] + for id, landmark in map_landmarks.items(): + if distance(p, landmark) < sensor_range: + visible = {'x': landmark['x'], 'y': landmark['y'], 'id': id} + visible_landmarks.append(visible) + # 2. Transform each observed landmark's coordinates from the # particle's coordinate system to the map's coordinates. + transformed_observations = [] + for obs in observations: + tmp_obs = {} + tmp_obs['x'] = p['x'] + (obs['x'] * np.cos(p['t'])) - \ + (obs['y'] * np.sin(p['t'])) + tmp_obs['y'] = p['y'] + (obs['x'] * np.sin(p['t'])) + \ + (obs['y'] * np.cos(p['t'])) + transformed_observations.append(tmp_obs) + + if len(visible_landmarks) == 0: + continue + # 3. Associate each transformed observation to one of the # predicted (selected in Step 1) landmark positions. # Use self.associate() for this purpose - it receives # the predicted landmarks and observations; and returns # the list of landmarks by implementing the nearest-neighbour # association algorithm. + assoc_landmarks = self.associate(visible_landmarks, transformed_observations) + p['assoc'] = [landmark['id'] for landmark in assoc_landmarks] + # 4. Calculate probability of this set of observations based on # a multi-variate Gaussian distribution (two variables being # the x and y positions with means from associated positions # and variances from std_landmark_x and std_landmark_y). # The resulting probability is the product of probabilities # for all the observations. - # 5. Update the particle's weight by the calculated probability. - - for p in self.particles: - landmarks = [] - for _id in map_landmarks: - x, y = map_landmarks[_id]['x'], map_landmarks[_id]['y'] - if self.calculate_distance(x-p['x'], y-p['y']) < sensor_range: - landmarks.append({'id': _id, 'x': x, 'y': y}) - - map_observations = [] - for observation in observations: - x = p['x'] + observation['x']*np.cos(p['t']) - observation['y']*np.sin(p['t']) - y = p['y'] + observation['x'] * np.sin(p['t']) + observation['y'] * np.cos(p['t']) - map_observations.append({'x': x, 'y': y}) - - if not landmarks: - continue + for t, a in zip(transformed_observations, assoc_landmarks): + g_x = norm_pdf(t['x'], a['x'], std_landmark_x) + g_y = norm_pdf(t['y'], a['y'], std_landmark_y) + gaussian = g_x * g_y - tmp_assoc = self.associate(landmarks, map_observations) - - p['w'] = 1. - p['assoc'] = [] - for i in range(len(tmp_assoc)): - p['w'] *= self.norm_pdf(self.calculate_distance(tmp_assoc[i]['x'] - p['x'], tmp_assoc[i]['y'] - p['y']), - self.calculate_distance(observations[i]['x'], observations[i]['y']), - math.sqrt(std_landmark_x**2 + std_landmark_y**2)) + 1e-100 - - # p['w'] *= (self.norm_pdf(tmp[i]['x'] - p['x'], observations[i]['x'], std_landmark_x) * - # self.norm_pdf(tmp[i]['y'] - p['y'], observations[i]['y'], std_landmark_y)) + 1e-100 - - # p['w'] *= self.multivariate_normal(np.array([observations[i]['x'], - # observations[i]['y']]), - # 2, - # np.array([tmp[i]['x'] - p['x'], - # tmp[i]['y'] - p['y']]), - # np.array([[1, 0.], [0., 1]])) + 1e-100 - p['assoc'].append(tmp_assoc[i]['id']) - - + # 5. Update the particle's weight by the calculated probability. + p['w'] *= gaussian + # Resample particles with replacement with probability proportional to # their weights. def resample(self): - import copy - import random # TODO: Select (possibly with duplicates) the set of particles # that captures the posteior belief distribution, by # 1. Drawing particle samples according to their weights. + weights = [p['w'] for p in self.particles] + w_cumsum = np.cumsum(weights) + w_mean = np.sum(weights) / len(weights) + weight_idx = np.zeros(len(weights), dtype=np.int8) + + w_pointer = 0.0 + i = w_idx = 0 + while i > len(weights): + if w_cumsum[w_idx] >= w_pointer: + weight_idx[i] = w_idx + else: + weight_idx[i] = w_idx + w_idx += 1 + w_pointer += w_mean + i += 1 + + new_particles = [self.particles[i].copy() for i in weight_idx] + # 2. Make a copy of the particle; otherwise the duplicate particles # will not behave independently from each other - they are # references to mutable objects in Python. - # Finally, self.particles shall contain the newly drawn set of - # particles. - tmp = [] - _max = sum([i['w'] for i in self.particles]) - - for _ in range(self.num_particles): - r = random.uniform(0, _max) - for particle in self.particles: - if r < particle['w']: - tmp.append(copy.deepcopy(particle)) - break - else: - r -= particle['w'] + # Finally, self.particles shall contain the newly drawn set of + # particles. + self.particles = [] + self.particles = new_particles.copy() - self.particles = tmp + return - # Choose the particle with the highest weight (probability) def get_best_particle(self): highest_weight = -1.0 @@ -169,19 +162,4 @@ def get_best_particle(self): if p['w'] > highest_weight: highest_weight = p['w'] best_particle = p - return best_particle - - def calculate_distance(self, x, y): - return (x**2 + y**2)**(1/2) - - def norm_pdf(self, x, m, s): - from math import sqrt, pi, exp - one_over_sqrt_2pi = 1 / sqrt(2 * pi) - return (one_over_sqrt_2pi / s) * exp(-0.5 * ((x - m) / s) ** 2) - - def multivariate_normal(self, x, d, mean, covariance): - """pdf of the multivariate normal distribution.""" - x_m = x - mean - return (1. / (np.sqrt((2 * np.pi) ** d * np.linalg.det(covariance))) * - np.exp(-(np.linalg.solve(covariance, x_m).T.dot(x_m)) / 2)) From 57cb0bd9da2c02c016595c64759dd7ddb74bb799 Mon Sep 17 00:00:00 2001 From: SeungUkJeon <80089347+SeungUkJeon@users.noreply.github.com> Date: Fri, 16 Apr 2021 17:09:19 +0900 Subject: [PATCH 21/47] Add PTF to HW_week4 --- code/week-4/particle_filter.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/code/week-4/particle_filter.py b/code/week-4/particle_filter.py index 858f7f01..9cac959e 100644 --- a/code/week-4/particle_filter.py +++ b/code/week-4/particle_filter.py @@ -72,11 +72,14 @@ def associate(self, predicted, observations): # Update the weights of each particle using a multi-variate # Gaussian distribution. + def update_weights(self, sensor_range, std_landmark_x, std_landmark_y, observations, map_landmarks): + # TODO: For each particle, do the following: # 1. Select the set of landmarks that are visible # (within the sensor range). + for p in self.particles: visible_landmarks = [] for id, landmark in map_landmarks.items(): @@ -86,6 +89,7 @@ def update_weights(self, sensor_range, std_landmark_x, std_landmark_y, # 2. Transform each observed landmark's coordinates from the # particle's coordinate system to the map's coordinates. + transformed_observations = [] for obs in observations: tmp_obs = {} @@ -104,6 +108,7 @@ def update_weights(self, sensor_range, std_landmark_x, std_landmark_y, # the predicted landmarks and observations; and returns # the list of landmarks by implementing the nearest-neighbour # association algorithm. + assoc_landmarks = self.associate(visible_landmarks, transformed_observations) p['assoc'] = [landmark['id'] for landmark in assoc_landmarks] @@ -113,20 +118,25 @@ def update_weights(self, sensor_range, std_landmark_x, std_landmark_y, # and variances from std_landmark_x and std_landmark_y). # The resulting probability is the product of probabilities # for all the observations. + for t, a in zip(transformed_observations, assoc_landmarks): g_x = norm_pdf(t['x'], a['x'], std_landmark_x) g_y = norm_pdf(t['y'], a['y'], std_landmark_y) gaussian = g_x * g_y # 5. Update the particle's weight by the calculated probability. + p['w'] *= gaussian # Resample particles with replacement with probability proportional to # their weights. + def resample(self): + # TODO: Select (possibly with duplicates) the set of particles # that captures the posteior belief distribution, by # 1. Drawing particle samples according to their weights. + weights = [p['w'] for p in self.particles] w_cumsum = np.cumsum(weights) w_mean = np.sum(weights) / len(weights) @@ -150,12 +160,14 @@ def resample(self): # references to mutable objects in Python. # Finally, self.particles shall contain the newly drawn set of # particles. + self.particles = [] self.particles = new_particles.copy() return # Choose the particle with the highest weight (probability) + def get_best_particle(self): highest_weight = -1.0 for p in self.particles: @@ -163,3 +175,5 @@ def get_best_particle(self): highest_weight = p['w'] best_particle = p return best_particle + + From c3ff21ed1f20d21337cc61249173d4ff0f4bcbcc Mon Sep 17 00:00:00 2001 From: SeungUkJeon <80089347+SeungUkJeon@users.noreply.github.com> Date: Fri, 16 Apr 2021 18:05:53 +0900 Subject: [PATCH 22/47] Add ReadMe to HW_week4 --- code/week-4/README.md | 122 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 122 insertions(+) diff --git a/code/week-4/README.md b/code/week-4/README.md index 30d32d97..17503e0c 100644 --- a/code/week-4/README.md +++ b/code/week-4/README.md @@ -8,6 +8,128 @@ ## Assignment +[HW_week4] +[1] Update Weights + + # Update the weights of each particle using a multi-variate + # Gaussian distribution. + def update_weights(self, sensor_range, std_landmark_x, std_landmark_y, + observations, map_landmarks): + import math + # TODO: For each particle, do the following: + # 1. Select the set of landmarks that are visible + # (within the sensor range) + + for p in self.particles: + visible_landmarks = [] + for id, landmark in map_landmarks.items(): + + if distance(p, landmark) < sensor_range: + visible = {'x': landmark['x'], + 'y': landmark['y'], 'id': id} + visible_landmarks.append(visible) + +- distance(p, landmark) 함수를 이용하여 map에 표시된 랜드마크와 파티클 사이의 거리를 계산한다. +- 계측된 거리가 Sensor range 보다 작으면 visible 함수에 랜드마크 id와 x, y 값을 저장한다. + + # 2. Transform each observed landmark's coordinates from the + # particle's coordinate system to the map's coordinates. + + transformed_observations = [] + for obs in observations: + tmp_obs = {} + tmp_obs['x'] = p['x'] + (obs['x'] * np.cos(p['t'])) - \ (obs['y'] * np.sin(p['t'])) + tmp_obs['y'] = p['y'] + (obs['x'] * np.sin(p['t'])) + \ (obs['y'] * np.cos(p['t'])) + transformed_observations.append(tmp_obs) + + if len(visible_landmarks) == 0: + continue + +- 계측된 랜드마크의 x, y 좌표를 Map 기준의 global 좌표로 변환시킨다. + + # 3. Associate each transformed observation to one of the + # predicted (selected in Step 1) landmark positions. + # Use self.associate() for this purpose - it receives + # the predicted landmarks and observations; and returns + # the list of landmarks by implementing the nearest-neighbour + # association algorithm. + + assoc_landmarks = self.associate(visible_landmarks, transformed_observations) + p['assoc'] = [landmark['id'] for landmark in assoc_landmarks] + +- Sensor range 내의 랜드마크와 global 좌표로 변환된 랜드마크를 매칭 시킨다. +- 가장 가까운 랜드마크를 반환하기 위해 랜드마크의 id 를 "assoc" 의 값으로 입력한다. + + # 4. Calculate probability of this set of observations based on + # a multi-variate Gaussian distribution (two variables being + # the x and y positions with means from associated positions + # and variances from std_landmark_x and std_landmark_y). + # The resulting probability is the product of probabilities + # for all the observations. + + for t, a in zip(transformed_observations, assoc_landmarks): + + g_x = norm_pdf(t['x'], a['x'], std_landmark_x) + g_y = norm_pdf(t['y'], a['y'], std_landmark_y) + gaussian = g_x * g_y + +- transformed 랜드마크가 해당 위치에 존재할 확률은 multi-variate Gaussian distribution 으로 계산 가능하며, +assoc의 랜드마크 좌표 x, y가 표준 편차이여야 한다. + + + # 5. Update the particle's weight by the calculated probability. + + p['w'] *= gaussian + +- transformed 의 랜드마크에 대한 확률 값을 Gaussian 으로 구하여 최종 값이 Particle의 Weight 로 곱해진다. +- 랜드마크 매칭 및 파티클 확률을 가우시안 분포로 계산하고, Particle weight 를 업데이트한다. + +[2] Resample + + # Resample particles with replacement with probability proportional to + # their weights. + + def resample(self): + + # TODO: Select (possibly with duplicates) the set of particles + # that captures the posteior belief distribution, by + # 1. Drawing particle samples according to their weights. + + weights = [p['w'] for p in self.particles] + w_cumsum = np.cumsum(weights) + w_mean = np.sum(weights) / len(weights) + weight_idx = np.zeros(len(weights), dtype=np.int8) + + w_pointer = 0.0 + i = w_idx = 0 + while i > len(weights): + if w_cumsum[w_idx] >= w_pointer: + weight_idx[i] = w_idx + else: + weight_idx[i] = w_idx + w_idx += 1 + w_pointer += w_mean + i += 1 + + new_particles = [self.particles[i].copy() for i in weight_idx] + +- 파티클 weight 에 따라 resampling 되며 가중치가 크면 여러 번, 가중치가 작으면 클 때보다는 작게 sampling 된다. +- weight idx 함수를 이용하여 다음 주기의 Particle 에 weihted sampling 하게 된다. + + # 2. Make a copy of the particle; otherwise the duplicate particles + # will not behave independently from each other - they are + # references to mutable objects in Python. + # Finally, self.particles shall contain the newly drawn set of + # particles. + + self.particles = [] + self.particles = new_particles.copy() + + return + +- resampling 된 파티클을 복사하여 재입력한다. + + You will complete the implementation of a simple particle filter by writing the following two methods of `class ParticleFilter` defined in `particle_filter.py`: * `update_weights()`: For each particle in the sample set, calculate the probability of the set of observations based on a multi-variate Gaussian distribution. From ec5babbfea7780cf752184733534b4a860f1c913 Mon Sep 17 00:00:00 2001 From: SeungUkJeon <80089347+SeungUkJeon@users.noreply.github.com> Date: Fri, 16 Apr 2021 22:52:34 +0900 Subject: [PATCH 23/47] Add PTF to HW_week4 --- code/week-4/particle_filter.py | 73 +++++++++++++--------------------- 1 file changed, 28 insertions(+), 45 deletions(-) diff --git a/code/week-4/particle_filter.py b/code/week-4/particle_filter.py index 9cac959e..663244ef 100644 --- a/code/week-4/particle_filter.py +++ b/code/week-4/particle_filter.py @@ -72,14 +72,11 @@ def associate(self, predicted, observations): # Update the weights of each particle using a multi-variate # Gaussian distribution. - def update_weights(self, sensor_range, std_landmark_x, std_landmark_y, observations, map_landmarks): - # TODO: For each particle, do the following: # 1. Select the set of landmarks that are visible # (within the sensor range). - for p in self.particles: visible_landmarks = [] for id, landmark in map_landmarks.items(): @@ -89,15 +86,14 @@ def update_weights(self, sensor_range, std_landmark_x, std_landmark_y, # 2. Transform each observed landmark's coordinates from the # particle's coordinate system to the map's coordinates. - - transformed_observations = [] + transformed_obs = [] for obs in observations: - tmp_obs = {} - tmp_obs['x'] = p['x'] + (obs['x'] * np.cos(p['t'])) - \ + t_observ = {} + t_observ['x'] = p['x'] + (obs['x'] * np.cos(p['t'])) - \ (obs['y'] * np.sin(p['t'])) - tmp_obs['y'] = p['y'] + (obs['x'] * np.sin(p['t'])) + \ + t_observ['y'] = p['y'] + (obs['x'] * np.sin(p['t'])) + \ (obs['y'] * np.cos(p['t'])) - transformed_observations.append(tmp_obs) + transformed_obs.append(t_observ) if len(visible_landmarks) == 0: continue @@ -108,8 +104,7 @@ def update_weights(self, sensor_range, std_landmark_x, std_landmark_y, # the predicted landmarks and observations; and returns # the list of landmarks by implementing the nearest-neighbour # association algorithm. - - assoc_landmarks = self.associate(visible_landmarks, transformed_observations) + assoc_landmarks = self.associate(visible_landmarks, transformed_obs) p['assoc'] = [landmark['id'] for landmark in assoc_landmarks] # 4. Calculate probability of this set of observations based on @@ -118,56 +113,46 @@ def update_weights(self, sensor_range, std_landmark_x, std_landmark_y, # and variances from std_landmark_x and std_landmark_y). # The resulting probability is the product of probabilities # for all the observations. - - for t, a in zip(transformed_observations, assoc_landmarks): - g_x = norm_pdf(t['x'], a['x'], std_landmark_x) - g_y = norm_pdf(t['y'], a['y'], std_landmark_y) - gaussian = g_x * g_y + for t, a in zip(transformed_obs, assoc_landmarks): + Gaussian_x = norm_pdf(t['x'], a['x'], std_landmark_x) + Gaussian_y = norm_pdf(t['y'], a['y'], std_landmark_y) + Gaussian = Gaussian_x * Gaussian_y # 5. Update the particle's weight by the calculated probability. - - p['w'] *= gaussian + p['w'] *= Gaussian # Resample particles with replacement with probability proportional to # their weights. - def resample(self): - # TODO: Select (possibly with duplicates) the set of particles # that captures the posteior belief distribution, by # 1. Drawing particle samples according to their weights. - - weights = [p['w'] for p in self.particles] - w_cumsum = np.cumsum(weights) - w_mean = np.sum(weights) / len(weights) - weight_idx = np.zeros(len(weights), dtype=np.int8) - - w_pointer = 0.0 - i = w_idx = 0 - while i > len(weights): - if w_cumsum[w_idx] >= w_pointer: - weight_idx[i] = w_idx + weights = [p['w'] for p in self.particles.copy()] + resampled_particles = [] + positions = (np.arange(len(weights)) + np.random.random()) / len(weights) + + idx = np.zeros(len(weights), 'i') + cum_sum = np.cumsum(weights) + i, j = 0, 0 + while i < len(weights) and j< len(weights) : + if positions[i] < cum_sum[j]: + idx[i] = j + i += 1 else: - weight_idx[i] = w_idx - w_idx += 1 - w_pointer += w_mean - i += 1 - - new_particles = [self.particles[i].copy() for i in weight_idx] - + j += 1 + # 2. Make a copy of the particle; otherwise the duplicate particles # will not behave independently from each other - they are # references to mutable objects in Python. # Finally, self.particles shall contain the newly drawn set of # particles. - self.particles = [] - self.particles = new_particles.copy() - - return + resampled_particles.append(self.particles[idx[i]]) + self.particles = resampled_particles + + # return # Choose the particle with the highest weight (probability) - def get_best_particle(self): highest_weight = -1.0 for p in self.particles: @@ -175,5 +160,3 @@ def get_best_particle(self): highest_weight = p['w'] best_particle = p return best_particle - - From eeb9dd25d2f53e7f72645ecadb4b2bcc5507ba33 Mon Sep 17 00:00:00 2001 From: SeungUkJeon <80089347+SeungUkJeon@users.noreply.github.com> Date: Fri, 16 Apr 2021 23:09:07 +0900 Subject: [PATCH 24/47] Add ReadMe to HW_week4 --- code/week-4/README.md | 64 +++++++++++++++++++++---------------------- 1 file changed, 31 insertions(+), 33 deletions(-) diff --git a/code/week-4/README.md b/code/week-4/README.md index 17503e0c..cee4445d 100644 --- a/code/week-4/README.md +++ b/code/week-4/README.md @@ -35,15 +35,15 @@ # 2. Transform each observed landmark's coordinates from the # particle's coordinate system to the map's coordinates. - transformed_observations = [] + transformed_obs = [] for obs in observations: - tmp_obs = {} - tmp_obs['x'] = p['x'] + (obs['x'] * np.cos(p['t'])) - \ (obs['y'] * np.sin(p['t'])) - tmp_obs['y'] = p['y'] + (obs['x'] * np.sin(p['t'])) + \ (obs['y'] * np.cos(p['t'])) - transformed_observations.append(tmp_obs) + t_observ = {} + t_observ['x'] = p['x'] + (obs['x'] * np.cos(p['t'])) - \ (obs['y'] * np.sin(p['t'])) + t_observ['y'] = p['y'] + (obs['x'] * np.sin(p['t'])) + \ (obs['y'] * np.cos(p['t'])) + transformed_obs.append(t_observ) if len(visible_landmarks) == 0: - continue + continue - 계측된 랜드마크의 x, y 좌표를 Map 기준의 global 좌표로 변환시킨다. @@ -54,7 +54,7 @@ # the list of landmarks by implementing the nearest-neighbour # association algorithm. - assoc_landmarks = self.associate(visible_landmarks, transformed_observations) + assoc_landmarks = self.associate(visible_landmarks, transformed_obs) p['assoc'] = [landmark['id'] for landmark in assoc_landmarks] - Sensor range 내의 랜드마크와 global 좌표로 변환된 랜드마크를 매칭 시킨다. @@ -67,11 +67,12 @@ # The resulting probability is the product of probabilities # for all the observations. - for t, a in zip(transformed_observations, assoc_landmarks): + for t, a in zip(transformed_obs, assoc_landmarks): - g_x = norm_pdf(t['x'], a['x'], std_landmark_x) - g_y = norm_pdf(t['y'], a['y'], std_landmark_y) - gaussian = g_x * g_y + Gaussian_x = norm_pdf(t['x'], a['x'], std_landmark_x) + Gaussian_y = norm_pdf(t['y'], a['y'], std_landmark_y) + + Gaussian = Gaussian_x * Gaussian_y - transformed 랜드마크가 해당 위치에 존재할 확률은 multi-variate Gaussian distribution 으로 계산 가능하며, assoc의 랜드마크 좌표 x, y가 표준 편차이여야 한다. @@ -79,9 +80,9 @@ assoc의 랜드마크 좌표 x, y가 표준 편차이여야 한다. # 5. Update the particle's weight by the calculated probability. - p['w'] *= gaussian + p['w'] *= Gaussian -- transformed 의 랜드마크에 대한 확률 값을 Gaussian 으로 구하여 최종 값이 Particle의 Weight 로 곱해진다. +- transformed 의 랜드마크에 대한 확률 값을 Gaussian 으로 구하여 최종 값이 Particle 의 Weight로 곱해진다. - 랜드마크 매칭 및 파티클 확률을 가우시안 분포로 계산하고, Particle weight 를 업데이트한다. [2] Resample @@ -95,24 +96,21 @@ assoc의 랜드마크 좌표 x, y가 표준 편차이여야 한다. # that captures the posteior belief distribution, by # 1. Drawing particle samples according to their weights. - weights = [p['w'] for p in self.particles] - w_cumsum = np.cumsum(weights) - w_mean = np.sum(weights) / len(weights) - weight_idx = np.zeros(len(weights), dtype=np.int8) + weights = [p['w'] for p in self.particles.copy()] + resampled_particles = [] + positions = (np.arange(len(weights)) + np.random.random()) / len(weights) + + idx = np.zeros(len(weights), 'i') + cum_sum = np.cumsum(weights) - w_pointer = 0.0 - i = w_idx = 0 - while i > len(weights): - if w_cumsum[w_idx] >= w_pointer: - weight_idx[i] = w_idx + i, j = 0, 0 + while i < len(weights) and j< len(weights) : + if positions[i] < cum_sum[j]: + idx[i] = j + i += 1 else: - weight_idx[i] = w_idx - w_idx += 1 - w_pointer += w_mean - i += 1 - - new_particles = [self.particles[i].copy() for i in weight_idx] - + j += 1 + - 파티클 weight 에 따라 resampling 되며 가중치가 크면 여러 번, 가중치가 작으면 클 때보다는 작게 sampling 된다. - weight idx 함수를 이용하여 다음 주기의 Particle 에 weihted sampling 하게 된다. @@ -122,10 +120,10 @@ assoc의 랜드마크 좌표 x, y가 표준 편차이여야 한다. # Finally, self.particles shall contain the newly drawn set of # particles. - self.particles = [] - self.particles = new_particles.copy() - - return + resampled_particles.append(self.particles[idx[i]]) + self.particles = resampled_particles + + # return - resampling 된 파티클을 복사하여 재입력한다. From 64eda483c0d0c4dae1f80420ec53999b229a45b1 Mon Sep 17 00:00:00 2001 From: SeungUkJeon <80089347+SeungUkJeon@users.noreply.github.com> Date: Fri, 16 Apr 2021 23:17:00 +0900 Subject: [PATCH 25/47] Add ReadMe to HW_week2 --- code/week-2/README.md | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/code/week-2/README.md b/code/week-2/README.md index 130884ea..06234de0 100644 --- a/code/week-2/README.md +++ b/code/week-2/README.md @@ -7,21 +7,6 @@ ## Assignment -You will complete the implementation of a simple Markov localizer by writing the following two functions in `markov_localizer.py`: - -* `motion_model()`: For each possible prior positions, calculate the probability that the vehicle will move to the position specified by `position` given as input. -* `observation_model()`: Given the `observations`, calculate the probability of this measurement being observed using `pseudo_ranges`. - -The algorithm is presented and explained in class. - -All the other source files (`main.py` and `helper.py`) should be left as they are. - -If you correctly implement the above functions, you expect to see a plot similar to the following: - -![Expected Result of Markov Localization][plot] - -If you run the program (`main.py`) without any modification to the code, it will generate only the frame of the above plot because all probabilities returned by `motion_model()` are zero by default. - [HW_Week2] @@ -60,3 +45,19 @@ def observation_model(landmarks, observations, pseudo_ranges, stdev): - 정확도가 점차 커지는 과정은 관측된 수만큼 반복하여 차량에서 관측한 나무 사이의 거리와 나무가 그 거리에서 보일 확률을 곱하여 누적한다. 위와 같은 반복 작업으로 계산된 위치에 대한 확률과 센서 측정에 대한 확률을 이용하여 현재 차량이 위치할 수 있는 확률을 나타낸다. + +You will complete the implementation of a simple Markov localizer by writing the following two functions in `markov_localizer.py`: + +* `motion_model()`: For each possible prior positions, calculate the probability that the vehicle will move to the position specified by `position` given as input. +* `observation_model()`: Given the `observations`, calculate the probability of this measurement being observed using `pseudo_ranges`. + +The algorithm is presented and explained in class. + +All the other source files (`main.py` and `helper.py`) should be left as they are. + +If you correctly implement the above functions, you expect to see a plot similar to the following: + +![Expected Result of Markov Localization][plot] + +If you run the program (`main.py`) without any modification to the code, it will generate only the frame of the above plot because all probabilities returned by `motion_model()` are zero by default. + From 6a981405ae27edcbddbd09184c31add6a11b7f8d Mon Sep 17 00:00:00 2001 From: SeungUkJeon <80089347+SeungUkJeon@users.noreply.github.com> Date: Thu, 6 May 2021 19:11:37 +0900 Subject: [PATCH 26/47] Add files via upload --- code/PTG/constants.py | 13 +++ code/PTG/cost_functions.py | 137 +++++++++++++++++++++++++++++ code/PTG/evaluate_ptg.py | 18 ++++ code/PTG/helpers.py | 108 +++++++++++++++++++++++ code/PTG/ptg.py | 136 ++++++++++++++++++++++++++++ code/PTG/ptg_example.png | Bin 0 -> 86376 bytes code/README.md | 55 ++++++++++++ code/hybrid_a_star/has_example.png | Bin 0 -> 131539 bytes code/hybrid_a_star/hybrid_astar.py | 124 ++++++++++++++++++++++++++ code/hybrid_a_star/main.py | 54 ++++++++++++ code/hybrid_a_star/plot.py | 58 ++++++++++++ 11 files changed, 703 insertions(+) create mode 100644 code/PTG/constants.py create mode 100644 code/PTG/cost_functions.py create mode 100644 code/PTG/evaluate_ptg.py create mode 100644 code/PTG/helpers.py create mode 100644 code/PTG/ptg.py create mode 100644 code/PTG/ptg_example.png create mode 100644 code/README.md create mode 100644 code/hybrid_a_star/has_example.png create mode 100644 code/hybrid_a_star/hybrid_astar.py create mode 100644 code/hybrid_a_star/main.py create mode 100644 code/hybrid_a_star/plot.py diff --git a/code/PTG/constants.py b/code/PTG/constants.py new file mode 100644 index 00000000..573d4643 --- /dev/null +++ b/code/PTG/constants.py @@ -0,0 +1,13 @@ +N_SAMPLES = 10 +SIGMA_S = [10.0, 4.0, 2.0] # s, s_dot, s_double_dot +SIGMA_D = [1.0, 1.0, 1.0] +SIGMA_T = 2.0 + +MAX_JERK = 10 # m/s/s/s +MAX_ACCEL= 10 # m/s/s + +EXPECTED_JERK_IN_ONE_SEC = 2 # m/s/s +EXPECTED_ACC_IN_ONE_SEC = 1 # m/s + +SPEED_LIMIT = 30 +VEHICLE_RADIUS = 1.5 # model vehicle as circle to simplify collision detection diff --git a/code/PTG/cost_functions.py b/code/PTG/cost_functions.py new file mode 100644 index 00000000..47486cba --- /dev/null +++ b/code/PTG/cost_functions.py @@ -0,0 +1,137 @@ +import numpy as np +from helpers import logistic, to_equation, differentiate, \ + nearest_approach_to_any_vehicle, \ + get_f_and_N_derivatives +from constants import * + +# COST FUNCTIONS +def time_diff_cost(traj, target_vehicle, delta, T, predictions): + """ + Penalizes trajectories that span a duration which is longer or + shorter than the duration requested. + """ + _, _, t = traj + return logistic(float(abs(t - T)) / T) + +def s_diff_cost(traj, target_vehicle, delta, T, predictions): + """ + Penalizes trajectories whose s coordinate (and derivatives) + differ from the goal. + """ + s, _, T = traj + target = predictions[target_vehicle].state_in(T) + target = list(np.array(target) + np.array(delta)) + s_targ = target[:3] + S = [f(T) for f in get_f_and_N_derivatives(s, 2)] + cost = 0 + for actual, expected, sigma in zip(S, s_targ, SIGMA_S): + diff = float(abs(actual - expected)) + cost += logistic(diff / sigma) + return cost + +def d_diff_cost(traj, target_vehicle, delta, T, predictions): + """ + Penalizes trajectories whose d coordinate (and derivatives) + differ from the goal. + """ + _, d_coeffs, T = traj + + d_dot_coeffs = differentiate(d_coeffs) + d_ddot_coeffs = differentiate(d_dot_coeffs) + + d = to_equation(d_coeffs) + d_dot = to_equation(d_dot_coeffs) + d_ddot = to_equation(d_ddot_coeffs) + + D = [d(T), d_dot(T), d_ddot(T)] + + target = predictions[target_vehicle].state_in(T) + target = list(np.array(target) + np.array(delta)) + d_targ = target[3:] + cost = 0 + for actual, expected, sigma in zip(D, d_targ, SIGMA_D): + diff = np.fabs(actual - expected) + cost += logistic(diff / sigma) + return cost + +def collision_cost(traj, target_vehicle, delta, T, predictions): + """ + Binary cost function which penalizes collisions. + """ + nearest = nearest_approach_to_any_vehicle(traj, predictions) + if nearest < 2*VEHICLE_RADIUS: + return 1.0 + else: + return 0.0 + +def buffer_cost(traj, target_vehicle, delta, T, predictions): + """ + Penalizes getting close to other vehicles. + """ + nearest = nearest_approach_to_any_vehicle(traj, predictions) + return logistic(2 * VEHICLE_RADIUS / nearest) + +def efficiency_cost(traj, target_vehicle, delta, T, predictions): + """ + Rewards high average speeds. + """ + s, _, t = traj + s = to_equation(s) + avg_v = float(s(t)) / t + targ_s, _, _, _, _, _ = predictions[target_vehicle].state_in(t) + targ_v = float(targ_s) / t + return logistic(2 * float(targ_v - avg_v) / avg_v) + +def total_accel_cost(traj, target_vehicle, delta, T, predictions): + s, d, t = traj + s_dot = differentiate(s) + s_d_dot = differentiate(s_dot) + a = to_equation(s_d_dot) + total_acc = 0 + dt = float(T) / 100.0 + for i in range(100): + t = dt * i + acc = a(t) + total_acc += abs(acc*dt) + acc_per_second = total_acc / T + + return logistic(acc_per_second / EXPECTED_ACC_IN_ONE_SEC) + +def max_accel_cost(traj, target_vehicle, delta, T, predictions): + s, d, t = traj + s_dot = differentiate(s) + s_d_dot = differentiate(s_dot) + a = to_equation(s_d_dot) + all_accs = [a(float(T)/100 * i) for i in range(100)] + max_acc = max(all_accs, key=abs) + if abs(max_acc) > MAX_ACCEL: + return 1.0 + else: + return 0.0 + +def total_jerk_cost(traj, target_vehicle, delta, T, predictions): + s, d, t = traj + s_dot = differentiate(s) + s_d_dot = differentiate(s_dot) + jerk = to_equation(differentiate(s_d_dot)) + total_jerk = 0 + dt = float(T) / 100.0 + for i in range(100): + t = dt * i + j = jerk(t) + total_jerk += abs(j * dt) + jerk_per_second = total_jerk / T + return logistic(jerk_per_second / EXPECTED_JERK_IN_ONE_SEC) + +def max_jerk_cost(traj, target_vehicle, delta, T, predictions): + s, d, t = traj + s_dot = differentiate(s) + s_d_dot = differentiate(s_dot) + jerk = differentiate(s_d_dot) + jerk = to_equation(jerk) + all_jerks = [jerk(float(T) / 100 * i) for i in range(100)] + max_jerk = max(all_jerks, key=abs) + if abs(max_jerk) > MAX_JERK: + return 1 + else: + return 0 diff --git a/code/PTG/evaluate_ptg.py b/code/PTG/evaluate_ptg.py new file mode 100644 index 00000000..8f9b3549 --- /dev/null +++ b/code/PTG/evaluate_ptg.py @@ -0,0 +1,18 @@ +#!/usr/bin/env python + +from ptg import PTG +from helpers import Vehicle, show_trajectory + +def main(): + vehicle = Vehicle([0, 10, 0, 0, 0, 0]) + predictions = {0: vehicle} + target = 0 + delta = [0, 0, 0, 0, 0 ,0] + start_s = [10, 10, 0] + start_d = [4, 0, 0] + T = 5.0 + best = PTG(start_s, start_d, target, delta, T, predictions) + show_trajectory(best[0], best[1], best[2], vehicle) + +if __name__ == "__main__": + main() diff --git a/code/PTG/helpers.py b/code/PTG/helpers.py new file mode 100644 index 00000000..8822e425 --- /dev/null +++ b/code/PTG/helpers.py @@ -0,0 +1,108 @@ +from math import sqrt, exp +from matplotlib import pyplot as plt + +class Vehicle(object): + """ + Helper class. Non-ego vehicles move w/ constant acceleration + """ + def __init__(self, start): + self.start_state = start + + def state_in(self, t): + s = self.start_state[:3] + d = self.start_state[3:] + state = [ + s[0] + (s[1] * t) + s[2] * t ** 2 / 2.0, + s[1] + s[2] * t, + s[2], + d[0] + (d[1] * t) + d[2] * t ** 2 / 2.0, + d[1] + d[2] * t, + d[2], + ] + return state + +def logistic(x): + """ + A function that returns a value between 0 and 1 for x in the + range [0, infinity] and -1 to 1 for x in the range [-infinity, infinity]. + + Useful for cost functions. + """ + return 2.0 / (1 + exp(-x)) - 1.0 + +def to_equation(coefficients): + """ + Takes the coefficients of a polynomial and creates a function of + time from them. + """ + def f(t): + total = 0.0 + for i, c in enumerate(coefficients): + total += c * t ** i + return total + return f + +def differentiate(coefficients): + """ + Calculates the derivative of a polynomial and returns + the corresponding coefficients. + """ + new_cos = [] + for deg, prev_co in enumerate(coefficients[1:]): + new_cos.append((deg + 1) * prev_co) + return new_cos + +def nearest_approach_to_any_vehicle(traj, vehicles): + """ + Calculates the closest distance to any vehicle during a trajectory. + """ + closest = 999999 + for v in vehicles.values(): + d = nearest_approach(traj, v) + if d < closest: + closest = d + return closest + +def nearest_approach(traj, vehicle): + closest = 999999 + s_, d_, T = traj + s = to_equation(s_) + d = to_equation(d_) + for i in range(100): + t = float(i) / 100 * T + cur_s = s(t) + cur_d = d(t) + targ_s, _, _, targ_d, _, _ = vehicle.state_in(t) + dist = sqrt((cur_s - targ_s) ** 2 + (cur_d - targ_d) ** 2) + if dist < closest: + closest = dist + return closest + +def show_trajectory(s_coeffs, d_coeffs, T, vehicle=None): + s = to_equation(s_coeffs) + d = to_equation(d_coeffs) + X = [] + Y = [] + if vehicle: + X2 = [] + Y2 = [] + t = 0 + while t <= T + 0.01: + X.append(s(t)) + Y.append(d(t)) + if vehicle: + s_, _, _, d_, _, _ = vehicle.state_in(t) + X2.append(s_) + Y2.append(d_) + t += 0.25 + plt.scatter(X, Y, color="blue") + if vehicle: + plt.scatter(X2, Y2, color="red") + plt.show() + +def get_f_and_N_derivatives(coeffs, N=3): + functions = [to_equation(coeffs)] + for i in range(N): + coeffs = differentiate(coeffs) + functions.append(to_equation(coeffs)) + return functions diff --git a/code/PTG/ptg.py b/code/PTG/ptg.py new file mode 100644 index 00000000..c9bbcba8 --- /dev/null +++ b/code/PTG/ptg.py @@ -0,0 +1,136 @@ +import numpy as np +import random +from cost_functions import * +from constants import * + +# TODO - tweak weights to existing cost functions +WEIGHTED_COST_FUNCTIONS = [ + (time_diff_cost, 1), + (s_diff_cost, 1), + (d_diff_cost, 1), + (collision_cost, 1), + (buffer_cost, 1), + (efficiency_cost, 1), + (total_accel_cost, 1), + (max_accel_cost, 1), + (total_jerk_cost, 1), + (max_jerk_cost, 1), +] + +def PTG(start_s, start_d, target_vehicle, delta, T, predictions): + """ + Finds the best trajectory according to WEIGHTED_COST_FUNCTIONS (global). + + arguments: + start_s - [s, s_dot, s_ddot] + + start_d - [d, d_dot, d_ddot] + + target_vehicle - id of leading vehicle (int) which can be used to retrieve + that vehicle from the "predictions" dictionary. This is the vehicle that + we are setting our trajectory relative to. + + delta - a length 6 array indicating the offset we are aiming for + between us and the target_vehicle. So if at time 5 the target vehicle + will be at [100, 10, 0, 0, 0, 0] and delta is [-10, 0, 0, 4, 0, 0], + then our goal state for t = 5 will be [90, 10, 0, 4, 0, 0]. + This would correspond to a goal of "follow 10 meters behind and + 4 meters to the right of target vehicle" + + T - the desired time at which we will be at the goal + (relative to now as t=0) + + predictions - dictionary of {v_id : vehicle }. Each vehicle has a method + vehicle.state_in(time) which returns a length 6 array giving + that vehicle's expected [s, s_dot, s_ddot, d, d_dot, d_ddot] state + at that time. + + return: + (best_s, best_d, best_t) where best_s are the 6 coefficients + representing s(t) best_d gives coefficients for d(t) and + best_t gives duration associated with this trajectory. + """ + target = predictions[target_vehicle] + # generate alternative goals + all_goals = [] + timestep = 0.5 + t = T - 4 * timestep + while t <= T + 4 * timestep: + target_state = np.array(target.state_in(t)) + np.array(delta) + goal_s = target_state[:3] + goal_d = target_state[3:] + goals = [(goal_s, goal_d, t)] + for _ in range(N_SAMPLES): + perturbed = perturb_goal(goal_s, goal_d) + goals.append((perturbed[0], perturbed[1], t)) + all_goals += goals + t += timestep + + # find best trajectory + trajectories = [] + for goal in all_goals: + s_goal, d_goal, t = goal + s_coefficients = JMT(start_s, s_goal, t) + d_coefficients = JMT(start_d, d_goal, t) + trajectories.append(tuple([s_coefficients, d_coefficients, t])) + + best = min( + trajectories, + key=lambda tr: calculate_cost( + tr, target_vehicle, delta, T, predictions, WEIGHTED_COST_FUNCTIONS + ) + ) + calculate_cost( + best, target_vehicle, delta, T, predictions, WEIGHTED_COST_FUNCTIONS, + verbose=True + ) + return best + + +def calculate_cost(trajectory, target_vehicle, delta, goal_t, + predictions, cost_functions_with_weights, verbose=False): + cost = 0 + for cf, weight in cost_functions_with_weights: + new_cost = weight * cf(trajectory, target_vehicle, + delta, goal_t, predictions) + cost += new_cost + if verbose: + print("cost for {} is \t {}".format(cf.__name__, new_cost)) + return cost + +def perturb_goal(goal_s, goal_d): + """ + Returns a "perturbed" version of the goal. + """ + new_s_goal = [] + for mu, sig in zip(goal_s, SIGMA_S): + new_s_goal.append(random.gauss(mu, sig)) + + new_d_goal = [] + for mu, sig in zip(goal_d, SIGMA_D): + new_d_goal.append(random.gauss(mu, sig)) + + return tuple([new_s_goal, new_d_goal]) + +def JMT(start, end, T): + """ + Calculates Jerk Minimizing Trajectory for start, end and T. + """ + a_0, a_1, a_2 = start[0], start[1], start[2] / 2.0 + c_0 = a_0 + a_1 * T + a_2 * T ** 2 + c_1 = a_1 + 2 * a_2 * T + c_2 = 2 * a_2 + + A = np.array([ + [ T ** 3, T ** 4, T ** 5], + [3 * T ** 2, 4 * T ** 3, 5 * T ** 4], + [6 * T, 12 * T ** 2, 20 * T ** 3], + ]) + B = np.array([ + end[0] - c_0, + end[1] - c_1, + end[2] - c_2 + ]) + a_3_4_5 = np.linalg.solve(A, B) + alphas = np.concatenate([np.array([a_0, a_1, a_2]), a_3_4_5]) + return alphas diff --git a/code/PTG/ptg_example.png b/code/PTG/ptg_example.png new file mode 100644 index 0000000000000000000000000000000000000000..4da1bf6e70c66ddb6726f2f0bd180d204b0bc69d GIT binary patch literal 86376 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%0AyX0kQLPE3-?e=yI#8D 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%0A{u-sUssp$r9WEdu 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

!t7EPHr&z;#(RX;H|sg-{$~mJLn44e>@%{ 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 0: + # TODO: implement prioritized breadth-first search + # for the hybrid A* algorithm. + opened.sort(key=lambda s : s['f'], reverse=True) + curr = opened.pop() + x, y = curr['x'], curr['y'] + if (self.idx(x), self.idx(y)) == goal: + self.final = curr + found = True + break + + # Compute reachable new states and process each of them. + next_states = self.expand(curr, goal) + for n in next_states: + pass + else: + # We weren't able to find a valid path; this does not necessarily + # mean there is no feasible trajectory to reach the goal. + # In other words, the hybrid A* algorithm is not complete. + found = False + + return found, total_closed + + # Calculate the stack index of a state based on the vehicle's heading. + def theta_to_stack_num(self, theta): + # TODO: implement a function that calculate the stack number + # given theta represented in radian. Note that the calculation + # should partition 360 degrees (2 * PI rad) into different + # cells whose number is given by NUM_THETA_CELLS. + return 0 + + # Calculate the index of the grid cell based on the vehicle's position. + def idx(self, pos): + # We simply assume that each of the grid cell is the size 1 X 1. + return int(np.floor(pos)) + + # Implement a heuristic function to be used in the hybrid A* algorithm. + def heuristic(self, x, y, goal): + # TODO: implement a heuristic function. + return 0 + + # Reconstruct the path taken by the hybrid A* algorithm. + def reconstruct_path(self, start, goal): + # Start from the final state, and follow the link to the + # previous state using the came_from matrix. + curr = self.final + x, y = curr['x'], curr['y'] + path = [] + while x != start[0] and y != start[1]: + path.append(curr) + stack = self.theta_to_stack_num(curr['t']) + x, y = curr['x'], curr['y'] + curr = self.came_from[stack][self.idx(x)][self.idx(y)] + # Reverse the path so that it begins at the starting state + # and ends at the final state. + path.reverse() + return path diff --git a/code/hybrid_a_star/main.py b/code/hybrid_a_star/main.py new file mode 100644 index 00000000..a30b93ac --- /dev/null +++ b/code/hybrid_a_star/main.py @@ -0,0 +1,54 @@ +import numpy as np +from hybrid_astar import HybridAStar +from plot import GridPlot + +# The grid is of shape 16 x 16. +# Note that we use (x, y) instead of (y, x) coordinates, +# since that makes application of trigonometric functions easier. +grid = np.array([ + [0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0], + [0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0], + [0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0], + [0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0], + [0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0], + [0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0], + [0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0], + [0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0], + [0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0], + [0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1], + [0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1], + [0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1], + [0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1], + [0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], +], dtype=np.int) + +# The coordinates are represented by (x, y, theta). +# Note that this order does not agree with numpy array indices. +start = (0.0, 0.0, 0.0) +# Note that the goal is specified by (x, y) +goal = (grid.shape[0] - 1, grid.shape[1] - 1) + +if __name__ == '__main__': + has = HybridAStar((HybridAStar.NUM_THETA_CELLS,) + grid.shape) + success, expanded = has.search(grid, start, goal) + if success: + print("Found path to goal in %d expansions" % expanded) + else: + print("No valid path found after %d expansions" % expanded) + path = has.reconstruct_path(start, goal) + + ''' + for i, p in enumerate(path, start=1): + print("##### step %d #####" % i) + print("x %f" % p['x']) + print("y %f" % p['y']) + print("theta %f" % p['t']) + ''' + + plot = GridPlot(grid.shape) + plot.plot_grid(grid) + if success: + plot.plot_path(path, start, goal) + plot.show() diff --git a/code/hybrid_a_star/plot.py b/code/hybrid_a_star/plot.py new file mode 100644 index 00000000..7bf0fdb3 --- /dev/null +++ b/code/hybrid_a_star/plot.py @@ -0,0 +1,58 @@ +import numpy as np +import cv2 + +class GridPlot: + + # Horizontal and vertical size (in pixels) for one grid cell. + dx = 50 + dy = 50 + # Horizontal (left & right) and vertical (top & bottom) margins. + mx = 30 + my = 30 + + def __init__(self, dim): + self.dim = dim + img_dim = ( + dim[0] * self.dx + 2 * self.mx, + dim[1] * self.dy + 2 * self.my, + 3 # 3-channel color image + ) + self.img = np.full(img_dim, 255, dtype=np.uint8) + + def plot_grid(self, grid): + # Draw grid lines. + for i in range(self.dim[1] + 1): + begin, end = self.conv(i, 0), self.conv(i, self.dim[0]) + cv2.line(self.img, begin, end, (255, 0, 0), 1) + for i in range(self.dim[0] + 1): + begin, end = self.conv(0, i), self.conv(self.dim[1], i) + cv2.line(self.img, begin, end, (255, 0, 0), 1) + # Fill in obstacles. + for x in range(self.dim[0]): + for y in range(self.dim[1]): + if grid[x][y] == 1: + ul = self.conv(x, y) + ul = (ul[0] + 1, ul[1] + 1) + lr = self.conv(x + 1, y + 1) + lr = (lr[0] - 1, lr[1] - 1) + cv2.rectangle(self.img, ul, lr, (120, 150, 150), -1) + + def plot_path(self, path, start, goal): + prev = self.conv(path[0]['x'], path[0]['y']) + cv2.circle(self.img, prev, 5, (0, 0, 255), -1) + for p in path[1:]: + x, y = p['x'], p['y'] + curr = self.conv(x, y) + cv2.circle(self.img, curr, 5, (0, 0, 255), -1) + cv2.line(self.img, prev, curr, (0, 0, 255), 2) + prev = curr + + def show(self): + cv2.imshow('grid plot', self.img) + cv2.waitKey(0) + cv2.destroyAllWindows() + + def conv(self, x, y): + px = int(y * self.dx + self.mx) + py = int(x * self.dy + self.my) + return (px, py) From 5d4f791bfdbe239d1d1f12ad616907471c87b685 Mon Sep 17 00:00:00 2001 From: SeungUkJeon <80089347+SeungUkJeon@users.noreply.github.com> Date: Thu, 6 May 2021 19:12:27 +0900 Subject: [PATCH 27/47] Create week7 --- code/week7 | 1 + 1 file changed, 1 insertion(+) create mode 100644 code/week7 diff --git a/code/week7 b/code/week7 new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/code/week7 @@ -0,0 +1 @@ + From 3eef089a035a5509ad38aa3666087454c7b33874 Mon Sep 17 00:00:00 2001 From: SeungUkJeon <80089347+SeungUkJeon@users.noreply.github.com> Date: Thu, 6 May 2021 19:12:44 +0900 Subject: [PATCH 28/47] Delete week7 --- code/week7 | 1 - 1 file changed, 1 deletion(-) delete mode 100644 code/week7 diff --git a/code/week7 b/code/week7 deleted file mode 100644 index 8b137891..00000000 --- a/code/week7 +++ /dev/null @@ -1 +0,0 @@ - From 2529cb78556886499fce043c90587d09c0264eae Mon Sep 17 00:00:00 2001 From: SeungUkJeon <80089347+SeungUkJeon@users.noreply.github.com> Date: Thu, 6 May 2021 19:12:56 +0900 Subject: [PATCH 29/47] Delete code/hybrid_a_star directory --- code/hybrid_a_star/has_example.png | Bin 131539 -> 0 bytes code/hybrid_a_star/hybrid_astar.py | 124 ----------------------------- code/hybrid_a_star/main.py | 54 ------------- code/hybrid_a_star/plot.py | 58 -------------- 4 files changed, 236 deletions(-) delete mode 100644 code/hybrid_a_star/has_example.png delete mode 100644 code/hybrid_a_star/hybrid_astar.py delete mode 100644 code/hybrid_a_star/main.py delete mode 100644 code/hybrid_a_star/plot.py diff --git a/code/hybrid_a_star/has_example.png b/code/hybrid_a_star/has_example.png deleted file mode 100644 index ef2ce2c472a612445d4bdb824137720b5d9f400c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 131539 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%0AyX0kQLPE3-?e=yI#8D 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%0A{u-sUssp$r9WEdu zEd7!2`fv{ap0CtN_9!EGr)ke21Mf!bW2E1^c<{~Td=~rXEwuLqjxo;Zvvw&YY22QT z{L{){5@tzF)CkZO)SlGyovjK1T6v^&=e};T{}oP z;m$8ON{Erf7?{mf%)?G+Jekd$gDS9^DwDHZaw5lZ4=8m0Qq?`7sTn|y^CiLX^4((8Vkf5min zkXMqgK~%}GVwbq@Axfr=r>WQZPW!wro*QDl)u~5Gd+jI%NAB-Y0~_;vu=eJdy4@Cy zHA>%?yN%|4?_$3w3JRGK?DvV6b}d|Yd6cPki2mq%r|Rb(#p8x9H_PcL@Eq-?+W5%F z%wvNV9~cT2Ty$+4=?}?`&o|!N;aW5(a|dm-*5BJ?d(X8@k;>o~`h-wTB;Bt9*V3pU zx~xB$EQBeHN@NypfNhszYrRiBV-~NCes~m8))$kY?0o3Ye}JYsWiyjSy6boK_(=Bc z4?Z z=io8^iI#ze?k@2ge7|(6SVqipBd1hV%mE995w@ZJdiRi_?JA9NNr)b_?HdZ9N#P(@ z(s6jLG@qVj>Aot#LLY0IU#4;8;9xPls#&ZqpgHFL32>_@1t-02WTl_S%51TY4d!EU z7&;a(L{lH#lywlyH$y{IgE4p{b;f!yE@RS0jbgg>s11b`ssqdp=Wkw@B-vMK;~S6_ zvY)~I^`UHkf%aHcugnJuh7}FFdR?FwG>YYJ0xeFejxX!!CV|6D$VgaL7S;KV;=nkd z-0mH?tHQ-u|2ozBN%ECig!$4{0&$)z^#GM+)eIYp9@&1NqGZCY4tPQ&e_OJhPjD*% zueN*Zb&mz%=KA}gPN0h&Fu#a$^$>FSJ(P5XPZeIXB53C>bQIhE()sa?$CDHI6f1_ht^3ttRobi5ZjP%t_JPgtg9@?_j1@C z+eCXK1ovjh%Da923zLe4$NEhPO=_fD&xUD`31$6azb^4%d?dWE(q0_{WgS(#vQ#Ga z?AzOpr%Ggeq8=u5^)8W5#l;@D7ETn_mtKC1S`l9(H`Nn6I~#e3Z?6MXJ$~c#jLHs} zxguI2uP$<}iE@Kz*Eofa;`>fUlRxRPHy(6LQsmPPiS3yI6T*_a^CX8h51k_X?SQ$h z`wctXm6oaQ)a0ktwqNT4>e+9T&!^PjjV10@(r)A%@>n|_=ayEXPO~RCpvzr8w{E`6 z26L^id-)b9m=kdQ)d{89xbMTqWJ8wYx-=;lZG^LLR8ccBLQv4Lu(DXHv3WRM+)dNX zH$Yn)A-?rIB|F7AwkAMRQ`YF4q&0+WoE^MiL|Wr0U22j^kU7<)TA=EKGNkM=0tyFs zrfD8OjXQ$_yuRV`BP7aVvee(Ais=-M&!2plkx(W>u4kIEyKGZL%AdgQBT>r-vd^R2 z?c#t6bQva$b$AUUU&wbF<=S)`!B~5f=8i*`Ot$3b8a+m$KFOo(LCp!AWCqOBu{jWNiTbO5tqD$Oh^$yp=h&eP?tS`$xx&r+H)y--DY?t#Pb_KshUt3a_{ zl8B1Q2rwQCU2hi_IuogRj)L`+OJE_e$hfy>6-{d_%#_H%cBf>uoM>&BE!l7S?;pE0 zgsI$mc$Ys;-kVr%6tBS#*JqEZ=i*{8uRdNdQ(5bzmyq-HGTUlAEmgl}GJgwJ;ZPv3 zPIH>&^(~YqfU3Puc96XVEv&xFf7JHPS#4_$<84JwO#GVtoXe_mw9cbq!|CqEF zBs%P!Z5_&vv|dj2b}KNO&-fS>ky)3Lp)bMw&$Bg0UMyf7vZP8F zzb%w0FQS-~!m4Kl$wrtuvWE3Eh4)M@<9#hs-jCuj9<13?SDB@Rm=JMFU50i9MS5a{_m7i3NW_|W7%*!uQ$^&^%b{N9}HE|2M(s^V*lv6<~&8)Mv3+!R9t z@ECB(JfY_bkH`%@kJGYzd9AM90g$NNxzWp*i=AlJHIWct@T+|c<}w18m@QtH^u&A{IOwQ?>A)GysIaA)#AKV zHH9n6X^H~L7CuK2rgB=kOm4I1E%5xkB6DF)CN%Ed+{dloqSyVS$AYH;20lDTzGGLn zH6?KxU3}P>WKMGR2fjwjY7~ubJJEBpZ)Y5gMs6&f7>wfNdu?H(^WsxQ<^lHA%=NJt zL)kKCWF z&9uIc@~lQ08ueHY;H05p!9!xGgi8J0UOTQCe{w3!l~JsJF@3Fj9kVI+sI>9tZ9km^ zH_O;e!rYqmDBkL!2o|l_j0=d6U|(*1i44J9ZhCpQH(zz6-10hV$vRCBC7q7L+F1Mr zL18{d^3%%mUeT?=*VV~r##@sIQf}}N?_o%{4<(CK_+h;Y&=5Yv@JM+oG#YS65^cRx zJ!A$v8YbC7Vrw>=e$cVgBa%`KF(!*TcO{=J0;rPhXEGI+xLAF>27!x}$llSy+!JOj zM1*Q)9U^Z`Zv5MqcwuAyP-Q&F37S$R5-3#^iA2aYy7iBa9)|W5i07bXPg-zqd7K2D|y-I(IxHbGiw zA?Eed4!Ruz-2c_2$V9a(s8Xj@^cfmZ>I*61Ke}kr!<{5ox_f<9$s%KMMck0|tna)# z3?jw8D3!>vFlm&WP4@S2uEbZta`8Ej^tpMV^{oJ>n@@q5?{7CCV){W4qpwWRefW6g zrR*C|`IGJO#DXy_z|S}dvfd~sBo%vPD$k&}C0hK63q7ZDrja%GazkRF#4o*!E}LK2 z@`>~ZDS=;~o{s%zTKS*I!kiG%ZBMI^W`1N#!71?UH$lSZ zf_Ek$v%Lc#$vnF+d7s6Skv-R(^Rh>M+Qe(ha&Z`xg!J=Y z%hA2$!u$oGQXAM=h|#9L%UA(Ccd~<%Bt+P68YqFBtzq8=g8*Npxe&~sI-Oagg}_S+ zPpgI4yHG~qQM!C}g%;BhN;e(9p*lJ$tzc6Dp!@&s_KyEFM!MOZr*`gEO)j2!!QwOR zc?*B3@4z*7@))7IMA}*Kpl^h5Q=;pr^g`Y3(A2yw$C#bUg8G1037m>^JVWOYZU=IJ zP_iV>^uG&he*Az_0-)<%CzHGI7i3kU_h92|r?vXXPs1}#Lja&K9=b0U3yjY3;^1K_ zWDrbhW^rcykOJYdPhT1ydZ|XWVT$DfR&-Zv$yONQb>M0FnWW^G&E(1jfk_CO^g>-G z*SYT2^1uH8KDpczgb4eoy=tSjb)or}2iwoD-&N+zuDL9Z8^_9L5L9h?-Ag${$0pk% zWCmN^W$0R?yJbHFkyAyx|J*nk3{ve4fV5-5Mk7%8j1j-kEtgsTmrGMiN;FQf;As8*ynLp{$ef0_Q$4x|eodptO2#-CIj@F?odQjrJdW=<@ z-y<=!O4#=4KddFSUL-4Yvq+Ofp3oUFkX3Gk+eff*DQ5qp`u}@#2G%IWNiRwPEy3?^ z#y9((EK-|xh)uK&P9_NUg^Fz7O%|&$FU`8dh1;! zL}8Fj255lQtXcqTTDee(31A|!fN=)(zR}l)VLd_R|7W4?q6ou^>e)oCOkO^k!*)Mx z2Q}R|$n16B9{7QJV-*GJ?O*|b#lp~O{3ppIH_NtB4aHggUhR)S*Aay;NvnH%M8+q@ zwyf?T7L~BB&~gGHmSAul$9Hz!*KcXFXKeKRhU@iOekSI#Oj(v61WQgEZw}#^x)RTu z)qSlKM#B$o0~{lUZ}}RQ8osgd^D7%jK`rWkmN_5hKI$x}{7mJX91f7tO+Jjfv%@VC z9p^=5d9%xfpP9T>C)#?o9DrtfigCpXqvrdDur#$X{b# zuLS$^%{ORs%h%W(V*Kdms6#3`&_PNG_9sz^$7#$>DFxCq=rOK?>Zh+XUw^=hklmxZ zR9L(f1Y8imhq`gK66o3wPXC>A+b{1JH28|vc>Oo1y5C)Sz}uEpSH7D;h??29YW^lu z{kx*$=k~z9AsI7^+TIw;iV9`PJI8SuS;wRx-Y9S5V6<3B zYc=t4;boKCR7Kn*X|=A6MBD7JO=HNd(Ll|~m_4?fR7+!u<|PVW$?JhJb@YIJ7SBb^ zI0bZw?6J-5<>F@xVsPEf1t5{LT;C4|oYY@K^MT(sK7MKwA6;@Xc6}y!vHuvIrHS7# zOknDq>_}*l8^t5xe24&dVI}s4Hd!RL(^w2^Yp65u==v{7$TaP_r)_ZK#gM;Sy4jbe z3}>q|fVTH3s1737KN#gP3KApU&ii})YMYOI#S>6Cu-se;UhW)a;B}Y7Ew;^+>8^mOu7g?|gFew=pH-$%(aoy+^-GH+c2=GG zYMtHug2O{}!nUI>n&}`ar)Qe43kwKuhJ_@cD>Q(~YOPIEtVl)UW~RRwX298C*i;Zz z8z$n^*#4QUK0Qmv{DJS^j;`i+iML=t%iLzBPf~I^cYTwQ6`|n4Q(XP@d|qGVc1#7v zuuJJK4sntwwZG}KTf2X$>8^3lNnQ%_O#9t^*t~Se8 zTABk?luo2ylqUs4L@vi8L7Zv8+?OpEoIFQ*JY+ERy+zWm@10TW$bN0UE>ElAdGwxq zyTK*FA=16h-4%*G^9Gko)W7&Exs0+krvnU6Pd}k&-C(RXwdc4I$@N~j^&RQo|2r_8LfjHL6A#xWQcJds!L+$;?icYX(@rNpldWKH5h=Z0H2qEbC;#>P zKOFQ1w4jA&iZQ`|y7>;@-oRtQFZU%j@`fk{&=pJB3Jf$(q-Kv&DQq@=mL{l}zC+eq z!Jm^Q7w@7uSn+85#>M zwh>R@hrwLf_=yG474ah!C%yTMkUKL4Tx<@a3J7=$$CkvY!Rgd{D-s(e(J5S8nl4YG z8;56@9y;v)=YS@Xc;qqG|1#ttHqyz_67##0W8M+%7{nV*Lo%DDKePUf+ca8n{QS+w zWeLm;RP0|9Xil%sHDJ^Z2zp{{#{j$50QHO4L8>pkMqe1p3I-_ zTy^678g05)8c@x_6=OIcHkI^~){mi2-OB$(&Y-?cXLgo~sj3*hG0Hn^nyq4xp8q)Y z`TsfOfmHMw#lG62#g5O7W(ku8UlAYNfyDL)po2qQ?EwkD?!9|~w-R{bhmi+nGWE(J z9qa1Rxj-pd5ADV9eT@r&{K$j|D2c6&kpvkP7(>yyKW+nZ{lt<8Kp-rOi=WQISnBOJLBJkJ_5WlyKq}}4>LNGn3*hFD!$?+kd@jh8>};#o zp$>g_Ql3ajI3`1mbV9wwQ-E4Yz3W2e`t1785iW7d;(bf<|Kt>*l#eFymHcpmz5+Q= zaBG&tP+lFgAk%b`l!gTw7$=JC3Fb(N@)Q4OkRBJQp@`={wt}=Dr-(*kKQti!mzn-~ zhBSm41Q5$bACpW5v`IBjCW=j2NmGJO!DQwIDz#Iv0t{X`A-n-{$aSrdA)xcXF?$vv^w5?2?~~n0mW`Z?lpWD-@=Q5_ z#CK`%4PYHv9HINu{Q^_G6iZ=-qeo5tS*~mQ0Qc?0vxlu z7ny9Gn$OXf0b_FY|HK~ z62JtMA+@y6dzdyyk7*$a<7e_%fvQxxKO!hcgEb;^Aluz^^IkUcUsM4$hAc>WpXYgh z-!ovpk{95T>BN_wv93NLBXjLJQxY`Z&LHs85H4?fzo)7}eEvA^{DV8d;69QcQ6!*i zpU(aM&};O+)brekn`BbfraYz2>^WzguGPg~*?zg6*;XX;IL;NCM0s|J6siaosj#L~ zuS~4E?o6sGcABHgiGUx#sQ(rt@YyWy44VBbotf!o2n1ZXCjGfpU@nzCpCiX#4hIbN zeo?@N_(tWagcRn5Ug%_Z7J2_{tWG!p-~hS*TS5UozJQw{zXo8I6XdV262rVcJTdUp zBScTT2mcory`uDJ3t&JLt^zSo`9l0YmfSXU0WBFiRAX+!&LaO)NtgZsG5Vjy*}NlR z;OwkP8lU`SKkzn?fPj=|bFsIkfTyIobZeC+o;!$mTx%hmvY6^yGtJ5-Qo~p^ZjEB@ z|Hsys$0fOSZD&??P6e6eEM`_#j${rbNM&iAQclNHnsahW4NVOv95C|~8aQR9IY4D* z9Ze-Q=NZ8gM@r3EK~Ql5R6tQb&ilRZ_dU;fpWpr)?tSlj?Q5^K_PW+};k`qn#tkw6 zYWc5c$lqnqecB}<^G*rGmcZ7eABJC-{s;=-oB}J6-bw3chE> z>wA5u(|ph0Z395av+^qWgi@0~o^{_uIXtb*Z8RVIlV_$c4Sp##`NgiRz}j5;Z`$g&5jwNya;#V>*>lqEC4<=k z`tu)vusy~%Ky?(~7?sA+xbpnRcz0&nZ&Qr$^aJW@*RwwTF8FbA{8FFKh5gU3{0KPp zTakD^i14a-6!hzQQ2On-&;L9Sxbkh4`q|Rn7f@9q{YfLvBw?2Y4>{|7H7gsD>o0A6 zUcAja&T8i)n8uOW?AkaeM*KX9Y&xTLbM}9KKWTHTOT!r(F~-`HU*1mkPEXLEUwV3_ zJRZ?*^VeTWDf87%JGJwl|M+HoGUvS=R{3$)&~5Gw?>`g&H4&m5b1UgwxPq>_vVoMv z^7ldYNmTM%;2%8iyh+BV_NZfK%u5NnX>_C3J z?#)-*=8UY5?n=smG}m4Z>v6Yde3bp?82Uqw>h_vf*e)${3YN&+?4+z6OjRU%8^d1U|aQ>Z*+37DM zZr+`HZ3$do4RciDs;Ii;@16@vRJk(A1t+6V9-wU3-=T($(z{s8v#kJ>{bTs1YA8p* zvITxn4*&Qs2PN56QLV!*^~zn$;OxzWGx59PasEKoxZXo@i0^K+!P9eDSv#+HUtZTg zQ?=)kZ;s$2LXgD%?5=udWxaQ^XX1mf=+fu^_XuBI4ab_0j~utLn>?e1Sl=!hUEYL) zj2eI;a>)fezoVc}W)J>|rHC%?kT<37-uZOqNRt;`Z^?NQ=P11itO*iN0k5F?_BuNi zvHK6BIYlRMlkEo1&u$iFZ=l|Lm>+{*juLd>A1wCe{U}YJavHhX!u=&P=NAaz`KHqH3@+d2Hi+N>{;um){N&f5e_M4lR zXCCeOty(zB<2kE>^|!u+wjL7ybZJwYJ&YD;K9XFiNc&QYsf&o{xpY$BwL0xkdizTY zvpo0B(|LlgiyvKw18=uO50)h>yj^>fJYK5GM z!Jps`!w+;Py1eV7EBY2we~2>zmFW{B>E79Sy^3{NzH=|nzKU3ERaHU~KQ|^5K zi#R%1|4I0n4f;(Jr(=2UeuC!1O41z6GI=a2blvjh>?V6lM}jFe!8Ur>4mAsZib&q{ z>)1lDw=j|8BdS}qY)~n1OhEjwFv(*Y)GhZSrb_3BjGxI`aFBqxmsMMW+)k8Q{teO~ zXJVIJNJ(6^*&cU@Bk%xV0`yG zH~dt%c;oZ;^8aU=WdL6Vjd71j74v(5X%UnX@lb||8ALyTbtN}lcyzvb0tTYIL~AK} zG$lVu8*Tt>L#5ozee*SXm3_HpOt3AbEjEp@QP6QzQ}` zQ8Dw;@czdbU|Sf4e4fgt-|EK=6}B4}tE!oI_77%o+=Hr`vUEKsAy6yR=V42u-KDo5 z?6K0u_Kw@{yyRhnZry1lOtryoYdEyoey*zV_&-tlqipJYqcnYLE(`}8A4ZcAjGn}% zK+Gl^sy}LcCfo&lUg=l&qoxqnz)SSG{B3)Bahgpy5C7h?-TxQ?4bzQfJ`AW%M6ytw zzV;@;*f@PN%;309!&w;Pl^OL4RqY<{EI zV!=DsFYO_R&S4N=Vl+2p$e_GD?X0J?VEinor z2*2z=3l3kP(r%FQwL_){E}FE-LNeQ9&t6=EzT)=V6+Q6KY&qbpcxJWcH19td%sY$Z z==xM+!^zj`8eNn`$R2?c1WP40F)^8B5ma4oSO4y3x<>^H+nL{y08i#(5oPa($FDV* zSH%wV*WSP1e&79{`_xJ9^CWt>XA}(Lj?gxw6ir z{8FD1Wk>DH&5x6x@6l5t9XKi+Pt>R#sNU_lAH8~a9`$eN@i&$sRgQdFh>2gqJPXp9%qU+3V_U>v%uPU_eda(s-4rA=D1qlL@@+}z-$!%A10ew7Nd zKR!uyE>xCm&Z<8>O{?7bvU291he=<|$0}LmR4ZuK*w!RVyHN(<$RG;*vqv#$j7N}&|Q=C@juM-GZ{e7h8T}X zH4UASxKZ@#)CUZSUI^BhHU$uWff5GTmJZRJeD3(qc1q zw#6=?=p{Hx+BWGitzanOUO4u!)4Ey@r%;AVecFoJXc3Cg) zUTYVg-l_;6nJv4U6JfqhuzzmZr)rd56B4umBbk2E+N$meu8Zm&!`6*HbALT$d^hp# zaK^EkzCx8RTZ6@M`+{%%LM?Je)L8Z%M9!>3bl0D#3>E&13q2k)EYlez{;Af>6JVTu zAp;#aIsSa|%MQ3{Fi0^wgKWQ>ePqQYqDPG=F%3A>8vvbEdYrI5ve{r)$EDlJlQw!m zPSA1o&V0OKeWm(0(B=|On5-cBB~dKkh!G1XaTn&yM#GSqu!xXB z>6$a@grirHj7K~7^se-~lS0O#g#6`b`>lQ3#P7WphO6$tB9FAZfT!i*pe(JETOC%G zjzzkghjeegb(f}reZD+9<|F1$%_ud9E>%mp0lj#sfZK12JDf^D&-zW7Pj!0 zZvF34hO>Gg=-yeHrRhh^bW88$PEEvz+|s*wJ{2RG@5X}cc^m{_>M;D1@2#Gx&r_)j z)5Dm^>R+_4F4A3wdm}Bp==9YpZWYbiceE56a`WuEmsh?kXFd~)PSWm0hG2c2%I|;Q zFAHm+rG()-#q9=$`C0(yK6VpOjw$Ctv=u+#u@2X1Kd1Bz7wC82+ON(q_(-p!X%Hw0apwm8t|v-*SB5o?@i=N=n|z8RuR^Vx6VOZQQX zr-$m4f8%uh95tgcj6Rf$+^o;v_wQhAx^NDAxczk#V+Y5b%{$y=4x*}{11*mOT=5vs z;awR;hh-Fx{^V%DnGO?Q$;HB-On$u$*IaE>npoNZZY=@DM&%b6f1bgyn28n!^VQrU zpRElc!XGQ8bjT28`Ki(rxaSb6xUP3h(lPd2R#1#xDOjd^SsKHZUjuC;7OK3?F4hVT z$j#XvgTmkfx-r99TK2f}rRZEy6!)s5Xdi!O64dudJo(U6wQap|!!v+*h%j4auFE&NsA+ zfc=3h+mf+(>(KCEov#FJ5Q&$Ur(>1!<>qUVoBJz~XQy9j^!ioUT}_wt7X~%T;PHO> zIU(03`^G)Y)2Oc}^N#|!{jQ;|Yi&{y^U?KD z;R^|Ab2-1gNp)Rqbm>VD9ZWlDfyp((t*;LG8x~hC-P?mC5{(msji^+GWhqhk`xJjA z+eEx_$T9;e?Fgoia{2VfmGCKD_m}RAj;ZGFrBd!&m^EHfv;a$%>J3o&@N`FBN zzUvg;`NQXEiufYyIP2K zufA~fH-Laf60Vkcu!n*KV=H%ALw%+BDMLkiSB=th5TwSc1awymO}%6Q&nC{wjWS3jOk#5vUecXjAxw2mZW!j3?io-S4s% z=_S>T3Lj_z-E@n=aGl38rEO6A)2!xEZi399*$??IWDVuK-K=<%4?DtY=0EGo-5XW& zqH}fClQF7Yy1LLn8-v=V=H(V?)uDQF#Ta&dnHDXfO`XH8e0N9}ZC71ywig#iZ*Zq> zC<2&he!&U#W@(9<;R^{_k*Yq5Ny_PuCax5ErNx?mh?{EpshF~~gV+L*TV0IgSnL#d zMX!40QKiz=XQLJ)#&k6eh*I-S2OgJd7b48wym${D*tvefU0?y~5Wq>hrT9g43Mkobf$ewE=bC;;SW5-IDQEBc0I?G|*b zY|3X)-z`(y9Kh+#($M+yw5Otz&%YTlL zl8L2@XvR|$-LEq112&pjZo;FJAswm}wtS^%AQ*|Hu)>`;Szit+e) z+;eUs`;oHHF0F3+$sN}c&@xNU$7H*-4py-;3E=O>b-2`ISve665!ro1@H57VF1 z0ztHD3NmPKZ7lgIQ;k4ktcl!xx4MZB;rh^@;Ir>@do4zJiOac~8z-*QrqbQreElPa zhQ7*VHE5j^H7@n0*O#exio2Iyc10eKn%Luh!V)kfm1qfF6Gm?d%NTYRdC_b6(WgR2 zTR8sv?cf{B%Tk1`m+afV*le#paUXT>h4C z8N6{m+G&9^uiN`ZM`JXC1cUpKu&rq`MgG|-z)|7bLxxeeHrJCSU%Q(h&n!rqyw3}r$$!Dh`d{H3074+1^cl%b%yzA z52O0lP=21fID9jZm94A!7PCECJfEI#vnZK9g?*g5-rYYxW=$~mp-b&e`VGC z27>REBSk(K4DG3(skBPEis$Ir^^ag&&$8iT&jEuo6Fy0gBi`=0UwzmWLo=Bv=#MgS zT`tgkSND0$qHgi0#j6e@yfL5E6|ekDr4@+9wWj!)@&?}8^4D0mmtlT3FH^@NqWibp zlJBxdg6F?8dJ)(((qD_2(TayFSTDQWu46rd`$xn^rkPtey`0wEX$EbJ{fMgw$b&m; z^nA|Sg5nHfeP~l*P)7qRv%)#clGoMVd&glal-rd<48e5I1@Y1t0vW8`TBF>eU9HX7 zzXzX(Lk^SH%?}5RCLq2;3O$(J+=3}js7*oB;ZE39AS`UJMPn)*0Z7g)Iex_E=&?jd z2;T5gz=@TUr{qLqQo@}fq7(8vDQq%+X38)cvo_4JbO204tFS-X-9B%=%1jOP;G`)N zo2C3di4Ej(!{njj%hFn^>kw~r<*|iUDMxU!d!G`#`)g|WW6dDf3}9*b!&YgtdzH60B%jy9`MdR+XD%^58wk|6tg6PDS*3MZ3Kq7HDa{vEsfJ ze0EdBY`0ji&F`vNQWwQzx?@4l!xDA__*+o8ikIJVeCV{4!ozu%#Gp-j+ePx))a9SN3djbbGUlH=Lbzg0- zOcu<&Xp$Wpvr;nbUuBD{>+dQwS673E_(Q!}4H3T8!L7x;GP!bZwS|%QnhdhbjW#w~ zqtizpEI2dJs}Uh*c}t<`V=m~g_LeTh+Qrk+>B}Qo^;wCV{ke<;+;DQ|R-K?-F7~Ck zg?18t_E^-y)2?@%d34aAR`l*)rFj2`on^3(Q&~$je~=ze)4#0K5Pf@%;Z)rN z#(rVLyIS(;<;;7X`y>F&({HWcaO@@ADB;~$1n+6kH)+SyRtwfxTxuv68=+@MT8}Pe z;NaDIAL;P*nvqrU%;quU-aYOmuGKT_l(J}x#-Y`B|C*nqo=w)Igd4C6+r>&9t;H+` zPGiD_FrH+|1}*WDbXx#R(EBg;>!(~fR_eF}8fcm{O9XB=<^%mktGg`M3)^wueAIu3 z#N}evqI$3B9CJfY)GbLRhM-YW_v(sQcAz!n1ZUugx?6GG>L5QTN*Z>xu1?#)t80&2 zfdGpn5k=>#Onq zAo1IVU`B06)JgWwmXbE+9*7K@knUk`I;%xZebSJyMtu@vvdaRR?(*P@_%MGVw4vr( z^F&U6;L>7A3t*>}hWaq%Jqg_jneyN9KBoV%XlSQ|d#v9w;=I#_TElg>;9EJ-=Ym%` z@btUcTl#jzKCDEt=7G*(JW)_s#(s!U8uT>MS5d@*;>tm%#f3ub3#V%*e(dY!vpH?cEoKglvbSom+V)g zY^AIiT4~Urk+QWJ9XlrDZ)1)`$1Q5a^}%0rx_?-NttMxuL99^B?ujNVXP` z#tgSqUOehWNNRs{;)T1QdDuM6TA-_C#%V43iYVqlC*_k)6cYj-PNk^;O2#B?GlqaD ztX(E2Me(q|EB{X~06iEl9&rt)5#qSjoy~0L8j5AlVUBdlWQ@%lYCwfyn zRWY$7TPgWfSM%pM&Pj{nFNayuUjHx(W9dBlRz=`GyzWv$hmHf)@nM4Nyzl zb`Q-?Zg65taeRzexyy1?8Z&AO@Ono@pptgC-9eXpJqcHZeKH$3&Lq?puMKa6I zs^3hFMzr_qA#~J3E;!YPW5UHR4H5oOR>I7(B=#d>fXkaHaRpwbk+xQYzWX`kjVR8& z*yQmUy+fcaCGpHU;IR_+#aFh)%v;P<{F*I1i&!7LKwti>uwYwoGx03~>v=yjE!wBU zp~1*P|7)eQz@HMi9=OK`advGwO&kEvOoZJ%AKrmlv>odz?x8!@8q_UaYG+s^W|8b5 zf$KqZcm1pGoy9-YBbNr3U%7hxBNJLuFDss_I7L$N|Dp&SQCEgW8n5~itf3YbHfZbB zS3MTqMM>K4?9F+=1AF2!$+!n)kDtq~4GbgXMJEZ6${tD056)EnSDPs-t_vVn;=xI= z0o`)b5HsK#jG)V#6TbjfMPZs7fk_cA;l7(WY&Z3{;-+5#6B4S*s66MxdMa`GEq`s# z;!}YY5&D6>9r!}X5}*HVv{bIENqVRjGizsW6whkbqZ6h==>nOD{a#Yh3!5~Zx!T$0 z2yS0fM!x7<{L<_`m%rUUNOCOmT$evXoC{yeU9M?ZuaRbua0fOO9}Z6BnF5w1_uAW~ z4gSB~Jis=Ld^O>bWW@I08^$-(S>;EJ32Hznkf5?`^&w71?{ly?wlOnSGpA17C;PPk8hBL@wGj1(=pHGLjX4*}T z`=zRdMqJ(uyvnlS2|A!!I3Jy6E#TT*H-EL2R7c8TBS@s8hV`|eMgY*(&|><|Oe-)d za4@=O(`S>ub0>CuQdVHGD3^y@4EuHRMrICs;rCG-JS;z!ktz)PC48w?E?;e-T1%sz zHZfC41GxicZRW5StI@4FQ&%=L)kU}&%(^Aqzjm~qZFo4$gne6F(MkVO+_LmGa#3RS z-Z1*d*JXm2&@KJz#}jgk8!rm4;9!2iSTlHoVrq02z4;Lfb3m1Uf8Aaky3Y$9R1RIjdE9dv&Aa6|Fr>`>*u_wEj+r(J}zXb+_{BOhX)r(nS7g_Io%kYgCH}hAeY#SL~Gy+lG4% zc6=6o&a1O^B4>L^tW_-YWUW{QNg}yxi8&Idb_G$)HEiA_nFewO%&Y(A^8``#5_rJK z12WFvF=kGRQ&U1e5KRRDUxdzJ9(BFW3T=m|Ym1~xfxt9(#FyeXEFm2s)xG(2m&%%) zd;$)K{ki77`L*;LSC|dduRsdFxZ=?zkzCH4mNK8J z>8Afm()ua8MxFh~jP|g+Ds!Y4-jejfo0Codd4rN_kK;o8> z;TDmsxWr0pIl%D*e9E>idrh;`*>FHLYEc3%qdUWv&YN4%5)CkA#3YO$5nOj%f%)0dIc^hXx1(PB8M=Of8Q+eU$c*W zG4Y`f1uDfb!I}x@yTpIhC3S0qB&?g#_ZLTYN*z3bKF9M6E~vAi6Cw-`5ULZ{7s}+B z%JV9!*Yd*#79PyvGZ8yLZ3!_HE0`m7cZlH}^kv0iqf#Jjxf@rzBvtr4vQ;we&({1I zW&}?e^9$URxte(h*aKRC%$*KNw2q9rWMLY$mXL6^o^*dN)__P*LmAA;bClsL)+4RC zq~Rh2@mbg$o_ww2s-9AV3@wZ;kB6@D$u}fFPi4f<{!|mze=mT4duBhTUny5L6SJjGoBlSa){|> ze^vg6`1bXyem{qBlZ5-7hf9mB^s3&#SHb)Y_kD|pK}MG;%^X;Nr@9JN_Qln`n1yzt z!JlHh$wgPefYO}HZi&m_dpy{bw8jH5qN%0@)eAh75SsXMh?^-#h{8k1m($K~9!XcN5yvG!J(A-R#N~)T z<@C}~$GiGU@^5Lb*r#*JUEkhI-))a|RP+#|umCj@h_Hbp7mGvC1KM+mBUi7h;S!;v zxkYtj30YFUY4BbFy^BD`%ZI7TYKC5%%*o&VZ3GgF!!qbW;n=-kZwbj-qLOx7PB zSLi!`GNr0hPd=ADt85^tHO;-K88+D{ZuuywKHy$@z1_;7gwhn>_ap=qHIUHNa{672 ziK1pzoeUkRj=l&of5OYauVki1##z!@mFp{yF9lTYqQ(WM$dLhkkM}iL`q4XLt+ScN z705Cq_XUnr)Y{h?yHDK-#B8%M?B2bZNmHI1)d7nLI?_czf>zhJfk@K3_b22Kw*AyZ zy;G72Wtc#AwgIhj@9Z^M3yPBLY)&uc48#7L*fHR1dbM)|Fv{7aV$2qoJk1gvjwSW!!Y zk8+^%{c?($%KUvy87?+sZ`bduXP^|V05ZFBv|5f%V}42gWY>Sra&lVjv^>aDQcr-j z-UoK%jSWhTcIT*p7KxnL^aZJ2H4EDZkg}M1R^>Z}hl^zFE?TIP9kS2}8{)?(ggt8b z>MC$PgZKkZULIcGA2E;BQfxBof!XRoDd8l3KRpct*o^`Z@1y9k5iAP3*Q})Owji})|_7J$| zL%;t-&8(pgwBdf`L``YoR)!Q%WdKphOjk>DhkArV17RmhT{X}$PR^q4Jl)SSxNE5W z4&2i%!nlyu64s_!HA@cu@Zmfm_*E54rll2T?+GA4lJS#h`vo8V5!MS?TR7`BA*^fHyc+u99X-oV*DS}%lE7A2qYL3| z)>8@u8P?c;w#e%U^k^|!0T;xhNY;8>TKbUn85W7RXkii6Y%S>;wqiZx3~^YVkOS** za;=CeR~lFeY*1#ZeKU*lHbkptxn8OSvek{#BA6RZICIXDpPiq#uQwlMW}5Xh0TTSM zoCwte%j5mD$uepX>fRprq?cE}I>IwAlz~^X)HF6Gy92ZHHz1<6*rY1422yD#&+nl5 zF{&r}J`_#Cq%Uao(d=H(vM$~~N_9qbG1mXG&6Wy76($YaPl0iR!`|z!{m{H*_ss#F zxy}_EJ>(AegIrV7HF~b$sy=(>>-F_7D9dt}&JJWDI|Kx{dkgNN??-mz!e-Bg`~_uQte%V@jyj;!fpSiI zRZZHi(8=()Q3pT1`QMLP*pmeL#$M=6ozl{|kS+e+DqruN6xHlk_$z0!q`k$lMqF~K z=ROFTgAcxMIY<4g)tY1qW`Dqx0T~N2XuIdMOl}zJG)bUp1_Fk?#nZB37Z(dmG1)c* zWE6{d0tjw9{IM(2yTlFD`I1?{k?%6^6qLDpu{3{&i()35!uK~m;Yz*J+gWcW^Bdw; z&LvuZtGl&WAT7J`CG6R*rPLvVSIoj4v$i|4GF@?doMP0MXg$s_Oo~pEM;)*tkP|;v z?Xj|Z%YLo7wu}cSK?j-uOkVLHaav}X$~5XXBOfr3 z>kpM4iO|lexT^5B(SC0)C_%14sps2IZV9$<)h67pIPRz8b886mbOj=dv_nC0L^r&^z;V62zdP~fEl`I>z@Bz?aYfuTLg<~0K zl4)GCC$Y+OISeY2FIkF9f-L8zO=~8}MHk)zJ-CDoV3&JQzaCGq%>5rs1djt??#|8-DEkIPiW+g-@W>GZFnUnDTDiBx}0|L9wwM%#yUpQ z%U{=om9)odHr>51Kr%0UBjkTY0w$+!aP4Eyzdy#mm4!8;czda%egA^_xnWr4fIhHq zag5DmxTk?2?mTT&Iw>3Vs+>&s_S}VWV5j*b@-&EAua)kAqvF~Av@)=BH z2EuRS$BoFxQ!2m#0)nq;t2h(xp>HQUk0e2EXF zL-`(N>2*!-#?etrjzDA|e3bb4{$wFT_0tDKSLmt(Xf|##yOwNf9v|rHeT;9!t}c$q zR1dVJrwkx4?-j^Ob+-(O>T$4RPo&7EG>Z2`fU>L5~zRIC}_MQlrTYP&NeTD z_Q@s*G5ZmOm{jHdLsdtB$Rho^{9Cb6Us{ex*9Vnn8ljG&B)*?l;4Q}}pLz7TxHY*U zE|uo=t;bH9H5KhIAxjV3)+BSC<9$+dhfoh)*(JlX&sJ66cdo2eeZNH#Qk9JCoJ<1KhwRW1N{@qq~J^HNWqubB24WEFiGkP@vE$T<5WRwvDPI( zW{*Q7(w#*{cnb=c;Y-Fk>5-U$Eo#qQThabG3V<0;?mOjXDY&So%#OqIV5mhDB?CTL z2+YQGd-6&R#NA*^1fCLxq`X8}sK!SQWY~Z$2U$H{0JQ&n#Mz=A@W#mVh_kEdqrtoZ z!}U1pN#TjlALe{KD}ml<$JEGCv$72693IPyvH?{RmDK_R0w>H6l-c%$dN>tn;|T>9 z*;s%FdoFia5iBJwVaqA8%4q*in60e|Vpz8CzHO0fjY+CpQ&P#omjxem`VKKZn?7-# zUYrOmYRM$TbDONM9mKdO3`*{K&cZY>(%2JrgQ$!G%<@zz_WktXHGYX9Mc2bI-Mk8E zP%_x08heuvnwS`TR);EzU-0ovyA3V(-wzDFRl}_AJFA4Hz{b`0-L%N4>_6UYb&XET zj>IljCfR z7hRL^rQAJDEtH*u2TKn8azC>6{CF$)ozVl8mH`atMb;i`;_R|c<)DTSd(!ld+91cs3K-{N*92HDGTTl0UbvmY-28!YmB1Oq@!Ip8fOw@fg zYvQzGp~;M~LCw>++i!rrtlNp>>9{KL;5X4hPcki1UTNMWsoVzSOK)XM@n=AuDK%btFeGMChLZ{`J z>v4zhwwfWRL{n<#hYrV*zD(T4Sru)CDH&WFb67G!{?K%4u+=lEvJxctirh*tvD25! zbPR|Kl&2}zR5jj4F1WS4iz`3ge_haa(#}rY-F6rxa4JQYMGQK%DQwW?{RrB?5Vkj% z|A)Q&+=9~HzM;qc#}i$s%`NI5`V;+>f#l5wCp}2vC8Di(OLq1=D{$d#NsU|7vBLwc zo=RQjMKnjuTmzZJWwCr()@kWg+zYy(=$;1PO*kqQ$s+U}qiF0Nx1>_c32SP#t4 zmqiXi?TQWZDVbA>3NW_$Hb}=Mtx$pw00Gy9ck8Mg{c_HZ{%Lp4wAx&v=wC`m3JJVt zQP@igns&3Wi4Jt6O)m3HODr}fa*agz0LBvW(%#KBBmmjd zr$#1pBv{8KL=%-c;oSp;$AI{Z^qFplhvN^+#SOls5^kW=IeQ8v0B@{;j{U_|UxuK@sV z%ASSl36BpdYqR64+FolCvIiQk1BJUZm`B`0_9;G8I8>6{eUZ{!g3?Wt95X$&Mxfob zEOB9>vvC{Q10Pd6tN}^|BUP3`tZv|_nl{{A(vxWD`Oz?IJvc(4I;`=Q8D{^3iy-#p z4h3#ai04*+q>9sSb&i z{hzAFfT#<2&9Z#t@E^jU4l9H85|c%rHI6V*Xk3&NJYYc`=hp2an!K5pMefi8?~by0 z_m#O(3WAKtdPhoUr=q(cgCzTZSc;x*o^flg%2bNuHGx z-jm&%mO|*<*j}^8Cdv5rORwT-{%*9+Rtp_3g4f>TPa(dUmVpEEf%n7xL{nM~k>k0_ zKq4OEh(r<1yGkCFFH&C0lDK#EfWePiF8ji2vcAsM;h2c zDQUeWv*{bu!%+>2)qaVW5T?$@I%L@6p&lPc$jX>0Z5(vzUd2sJ8^?IVo~#RmmTg_S+<$FacW5l9gPc)Qi3@dqOC|#->lOm2MF+><50B zfyHS0Yf>1GeL;JY$3@nDSY190685r384EUINA%pskhR9@m)hUv?*Jy}IhkAU8At{&DvcJ6B7gkolg`ES0b;m*GWzhzxe!xvNE*Y@l3iWuS zyy&zX-;x*?ivypI%jdYdCpq$1f6y~0LHlu3TpZFjX(^>;<*%lPHZDL*DU$9rKg#wj zYGB8gn;-8JRpysm+KU9T);@ipoK7Npw3^?wgB8)Dd`O>AmC4?3j@-0WXI`ded+sk+ zjv8$8U?hz|>Q!<30-Nf7thHvzSs*8ysB4qT@O=l*yx%5Pnju7JV%ol)hM0mpJ|dEnZI z7_tzMjVZw=@qV}*Wp@{w8hDn;>m`Ciq6WF<0lTr0e?M{*(`6A1626bpA`KImb+-*b z1mW&1aG#uMVnR(Zly!q%{B9RFPPI0J*C&N+I#WHtwx{?bUQRQ8V|#7_v@_vGmcm}9 zDo!H{W};(i=;zt98+!?4Vo8;6G3P7eT_XueSlZfm>T7vU-L2wX(q*HGrb7vug)5%@ z)Bz|#K44hQXjI#m`p{u=pz=JFIdAg78pLKh*vAH6)F3l?87;~Ja~q`nGOF~2G&j+X zeO;b{Q)YV?Lx(RDWRV7NM~F^bAjQLq(l(*Ka6*KH^_T^?=&0=2;q@Sx@*p)WgOR}0 zImXs&gk&~DPUy0QjNKv9Z15cA2-sQ;%I6kyJU+$;vb09cqv&K>Y#sE+a51NTX+Pdk zO_dDd<|%R+Hy?`kfXR2cikfJoJ?lcLwb@^R(oOhi;**^ezdezgP<`}bDbItBB>X*- zve#9G`fS1It8$u%7shIvc&yDY37tXEds?mZ4xnakg}b}vnnF6b!k@9|hfV%4(SG(| zP!8+*A8m)yqI&gp+e2fbG=GcK|Sr0V>5^!=i(cPaz4k zeA{ajyc$JYlT3Zh96gMKV&PIwJ1%cmkP^^TXi$~mj4o?e0J}m{92&%)Bd*Z#{gZzm zAK=s<3`(mLi|QtHCqbQCh>5|2UcPY~`EG`NUmZy(%DZuUx)0RS&+~}e@E>7u9HO|s zXr;+G4W@xQqm-HXIS;1M-?LH|JGRnOa6;h+W4sPQhO;iwC)CxTDe2_(^EKvZWWN%( z^+_B9XA43jOQ{)Gv&bTX$*zPEbMygZwrR;_3cl1Xia+kK{F>?3l9ZslT6V#1F0S0e zs@tXS34D!TMxWqC*kCdApA=IH%+xq2mjUx`Ebk!G%#Q$0x3$t9Xi}gJwBNlW^%4iW zu~s5n6rq4tx0lOpE>3PAzUOx)tD03Vp6pH(lo*aL`y9nRD%MrP`kNvH2Uuj&GRXX$ z<<>BoH)XIeCTuYV;u5PqeH%(iRg$rR4w|rTzXVRENMk1Y?R^9BI)|H&ZF8s2w?PhjFY;|D=*j#dX8EiHRR&8=ye@}CpwMtbuk9bZCKe@+OuKs_f<#uJ~dXDe(N#s#Kaf6>nt&GH<+R zCH>`(8-FSX^d*q-xLURYssNLrEnPW0at>cBI*7K`psgO1MqwF1H&M-li2_VxRX&gA zLXh`No<_O};$$?V=v8w3X?*4|f51lEBwws72O^+ayOe7nad=+fK2H`{DUA9}O=!pZ zQZ#Yl*_Yj6@lq>jXzKPn+2(KVS=JBsDEXmm^7(|GsvgOE{Cs2gjyczTho3}JA96lb z-3!>Q8ck>dVSKB>B6%>`RG<($qWTeU?z^Pbx6738ZKF+TYZ-Pb%SFOO+B)Dk%mi&w z-Omoy{;s|wGa)dFxe~EXI*ib>dXC6 zskjYn$b5Ml@>&PdwJ1HCpwoif%Z-QfZS<2+Pr)o1XCXsbvRgUK(fEKs;p%+h9<9EJ zSHK#uN1YtsQO!J}Q&~QDWV3a6fTed{jE@}X@YhrJ1>c2&HdqO#3ABthE4>iZ-D`lp zzqgb4V@LM1xuWx8`Ci?X;dGd7;)$g`XkboZgQDm3_lv?Z9(b2C>w{2rlNUDZ+;@WL z7)3zBYou8n)@!9WFrhs6<1O{imHvh2Ezs!K@&c)*O0acAhZTS#8ug8G6QMxJ*}=Gv zs9YUqPeePj{c2Y^ zK44t(p+&~jZ_wbqSc=ndL7)c3qr$q(oVuh%9mhkZ0Y1U&{>EUB$JBR!=-(?|A$98G z%2QgPeaHJE9=QUf7Kt~(q01}x>U-7-enP2POg!9M=8bebvy(!lsJ+*SBpjnY7TNB4 zLY+oRm+h)$W}J1Sw#X+rEbB2)Ej>EJBNYdJL{d+YBS6_NbZVY@IH)TiT~lz5Z0}2I z;BQ6*nrhR28$ve!jy>`cMUSbK+g+h#pcG=}Tf0lGdEb)^ z-=NZkFCkMQ%`BQ=f@n5nzLxHuYmrL61g5EpKoc{k0hyWsp@o)WsF`lh+4KAh&u{#6 zzK8EQe81QAxvs;xD^84gX{%2k_Idc;+CWa;6HT?WeO-W^^%IXnIQ>&R!zSDJUlAm^ z-sWjrmI(HL2H?1uhvWj2{jJvVsaVzYfbDJC9t9iwUjg1UhBZDQ~XnXEC% zO?RGJZmX(`yUX*72gL$ZYH`3g<&lZ2+47ZGM}^7b7W1@^(l{6;Fo$BPw|vDHHM}Yg z?Z!TS<=C3BU_D(i7?7+(S^0|vKVscrj;^(QLYzuX(3}JG^R84&N%19X*h6`mU`_X* z`2?Rt38@r7Cuw{}AD!(QcFM_n0oZ<&xH$)`6}lm8Y&zb#gH8%K$X1zCn~mftKo=-5O< z08TklIJuI&UmA8MqSD7GQu1GP3=;*r$KfB?~ICZgyesR)->z8;1b~tSa$H_gQI)hhBvTRbGj_k9d$Q>1-=&phPgy zO&_bufBsl#_&(KB(l2WCn_Kt7YuawP^D=@F)bxtTQ`O#M++jOfhzr`wo~0*s4VN{n zAE@)w|F#%ZyP%&O11&lCaP_}b9VFN|B}vG6gZ<+ft0u8;J$ZKfL_b8CeUJkM16h5E z$Lj0bL%=)#X7)$j+)0(H&&j16O=`*FXqSr^b#YeBZT@-=UZ@YC2^+`kwD7EtuX`K3 zGE+I=e&cG_JuWQ{CAKEiHm|T=T!l#UtYud^ht=Y`<4(D=n8RFdaOviRJw?7!B8MBW zdu*7f+$L-k>Ngg0eSNK^Clt(TR7GLcle@eewQi#fzQ^%4qbI%)m!6m9r+KO;3ogN7 zAIV`#gh5qyYaNg?_crbwD+rXENg;;>Q2@vr=cy;|tRHfhxRr#aiaO^bU9MPyeHY-J z1M`bMcqR7rExVNTn-su{Hewtgs@@2*{V>O!)XDg}Oxn~A!e`PjM`yehC0{aqnWFz9zk zu!i!)Eb`;Rk_E#~Y7x8NyaC5h$9d!5w)}zw=Jhr_j0<@kTnrfk7eIpL%b74xUu=I% zPwNpSDqPF3xmQtjOKHLKGx+^(zxY(@qDqhLONNLBF;RPpg_)nfHs%*ggueT^?hPxr zJ%??R0Y2OS-%i#4nzktyq~xULQ*q

!t7EPHr&z;#(RX;H|sg-{$~mJLn44e>@%{ zfn@zA?FBa&C2+n!W1o*lE_FMTK{~!0FUkI+ z^6rrL31E?(Rjnk&(#_|-BYmOiWF_rT`m;k7UcjfM!Q~%V#06M1Es~|JXfR|$_k6R= z#a+u-?fR{&5LzkjIoan0WP89Ih4~e%s+Ds>;%v`~(aDf5S_R=C4w1>pU_c86+mDBvD%HuyUF zcBP3X4o9is5vL;(3BA`LI7bvqn}8er_j~k8fiPCj#!W3m++Y!!(Xh}pECv5!LP@KxEhES>n{a%eoMez|^}F^rTnU=97#3 z!v2&)F6pT2Q`Xa?DOKx_hWODo>0&@t5W;qDS1I6R$TM>D@`;OAn=nrc^?w@)1 z`48&v(@#`wwZG$>vuD!WhB+ZF+-9gc>-FwjnR@o!X2QbCj}_1d1nCOdNvMxvMsk8f z6Rc`-mI4tXd0(eq7@mV>F~;;Wr;f! zlU`pR2T+xdoO+wMsKYoC@Ye=ZmObnt+-12#d=3y7^xIEMK&We~X~%1aPsmw=ovYvr z?5c$eCD2&U1r0lpGk4E+bKLldWV;ZrNAof?cd&eBsM8%vC8+QkKbr;vN3}I+*S&^b z8}}%%HALoozhKP@0;Y%UWJWfk9cb2!3Z_-UhLe!CI%io|+2A^UhDTUi@>%-kfp{*I zbC=N*gj0Vh&3s-^xJD}AnNUp(l2b1E*_4f5_%Mk)-p`CF!0Dy=;5&XRsf=K7hiz3s zr0^WhtKrErG_El(fE_7Gf)o}EcXxkAPUJTJ*dECd^l)UFEmo55Iio|0^g6m?O zP^1EHd$N%^BBfYN*%*5Dgj$@MTs_7OMUef#87J#dA>nN<*X67*suN?rq&%a*o)s2; z@%iY`SG<)OveSF?f=;u~o=P;v+c!M<<+{fcp$*G2U|?r>x6_O$TqEeuJ_pQ#?SmE* zPI}87=9@xlE!hmbb>gw$7bsTChXgEQqvb(2U=DZ$wL$?Y9Nfz5gyhua3WFpx_cO%8 zYO9vEhiA$I=YOD&4?n+<-t-2-$_sFV(N@4DFLT*Z%RdSl2eSsA@Dm5MFn|810bh`a zMJ7gGa#4FEOZS=YE~lbl^yKrG10;M`snH zElPqdW0~C4tcAP+vF;jJIf^$`))J7)H_`p4Bmc?{trE}L;7V%YC=Qo4-Vec#-3?6< z(B_MVEylX)BC1S1uH{rU{L}jB|C_1FsAZCKXli3Z_Sk#peLt~;xFqD&$>=yRR^0`w znvA$O_EZz*! zpTz9MIOAx4{?jd$G$+}P;S)1b-=chcr8)saav251Ag5P5=<>u=ax>^AhZFZIx-=J@ z2Eqg%pXsj|5(HC;;a1rBelhOcx& z^1TNyA;y8r)k4$F$N%NhrHwBxC=u89+>N;Cpj?$)w#z#>hAiS z>IUZY*JbeOMktr-i>}I#8lt5jDw$KKq?=DA*sA$^2|sGqa^(9J0RBGXZjgoa%#<6e(Lo*o;9MmjAq>(yP0em=M5A zUB^FarR^m^z-{IL$lvEnN_~TJRcV$>fBHM(LNY6>Bdi^aB;TN%F&Wl5V$?<-M7IOQ43 zmBHuzkS8L3t?yOBT9O%YF!EDB>3+Ec^(}vQiAPcI1L|FvzxDv$nD^@NxvGojVeE`* zu&T1lsKQahk@S^XGt(=BM)=F@yJ_2_Rp{Hj6pxS^QG+vrjGqVp>Tid>@9eQwra`mO zmJBCH@@cN4qiqcopjm%=xdIOc$BbV~awKA_)=kJKLhmLkxuC4xTR>d}LO!kB~Ey*Jsc$hU6IJGU1 zLtU{>;k<(0X@^p+!aoMu+FyuGM*1e!cGTx6g#_Wf+(8$_)78_z`}-xf!LUogf4uZn!XG5uBF zyAB0n4y;Lx6tNc6w)F9XYEFs2anv+3kN{D+51n3WHMBMs81ra;oEVtNRUd4CL@iE5 zo=eTns}_Ev{WTDfO?h-Q6zsG@@tn@h7Lij)t==JS?Mo)><%Qj0<3ti9i5(`(R}-bH z#O>&hmPfQU2pjFhhOwRwV4>uovB#{8zq$)f_S1h8TH_S^nIIzws4{{`17nUL<+f$` zzQ2Xhqkvf14BY-AibrqO#N78K2~T?ZUIkw=C{K*lf|3Vx)47XsZswNzxf*e6!Q)>Z za#3&zPI@PM(&VK7zUfUO?EJ5ANg#fQQPQPcOm*_)Wpt=?0S`jbM{)1avyuvyZ*tOA zYG;;l+qAko04I7a^e+iT_)25iDA4*^Dv?Js{F|KRr>+|vH;Ph)ONUd>ThJJsg0AaB zosz$;=u!pr;5Un2PyoSg|8u4JmW|YOfz8!)2)Qy_ReY*uwrQ;DN$>GeP*l{4=VcdSV3>YflF%4m zcsLf+`L<;4a3a!3;E^v%lbXO*C>lm<1}kHcE^fT#Ui>Sv0@&alOT?tKLIw9HTQYLy zYTqsw<&0ht+3g2Ic-edBoXOe*!>#a7yhgAYNkX=vG`$kwxIL-bn8!1901QrvY^++# z+XTbv+FjyxLi3AY9uT`vpd(GTI^X`vapRx_}*L+pX38&%w zYG1J-Z5J3gV2AqfE|`zarOXZrkfYJ{=EpbSRXyWWz^?Z!&YW?rWz`J{u5*LqqZXc5 zUZNd&6Aw|}_Vk;AkAcfTqu_OvXHtWvba7uE@-GJ&opiHdR7^?I?LjB!h{Q%y0 zl4?)Z*Zl6FRLcJD1!*)?NUE12?P|W%G>f6<0578P%9*10!p!tzXCej?!WX?mb#DeS zb2UYjN(&y{a4+r2z+BqP-Kc|F66-;E?roa)HuEJ(JWXB1`4Q-WiejHhqQG{1s3oF2l4f3RC_mESl0?WP1$;3z-FbfCrLODKm z2zoG40A7Gyv8k(lYC1zPH}1P1v!Hm4`q9slg%gHQ+& z+!tBc%QZLXkPr0*C}dGeGgiW9iMc9|^2|0I+A|mFE0VlUxYSqtA`Hp%&Hmjfpp;b= z-~YHzTIvD&1P2`feeq@q*uROv8EvQGTz)yWyi@&nX9Qr^O=t9YpY^+jM`voM;wOxG zz4m4t`kVrMyug->G`brPa;6A2Y_D}t;cP+yi4)51 z0odKgR^a<=7{>3J7vzDdjCl~!pm}r#p9a>D!n*qCv%&d4cH9m|Jwc0A&CEiAmnH^A zmqt#E7}bTE4H$wyH?KmxMk_$uPq)6d~M-fcAQUb+XCG@Ml#&&jjKr#{pq zWDp>G3wFk|z5G79awuAJ0kn#sVA{tC?d(*D+a)#mG&sx@xtX$12c=f)jx8nM7*VF+4!qk)>9Z=s;^M9M)2KzzXJ)90t#J~2|NH2_^S|M(BJm_YZ60uM@)Ry*}pYx)XrniXwA96jg zHhS%B>cmu?KxKpX!x5f%b(|QvpIEYX-d1(-?Fx*MNronN$ipcm?c%^#Ur0 zIm(~B9{I}kTfFp$Vxr~4!w`S?jz(Evz)(xBUpxh%WcW2!t1F-`7!+87ZV>9I7mdxi zDH{GjAG|lQsY7aZqdSiW!U1`G+@4&9WUB{^E?co750e~ZIOAxp{zzBN?Rm+#e(ucs zXTg5PBpyyGvhrF5DGblB&jrt@VL*+SUJg3n38?F5`)6KJIWRgK8eZA=^lOC``tx?$M2 zIQ{~iZP1`#SkgP+cbbhniOHH71gtaZvvHpHq96pN?L|%rVKWU|@3KYXD1X)l6%-IY z*)Q@>g*}-`ERqL4d^}I^z`{#I_rgGoN^S&)J<G_LiPw8$L_W)D%79ZVAR$C2ZDNrK>=gB>&hT=j#3LYy^BcO5YYcV)+qR1(M}ZV{ zMD?8=jss@Ow(nlLjk(>oI0^lF@I4OWJ_ZksJLYhaBR)C#C6zQfHmokDdmHF$(rfQE z8(H*`?3T$Wt@%Q{hZPv6r%IA!J{+k3R>RNc(<=(rw-SQqQh^apwoUBBw6K@oQiFQlN8P}VGXi~ok5(wA8XiPPdmx{a|Uu})C2|#l3%&cSY@)6iXp=O zeHN^tKfS)?{LL2pw&xS*Zwa&V(+oLzLNdVoRw6IB2(%%UapE!PTjwH?iB5?-ol1M>!h@AS-<(h!6;iFXM;_2LFj z7wN{MjIbJ0gdtSYxwxvd&w-VhK*fNlhKbk_Pxd4yb2bJJ{!8bu&At67tgzr=g@-bF z+6=Ldir}6B7QilntSY05_Wd?;J(t=l^UF(%G#0=A>;6&XS6lkLwsrn>cc31(&*md~ zN9DegqxW`Fbhp-PG>VU7-Dz$fi7mM`rr1y44|e^et)ad@A67HlwfgvLXNp6Mzjk-k zXp23z;5oDFK4}R%;6mL+dqS1ER<^Cde%4#D*5wInm 0: - # TODO: implement prioritized breadth-first search - # for the hybrid A* algorithm. - opened.sort(key=lambda s : s['f'], reverse=True) - curr = opened.pop() - x, y = curr['x'], curr['y'] - if (self.idx(x), self.idx(y)) == goal: - self.final = curr - found = True - break - - # Compute reachable new states and process each of them. - next_states = self.expand(curr, goal) - for n in next_states: - pass - else: - # We weren't able to find a valid path; this does not necessarily - # mean there is no feasible trajectory to reach the goal. - # In other words, the hybrid A* algorithm is not complete. - found = False - - return found, total_closed - - # Calculate the stack index of a state based on the vehicle's heading. - def theta_to_stack_num(self, theta): - # TODO: implement a function that calculate the stack number - # given theta represented in radian. Note that the calculation - # should partition 360 degrees (2 * PI rad) into different - # cells whose number is given by NUM_THETA_CELLS. - return 0 - - # Calculate the index of the grid cell based on the vehicle's position. - def idx(self, pos): - # We simply assume that each of the grid cell is the size 1 X 1. - return int(np.floor(pos)) - - # Implement a heuristic function to be used in the hybrid A* algorithm. - def heuristic(self, x, y, goal): - # TODO: implement a heuristic function. - return 0 - - # Reconstruct the path taken by the hybrid A* algorithm. - def reconstruct_path(self, start, goal): - # Start from the final state, and follow the link to the - # previous state using the came_from matrix. - curr = self.final - x, y = curr['x'], curr['y'] - path = [] - while x != start[0] and y != start[1]: - path.append(curr) - stack = self.theta_to_stack_num(curr['t']) - x, y = curr['x'], curr['y'] - curr = self.came_from[stack][self.idx(x)][self.idx(y)] - # Reverse the path so that it begins at the starting state - # and ends at the final state. - path.reverse() - return path diff --git a/code/hybrid_a_star/main.py b/code/hybrid_a_star/main.py deleted file mode 100644 index a30b93ac..00000000 --- a/code/hybrid_a_star/main.py +++ /dev/null @@ -1,54 +0,0 @@ -import numpy as np -from hybrid_astar import HybridAStar -from plot import GridPlot - -# The grid is of shape 16 x 16. -# Note that we use (x, y) instead of (y, x) coordinates, -# since that makes application of trigonometric functions easier. -grid = np.array([ - [0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0], - [0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0], - [0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0], - [0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0], - [0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0], - [0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0], - [0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0], - [0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0], - [0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0], - [0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1], - [0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1], - [0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1], - [0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1], - [0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1], - [0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], - [1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], -], dtype=np.int) - -# The coordinates are represented by (x, y, theta). -# Note that this order does not agree with numpy array indices. -start = (0.0, 0.0, 0.0) -# Note that the goal is specified by (x, y) -goal = (grid.shape[0] - 1, grid.shape[1] - 1) - -if __name__ == '__main__': - has = HybridAStar((HybridAStar.NUM_THETA_CELLS,) + grid.shape) - success, expanded = has.search(grid, start, goal) - if success: - print("Found path to goal in %d expansions" % expanded) - else: - print("No valid path found after %d expansions" % expanded) - path = has.reconstruct_path(start, goal) - - ''' - for i, p in enumerate(path, start=1): - print("##### step %d #####" % i) - print("x %f" % p['x']) - print("y %f" % p['y']) - print("theta %f" % p['t']) - ''' - - plot = GridPlot(grid.shape) - plot.plot_grid(grid) - if success: - plot.plot_path(path, start, goal) - plot.show() diff --git a/code/hybrid_a_star/plot.py b/code/hybrid_a_star/plot.py deleted file mode 100644 index 7bf0fdb3..00000000 --- a/code/hybrid_a_star/plot.py +++ /dev/null @@ -1,58 +0,0 @@ -import numpy as np -import cv2 - -class GridPlot: - - # Horizontal and vertical size (in pixels) for one grid cell. - dx = 50 - dy = 50 - # Horizontal (left & right) and vertical (top & bottom) margins. - mx = 30 - my = 30 - - def __init__(self, dim): - self.dim = dim - img_dim = ( - dim[0] * self.dx + 2 * self.mx, - dim[1] * self.dy + 2 * self.my, - 3 # 3-channel color image - ) - self.img = np.full(img_dim, 255, dtype=np.uint8) - - def plot_grid(self, grid): - # Draw grid lines. - for i in range(self.dim[1] + 1): - begin, end = self.conv(i, 0), self.conv(i, self.dim[0]) - cv2.line(self.img, begin, end, (255, 0, 0), 1) - for i in range(self.dim[0] + 1): - begin, end = self.conv(0, i), self.conv(self.dim[1], i) - cv2.line(self.img, begin, end, (255, 0, 0), 1) - # Fill in obstacles. - for x in range(self.dim[0]): - for y in range(self.dim[1]): - if grid[x][y] == 1: - ul = self.conv(x, y) - ul = (ul[0] + 1, ul[1] + 1) - lr = self.conv(x + 1, y + 1) - lr = (lr[0] - 1, lr[1] - 1) - cv2.rectangle(self.img, ul, lr, (120, 150, 150), -1) - - def plot_path(self, path, start, goal): - prev = self.conv(path[0]['x'], path[0]['y']) - cv2.circle(self.img, prev, 5, (0, 0, 255), -1) - for p in path[1:]: - x, y = p['x'], p['y'] - curr = self.conv(x, y) - cv2.circle(self.img, curr, 5, (0, 0, 255), -1) - cv2.line(self.img, prev, curr, (0, 0, 255), 2) - prev = curr - - def show(self): - cv2.imshow('grid plot', self.img) - cv2.waitKey(0) - cv2.destroyAllWindows() - - def conv(self, x, y): - px = int(y * self.dx + self.mx) - py = int(x * self.dy + self.my) - return (px, py) From 4486afe41644b7afcda937289c531ae47a02dd43 Mon Sep 17 00:00:00 2001 From: SeungUkJeon <80089347+SeungUkJeon@users.noreply.github.com> Date: Thu, 6 May 2021 19:13:06 +0900 Subject: [PATCH 30/47] Delete code/PTG directory --- code/PTG/constants.py | 13 ---- code/PTG/cost_functions.py | 137 ------------------------------------- code/PTG/evaluate_ptg.py | 18 ----- code/PTG/helpers.py | 108 ----------------------------- code/PTG/ptg.py | 136 ------------------------------------ code/PTG/ptg_example.png | Bin 86376 -> 0 bytes 6 files changed, 412 deletions(-) delete mode 100644 code/PTG/constants.py delete mode 100644 code/PTG/cost_functions.py delete mode 100644 code/PTG/evaluate_ptg.py delete mode 100644 code/PTG/helpers.py delete mode 100644 code/PTG/ptg.py delete mode 100644 code/PTG/ptg_example.png diff --git a/code/PTG/constants.py b/code/PTG/constants.py deleted file mode 100644 index 573d4643..00000000 --- a/code/PTG/constants.py +++ /dev/null @@ -1,13 +0,0 @@ -N_SAMPLES = 10 -SIGMA_S = [10.0, 4.0, 2.0] # s, s_dot, s_double_dot -SIGMA_D = [1.0, 1.0, 1.0] -SIGMA_T = 2.0 - -MAX_JERK = 10 # m/s/s/s -MAX_ACCEL= 10 # m/s/s - -EXPECTED_JERK_IN_ONE_SEC = 2 # m/s/s -EXPECTED_ACC_IN_ONE_SEC = 1 # m/s - -SPEED_LIMIT = 30 -VEHICLE_RADIUS = 1.5 # model vehicle as circle to simplify collision detection diff --git a/code/PTG/cost_functions.py b/code/PTG/cost_functions.py deleted file mode 100644 index 47486cba..00000000 --- a/code/PTG/cost_functions.py +++ /dev/null @@ -1,137 +0,0 @@ -import numpy as np -from helpers import logistic, to_equation, differentiate, \ - nearest_approach_to_any_vehicle, \ - get_f_and_N_derivatives -from constants import * - -# COST FUNCTIONS -def time_diff_cost(traj, target_vehicle, delta, T, predictions): - """ - Penalizes trajectories that span a duration which is longer or - shorter than the duration requested. - """ - _, _, t = traj - return logistic(float(abs(t - T)) / T) - -def s_diff_cost(traj, target_vehicle, delta, T, predictions): - """ - Penalizes trajectories whose s coordinate (and derivatives) - differ from the goal. - """ - s, _, T = traj - target = predictions[target_vehicle].state_in(T) - target = list(np.array(target) + np.array(delta)) - s_targ = target[:3] - S = [f(T) for f in get_f_and_N_derivatives(s, 2)] - cost = 0 - for actual, expected, sigma in zip(S, s_targ, SIGMA_S): - diff = float(abs(actual - expected)) - cost += logistic(diff / sigma) - return cost - -def d_diff_cost(traj, target_vehicle, delta, T, predictions): - """ - Penalizes trajectories whose d coordinate (and derivatives) - differ from the goal. - """ - _, d_coeffs, T = traj - - d_dot_coeffs = differentiate(d_coeffs) - d_ddot_coeffs = differentiate(d_dot_coeffs) - - d = to_equation(d_coeffs) - d_dot = to_equation(d_dot_coeffs) - d_ddot = to_equation(d_ddot_coeffs) - - D = [d(T), d_dot(T), d_ddot(T)] - - target = predictions[target_vehicle].state_in(T) - target = list(np.array(target) + np.array(delta)) - d_targ = target[3:] - cost = 0 - for actual, expected, sigma in zip(D, d_targ, SIGMA_D): - diff = np.fabs(actual - expected) - cost += logistic(diff / sigma) - return cost - -def collision_cost(traj, target_vehicle, delta, T, predictions): - """ - Binary cost function which penalizes collisions. - """ - nearest = nearest_approach_to_any_vehicle(traj, predictions) - if nearest < 2*VEHICLE_RADIUS: - return 1.0 - else: - return 0.0 - -def buffer_cost(traj, target_vehicle, delta, T, predictions): - """ - Penalizes getting close to other vehicles. - """ - nearest = nearest_approach_to_any_vehicle(traj, predictions) - return logistic(2 * VEHICLE_RADIUS / nearest) - -def efficiency_cost(traj, target_vehicle, delta, T, predictions): - """ - Rewards high average speeds. - """ - s, _, t = traj - s = to_equation(s) - avg_v = float(s(t)) / t - targ_s, _, _, _, _, _ = predictions[target_vehicle].state_in(t) - targ_v = float(targ_s) / t - return logistic(2 * float(targ_v - avg_v) / avg_v) - -def total_accel_cost(traj, target_vehicle, delta, T, predictions): - s, d, t = traj - s_dot = differentiate(s) - s_d_dot = differentiate(s_dot) - a = to_equation(s_d_dot) - total_acc = 0 - dt = float(T) / 100.0 - for i in range(100): - t = dt * i - acc = a(t) - total_acc += abs(acc*dt) - acc_per_second = total_acc / T - - return logistic(acc_per_second / EXPECTED_ACC_IN_ONE_SEC) - -def max_accel_cost(traj, target_vehicle, delta, T, predictions): - s, d, t = traj - s_dot = differentiate(s) - s_d_dot = differentiate(s_dot) - a = to_equation(s_d_dot) - all_accs = [a(float(T)/100 * i) for i in range(100)] - max_acc = max(all_accs, key=abs) - if abs(max_acc) > MAX_ACCEL: - return 1.0 - else: - return 0.0 - -def total_jerk_cost(traj, target_vehicle, delta, T, predictions): - s, d, t = traj - s_dot = differentiate(s) - s_d_dot = differentiate(s_dot) - jerk = to_equation(differentiate(s_d_dot)) - total_jerk = 0 - dt = float(T) / 100.0 - for i in range(100): - t = dt * i - j = jerk(t) - total_jerk += abs(j * dt) - jerk_per_second = total_jerk / T - return logistic(jerk_per_second / EXPECTED_JERK_IN_ONE_SEC) - -def max_jerk_cost(traj, target_vehicle, delta, T, predictions): - s, d, t = traj - s_dot = differentiate(s) - s_d_dot = differentiate(s_dot) - jerk = differentiate(s_d_dot) - jerk = to_equation(jerk) - all_jerks = [jerk(float(T) / 100 * i) for i in range(100)] - max_jerk = max(all_jerks, key=abs) - if abs(max_jerk) > MAX_JERK: - return 1 - else: - return 0 diff --git a/code/PTG/evaluate_ptg.py b/code/PTG/evaluate_ptg.py deleted file mode 100644 index 8f9b3549..00000000 --- a/code/PTG/evaluate_ptg.py +++ /dev/null @@ -1,18 +0,0 @@ -#!/usr/bin/env python - -from ptg import PTG -from helpers import Vehicle, show_trajectory - -def main(): - vehicle = Vehicle([0, 10, 0, 0, 0, 0]) - predictions = {0: vehicle} - target = 0 - delta = [0, 0, 0, 0, 0 ,0] - start_s = [10, 10, 0] - start_d = [4, 0, 0] - T = 5.0 - best = PTG(start_s, start_d, target, delta, T, predictions) - show_trajectory(best[0], best[1], best[2], vehicle) - -if __name__ == "__main__": - main() diff --git a/code/PTG/helpers.py b/code/PTG/helpers.py deleted file mode 100644 index 8822e425..00000000 --- a/code/PTG/helpers.py +++ /dev/null @@ -1,108 +0,0 @@ -from math import sqrt, exp -from matplotlib import pyplot as plt - -class Vehicle(object): - """ - Helper class. Non-ego vehicles move w/ constant acceleration - """ - def __init__(self, start): - self.start_state = start - - def state_in(self, t): - s = self.start_state[:3] - d = self.start_state[3:] - state = [ - s[0] + (s[1] * t) + s[2] * t ** 2 / 2.0, - s[1] + s[2] * t, - s[2], - d[0] + (d[1] * t) + d[2] * t ** 2 / 2.0, - d[1] + d[2] * t, - d[2], - ] - return state - -def logistic(x): - """ - A function that returns a value between 0 and 1 for x in the - range [0, infinity] and -1 to 1 for x in the range [-infinity, infinity]. - - Useful for cost functions. - """ - return 2.0 / (1 + exp(-x)) - 1.0 - -def to_equation(coefficients): - """ - Takes the coefficients of a polynomial and creates a function of - time from them. - """ - def f(t): - total = 0.0 - for i, c in enumerate(coefficients): - total += c * t ** i - return total - return f - -def differentiate(coefficients): - """ - Calculates the derivative of a polynomial and returns - the corresponding coefficients. - """ - new_cos = [] - for deg, prev_co in enumerate(coefficients[1:]): - new_cos.append((deg + 1) * prev_co) - return new_cos - -def nearest_approach_to_any_vehicle(traj, vehicles): - """ - Calculates the closest distance to any vehicle during a trajectory. - """ - closest = 999999 - for v in vehicles.values(): - d = nearest_approach(traj, v) - if d < closest: - closest = d - return closest - -def nearest_approach(traj, vehicle): - closest = 999999 - s_, d_, T = traj - s = to_equation(s_) - d = to_equation(d_) - for i in range(100): - t = float(i) / 100 * T - cur_s = s(t) - cur_d = d(t) - targ_s, _, _, targ_d, _, _ = vehicle.state_in(t) - dist = sqrt((cur_s - targ_s) ** 2 + (cur_d - targ_d) ** 2) - if dist < closest: - closest = dist - return closest - -def show_trajectory(s_coeffs, d_coeffs, T, vehicle=None): - s = to_equation(s_coeffs) - d = to_equation(d_coeffs) - X = [] - Y = [] - if vehicle: - X2 = [] - Y2 = [] - t = 0 - while t <= T + 0.01: - X.append(s(t)) - Y.append(d(t)) - if vehicle: - s_, _, _, d_, _, _ = vehicle.state_in(t) - X2.append(s_) - Y2.append(d_) - t += 0.25 - plt.scatter(X, Y, color="blue") - if vehicle: - plt.scatter(X2, Y2, color="red") - plt.show() - -def get_f_and_N_derivatives(coeffs, N=3): - functions = [to_equation(coeffs)] - for i in range(N): - coeffs = differentiate(coeffs) - functions.append(to_equation(coeffs)) - return functions diff --git a/code/PTG/ptg.py b/code/PTG/ptg.py deleted file mode 100644 index c9bbcba8..00000000 --- a/code/PTG/ptg.py +++ /dev/null @@ -1,136 +0,0 @@ -import numpy as np -import random -from cost_functions import * -from constants import * - -# TODO - tweak weights to existing cost functions -WEIGHTED_COST_FUNCTIONS = [ - (time_diff_cost, 1), - (s_diff_cost, 1), - (d_diff_cost, 1), - (collision_cost, 1), - (buffer_cost, 1), - (efficiency_cost, 1), - (total_accel_cost, 1), - (max_accel_cost, 1), - (total_jerk_cost, 1), - (max_jerk_cost, 1), -] - -def PTG(start_s, start_d, target_vehicle, delta, T, predictions): - """ - Finds the best trajectory according to WEIGHTED_COST_FUNCTIONS (global). - - arguments: - start_s - [s, s_dot, s_ddot] - - start_d - [d, d_dot, d_ddot] - - target_vehicle - id of leading vehicle (int) which can be used to retrieve - that vehicle from the "predictions" dictionary. This is the vehicle that - we are setting our trajectory relative to. - - delta - a length 6 array indicating the offset we are aiming for - between us and the target_vehicle. So if at time 5 the target vehicle - will be at [100, 10, 0, 0, 0, 0] and delta is [-10, 0, 0, 4, 0, 0], - then our goal state for t = 5 will be [90, 10, 0, 4, 0, 0]. - This would correspond to a goal of "follow 10 meters behind and - 4 meters to the right of target vehicle" - - T - the desired time at which we will be at the goal - (relative to now as t=0) - - predictions - dictionary of {v_id : vehicle }. Each vehicle has a method - vehicle.state_in(time) which returns a length 6 array giving - that vehicle's expected [s, s_dot, s_ddot, d, d_dot, d_ddot] state - at that time. - - return: - (best_s, best_d, best_t) where best_s are the 6 coefficients - representing s(t) best_d gives coefficients for d(t) and - best_t gives duration associated with this trajectory. - """ - target = predictions[target_vehicle] - # generate alternative goals - all_goals = [] - timestep = 0.5 - t = T - 4 * timestep - while t <= T + 4 * timestep: - target_state = np.array(target.state_in(t)) + np.array(delta) - goal_s = target_state[:3] - goal_d = target_state[3:] - goals = [(goal_s, goal_d, t)] - for _ in range(N_SAMPLES): - perturbed = perturb_goal(goal_s, goal_d) - goals.append((perturbed[0], perturbed[1], t)) - all_goals += goals - t += timestep - - # find best trajectory - trajectories = [] - for goal in all_goals: - s_goal, d_goal, t = goal - s_coefficients = JMT(start_s, s_goal, t) - d_coefficients = JMT(start_d, d_goal, t) - trajectories.append(tuple([s_coefficients, d_coefficients, t])) - - best = min( - trajectories, - key=lambda tr: calculate_cost( - tr, target_vehicle, delta, T, predictions, WEIGHTED_COST_FUNCTIONS - ) - ) - calculate_cost( - best, target_vehicle, delta, T, predictions, WEIGHTED_COST_FUNCTIONS, - verbose=True - ) - return best - - -def calculate_cost(trajectory, target_vehicle, delta, goal_t, - predictions, cost_functions_with_weights, verbose=False): - cost = 0 - for cf, weight in cost_functions_with_weights: - new_cost = weight * cf(trajectory, target_vehicle, - delta, goal_t, predictions) - cost += new_cost - if verbose: - print("cost for {} is \t {}".format(cf.__name__, new_cost)) - return cost - -def perturb_goal(goal_s, goal_d): - """ - Returns a "perturbed" version of the goal. - """ - new_s_goal = [] - for mu, sig in zip(goal_s, SIGMA_S): - new_s_goal.append(random.gauss(mu, sig)) - - new_d_goal = [] - for mu, sig in zip(goal_d, SIGMA_D): - new_d_goal.append(random.gauss(mu, sig)) - - return tuple([new_s_goal, new_d_goal]) - -def JMT(start, end, T): - """ - Calculates Jerk Minimizing Trajectory for start, end and T. - """ - a_0, a_1, a_2 = start[0], start[1], start[2] / 2.0 - c_0 = a_0 + a_1 * T + a_2 * T ** 2 - c_1 = a_1 + 2 * a_2 * T - c_2 = 2 * a_2 - - A = np.array([ - [ T ** 3, T ** 4, T ** 5], - [3 * T ** 2, 4 * T ** 3, 5 * T ** 4], - [6 * T, 12 * T ** 2, 20 * T ** 3], - ]) - B = np.array([ - end[0] - c_0, - end[1] - c_1, - end[2] - c_2 - ]) - a_3_4_5 = np.linalg.solve(A, B) - alphas = np.concatenate([np.array([a_0, a_1, a_2]), a_3_4_5]) - return alphas diff --git a/code/PTG/ptg_example.png b/code/PTG/ptg_example.png deleted file mode 100644 index 4da1bf6e70c66ddb6726f2f0bd180d204b0bc69d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 86376 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 Date: Thu, 6 May 2021 19:13:50 +0900 Subject: [PATCH 31/47] Delete README.md --- code/README.md | 55 -------------------------------------------------- 1 file changed, 55 deletions(-) delete mode 100644 code/README.md diff --git a/code/README.md b/code/README.md deleted file mode 100644 index c0d43f3f..00000000 --- a/code/README.md +++ /dev/null @@ -1,55 +0,0 @@ -# Week 7 - Hybrid A* Algorithm & Trajectory Generation - ---- - -[//]: # (Image References) -[has-example]: ./hybrid_a_star/has_example.png -[ptg-example]: ./PTG/ptg_example.png - -## Assignment: Hybrid A* Algorithm - -In directory [`./hybrid_a_star`](./hybrid_a_star), a simple test program for the hybrid A* algorithm is provided. Run the following command to test: - -``` -$ python main.py -``` - -The program consists of three modules: - -* `main.py` defines the map, start configuration and end configuration. It instantiates a `HybridAStar` object and calls the search method to generate a motion plan. -* `hybrid_astar.py` implements the algorithm. -* `plot.py` provides an OpenCV-based visualization for the purpose of result monitoring. - -You have to implement the following sections of code for the assignment: - -* Trajectory generation: in the method `HybridAStar.expand()`, a simple one-point trajectory shall be generated based on a basic bicycle model. This is going to be used in expanding 3-D grid cells in the algorithm's search operation. -* Hybrid A* search algorithm: in the method `HybridAStar.search()`, after expanding the states reachable from the current configuration, the algorithm must process each state (i.e., determine the grid cell, check its validity, close the visited cell, and record the path. You will have to write code in the `for n in next_states:` loop. -* Discretization of heading: in the method `HybridAStar.theta_to_stack_num()`, you will write code to map the vehicle's orientation (theta) to a finite set of stack indices. -* Heuristic function: in the method `HybridAStar.heuristic()`, you define a heuristic function that will be used in determining the priority of grid cells to be expanded. For instance, the distance to the goal is a reasonable estimate of each cell's cost. - -You are invited to tweak various parameters including the number of stacks (heading discretization granularity) and the vehicle's velocity. It will also be interesting to adjust the grid granularity of the map. The following figure illustrates an example output of the program with the default map given in `main.py` and `NUM_THETA_CELLS = 360` while the vehicle speed is set to 0.5. - -![Example Output of the Hybrid A* Test Program][has-example] - ---- - -## Experiment: Polynomial Trajectory Generation - -In directory [`./PTG`](./PTG), a sample program is provided that tests polynomial trajectory generation. If you input the following command: - -``` -$ python evaluate_ptg.py -``` - -you will see an output such as the following figure. - -![Example Output of the Polynomial Trajectory Generator][ptg-example] - -Note that the above figure is an example, while the result you get will be different from run to run because of the program's random nature. The program generates a number of perturbed goal configurations, computes a jerk minimizing trajectory for each goal position, and then selects the one with the minimum cost as defined by the cost functions and their combination. - -Your job in this experiment is: - -1. to understand the polynomial trajectory generation by reading the code already implemented and in place; given a start configuration and a goal configuration, the algorithm computes coefficient values for a quintic polynomial that defines the jerk minimizing trajectory; and -2. to derive an appropriate set of weights applied to the cost functions; the mechanism to calculate the cost for a trajectory and selecting one with the minimum cost is the same as described in the previous (Week 6) lecture. - -Experiment by tweaking the relative weight for each cost function. It will also be very interesting to define your own cost metric and implement it using the information associated with trajectories. From ef21b82928d487ad43431729099e01577570761a Mon Sep 17 00:00:00 2001 From: SeungUkJeon <80089347+SeungUkJeon@users.noreply.github.com> Date: Thu, 6 May 2021 19:14:29 +0900 Subject: [PATCH 32/47] Add files via upload --- code/week-7/PTG/constants.py | 13 ++ code/week-7/PTG/cost_functions.py | 137 ++++++++++++++++++++++ code/week-7/PTG/evaluate_ptg.py | 18 +++ code/week-7/PTG/helpers.py | 108 +++++++++++++++++ code/week-7/PTG/ptg.py | 136 +++++++++++++++++++++ code/week-7/PTG/ptg_example.png | Bin 0 -> 86376 bytes code/week-7/README.md | 55 +++++++++ code/week-7/hybrid_a_star/has_example.png | Bin 0 -> 131539 bytes code/week-7/hybrid_a_star/hybrid_astar.py | 124 ++++++++++++++++++++ code/week-7/hybrid_a_star/main.py | 54 +++++++++ code/week-7/hybrid_a_star/plot.py | 58 +++++++++ 11 files changed, 703 insertions(+) create mode 100644 code/week-7/PTG/constants.py create mode 100644 code/week-7/PTG/cost_functions.py create mode 100644 code/week-7/PTG/evaluate_ptg.py create mode 100644 code/week-7/PTG/helpers.py create mode 100644 code/week-7/PTG/ptg.py create mode 100644 code/week-7/PTG/ptg_example.png create mode 100644 code/week-7/README.md create mode 100644 code/week-7/hybrid_a_star/has_example.png create mode 100644 code/week-7/hybrid_a_star/hybrid_astar.py create mode 100644 code/week-7/hybrid_a_star/main.py create mode 100644 code/week-7/hybrid_a_star/plot.py diff --git a/code/week-7/PTG/constants.py b/code/week-7/PTG/constants.py new file mode 100644 index 00000000..573d4643 --- /dev/null +++ b/code/week-7/PTG/constants.py @@ -0,0 +1,13 @@ +N_SAMPLES = 10 +SIGMA_S = [10.0, 4.0, 2.0] # s, s_dot, s_double_dot +SIGMA_D = [1.0, 1.0, 1.0] +SIGMA_T = 2.0 + +MAX_JERK = 10 # m/s/s/s +MAX_ACCEL= 10 # m/s/s + +EXPECTED_JERK_IN_ONE_SEC = 2 # m/s/s +EXPECTED_ACC_IN_ONE_SEC = 1 # m/s + +SPEED_LIMIT = 30 +VEHICLE_RADIUS = 1.5 # model vehicle as circle to simplify collision detection diff --git a/code/week-7/PTG/cost_functions.py b/code/week-7/PTG/cost_functions.py new file mode 100644 index 00000000..47486cba --- /dev/null +++ b/code/week-7/PTG/cost_functions.py @@ -0,0 +1,137 @@ +import numpy as np +from helpers import logistic, to_equation, differentiate, \ + nearest_approach_to_any_vehicle, \ + get_f_and_N_derivatives +from constants import * + +# COST FUNCTIONS +def time_diff_cost(traj, target_vehicle, delta, T, predictions): + """ + Penalizes trajectories that span a duration which is longer or + shorter than the duration requested. + """ + _, _, t = traj + return logistic(float(abs(t - T)) / T) + +def s_diff_cost(traj, target_vehicle, delta, T, predictions): + """ + Penalizes trajectories whose s coordinate (and derivatives) + differ from the goal. + """ + s, _, T = traj + target = predictions[target_vehicle].state_in(T) + target = list(np.array(target) + np.array(delta)) + s_targ = target[:3] + S = [f(T) for f in get_f_and_N_derivatives(s, 2)] + cost = 0 + for actual, expected, sigma in zip(S, s_targ, SIGMA_S): + diff = float(abs(actual - expected)) + cost += logistic(diff / sigma) + return cost + +def d_diff_cost(traj, target_vehicle, delta, T, predictions): + """ + Penalizes trajectories whose d coordinate (and derivatives) + differ from the goal. + """ + _, d_coeffs, T = traj + + d_dot_coeffs = differentiate(d_coeffs) + d_ddot_coeffs = differentiate(d_dot_coeffs) + + d = to_equation(d_coeffs) + d_dot = to_equation(d_dot_coeffs) + d_ddot = to_equation(d_ddot_coeffs) + + D = [d(T), d_dot(T), d_ddot(T)] + + target = predictions[target_vehicle].state_in(T) + target = list(np.array(target) + np.array(delta)) + d_targ = target[3:] + cost = 0 + for actual, expected, sigma in zip(D, d_targ, SIGMA_D): + diff = np.fabs(actual - expected) + cost += logistic(diff / sigma) + return cost + +def collision_cost(traj, target_vehicle, delta, T, predictions): + """ + Binary cost function which penalizes collisions. + """ + nearest = nearest_approach_to_any_vehicle(traj, predictions) + if nearest < 2*VEHICLE_RADIUS: + return 1.0 + else: + return 0.0 + +def buffer_cost(traj, target_vehicle, delta, T, predictions): + """ + Penalizes getting close to other vehicles. + """ + nearest = nearest_approach_to_any_vehicle(traj, predictions) + return logistic(2 * VEHICLE_RADIUS / nearest) + +def efficiency_cost(traj, target_vehicle, delta, T, predictions): + """ + Rewards high average speeds. + """ + s, _, t = traj + s = to_equation(s) + avg_v = float(s(t)) / t + targ_s, _, _, _, _, _ = predictions[target_vehicle].state_in(t) + targ_v = float(targ_s) / t + return logistic(2 * float(targ_v - avg_v) / avg_v) + +def total_accel_cost(traj, target_vehicle, delta, T, predictions): + s, d, t = traj + s_dot = differentiate(s) + s_d_dot = differentiate(s_dot) + a = to_equation(s_d_dot) + total_acc = 0 + dt = float(T) / 100.0 + for i in range(100): + t = dt * i + acc = a(t) + total_acc += abs(acc*dt) + acc_per_second = total_acc / T + + return logistic(acc_per_second / EXPECTED_ACC_IN_ONE_SEC) + +def max_accel_cost(traj, target_vehicle, delta, T, predictions): + s, d, t = traj + s_dot = differentiate(s) + s_d_dot = differentiate(s_dot) + a = to_equation(s_d_dot) + all_accs = [a(float(T)/100 * i) for i in range(100)] + max_acc = max(all_accs, key=abs) + if abs(max_acc) > MAX_ACCEL: + return 1.0 + else: + return 0.0 + +def total_jerk_cost(traj, target_vehicle, delta, T, predictions): + s, d, t = traj + s_dot = differentiate(s) + s_d_dot = differentiate(s_dot) + jerk = to_equation(differentiate(s_d_dot)) + total_jerk = 0 + dt = float(T) / 100.0 + for i in range(100): + t = dt * i + j = jerk(t) + total_jerk += abs(j * dt) + jerk_per_second = total_jerk / T + return logistic(jerk_per_second / EXPECTED_JERK_IN_ONE_SEC) + +def max_jerk_cost(traj, target_vehicle, delta, T, predictions): + s, d, t = traj + s_dot = differentiate(s) + s_d_dot = differentiate(s_dot) + jerk = differentiate(s_d_dot) + jerk = to_equation(jerk) + all_jerks = [jerk(float(T) / 100 * i) for i in range(100)] + max_jerk = max(all_jerks, key=abs) + if abs(max_jerk) > MAX_JERK: + return 1 + else: + return 0 diff --git a/code/week-7/PTG/evaluate_ptg.py b/code/week-7/PTG/evaluate_ptg.py new file mode 100644 index 00000000..8f9b3549 --- /dev/null +++ b/code/week-7/PTG/evaluate_ptg.py @@ -0,0 +1,18 @@ +#!/usr/bin/env python + +from ptg import PTG +from helpers import Vehicle, show_trajectory + +def main(): + vehicle = Vehicle([0, 10, 0, 0, 0, 0]) + predictions = {0: vehicle} + target = 0 + delta = [0, 0, 0, 0, 0 ,0] + start_s = [10, 10, 0] + start_d = [4, 0, 0] + T = 5.0 + best = PTG(start_s, start_d, target, delta, T, predictions) + show_trajectory(best[0], best[1], best[2], vehicle) + +if __name__ == "__main__": + main() diff --git a/code/week-7/PTG/helpers.py b/code/week-7/PTG/helpers.py new file mode 100644 index 00000000..8822e425 --- /dev/null +++ b/code/week-7/PTG/helpers.py @@ -0,0 +1,108 @@ +from math import sqrt, exp +from matplotlib import pyplot as plt + +class Vehicle(object): + """ + Helper class. Non-ego vehicles move w/ constant acceleration + """ + def __init__(self, start): + self.start_state = start + + def state_in(self, t): + s = self.start_state[:3] + d = self.start_state[3:] + state = [ + s[0] + (s[1] * t) + s[2] * t ** 2 / 2.0, + s[1] + s[2] * t, + s[2], + d[0] + (d[1] * t) + d[2] * t ** 2 / 2.0, + d[1] + d[2] * t, + d[2], + ] + return state + +def logistic(x): + """ + A function that returns a value between 0 and 1 for x in the + range [0, infinity] and -1 to 1 for x in the range [-infinity, infinity]. + + Useful for cost functions. + """ + return 2.0 / (1 + exp(-x)) - 1.0 + +def to_equation(coefficients): + """ + Takes the coefficients of a polynomial and creates a function of + time from them. + """ + def f(t): + total = 0.0 + for i, c in enumerate(coefficients): + total += c * t ** i + return total + return f + +def differentiate(coefficients): + """ + Calculates the derivative of a polynomial and returns + the corresponding coefficients. + """ + new_cos = [] + for deg, prev_co in enumerate(coefficients[1:]): + new_cos.append((deg + 1) * prev_co) + return new_cos + +def nearest_approach_to_any_vehicle(traj, vehicles): + """ + Calculates the closest distance to any vehicle during a trajectory. + """ + closest = 999999 + for v in vehicles.values(): + d = nearest_approach(traj, v) + if d < closest: + closest = d + return closest + +def nearest_approach(traj, vehicle): + closest = 999999 + s_, d_, T = traj + s = to_equation(s_) + d = to_equation(d_) + for i in range(100): + t = float(i) / 100 * T + cur_s = s(t) + cur_d = d(t) + targ_s, _, _, targ_d, _, _ = vehicle.state_in(t) + dist = sqrt((cur_s - targ_s) ** 2 + (cur_d - targ_d) ** 2) + if dist < closest: + closest = dist + return closest + +def show_trajectory(s_coeffs, d_coeffs, T, vehicle=None): + s = to_equation(s_coeffs) + d = to_equation(d_coeffs) + X = [] + Y = [] + if vehicle: + X2 = [] + Y2 = [] + t = 0 + while t <= T + 0.01: + X.append(s(t)) + Y.append(d(t)) + if vehicle: + s_, _, _, d_, _, _ = vehicle.state_in(t) + X2.append(s_) + Y2.append(d_) + t += 0.25 + plt.scatter(X, Y, color="blue") + if vehicle: + plt.scatter(X2, Y2, color="red") + plt.show() + +def get_f_and_N_derivatives(coeffs, N=3): + functions = [to_equation(coeffs)] + for i in range(N): + coeffs = differentiate(coeffs) + functions.append(to_equation(coeffs)) + return functions diff --git a/code/week-7/PTG/ptg.py b/code/week-7/PTG/ptg.py new file mode 100644 index 00000000..c9bbcba8 --- /dev/null +++ b/code/week-7/PTG/ptg.py @@ -0,0 +1,136 @@ +import numpy as np +import random +from cost_functions import * +from constants import * + +# TODO - tweak weights to existing cost functions +WEIGHTED_COST_FUNCTIONS = [ + (time_diff_cost, 1), + (s_diff_cost, 1), + (d_diff_cost, 1), + (collision_cost, 1), + (buffer_cost, 1), + (efficiency_cost, 1), + (total_accel_cost, 1), + (max_accel_cost, 1), + (total_jerk_cost, 1), + (max_jerk_cost, 1), +] + +def PTG(start_s, start_d, target_vehicle, delta, T, predictions): + """ + Finds the best trajectory according to WEIGHTED_COST_FUNCTIONS (global). + + arguments: + start_s - [s, s_dot, s_ddot] + + start_d - [d, d_dot, d_ddot] + + target_vehicle - id of leading vehicle (int) which can be used to retrieve + that vehicle from the "predictions" dictionary. This is the vehicle that + we are setting our trajectory relative to. + + delta - a length 6 array indicating the offset we are aiming for + between us and the target_vehicle. So if at time 5 the target vehicle + will be at [100, 10, 0, 0, 0, 0] and delta is [-10, 0, 0, 4, 0, 0], + then our goal state for t = 5 will be [90, 10, 0, 4, 0, 0]. + This would correspond to a goal of "follow 10 meters behind and + 4 meters to the right of target vehicle" + + T - the desired time at which we will be at the goal + (relative to now as t=0) + + predictions - dictionary of {v_id : vehicle }. Each vehicle has a method + vehicle.state_in(time) which returns a length 6 array giving + that vehicle's expected [s, s_dot, s_ddot, d, d_dot, d_ddot] state + at that time. + + return: + (best_s, best_d, best_t) where best_s are the 6 coefficients + representing s(t) best_d gives coefficients for d(t) and + best_t gives duration associated with this trajectory. + """ + target = predictions[target_vehicle] + # generate alternative goals + all_goals = [] + timestep = 0.5 + t = T - 4 * timestep + while t <= T + 4 * timestep: + target_state = np.array(target.state_in(t)) + np.array(delta) + goal_s = target_state[:3] + goal_d = target_state[3:] + goals = [(goal_s, goal_d, t)] + for _ in range(N_SAMPLES): + perturbed = perturb_goal(goal_s, goal_d) + goals.append((perturbed[0], perturbed[1], t)) + all_goals += goals + t += timestep + + # find best trajectory + trajectories = [] + for goal in all_goals: + s_goal, d_goal, t = goal + s_coefficients = JMT(start_s, s_goal, t) + d_coefficients = JMT(start_d, d_goal, t) + trajectories.append(tuple([s_coefficients, d_coefficients, t])) + + best = min( + trajectories, + key=lambda tr: calculate_cost( + tr, target_vehicle, delta, T, predictions, WEIGHTED_COST_FUNCTIONS + ) + ) + calculate_cost( + best, target_vehicle, delta, T, predictions, WEIGHTED_COST_FUNCTIONS, + verbose=True + ) + return best + + +def calculate_cost(trajectory, target_vehicle, delta, goal_t, + predictions, cost_functions_with_weights, verbose=False): + cost = 0 + for cf, weight in cost_functions_with_weights: + new_cost = weight * cf(trajectory, target_vehicle, + delta, goal_t, predictions) + cost += new_cost + if verbose: + print("cost for {} is \t {}".format(cf.__name__, new_cost)) + return cost + +def perturb_goal(goal_s, goal_d): + """ + Returns a "perturbed" version of the goal. + """ + new_s_goal = [] + for mu, sig in zip(goal_s, SIGMA_S): + new_s_goal.append(random.gauss(mu, sig)) + + new_d_goal = [] + for mu, sig in zip(goal_d, SIGMA_D): + new_d_goal.append(random.gauss(mu, sig)) + + return tuple([new_s_goal, new_d_goal]) + +def JMT(start, end, T): + """ + Calculates Jerk Minimizing Trajectory for start, end and T. + """ + a_0, a_1, a_2 = start[0], start[1], start[2] / 2.0 + c_0 = a_0 + a_1 * T + a_2 * T ** 2 + c_1 = a_1 + 2 * a_2 * T + c_2 = 2 * a_2 + + A = np.array([ + [ T ** 3, T ** 4, T ** 5], + [3 * T ** 2, 4 * T ** 3, 5 * T ** 4], + [6 * T, 12 * T ** 2, 20 * T ** 3], + ]) + B = np.array([ + end[0] - c_0, + end[1] - c_1, + end[2] - c_2 + ]) + a_3_4_5 = np.linalg.solve(A, B) + alphas = np.concatenate([np.array([a_0, a_1, a_2]), a_3_4_5]) + return alphas diff --git a/code/week-7/PTG/ptg_example.png b/code/week-7/PTG/ptg_example.png new file mode 100644 index 0000000000000000000000000000000000000000..4da1bf6e70c66ddb6726f2f0bd180d204b0bc69d GIT binary patch literal 86376 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%0AyX0kQLPE3-?e=yI#8D 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%0A{u-sUssp$r9WEdu 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

!t7EPHr&z;#(RX;H|sg-{$~mJLn44e>@%{ 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 0: + # TODO: implement prioritized breadth-first search + # for the hybrid A* algorithm. + opened.sort(key=lambda s : s['f'], reverse=True) + curr = opened.pop() + x, y = curr['x'], curr['y'] + if (self.idx(x), self.idx(y)) == goal: + self.final = curr + found = True + break + + # Compute reachable new states and process each of them. + next_states = self.expand(curr, goal) + for n in next_states: + pass + else: + # We weren't able to find a valid path; this does not necessarily + # mean there is no feasible trajectory to reach the goal. + # In other words, the hybrid A* algorithm is not complete. + found = False + + return found, total_closed + + # Calculate the stack index of a state based on the vehicle's heading. + def theta_to_stack_num(self, theta): + # TODO: implement a function that calculate the stack number + # given theta represented in radian. Note that the calculation + # should partition 360 degrees (2 * PI rad) into different + # cells whose number is given by NUM_THETA_CELLS. + return 0 + + # Calculate the index of the grid cell based on the vehicle's position. + def idx(self, pos): + # We simply assume that each of the grid cell is the size 1 X 1. + return int(np.floor(pos)) + + # Implement a heuristic function to be used in the hybrid A* algorithm. + def heuristic(self, x, y, goal): + # TODO: implement a heuristic function. + return 0 + + # Reconstruct the path taken by the hybrid A* algorithm. + def reconstruct_path(self, start, goal): + # Start from the final state, and follow the link to the + # previous state using the came_from matrix. + curr = self.final + x, y = curr['x'], curr['y'] + path = [] + while x != start[0] and y != start[1]: + path.append(curr) + stack = self.theta_to_stack_num(curr['t']) + x, y = curr['x'], curr['y'] + curr = self.came_from[stack][self.idx(x)][self.idx(y)] + # Reverse the path so that it begins at the starting state + # and ends at the final state. + path.reverse() + return path diff --git a/code/week-7/hybrid_a_star/main.py b/code/week-7/hybrid_a_star/main.py new file mode 100644 index 00000000..a30b93ac --- /dev/null +++ b/code/week-7/hybrid_a_star/main.py @@ -0,0 +1,54 @@ +import numpy as np +from hybrid_astar import HybridAStar +from plot import GridPlot + +# The grid is of shape 16 x 16. +# Note that we use (x, y) instead of (y, x) coordinates, +# since that makes application of trigonometric functions easier. +grid = np.array([ + [0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0], + [0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0], + [0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0], + [0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0], + [0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0], + [0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0], + [0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0], + [0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0], + [0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0], + [0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1], + [0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1], + [0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1], + [0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1], + [0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], +], dtype=np.int) + +# The coordinates are represented by (x, y, theta). +# Note that this order does not agree with numpy array indices. +start = (0.0, 0.0, 0.0) +# Note that the goal is specified by (x, y) +goal = (grid.shape[0] - 1, grid.shape[1] - 1) + +if __name__ == '__main__': + has = HybridAStar((HybridAStar.NUM_THETA_CELLS,) + grid.shape) + success, expanded = has.search(grid, start, goal) + if success: + print("Found path to goal in %d expansions" % expanded) + else: + print("No valid path found after %d expansions" % expanded) + path = has.reconstruct_path(start, goal) + + ''' + for i, p in enumerate(path, start=1): + print("##### step %d #####" % i) + print("x %f" % p['x']) + print("y %f" % p['y']) + print("theta %f" % p['t']) + ''' + + plot = GridPlot(grid.shape) + plot.plot_grid(grid) + if success: + plot.plot_path(path, start, goal) + plot.show() diff --git a/code/week-7/hybrid_a_star/plot.py b/code/week-7/hybrid_a_star/plot.py new file mode 100644 index 00000000..7bf0fdb3 --- /dev/null +++ b/code/week-7/hybrid_a_star/plot.py @@ -0,0 +1,58 @@ +import numpy as np +import cv2 + +class GridPlot: + + # Horizontal and vertical size (in pixels) for one grid cell. + dx = 50 + dy = 50 + # Horizontal (left & right) and vertical (top & bottom) margins. + mx = 30 + my = 30 + + def __init__(self, dim): + self.dim = dim + img_dim = ( + dim[0] * self.dx + 2 * self.mx, + dim[1] * self.dy + 2 * self.my, + 3 # 3-channel color image + ) + self.img = np.full(img_dim, 255, dtype=np.uint8) + + def plot_grid(self, grid): + # Draw grid lines. + for i in range(self.dim[1] + 1): + begin, end = self.conv(i, 0), self.conv(i, self.dim[0]) + cv2.line(self.img, begin, end, (255, 0, 0), 1) + for i in range(self.dim[0] + 1): + begin, end = self.conv(0, i), self.conv(self.dim[1], i) + cv2.line(self.img, begin, end, (255, 0, 0), 1) + # Fill in obstacles. + for x in range(self.dim[0]): + for y in range(self.dim[1]): + if grid[x][y] == 1: + ul = self.conv(x, y) + ul = (ul[0] + 1, ul[1] + 1) + lr = self.conv(x + 1, y + 1) + lr = (lr[0] - 1, lr[1] - 1) + cv2.rectangle(self.img, ul, lr, (120, 150, 150), -1) + + def plot_path(self, path, start, goal): + prev = self.conv(path[0]['x'], path[0]['y']) + cv2.circle(self.img, prev, 5, (0, 0, 255), -1) + for p in path[1:]: + x, y = p['x'], p['y'] + curr = self.conv(x, y) + cv2.circle(self.img, curr, 5, (0, 0, 255), -1) + cv2.line(self.img, prev, curr, (0, 0, 255), 2) + prev = curr + + def show(self): + cv2.imshow('grid plot', self.img) + cv2.waitKey(0) + cv2.destroyAllWindows() + + def conv(self, x, y): + px = int(y * self.dx + self.mx) + py = int(x * self.dy + self.my) + return (px, py) From cee3ecc26cfb85580b99ba64c813baa5210501f3 Mon Sep 17 00:00:00 2001 From: SeungUkJeon <80089347+SeungUkJeon@users.noreply.github.com> Date: Fri, 7 May 2021 19:46:23 +0900 Subject: [PATCH 33/47] Add A* to HW_week5 --- code/week-5/assignment.py | 47 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 45 insertions(+), 2 deletions(-) diff --git a/code/week-5/assignment.py b/code/week-5/assignment.py index 0811731c..a63d117f 100644 --- a/code/week-5/assignment.py +++ b/code/week-5/assignment.py @@ -71,15 +71,58 @@ def optimum_policy_2D(grid, init, goal, cost): # use in generating the final path policy. if (y, x) == goal and value[(t, y, x)] > 0: # TODO: implement code. - pass + value[(t,y,x)] = 0; + policy[(t,y,x)] = -999 + change = True + # Try to use simple arithmetic to capture state transitions. elif grid[(y, x)] == 0: # TODO: implement code. - pass + for i, act in enumerate(action): + direction = (t+act) % 4 + y2, x2 = y + forward[direction][0], x + forward[direction][1] + + if 0 <= y2 < grid.shape[0] \ + and 0 <= x2 < grid.shape[1] \ + and grid[(y2, x2)] == 0: + val = value[(direction, y2, x2)] + cost[i] + + if val < value[(t, y, x)]: + value[(t, y, x)] = val + policy[(t, y, x)] = act + change = True # Now navigate through the policy table to generate a # sequence of actions to take to follow the optimal path. # TODO: implement code. + y,x,o = init + + policy_start = policy[(o, y, x)] + for i in range(len(action)): + if policy_start == action[i]: + policy_ID = action_name[i] + policy2D[(y, x)] = policy_ID + while policy[(o, y, x)] != -999: + if policy[(o, y, x)] == action[0]: + o2 = (o - 1) % 4 # turn left + elif policy[(o, y, x)] == action[1]: + o2 = o # go straight + elif policy[(o, y, x)] == action[2]: + o2 = (o + 1) % 4 # turn right + + y, x = y + forward[o2][0], x + forward[o2][1] + o = o2 + + policy_temp = policy[(o,y,x)] + if policy_temp == -999: + policy_name = "*" + else: + for i in range(len(action)): + if policy_temp == action[i]: + policy_name = action_name[i] + + policy2D[(y,x)] = policy_name + # Return the optimum policy generated above. return policy2D From f4f172e3bfd6d497a7f2ac237c7123b050e55d8a Mon Sep 17 00:00:00 2001 From: SeungUkJeon <80089347+SeungUkJeon@users.noreply.github.com> Date: Fri, 7 May 2021 19:58:09 +0900 Subject: [PATCH 34/47] Add README to HW_week5 --- code/week-5/README.md | 109 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 109 insertions(+) diff --git a/code/week-5/README.md b/code/week-5/README.md index 048d3a5a..19ea1140 100644 --- a/code/week-5/README.md +++ b/code/week-5/README.md @@ -1,3 +1,112 @@ +## Assignment + +You will complete the implementation of a simple path planning algorithm based on the dynamic programming technique demonstrated in policy.py. A template code is given by assignment.py. + +[HW_week5] + +def optimum_policy_2D(grid, init, goal, cost): + # Initialize the value function with (infeasibly) high costs. + value = np.full((4, ) + grid.shape, 999, dtype=np.int32) + # Initialize the policy function with negative (unused) values. + policy = np.full((4,) + grid.shape, -1, dtype=np.int32) + # Final path policy will be in 2D, instead of 3D. + policy2D = np.full(grid.shape, ' ') + + # Apply dynamic programming with the flag change. + change = True + while change: + change = False + # This will provide a useful iterator for the state space. + p = itertools.product( + range(grid.shape[0]), + range(grid.shape[1]), + range(len(forward)) + ) + # Compute the value function for each state and + # update policy function accordingly. + for y, x, t in p: + # Mark the final state with a special value that we will + # use in generating the final path policy. + if (y, x) == goal and value[(t, y, x)] > 0: + # TODO: implement code. + value[(t,y,x)] = 0; + policy[(t,y,x)] = -999 + change = True + + # Try to use simple arithmetic to capture state transitions. + elif grid[(y, x)] == 0: + # TODO: implement code. + for i, act in enumerate(action): + direction = (t+act) % 4 + y2, x2 = y + forward[direction][0], x + forward[direction][1] + + if 0 <= y2 < grid.shape[0] \ + and 0 <= x2 < grid.shape[1] \ + and grid[(y2, x2)] == 0: + val = value[(direction, y2, x2)] + cost[i] + + if val < value[(t, y, x)]: + value[(t, y, x)] = val + policy[(t, y, x)] = act + change = True + # Now navigate through the policy table to generate a + # sequence of actions to take to follow the optimal path. + # TODO: implement code. + y,x,o = init + + policy_start = policy[(o, y, x)] + for i in range(len(action)): + if policy_start == action[i]: + policy_ID = action_name[i] + + policy2D[(y, x)] = policy_ID + while policy[(o, y, x)] != -999: + if policy[(o, y, x)] == action[0]: + o2 = (o - 1) % 4 # turn left + elif policy[(o, y, x)] == action[1]: + o2 = o # go straight + elif policy[(o, y, x)] == action[2]: + o2 = (o + 1) % 4 # turn right + + y, x = y + forward[o2][0], x + forward[o2][1] + o = o2 + + policy_temp = policy[(o,y,x)] + if policy_temp == -999: + policy_name = "*" + else: + for i in range(len(action)): + if policy_temp == action[i]: + policy_name = action_name[i] + + policy2D[(y,x)] = policy_name + + +"경로 탐색 알고리즘" + +차량 모델에서 Heading Angle 을 고려하여 거동에 따른 Cost를 계산하여 최적화된 경로를 탐색한다. + +차량의 방향 "t" 이용하여 Optimal_Policy_2D 초기 위치인 start 위치에 차량의 이동 방향 정보를 갱신한다. + +반복하여 이동할 지역을 탐색하다 목적지에 도착하면 탐색을 종료하기 위해 value = 0, policy = -999 로 설정. + +이동이 가능한 지역인지 Map 범위 안에 있는지 확인한다. + +차량의 action은 직진,좌회전,후진,우회전(up / left / down / right) 을 의미하며 +4가지 거동에 대한 방향은 2차원 x,y 위에 존재한다. -> "t" + +차량 action에 따른 이동에 대한 정보는 현재 상태와 방향에서 이동된 상태와 방향으로 +갱신된 action 정보를 나타낸다 -> "act" + +갱신된 상태와 방향이 Map grid 내의 지점이면 action에 대한 cost를 부여해 value 값 에 더해주고, +기존의 value 와 비교하여 최적의 action으로 갱신한다. + +시작점에서 출발하여 차량 거동에따라 갱신된 action 정보를 policy 에 저장 하는 것을 반복하여 최적 경로를 탐색한다. +-> "Policy_ID" + +목표지점에 도달하지 못하거나, map grid 를 벗어나게 된다면 경로 탐색은 실패한다. + + # Week 5 - Path Planning & the A* Algorithm --- From 5a94ed8d446f505abd842b9d72823e383ab3195c Mon Sep 17 00:00:00 2001 From: SeungUkJeon <80089347+SeungUkJeon@users.noreply.github.com> Date: Fri, 7 May 2021 19:59:33 +0900 Subject: [PATCH 35/47] Add README to HW_week5 --- code/week-5/README.md | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/code/week-5/README.md b/code/week-5/README.md index 19ea1140..588dfea2 100644 --- a/code/week-5/README.md +++ b/code/week-5/README.md @@ -49,6 +49,7 @@ def optimum_policy_2D(grid, init, goal, cost): value[(t, y, x)] = val policy[(t, y, x)] = act change = True + # Now navigate through the policy table to generate a # sequence of actions to take to follow the optimal path. # TODO: implement code. @@ -82,29 +83,29 @@ def optimum_policy_2D(grid, init, goal, cost): policy2D[(y,x)] = policy_name -"경로 탐색 알고리즘" +- "경로 탐색 알고리즘" -차량 모델에서 Heading Angle 을 고려하여 거동에 따른 Cost를 계산하여 최적화된 경로를 탐색한다. +- 차량 모델에서 Heading Angle 을 고려하여 거동에 따른 Cost를 계산하여 최적화된 경로를 탐색한다. -차량의 방향 "t" 이용하여 Optimal_Policy_2D 초기 위치인 start 위치에 차량의 이동 방향 정보를 갱신한다. +- 차량의 방향 "t" 이용하여 Optimal_Policy_2D 초기 위치인 start 위치에 차량의 이동 방향 정보를 갱신한다. -반복하여 이동할 지역을 탐색하다 목적지에 도착하면 탐색을 종료하기 위해 value = 0, policy = -999 로 설정. +- 반복하여 이동할 지역을 탐색하다 목적지에 도착하면 탐색을 종료하기 위해 value = 0, policy = -999 로 설정. -이동이 가능한 지역인지 Map 범위 안에 있는지 확인한다. +- 이동이 가능한 지역인지 Map 범위 안에 있는지 확인한다. -차량의 action은 직진,좌회전,후진,우회전(up / left / down / right) 을 의미하며 +- 차량의 action은 직진,좌회전,후진,우회전(up / left / down / right) 을 의미하며 4가지 거동에 대한 방향은 2차원 x,y 위에 존재한다. -> "t" -차량 action에 따른 이동에 대한 정보는 현재 상태와 방향에서 이동된 상태와 방향으로 +- 차량 action에 따른 이동에 대한 정보는 현재 상태와 방향에서 이동된 상태와 방향으로 갱신된 action 정보를 나타낸다 -> "act" -갱신된 상태와 방향이 Map grid 내의 지점이면 action에 대한 cost를 부여해 value 값 에 더해주고, +- 갱신된 상태와 방향이 Map grid 내의 지점이면 action에 대한 cost를 부여해 value 값 에 더해주고, 기존의 value 와 비교하여 최적의 action으로 갱신한다. -시작점에서 출발하여 차량 거동에따라 갱신된 action 정보를 policy 에 저장 하는 것을 반복하여 최적 경로를 탐색한다. +- 시작점에서 출발하여 차량 거동에따라 갱신된 action 정보를 policy 에 저장 하는 것을 반복하여 최적 경로를 탐색한다. -> "Policy_ID" -목표지점에 도달하지 못하거나, map grid 를 벗어나게 된다면 경로 탐색은 실패한다. +- 목표지점에 도달하지 못하거나, map grid 를 벗어나게 된다면 경로 탐색은 실패한다. # Week 5 - Path Planning & the A* Algorithm From 177629e7dde68584cc160cd1a581035647f4735e Mon Sep 17 00:00:00 2001 From: SeungUkJeon <80089347+SeungUkJeon@users.noreply.github.com> Date: Fri, 7 May 2021 20:05:04 +0900 Subject: [PATCH 36/47] Add README to HW_week5 --- code/week-5/README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/code/week-5/README.md b/code/week-5/README.md index 588dfea2..39eaa341 100644 --- a/code/week-5/README.md +++ b/code/week-5/README.md @@ -107,6 +107,11 @@ def optimum_policy_2D(grid, init, goal, cost): - 목표지점에 도달하지 못하거나, map grid 를 벗어나게 된다면 경로 탐색은 실패한다. +- 좌회전 cost에 따른 결과 비교 (가중치를 크게 주면 교차로에서 직진 후 우회전으로 돌아가는 것을 확인할 수 있다.) +- cost (2, 1, 10) <-> (2, 1, 100) +![image](https://user-images.githubusercontent.com/80089347/117440459-07155000-af6f-11eb-94bd-fe18fd04de7f.png) + + # Week 5 - Path Planning & the A* Algorithm From a2c359be3707e04fa61d03d38bd1f08e66da7d8d Mon Sep 17 00:00:00 2001 From: SeungUkJeon <80089347+SeungUkJeon@users.noreply.github.com> Date: Fri, 7 May 2021 20:05:41 +0900 Subject: [PATCH 37/47] Add to README HW_week5 --- code/week-5/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/week-5/README.md b/code/week-5/README.md index 39eaa341..ea1c59db 100644 --- a/code/week-5/README.md +++ b/code/week-5/README.md @@ -109,6 +109,8 @@ def optimum_policy_2D(grid, init, goal, cost): - 좌회전 cost에 따른 결과 비교 (가중치를 크게 주면 교차로에서 직진 후 우회전으로 돌아가는 것을 확인할 수 있다.) - cost (2, 1, 10) <-> (2, 1, 100) + + ![image](https://user-images.githubusercontent.com/80089347/117440459-07155000-af6f-11eb-94bd-fe18fd04de7f.png) From 37ef3ed2f2c4007d844b0252d1a18dc36b55d93a Mon Sep 17 00:00:00 2001 From: SeungUkJeon <80089347+SeungUkJeon@users.noreply.github.com> Date: Fri, 7 May 2021 20:06:46 +0900 Subject: [PATCH 38/47] Add README to HW_week5 --- code/week-5/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/week-5/README.md b/code/week-5/README.md index ea1c59db..6a065985 100644 --- a/code/week-5/README.md +++ b/code/week-5/README.md @@ -111,7 +111,7 @@ def optimum_policy_2D(grid, init, goal, cost): - cost (2, 1, 10) <-> (2, 1, 100) -![image](https://user-images.githubusercontent.com/80089347/117440459-07155000-af6f-11eb-94bd-fe18fd04de7f.png) +![image](https://user-images.githubusercontent.com/80089347/117440973-b7835400-af6f-11eb-8647-cb1b3f221ae5.png) From 8138e22b327d72ccac22a45bc3b7424b319ea8be Mon Sep 17 00:00:00 2001 From: SeungUkJeon <80089347+SeungUkJeon@users.noreply.github.com> Date: Fri, 7 May 2021 21:22:18 +0900 Subject: [PATCH 39/47] Add vehicle to HW_week6 --- code/week-6/BP/vehicle.py | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/code/week-6/BP/vehicle.py b/code/week-6/BP/vehicle.py index 0d5d157b..2b40414a 100644 --- a/code/week-6/BP/vehicle.py +++ b/code/week-6/BP/vehicle.py @@ -38,7 +38,6 @@ def choose_next_state(self, predictions): 1. successor_states(): Returns a vector of possible successor states for the finite state machine. - 2. generate_trajectory(self, state, predictions): Returns a vector of Vehicle objects representing a vehicle trajectory, given a state and predictions. @@ -47,7 +46,6 @@ def choose_next_state(self, predictions): vehicle is occupying the space to the ego vehicle's right, then there is no possible trajectory without first transitioning to another state. - 3. calculate_cost(vehicle, trajectory, predictions): Imported from cost_functions.py, computes the cost for a trajectory. @@ -58,10 +56,25 @@ def choose_next_state(self, predictions): # Note that the return value is a trajectory, where a trajectory # is a list of Vehicle objects with two elements. - return [ - Vehicle(self.lane, self.s, self.v, self.a, self.state), - Vehicle(self.lane, self.position_at(1), self.v, 0, self.state) - ] + possible_successor_states = self.successor_states() + costs = [] + for state in possible_successor_states: + print("possibles:", state) + trajectory = self.generate_trajectory(state, predictions) + print("trajectory state:", trajectory[1].state) + cost_for_state = calculate_cost(self, trajectory, predictions) + costs.append({'state': state, 'cost': cost_for_state}) + + good_state = None + min_cost = 9999999 + for c in costs: + if c['cost'] < min_cost: + min_cost = c['cost'] + good_state = c['state'] + + next_trajectory = self.generate_trajectory(good_state, predictions) + + return next_trajectory def successor_states(self): ''' From 49055bea9eb74764b5e20416e8b68a2f23253eb3 Mon Sep 17 00:00:00 2001 From: SeungUkJeon <80089347+SeungUkJeon@users.noreply.github.com> Date: Fri, 7 May 2021 21:25:16 +0900 Subject: [PATCH 40/47] Add cost_functions to HW_week6 --- code/week-6/BP/cost_functions.py | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/code/week-6/BP/cost_functions.py b/code/week-6/BP/cost_functions.py index e1617388..f9de8e74 100644 --- a/code/week-6/BP/cost_functions.py +++ b/code/week-6/BP/cost_functions.py @@ -32,14 +32,34 @@ def goal_distance_cost(vehicle, trajectory, predictions, data): Cost of being out of goal lane also becomes larger as vehicle approaches the goal distance. ''' - return 0 + intended_lane_distance = vehicle.goal_lane - data[0] + final_lane_distance = vehicle.goal_lane - data[1] + goal_distance = data[2] + + if goal_distance / vehicle.goal_s > 0.4: + cost = 0.0 + elif goal_distance > 0: + cost = 1 - exp((intended_lane_distance + final_lane_distance) / (goal_distance)) + else: + cost = 1 + print("goal_distance_cost:", cost) + return cost def inefficiency_cost(vehicle, trajectory, predictions, data): ''' Cost becomes higher for trajectories with intended lane and final lane that have slower traffic. ''' - return 0 + intented_lane = data[0] + final_lane = data[1] + goal_distance = data[2] + + if goal_distance / vehicle.goal_s > 0.4: + cost = exp(-(intented_lane + final_lane)) + else: + cost = 1 - exp(-(intented_lane + final_lane)) + + return cost def calculate_cost(vehicle, trajectory, predictions): ''' From 730d96b836f37c3b0a7d72e7c7d887ba6e1c3f94 Mon Sep 17 00:00:00 2001 From: SeungUkJeon <80089347+SeungUkJeon@users.noreply.github.com> Date: Fri, 7 May 2021 21:46:13 +0900 Subject: [PATCH 41/47] Add classifier to HW_week6 --- code/week-6/GNB/classifier.py | 41 ++++++++++++++++++++--------------- 1 file changed, 24 insertions(+), 17 deletions(-) diff --git a/code/week-6/GNB/classifier.py b/code/week-6/GNB/classifier.py index e453a71e..dfc3da58 100644 --- a/code/week-6/GNB/classifier.py +++ b/code/week-6/GNB/classifier.py @@ -28,23 +28,30 @@ def process_vars(self, vars): # Train the GNB using a combination of X and Y, where # X denotes the observations (here we have four variables for each) and # Y denotes the corresponding labels ("left", "keep", "right"). + def train(self, X, Y): - ''' - Collect the data and calculate mean and standard variation - for each class. Record them for later use in prediction. - ''' - # TODO: implement code. - - # Given an observation (s, s_dot, d, d_dot), predict which behaviour - # the vehicle is going to take using GNB. + self.X_arr, self.Y_arr = np.array(X), np.array(Y) + unique, cnt = np.unique(Y, return_counts=True) + self.priors = cnt / len(Y) + + self.Means = np.array([self.X_arr[np.where(self.Y_arr==i)].mean(axis=0) for i in self.classes]) + self.Standevi = np.array([self.X_arr[np.where(self.Y_arr==i)].std(axis=0) for i in self.classes]) + + return self + def predict(self, observation): - ''' - Calculate Gaussian probability for each variable based on the - mean and standard deviation calculated in the training process. - Multiply all the probabilities for variables, and then - normalize them to get conditional probabilities. - Return the label for the highest conditional probability. - ''' - # TODO: implement code. - return "keep" + probas = np.zeros(len(self.classes)) + # Calculate Gaussian probability for each variable based on the + # mean and standard deviation calculated in the training process. + for i in range(len(self.classes)): + probability = 1 + for k in range(self.X_arr.shape[1]): + # Multiply all the probabilities for variables, and then + # normalize them to get conditional probabilities. + probability *= gaussian_prob(observation[k], self.Means[i][k], self.Standevi[i][k]) + probas[i] = probability + nmz = probas / probas.sum() + + # Return the label for the highest conditional probability. + return self.classes[nmz.argmax(axis=0)] From b7fe89ca6e52b6c4adcd06a27e875416ee098923 Mon Sep 17 00:00:00 2001 From: SeungUkJeon <80089347+SeungUkJeon@users.noreply.github.com> Date: Fri, 7 May 2021 21:58:28 +0900 Subject: [PATCH 42/47] Add README to HW_week6 --- code/week-6/README.md | 162 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 161 insertions(+), 1 deletion(-) diff --git a/code/week-6/README.md b/code/week-6/README.md index 9cfbdd76..9fcbb3b6 100644 --- a/code/week-6/README.md +++ b/code/week-6/README.md @@ -1,5 +1,165 @@ -# Week 6 - Prediction & Behaviour Planning +## HW_week 6 GNB & BP + +# Gaussian Naive Bayes Classifier +--- +def train(self, X, Y): + self.X_arr, self.Y_arr = np.array(X), np.array(Y) + unique, cnt = np.unique(Y, return_counts=True) + self.priors = cnt / len(Y) + + self.Means = np.array([self.X_arr[np.where(self.Y_arr==i)].mean(axis=0) for i in self.classes]) + self.Standevi = np.array([self.X_arr[np.where(self.Y_arr==i)].std(axis=0) for i in self.classes]) + + return self + +def predict(self, observation): + probas = np.zeros(len(self.classes)) + # Calculate Gaussian probability for each variable based on the + # mean and standard deviation calculated in the training process. + for i in range(len(self.classes)): + probability = 1 + for k in range(self.X_arr.shape[1]): + # Multiply all the probabilities for variables, and then + # normalize them to get conditional probabilities. + probability *= gaussian_prob(observation[k], self.Means[i][k], self.Standevi[i][k]) + + probas[i] = probability + nmz = probas / probas.sum() + + # Return the label for the highest conditional probability. + return self.classes[nmz.argmax(axis=0)] + +- Gaussian Naive Bayes Classifier 는 차량의 궤적 (좌회전 / 직진 / 우회전) 에 대한 데이터를 수집하고 평균과 표준편차를 계산하여 관측을 통해 확률이 높은 주행 경로를 예측한다. + +- 수집된 데이터를 분류하여 사전확률을 구하고 주행 state (s / d / sd_ot / d_dot)에 대한 평균과 표준편차를 계산한다. + +- 관측 데이터의 확률을 가우시안으로 계산하고 사전확률을 곱한다. + +- 주행 state에 대한 평균, 표준편차와 관측 데이터를 이용하여 가장 높은 확률의 주행경로를 예측한다. + +- 100%의 정확도 기준으로 84%의 확률을 결과로 나타낸다. + +![image](https://user-images.githubusercontent.com/80089347/117452276-86f6e680-af7e-11eb-9b7e-702cf88a0386.png) + + +# Behaviour Planning +--- + +def choose_next_state(self, predictions): + ''' + Implement the transition function code for the vehicle's + behaviour planning finite state machine, which operates based on + the cost function (defined in a separate module cost_functions.py). + INPUTS: A predictions dictionary with vehicle id keys and predicted + vehicle trajectories as values. Trajectories are a list of + Vehicle objects representing the vehicle at the current timestep + and one timestep in the future. + OUTPUT: The the best (lowest cost) trajectory corresponding to + the next ego vehicle state. + Functions that will be useful: + 1. successor_states(): + Returns a vector of possible successor states + for the finite state machine. + 2. generate_trajectory(self, state, predictions): + Returns a vector of Vehicle objects representing a + vehicle trajectory, given a state and predictions. + Note that trajectories might be empty if no possible trajectory + exists for the state; for example, if the state is LCR, but a + vehicle is occupying the space to the ego vehicle's right, + then there is no possible trajectory without first + transitioning to another state. + 3. calculate_cost(vehicle, trajectory, predictions): + Imported from cost_functions.py, computes the cost for + a trajectory. + ''' + + # TODO: implement state transition function based on the cost + # associated with each transition. + + + possible_successor_states = self.successor_states() + costs = [] + for state in possible_successor_states: + print("possibles:", state) + trajectory = self.generate_trajectory(state, predictions) + print("trajectory state:", trajectory[1].state) + cost_for_state = calculate_cost(self, trajectory, predictions) + costs.append({'state': state, 'cost': cost_for_state}) + + good_state = None + min_cost = 9999999 + for c in costs: + if c['cost'] < min_cost: + min_cost = c['cost'] + good_state = c['state'] + + next_trajectory = self.generate_trajectory(good_state, predictions) + # Note that the return value is a trajectory, where a trajectory + # is a list of Vehicle objects with two elements. + return next_trajectory + + +def goal_distance_cost(vehicle, trajectory, predictions, data): + ''' + Cost increases based on distance of intended lane (for planning a + lane change) and final lane of a trajectory. + Cost of being out of goal lane also becomes larger as vehicle approaches + the goal distance. + ''' + intended_lane_distance = vehicle.goal_lane - data[0] + final_lane_distance = vehicle.goal_lane - data[1] + goal_distance = data[2] + + if goal_distance / vehicle.goal_s > 0.4: + cost = 0.0 + elif goal_distance > 0: + cost = 1 - exp((intended_lane_distance + final_lane_distance) / (goal_distance)) + else: + cost = 1 + print("goal_distance_cost:", cost) + return cost + +def inefficiency_cost(vehicle, trajectory, predictions, data): + ''' + Cost becomes higher for trajectories with intended lane and final lane + that have slower traffic. + ''' + intented_lane = data[0] + final_lane = data[1] + goal_distance = data[2] + + if goal_distance / vehicle.goal_s > 0.4: + cost = exp(-(intented_lane + final_lane)) + else: + cost = 1 - exp(-(intented_lane + final_lane)) + # print(cost) + return cost + +- 목표 차로와 차량의 속도에 따라 cost를 부여하여 현재 궤적을 구한다. + +- 목표 차로에 도달하기 위해 차로 변경을 하며 목표지점에 가까워 질수록 cost가 증가한다. + +- 현재 자차의 위치에 대한 상태 정보 (KL/ PLCL/ PLCR/ LCL/ LCR) 을 어떻게 정의할 것인지 결정하고, +현재 상태를 보고 이동가능한 차로가 있는지 이동 궤적을 계산한다. 계산된 궤적 중 최소 cost를 선택한다 -> "choose next state" + +- 목표 차로와 자차가 주해중인 차로 사이의 거리를 계산하여 3개의 weight를 산출하고 cost를 부여한다. +(intended / final lane) -> "goal distance cost" + +- 속도가 낮으면 목표 도달까지 시간이 지연되기 때문에 cost 를 더 부여하며, +최적의 경로 (최소 cost)는 속도가 가장 높은 차로로 주행하다가 목적지 인근에서 차로 변경을 하는 것이다. + +- 자차는 차로변경을 이용한 주행으로 목표 차로까지 도달하는데 33초가 소요되었다. + + + +![image](https://user-images.githubusercontent.com/80089347/117452946-519ec880-af7f-11eb-854c-d5af6a303f59.png) + + + + + +# Week 6 - Prediction & Behaviour Planning --- ## Assignment #1 From 5c9896481f012edadf44522fa9196729ae616fe0 Mon Sep 17 00:00:00 2001 From: SeungUkJeon <80089347+SeungUkJeon@users.noreply.github.com> Date: Fri, 7 May 2021 21:59:43 +0900 Subject: [PATCH 43/47] Add README to HW_week6 --- code/week-6/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/code/week-6/README.md b/code/week-6/README.md index 9fcbb3b6..275ed18a 100644 --- a/code/week-6/README.md +++ b/code/week-6/README.md @@ -136,6 +136,7 @@ def inefficiency_cost(vehicle, trajectory, predictions, data): # print(cost) return cost + - 목표 차로와 차량의 속도에 따라 cost를 부여하여 현재 궤적을 구한다. - 목표 차로에 도달하기 위해 차로 변경을 하며 목표지점에 가까워 질수록 cost가 증가한다. From 70ec6003a46885aac1c0332fa11a8f592fe3852b Mon Sep 17 00:00:00 2001 From: SeungUkJeon <80089347+SeungUkJeon@users.noreply.github.com> Date: Fri, 7 May 2021 22:01:54 +0900 Subject: [PATCH 44/47] Add README to HW_week6 --- code/week-6/README.md | 231 +++++++++++++++++++++--------------------- 1 file changed, 116 insertions(+), 115 deletions(-) diff --git a/code/week-6/README.md b/code/week-6/README.md index 275ed18a..89df7b9d 100644 --- a/code/week-6/README.md +++ b/code/week-6/README.md @@ -2,32 +2,33 @@ # Gaussian Naive Bayes Classifier --- -def train(self, X, Y): - self.X_arr, self.Y_arr = np.array(X), np.array(Y) - unique, cnt = np.unique(Y, return_counts=True) - self.priors = cnt / len(Y) - - self.Means = np.array([self.X_arr[np.where(self.Y_arr==i)].mean(axis=0) for i in self.classes]) - self.Standevi = np.array([self.X_arr[np.where(self.Y_arr==i)].std(axis=0) for i in self.classes]) - - return self - -def predict(self, observation): - probas = np.zeros(len(self.classes)) - # Calculate Gaussian probability for each variable based on the - # mean and standard deviation calculated in the training process. - for i in range(len(self.classes)): - probability = 1 - for k in range(self.X_arr.shape[1]): - # Multiply all the probabilities for variables, and then - # normalize them to get conditional probabilities. - probability *= gaussian_prob(observation[k], self.Means[i][k], self.Standevi[i][k]) - - probas[i] = probability - nmz = probas / probas.sum() - - # Return the label for the highest conditional probability. - return self.classes[nmz.argmax(axis=0)] + + def train(self, X, Y): + self.X_arr, self.Y_arr = np.array(X), np.array(Y) + unique, cnt = np.unique(Y, return_counts=True) + self.priors = cnt / len(Y) + + self.Means = np.array([self.X_arr[np.where(self.Y_arr==i)].mean(axis=0) for i in self.classes]) + self.Standevi = np.array([self.X_arr[np.where(self.Y_arr==i)].std(axis=0) for i in self.classes]) + + return self + + def predict(self, observation): + probas = np.zeros(len(self.classes)) + # Calculate Gaussian probability for each variable based on the + # mean and standard deviation calculated in the training process. + for i in range(len(self.classes)): + probability = 1 + for k in range(self.X_arr.shape[1]): + # Multiply all the probabilities for variables, and then + # normalize them to get conditional probabilities. + probability *= gaussian_prob(observation[k], self.Means[i][k], self.Standevi[i][k]) + + probas[i] = probability + nmz = probas / probas.sum() + + # Return the label for the highest conditional probability. + return self.classes[nmz.argmax(axis=0)] - Gaussian Naive Bayes Classifier 는 차량의 궤적 (좌회전 / 직진 / 우회전) 에 대한 데이터를 수집하고 평균과 표준편차를 계산하여 관측을 통해 확률이 높은 주행 경로를 예측한다. @@ -46,95 +47,95 @@ def predict(self, observation): # Behaviour Planning --- -def choose_next_state(self, predictions): - ''' - Implement the transition function code for the vehicle's - behaviour planning finite state machine, which operates based on - the cost function (defined in a separate module cost_functions.py). - INPUTS: A predictions dictionary with vehicle id keys and predicted - vehicle trajectories as values. Trajectories are a list of - Vehicle objects representing the vehicle at the current timestep - and one timestep in the future. - OUTPUT: The the best (lowest cost) trajectory corresponding to - the next ego vehicle state. - Functions that will be useful: - 1. successor_states(): - Returns a vector of possible successor states - for the finite state machine. - 2. generate_trajectory(self, state, predictions): - Returns a vector of Vehicle objects representing a - vehicle trajectory, given a state and predictions. - Note that trajectories might be empty if no possible trajectory - exists for the state; for example, if the state is LCR, but a - vehicle is occupying the space to the ego vehicle's right, - then there is no possible trajectory without first - transitioning to another state. - 3. calculate_cost(vehicle, trajectory, predictions): - Imported from cost_functions.py, computes the cost for - a trajectory. - ''' - - # TODO: implement state transition function based on the cost - # associated with each transition. - - - possible_successor_states = self.successor_states() - costs = [] - for state in possible_successor_states: - print("possibles:", state) - trajectory = self.generate_trajectory(state, predictions) - print("trajectory state:", trajectory[1].state) - cost_for_state = calculate_cost(self, trajectory, predictions) - costs.append({'state': state, 'cost': cost_for_state}) - - good_state = None - min_cost = 9999999 - for c in costs: - if c['cost'] < min_cost: - min_cost = c['cost'] - good_state = c['state'] - - next_trajectory = self.generate_trajectory(good_state, predictions) - # Note that the return value is a trajectory, where a trajectory - # is a list of Vehicle objects with two elements. - return next_trajectory - - -def goal_distance_cost(vehicle, trajectory, predictions, data): - ''' - Cost increases based on distance of intended lane (for planning a - lane change) and final lane of a trajectory. - Cost of being out of goal lane also becomes larger as vehicle approaches - the goal distance. - ''' - intended_lane_distance = vehicle.goal_lane - data[0] - final_lane_distance = vehicle.goal_lane - data[1] - goal_distance = data[2] - - if goal_distance / vehicle.goal_s > 0.4: - cost = 0.0 - elif goal_distance > 0: - cost = 1 - exp((intended_lane_distance + final_lane_distance) / (goal_distance)) - else: - cost = 1 - print("goal_distance_cost:", cost) - return cost - -def inefficiency_cost(vehicle, trajectory, predictions, data): - ''' - Cost becomes higher for trajectories with intended lane and final lane - that have slower traffic. - ''' - intented_lane = data[0] - final_lane = data[1] - goal_distance = data[2] - - if goal_distance / vehicle.goal_s > 0.4: - cost = exp(-(intented_lane + final_lane)) - else: - cost = 1 - exp(-(intented_lane + final_lane)) - # print(cost) - return cost + def choose_next_state(self, predictions): + ''' + Implement the transition function code for the vehicle's + behaviour planning finite state machine, which operates based on + the cost function (defined in a separate module cost_functions.py). + INPUTS: A predictions dictionary with vehicle id keys and predicted + vehicle trajectories as values. Trajectories are a list of + Vehicle objects representing the vehicle at the current timestep + and one timestep in the future. + OUTPUT: The the best (lowest cost) trajectory corresponding to + the next ego vehicle state. + Functions that will be useful: + 1. successor_states(): + Returns a vector of possible successor states + for the finite state machine. + 2. generate_trajectory(self, state, predictions): + Returns a vector of Vehicle objects representing a + vehicle trajectory, given a state and predictions. + Note that trajectories might be empty if no possible trajectory + exists for the state; for example, if the state is LCR, but a + vehicle is occupying the space to the ego vehicle's right, + then there is no possible trajectory without first + transitioning to another state. + 3. calculate_cost(vehicle, trajectory, predictions): + Imported from cost_functions.py, computes the cost for + a trajectory. + ''' + + # TODO: implement state transition function based on the cost + # associated with each transition. + + + possible_successor_states = self.successor_states() + costs = [] + for state in possible_successor_states: + print("possibles:", state) + trajectory = self.generate_trajectory(state, predictions) + print("trajectory state:", trajectory[1].state) + cost_for_state = calculate_cost(self, trajectory, predictions) + costs.append({'state': state, 'cost': cost_for_state}) + + good_state = None + min_cost = 9999999 + for c in costs: + if c['cost'] < min_cost: + min_cost = c['cost'] + good_state = c['state'] + + next_trajectory = self.generate_trajectory(good_state, predictions) + # Note that the return value is a trajectory, where a trajectory + # is a list of Vehicle objects with two elements. + return next_trajectory + + + def goal_distance_cost(vehicle, trajectory, predictions, data): + ''' + Cost increases based on distance of intended lane (for planning a + lane change) and final lane of a trajectory. + Cost of being out of goal lane also becomes larger as vehicle approaches + the goal distance. + ''' + intended_lane_distance = vehicle.goal_lane - data[0] + final_lane_distance = vehicle.goal_lane - data[1] + goal_distance = data[2] + + if goal_distance / vehicle.goal_s > 0.4: + cost = 0.0 + elif goal_distance > 0: + cost = 1 - exp((intended_lane_distance + final_lane_distance) / (goal_distance)) + else: + cost = 1 + print("goal_distance_cost:", cost) + return cost + + def inefficiency_cost(vehicle, trajectory, predictions, data): + ''' + Cost becomes higher for trajectories with intended lane and final lane + that have slower traffic. + ''' + intented_lane = data[0] + final_lane = data[1] + goal_distance = data[2] + + if goal_distance / vehicle.goal_s > 0.4: + cost = exp(-(intented_lane + final_lane)) + else: + cost = 1 - exp(-(intented_lane + final_lane)) + # print(cost) + return cost - 목표 차로와 차량의 속도에 따라 cost를 부여하여 현재 궤적을 구한다. From 36e60f1dc1ca9fa01175abfd9dd371f7892f029c Mon Sep 17 00:00:00 2001 From: SeungUkJeon <80089347+SeungUkJeon@users.noreply.github.com> Date: Fri, 7 May 2021 23:18:49 +0900 Subject: [PATCH 45/47] Add hybrid_a_star to HW_week7 --- code/week-7/hybrid_a_star/hybrid_astar.py | 72 ++++++++++++++++++++--- 1 file changed, 64 insertions(+), 8 deletions(-) diff --git a/code/week-7/hybrid_a_star/hybrid_astar.py b/code/week-7/hybrid_a_star/hybrid_astar.py index 6770259d..0883aa85 100644 --- a/code/week-7/hybrid_a_star/hybrid_astar.py +++ b/code/week-7/hybrid_a_star/hybrid_astar.py @@ -2,7 +2,7 @@ class HybridAStar: # Determine how many grid cells to have for theta-axis. - NUM_THETA_CELLS = 90 + NUM_THETA_CELLS = 180 # Define min, max, and resolution of steering angles omega_min = -35 @@ -26,20 +26,47 @@ def expand(self, current, goal): # The g value of a newly expanded cell increases by 1 from the # previously expanded cell. - g2 = g + 1 + g_2 = g + 1 next_states = [] # Consider a discrete selection of steering angles. - for delta_t in []: - pass + for delta_t in range(self.omega_min, self.omega_max + self.omega_step, self.omega_step): # TODO: implement the trajectory generation based on # a simple bicycle model. # Let theta2 be the vehicle's heading (in radian) # between 0 and 2 * PI. # Check validity and then add to the next_states list. + delta_t *= (np.pi / 180) + omega = self.speed / self.length * np.tan(delta_t) + theta2 = self.normalize(theta + omega) + x_2 = x + self.speed * np.cos(theta2) + y_2 = y + self.speed * np.sin(theta2) + if 0 <= self.idx(x_2) < self.dim[1] and 0 <= self.idx(y_2) < self.dim[2]: + f_2 = g_2 + self.heuristic(x_2, y_2, goal) + expanded_state = self.State(x_2, y_2, theta2, g_2, f_2) + next_states.append(expanded_state) return next_states + def normalize(self, theta): + while theta >= 2 * np.pi: + theta -= 2 * np.pi + while theta < 0: + theta += 2 * np.pi + if theta == 2 * np.pi: + theta -= 2 * np.pi + return theta + + def State(self, x, y, theta, g, f): + state = { + 'f': f, + 'g': g, + 'x': x, + 'y': y, + 't': theta, + } + return state + # Perform a breadth-first search based on the Hybrid A* algorithm. def search(self, grid, start, goal): # Initial heading of the vehicle is given in the @@ -63,11 +90,16 @@ def search(self, grid, start, goal): self.came_from[stack][self.idx(s['x'])][self.idx(s['y'])] = s total_closed = 1 opened = [s] + # Examine the open list, according to the order dictated by # the heuristic function. + cycle = 0 while len(opened) > 0: # TODO: implement prioritized breadth-first search # for the hybrid A* algorithm. + cycle += 1 + print(cycle) + opened.sort(key=lambda s : s['f'], reverse=True) curr = opened.pop() x, y = curr['x'], curr['y'] @@ -79,13 +111,28 @@ def search(self, grid, start, goal): # Compute reachable new states and process each of them. next_states = self.expand(curr, goal) for n in next_states: - pass + idx_x, idx_y = self.idx(n['x']), self.idx(n['y']) + stack = self.theta_to_stack_num(n['t']) + if grid[idx_x, idx_y] == 0: + dist_x, dist_y = abs(self.idx(x) - idx_x), abs(self.idx(y) - idx_y) + min_x, min_y = np.minimum(self.idx(x), idx_x), np.minimum(self.idx(y), idx_y) + possible = True + for d_x in range(dist_x + 1): + for d_y in range(dist_y + 1): + if grid[min_x + d_x, min_y + d_y] != 0: + possible = False + if possible and self.closed[stack][idx_x][idx_y] == 0: + self.closed[stack][idx_x][idx_y] = 1 + total_closed += 1 + self.came_from[stack][idx_x][idx_y] = curr + opened.append(n) + else: # We weren't able to find a valid path; this does not necessarily # mean there is no feasible trajectory to reach the goal. # In other words, the hybrid A* algorithm is not complete. found = False - + print(f"speed: {self.speed} NUM_THETA_CELLS: {self.NUM_THETA_CELLS}") return found, total_closed # Calculate the stack index of a state based on the vehicle's heading. @@ -94,7 +141,14 @@ def theta_to_stack_num(self, theta): # given theta represented in radian. Note that the calculation # should partition 360 degrees (2 * PI rad) into different # cells whose number is given by NUM_THETA_CELLS. - return 0 + interval = 2 * np.pi / self.dim[0] + stack_num = 0 + while theta > interval: + theta -= interval + stack_num += 1 + if stack_num == self.NUM_THETA_CELLS: + stack_num = 0 + return int(stack_num) # Calculate the index of the grid cell based on the vehicle's position. def idx(self, pos): @@ -104,7 +158,8 @@ def idx(self, pos): # Implement a heuristic function to be used in the hybrid A* algorithm. def heuristic(self, x, y, goal): # TODO: implement a heuristic function. - return 0 + cost_manhattan_dist = abs(x - goal[0]) + abs(y - goal[1]) + return cost_manhattan_dist # Reconstruct the path taken by the hybrid A* algorithm. def reconstruct_path(self, start, goal): @@ -121,4 +176,5 @@ def reconstruct_path(self, start, goal): # Reverse the path so that it begins at the starting state # and ends at the final state. path.reverse() + return path From beaf92fd6d7b83cd030771c33629bbfa9ce1c9bb Mon Sep 17 00:00:00 2001 From: SeungUkJeon <80089347+SeungUkJeon@users.noreply.github.com> Date: Fri, 7 May 2021 23:29:06 +0900 Subject: [PATCH 46/47] Add README to HW_week7 --- code/week-7/README.md | 148 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 148 insertions(+) diff --git a/code/week-7/README.md b/code/week-7/README.md index c0d43f3f..ebd87545 100644 --- a/code/week-7/README.md +++ b/code/week-7/README.md @@ -1,3 +1,151 @@ +## HW_week7 hybrid a* + +# Hybrid A* Algorithm +--- + + def expand(self, current, goal): + g = current['g'] + x, y, theta = current['x'], current['y'], current['t'] + + # The g value of a newly expanded cell increases by 1 from the + # previously expanded cell. + g_2 = g + 1 + next_states = [] + + # Consider a discrete selection of steering angles. + for delta_t in range(self.omega_min, self.omega_max + self.omega_step, self.omega_step): + # TODO: implement the trajectory generation based on + # a simple bicycle model. + # Let theta2 be the vehicle's heading (in radian) + # between 0 and 2 * PI. + # Check validity and then add to the next_states list. + delta_t *= (np.pi / 180) + omega = self.speed / self.length * np.tan(delta_t) + theta2 = self.normalize(theta + omega) + x_2 = x + self.speed * np.cos(theta2) + y_2 = y + self.speed * np.sin(theta2) + + if 0 <= self.idx(x_2) < self.dim[1] and 0 <= self.idx(y_2) < self.dim[2]: + f_2 = g_2 + self.heuristic(x_2, y_2, goal) + expanded_state = self.State(x_2, y_2, theta2, g_2, f_2) + next_states.append(expanded_state) + return next_states + + def search(self, grid, start, goal): + # Initial heading of the vehicle is given in the + # last component of the tuple start. + theta = start[-1] + # Determine the cell to contain the initial state, as well as + # the state itself. + stack = self.theta_to_stack_num(theta) + g = 0 + s = { + 'f': self.heuristic(start[0], start[1], goal), + 'g': g, + 'x': start[0], + 'y': start[1], + 't': theta, + } + self.final = s + # Close the initial cell and record the starting state for + # the sake of path reconstruction. + self.closed[stack][self.idx(s['x'])][self.idx(s['y'])] = 1 + self.came_from[stack][self.idx(s['x'])][self.idx(s['y'])] = s + total_closed = 1 + opened = [s] + + # Examine the open list, according to the order dictated by + # the heuristic function. + cycle = 0 + while len(opened) > 0: + # TODO: implement prioritized breadth-first search + # for the hybrid A* algorithm. + cycle += 1 + print(cycle) + + opened.sort(key=lambda s : s['f'], reverse=True) + curr = opened.pop() + x, y = curr['x'], curr['y'] + if (self.idx(x), self.idx(y)) == goal: + self.final = curr + found = True + break + + # Compute reachable new states and process each of them. + next_states = self.expand(curr, goal) + for n in next_states: + idx_x, idx_y = self.idx(n['x']), self.idx(n['y']) + stack = self.theta_to_stack_num(n['t']) + if grid[idx_x, idx_y] == 0: + dist_x, dist_y = abs(self.idx(x) - idx_x), abs(self.idx(y) - idx_y) + min_x, min_y = np.minimum(self.idx(x), idx_x), np.minimum(self.idx(y), idx_y) + possible = True + for d_x in range(dist_x + 1): + for d_y in range(dist_y + 1): + if grid[min_x + d_x, min_y + d_y] != 0: + possible = False + if possible and self.closed[stack][idx_x][idx_y] == 0: + self.closed[stack][idx_x][idx_y] = 1 + total_closed += 1 + self.came_from[stack][idx_x][idx_y] = curr + opened.append(n) + + else: + # We weren't able to find a valid path; this does not necessarily + # mean there is no feasible trajectory to reach the goal. + # In other words, the hybrid A* algorithm is not complete. + found = False + print(f"speed: {self.speed} NUM_THETA_CELLS: {self.NUM_THETA_CELLS}") + return found, total_closed + + def theta_to_stack_num(self, theta): + # TODO: implement a function that calculate the stack number + # given theta represented in radian. Note that the calculation + # should partition 360 degrees (2 * PI rad) into different + # cells whose number is given by NUM_THETA_CELLS. + interval = 2 * np.pi / self.dim[0] + stack_num = 0 + while theta > interval: + theta -= interval + stack_num += 1 + if stack_num == self.NUM_THETA_CELLS: + stack_num = 0 + return int(stack_num) + + def heuristic(self, x, y, goal): + # TODO: implement a heuristic function. + cost_manhattan_dist = abs(x - goal[0]) + abs(y - goal[1]) + return cost_manhattan_dist + +- 최적의 경로 탐색이 특징인 A* 알고리즘과 다르게, Hybrid A* 알고리즘은 completeness, optimality를 포기하고 drivable path 를 찾을 수 있다. + +- 자차의 조향각 (delta), 속도(speed)를 이용하여 자차가 이동할 위치를 구한다 -> "motion model" + +- 차량이 이동할 다음 state (x y 좌표, delta 조향각)를 구하고, 각도를 정규화하여 map (grid) 내에 존재하는, 이동 가능한 state 만 입력하도록 한다. -> "expand" + +- 시작점에서 목표점으로 도달할 때까지 반복하여 경로를 찾으며, map grid 내에 존재하는지와 장애물 & 중복 지점인지 확인하고 기록한다. -> "search" + +- 시작점에서 목표점까지의 cost 계산은 heuristic 알고리즘을 사용하였으며, heuristic cost 계산을 위해 Manhatten Distance 방법을 적용하였다. + +- 자차의 방향을 기준으로 입력 받은 조향각을 0~360 사이로 반환 -> "theta to stack num" + +- 자차의 motion state (theta, speed)에 따라 결과가 달라진다. + +- 1. speed = 1, num theta cells = 180 + + +![image](https://user-images.githubusercontent.com/80089347/117464664-da236600-af8b-11eb-8a1e-5d16ec38130a.png) + + +- 2. speed = 0.5, num theta cells = 360 + + +![image](https://user-images.githubusercontent.com/80089347/117464762-f1faea00-af8b-11eb-8f38-13046f4eb48f.png) + + + +--- + # Week 7 - Hybrid A* Algorithm & Trajectory Generation --- From ea5c56552a24bcf6aa6b841f9e170ddad6df1257 Mon Sep 17 00:00:00 2001 From: SeungUkJeon <80089347+SeungUkJeon@users.noreply.github.com> Date: Fri, 7 May 2021 23:30:22 +0900 Subject: [PATCH 47/47] Add README to HW_week7 --- code/week-7/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/week-7/README.md b/code/week-7/README.md index ebd87545..1eca31d4 100644 --- a/code/week-7/README.md +++ b/code/week-7/README.md @@ -137,7 +137,7 @@ ![image](https://user-images.githubusercontent.com/80089347/117464664-da236600-af8b-11eb-8a1e-5d16ec38130a.png) -- 2. speed = 0.5, num theta cells = 360 +- 2. speed = 1.5, num theta cells = 360 ![image](https://user-images.githubusercontent.com/80089347/117464762-f1faea00-af8b-11eb-8f38-13046f4eb48f.png)