""" Generates a quintic polynomial trajectory. Author: Daniel Ingram (daniel-s-ingram) """ import numpy as np class TrajectoryGenerator(): def __init__(self, start_pos, des_pos, T, start_vel=[0,0,0], des_vel=[0,0,0], start_acc=[0,0,0], des_acc=[0,0,0]): self.start_x = start_pos[0] self.start_y = start_pos[1] self.start_z = start_pos[2] self.des_x = des_pos[0] self.des_y = des_pos[1] self.des_z = des_pos[2] self.start_x_vel = start_vel[0] self.start_y_vel = start_vel[1] self.start_z_vel = start_vel[2] self.des_x_vel = des_vel[0] self.des_y_vel = des_vel[1] self.des_z_vel = des_vel[2] self.start_x_acc = start_acc[0] self.start_y_acc = start_acc[1] self.start_z_acc = start_acc[2] self.des_x_acc = des_acc[0] self.des_y_acc = des_acc[1] self.des_z_acc = des_acc[2] self.T = T def solve(self): A = np.array( [[0, 0, 0, 0, 0, 1], [self.T**5, self.T**4, self.T**3, self.T**2, self.T, 1], [0, 0, 0, 0, 1, 0], [5*self.T**4, 4*self.T**3, 3*self.T**2, 2*self.T, 1, 0], [0, 0, 0, 2, 0, 0], [20*self.T**3, 12*self.T**2, 6*self.T, 2, 0, 0] ]) b_x = np.array( [[self.start_x], [self.des_x], [self.start_x_vel], [self.des_x_vel], [self.start_x_acc], [self.des_x_acc] ]) b_y = np.array( [[self.start_y], [self.des_y], [self.start_y_vel], [self.des_y_vel], [self.start_y_acc], [self.des_y_acc] ]) b_z = np.array( [[self.start_z], [self.des_z], [self.start_z_vel], [self.des_z_vel], [self.start_z_acc], [self.des_z_acc] ]) self.x_c = np.linalg.solve(A, b_x) self.y_c = np.linalg.solve(A, b_y) self.z_c = np.linalg.solve(A, b_z)