该仿真主要应用于路径规划和轨迹跟踪的研究。 主要有五个文件内部包含3个算法两个仿真1.A星算法自动生成避障的最短路径2.两轮小车及其四轮小车的运动学建模3.纯路径跟踪算法包括预锚点的选择算法。 每个算法都可以独立运行且五个文件可以联合仿真。 即利用A星算法生成环境路径让小车自动跟随路径实现整体意义上的自动驾驶!A星算法的暴力美学体现在它的优先级队列上。看这段核心代码class Node: def __lt__(self, other): return (self.g self.h) (other.g other.h) # 优先队列比较规则 open_list PriorityQueue() current_node open_list.get() for neighbor in get_neighbors(current): if neighbor in closed_set: continue new_g current.g distance(current, neighbor) if new_g neighbor.g: neighbor.parent current neighbor.g new_g neighbor.h heuristic(neighbor, goal) if neighbor not in open_list: open_list.put(neighbor)这里有个小技巧启发函数h用曼哈顿距离还是欧氏距离实测在栅格地图中曼哈顿距离计算速度提升30%但路径可能不是最优。要性能还是要精度得看具体场景。两轮小车的运动学模型比想象中带感。注意这个微分方程% 两轮差速驱动模型 function dxdt kinematics(t, x, u) v u(1); w u(2); dxdt [v*cos(x(3)); v*sin(x(3)); w]; end仿真时步长别设太大上次用0.1秒步长导致轨迹发散改成0.02秒后跟踪误差直接减半。四轮模型反而简单直接借用自行车模型加个转向延迟就行。该仿真主要应用于路径规划和轨迹跟踪的研究。 主要有五个文件内部包含3个算法两个仿真1.A星算法自动生成避障的最短路径2.两轮小车及其四轮小车的运动学建模3.纯路径跟踪算法包括预锚点的选择算法。 每个算法都可以独立运行且五个文件可以联合仿真。 即利用A星算法生成环境路径让小车自动跟随路径实现整体意义上的自动驾驶!预瞄点算法是路径跟踪的灵魂。这个距离计算公式实测有效def find_lookahead_point(path, current_pos, L): nearest_idx 0 min_dist float(inf) for i in range(len(path)): dx path[i].x - current_pos.x dy path[i].y - current_pos.y dist dx**2 dy**2 if dist min_dist: min_dist dist nearest_idx i target_idx nearest_idx while target_idx len(path)-1 and distance(current_pos, path[target_idx]) L: target_idx 1 return path[target_idx]循环里藏了个坑当路径点密集时预瞄距离L可能超过剩余路径长度。记得加个终点强制锁定否则小车会在终点附近鬼畜绕圈。联合仿真时发现个诡异现象A星生成的路径在拐角处会让小车原地打转。后来发现是路径点间距不匹配控制周期加了路径平滑算法后问题解决。代码里加个三次样条插值瞬间丝滑spline_path spline(original_path(:,1), original_path(:,2), 3);最后上主循环代码骨架path a_star(map, start, goal) # 生成全局路径 traj [] # 记录实际轨迹 while not reach_goal(): current_pose get_car_position() lookahead_point get_lookahead(path, current_pose) steering pure_pursuit_control(current_pose, lookahead_point) send_control(steering, speed) traj.append(current_pose) plot(path, traj) # 灵魂绘制实测四轮车比两轮车容易跟踪路径因为转向半径受限反而更稳定。不过两轮车的漂移过弯确实很帅虽然不实用。整个项目最爽的时刻看着小车丝滑绕过所有障碍到达终点那一刻感觉自己就是秋名山车神
直接开搞路径规划和轨迹跟踪仿真!这个项目整合了A星算法、运动学建模和路径跟踪,咱们先拆解核心模块。别看五个文件有点唬人,其实结构相当清晰
该仿真主要应用于路径规划和轨迹跟踪的研究。 主要有五个文件内部包含3个算法两个仿真1.A星算法自动生成避障的最短路径2.两轮小车及其四轮小车的运动学建模3.纯路径跟踪算法包括预锚点的选择算法。 每个算法都可以独立运行且五个文件可以联合仿真。 即利用A星算法生成环境路径让小车自动跟随路径实现整体意义上的自动驾驶!A星算法的暴力美学体现在它的优先级队列上。看这段核心代码class Node: def __lt__(self, other): return (self.g self.h) (other.g other.h) # 优先队列比较规则 open_list PriorityQueue() current_node open_list.get() for neighbor in get_neighbors(current): if neighbor in closed_set: continue new_g current.g distance(current, neighbor) if new_g neighbor.g: neighbor.parent current neighbor.g new_g neighbor.h heuristic(neighbor, goal) if neighbor not in open_list: open_list.put(neighbor)这里有个小技巧启发函数h用曼哈顿距离还是欧氏距离实测在栅格地图中曼哈顿距离计算速度提升30%但路径可能不是最优。要性能还是要精度得看具体场景。两轮小车的运动学模型比想象中带感。注意这个微分方程% 两轮差速驱动模型 function dxdt kinematics(t, x, u) v u(1); w u(2); dxdt [v*cos(x(3)); v*sin(x(3)); w]; end仿真时步长别设太大上次用0.1秒步长导致轨迹发散改成0.02秒后跟踪误差直接减半。四轮模型反而简单直接借用自行车模型加个转向延迟就行。该仿真主要应用于路径规划和轨迹跟踪的研究。 主要有五个文件内部包含3个算法两个仿真1.A星算法自动生成避障的最短路径2.两轮小车及其四轮小车的运动学建模3.纯路径跟踪算法包括预锚点的选择算法。 每个算法都可以独立运行且五个文件可以联合仿真。 即利用A星算法生成环境路径让小车自动跟随路径实现整体意义上的自动驾驶!预瞄点算法是路径跟踪的灵魂。这个距离计算公式实测有效def find_lookahead_point(path, current_pos, L): nearest_idx 0 min_dist float(inf) for i in range(len(path)): dx path[i].x - current_pos.x dy path[i].y - current_pos.y dist dx**2 dy**2 if dist min_dist: min_dist dist nearest_idx i target_idx nearest_idx while target_idx len(path)-1 and distance(current_pos, path[target_idx]) L: target_idx 1 return path[target_idx]循环里藏了个坑当路径点密集时预瞄距离L可能超过剩余路径长度。记得加个终点强制锁定否则小车会在终点附近鬼畜绕圈。联合仿真时发现个诡异现象A星生成的路径在拐角处会让小车原地打转。后来发现是路径点间距不匹配控制周期加了路径平滑算法后问题解决。代码里加个三次样条插值瞬间丝滑spline_path spline(original_path(:,1), original_path(:,2), 3);最后上主循环代码骨架path a_star(map, start, goal) # 生成全局路径 traj [] # 记录实际轨迹 while not reach_goal(): current_pose get_car_position() lookahead_point get_lookahead(path, current_pose) steering pure_pursuit_control(current_pose, lookahead_point) send_control(steering, speed) traj.append(current_pose) plot(path, traj) # 灵魂绘制实测四轮车比两轮车容易跟踪路径因为转向半径受限反而更稳定。不过两轮车的漂移过弯确实很帅虽然不实用。整个项目最爽的时刻看着小车丝滑绕过所有障碍到达终点那一刻感觉自己就是秋名山车神