一种路径优化和速度优化算法实现(仿照百度Apollo方案),只提供代码,有相关的readme文...
一种路径优化和速度优化算法实现仿照百度Apollo方案只提供代码有相关的readme文件。 自动驾驶 路径优化速度优化pnc。 的代码最近在折腾自动驾驶的路径规划模块发现实际落地时既要考虑路径平滑度又要兼顾动态调整能力。今天咱们就聊聊怎么用Python快速撸个简化版的路径速度优化方案参考了Apollo的设计思路代码可以直接跑起来试试。路径优化咱们上Hybrid A*这玩意在停车场场景特别能打。先看路径搜索的核心实现class HybridAStar: def __init__(self, grid, resolution0.1): self.grid np.flipud(grid) # 地图翻转匹配坐标系 self.resolution resolution self.max_steer np.deg2rad(40) # 最大转向角 def heuristic(self, node, goal): dx goal[0] - node.x dy goal[1] - node.y return np.sqrt(dx**2 dy**2) * 0.8 abs(node.yaw - goal[2]) * 0.2 def search(self, start, goal): open_heap [] heapq.heappush(open_heap, (0, start)) came_from {} cost_so_far {} while open_heap: current heapq.heappop(open_heap)[1] if self.reach_goal(current, goal): return self.reconstruct_path(came_from, current) for next_node in self.get_successors(current): new_cost cost_so_far.get(current, 0) self.move_cost(current, next_node) if next_node not in cost_so_far or new_cost cost_so_far[next_node]: cost_so_far[next_node] new_cost priority new_cost self.heuristic(next_node, goal) heapq.heappush(open_heap, (priority, next_node)) came_from[next_node] current return None这里有几个设计亮点混合启发函数里加了转向角差异的惩罚项实测能让路径更顺滑扩展节点时用了车辆运动学模型生成后继节点代码里省略了具体实现状态检查里包含碰撞检测和转向角约束跑出来的原始路径可能像蚯蚓爬过似的得做个后处理优化。上二次规划def path_smoothing(raw_path): w_smooth 0.3 # 平滑权重 w_obstacle 0.5 # 障碍物距离权重 w_length 0.2 # 路径长度权重 # 构建QP问题 P lil_matrix((len(raw_path)*3, len(raw_path)*3)) q np.zeros(len(raw_path)*3) # 平滑项约束 for i in range(1, len(raw_path)-1): P[i*3, (i-1)*3] w_smooth P[i*3, i*3] -2*w_smooth P[i*3, (i1)*3] w_smooth # 求解 result solve_qp(P.tocsr(), q) return result.reshape(-1, 3)速度优化这块更刺激要考虑前车距离、曲率限速、加速度限制。截取速度规划的核心逻辑def generate_speed_profile(path, max_accel2.0, max_decel3.0): speed_limits [] # 根据曲率计算限速 for i in range(1, len(path)-1): dx1 path[i].x - path[i-1].x dy1 path[i].y - path[i-1].y dx2 path[i1].x - path[i].x dy2 path[i1].y - path[i].y curvature abs(dx1*dy2 - dx2*dy1) / ((dx1**2 dy1**2) * (dx2**2 dy2**2))**0.5 speed_limits.append(min(25.0, 5.0 / (curvature 1e-5))) # 前向积分 forward [0.0] for i in range(1, len(speed_limits)): v math.sqrt(forward[i-1]**2 2 * max_accel * 0.1) forward.append(min(v, speed_limits[i])) # 后向积分 backward [forward[-1]] for i in reversed(range(len(speed_limits)-1)): v math.sqrt(backward[0]**2 2 * max_decel * 0.1) backward.insert(0, min(v, speed_limits[i])) return [min(f,b) for f,b in zip(forward, backward)]这里有个骚操作先正向积分保证加速不超过上限再反向积分确保减速足够快最后取两者最小值作为最终速度这样既满足物理限制又保证安全。一种路径优化和速度优化算法实现仿照百度Apollo方案只提供代码有相关的readme文件。 自动驾驶 路径优化速度优化pnc。 的代码实际跑起来要注意路径优化的网格分辨率别小于0.2m否则计算量爆炸曲率计算用三点法足够应付大部分场景QP求解建议用OSQP这类带稀疏矩阵处理的库动态障碍物需要加时间维度可以在速度剖面里预留安全余量代码仓库里自带了停车场场景的测试用例运行前记得装好numpy、scipy、matplotlib这几个依赖。直接python main.py能看到规划效果蓝线是原始路径绿线是优化后的红色区域是障碍物。这种方案离量产还有距离比如缺少语义层理解、没有考虑交通规则但作为算法原型验证足够用了。下次可以试试加入Lattice Planner做多轨迹择优规划效果会更丝滑。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2451945.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!