From 1df976534160d29bd85dc02eda4d4cf8559f7dcf Mon Sep 17 00:00:00 2001 From: Atsushi Sakai Date: Tue, 18 Jul 2017 15:14:05 -0700 Subject: [PATCH] add some simulation results. --- PathPlanning/StateLatticePlanner/Figure_2.png | Bin 0 -> 59542 bytes .../state_lattice_planner.py | 105 ++++++++++-------- README.md | 15 +++ 3 files changed, 71 insertions(+), 49 deletions(-) create mode 100644 PathPlanning/StateLatticePlanner/Figure_2.png diff --git a/PathPlanning/StateLatticePlanner/Figure_2.png b/PathPlanning/StateLatticePlanner/Figure_2.png new file mode 100644 index 0000000000000000000000000000000000000000..6e9b4758cd49c3d9f0780c6de5ffca07e96ef4de GIT binary patch literal 59542 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∋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 literal 0 HcmV?d00001 diff --git a/PathPlanning/StateLatticePlanner/state_lattice_planner.py b/PathPlanning/StateLatticePlanner/state_lattice_planner.py index 88f60cff..fc334c37 100644 --- a/PathPlanning/StateLatticePlanner/state_lattice_planner.py +++ b/PathPlanning/StateLatticePlanner/state_lattice_planner.py @@ -1,31 +1,14 @@ """ -State lattice planner +State lattice planner with model predictive trajectory generator author: Atsushi Sakai """ from matplotlib import pyplot as plt import numpy as np import math +import pandas as pd import model_predictive_trajectory_generator as planner import motion_model -import pandas as pd - - -def calc_states_list(): - maxyaw = math.radians(-30.0) - - x = np.arange(1.0, 30.0, 5.0) - y = np.arange(0.0, 20.0, 2.0) - yaw = np.arange(-maxyaw, maxyaw, maxyaw) - - states = [] - for iyaw in yaw: - for iy in y: - for ix in x: - states.append([ix, iy, iyaw]) - # print(len(states)) - - return states def search_nearest_one_from_lookuptable(tx, ty, tyaw, lookuptable): @@ -42,19 +25,16 @@ def search_nearest_one_from_lookuptable(tx, ty, tyaw, lookuptable): minid = i mind = d - return lookuptable[minid] def get_lookup_table(): - data = pd.read_csv("lookuptable.csv") return np.array(data) def generate_path(states, k0): - # x, y, yaw, s, km, kf lookup_table = get_lookup_table() result = [] @@ -78,8 +58,36 @@ def generate_path(states, k0): return result +def calc_uniform_states(np, nh, d, a_min, a_max, p_min, p_max): + """ -def calc_uniform_states(): + calc uniform state + + :param np: number of position sampling + :param nh: number of heading sampleing + :param d: distance of terminal state + :param a_min: position sampling min angle + :param a_max: position sampling max angle + :param p_min: heading sampling min angle + :param p_max: heading sampling max angle + :return: + """ + states = [] + + for i in range(np): + a = a_min + (a_max - a_min) * i / (np - 1) + print(a) + for j in range(nh): + xf = d * math.cos(a) + yf = d * math.sin(a) + yawf = p_min + (p_max - p_min) * j / (nh - 1) + a + states.append([xf, yf, yawf]) + + return states + + +def uniform_terminal_state_sampling1(): + k0 = 0.0 np = 5 nh = 3 d = 20 @@ -87,38 +95,36 @@ def calc_uniform_states(): a_max = math.radians(45.0) p_min = - math.radians(45.0) p_max = math.radians(45.0) - x0 = 0.0 - y0 = 0.0 - yaw0 = 0.0 - - states = [] - - for i in range(np): - for j in range(nh): - n = i * nh + j - a = a_min + (a_max - a_min) * i / (np - 1) - xf = x0 + d * math.cos(a + yaw0) - yf = y0 + d * math.sin(a + yaw0) - yawf = yaw0+p_min+(p_max-p_min)*j/(nh-1)+a - states.append([xf, yf, yawf]) - - # print(states) - # print(len(states)) - - return states - - -def uniform_terminal_state_sampling(): - k0 = 0.0 - states = calc_uniform_states() + states = calc_uniform_states(np, nh, d, a_min, a_max, p_min, p_max) result = generate_path(states, k0) for table in result: xc, yc, yawc = motion_model.generate_trajectory( table[3], table[4], table[5], k0) plt.plot(xc, yc, "-r") + + plt.grid(True) + plt.axis("equal") + plt.show() + + print("Done") + + +def uniform_terminal_state_sampling2(): + k0 = 0.1 + np = 6 + nh = 3 + d = 20 + a_min = - math.radians(-10.0) + a_max = math.radians(45.0) + p_min = - math.radians(20.0) + p_max = math.radians(20.0) + states = calc_uniform_states(np, nh, d, a_min, a_max, p_min, p_max) + result = generate_path(states, k0) + + for table in result: xc, yc, yawc = motion_model.generate_trajectory( - table[3], -table[4], -table[5], k0) + table[3], table[4], table[5], k0) plt.plot(xc, yc, "-r") plt.grid(True) @@ -130,7 +136,8 @@ def uniform_terminal_state_sampling(): def main(): - uniform_terminal_state_sampling() + # uniform_terminal_state_sampling1() + uniform_terminal_state_sampling2() if __name__ == '__main__': diff --git a/README.md b/README.md index a9c2aa79..7e9272b8 100644 --- a/README.md +++ b/README.md @@ -31,6 +31,21 @@ Lookup table generation sample: see: - [Optimal rough terrain trajectory generation for wheeled mobile robots](http://journals.sagepub.com/doi/pdf/10.1177/0278364906075328) +# State Lattice Planning + +This script is a path planning code with state lattice planning. + +This code uses the model predictive trajectory generator to solve boundary problem. + + +Uniform polar sampling results: + +![PythonRobotics/figure_1.png at master · AtsushiSakai/PythonRobotics](https://github.com/AtsushiSakai/PythonRobotics/blob/master/PathPlanning/StateLatticePlanner/Figure_1.png) + +![PythonRobotics/figure_1.png at master · AtsushiSakai/PythonRobotics](https://github.com/AtsushiSakai/PythonRobotics/blob/master/PathPlanning/StateLatticePlanner/Figure_2.png) + + + ## RRT Rapidly Randamized Tree Path planning sample.