自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(30)
  • 资源 (1)
  • 收藏
  • 关注

原创 Apollo10.0规划控制算法详解目录

已购买本专栏的用户可以获得答疑权利。

2026-04-10 13:10:59 69

原创 planning模块(17)-速度二次规划优化算法(piecewise jerk speed optimizer)

速度二次规划优化算法主要是执行PIECEWISE_JERK_SPEED task,然后PiecewiseJerkSpeedOptimizer::Process会被调用创建三维数组存储车辆的初始运动状态:位置,速度,加速度倒车状态处理核心思想是将倒车映射为“正向运动” ,从而复用正向优化算法intdelta_t:时间步长固定为 0.1 秒 ,即每 0.1 秒取一个离散时间点total_length:路径总长度从st_graph_data获取,表示本次规划路径的总长(米)

2026-04-10 12:58:54 52

原创 planning模块(16) task SPEED_DECIDER

按照task的执行顺序,SPEED_HEURISTIC_OPTIMIZER task执行完会接着执行SPEED_DECIDER task。

2026-04-08 12:21:15 37

原创 planning模块(15)-速度动态规划优化算法(path time heuristic optimizer)

本篇将介绍速度动态规划优化算法-path time heuristic optimizer(路径时间启发式优化器)参考task的执行流程path_data:是通过AssessPath函数获取到做过有效性检查的路径点数据init_point:规划起点是上一篇路径点数据全部转化为笛卡尔坐标系下的数据的路径数据。

2026-03-24 16:25:56 306

原创 planning模块(14) task SPEED_BOUNDS_PRIORI_DECIDER

task PATH_DECIDER执行之后按照顺序会执行task SPEED_BOUNDS_PRIORI_DECIDER初始化流程可以回看一下初始化部分LoadConfig会加载config_path_路径下指定的配置,如果不存在就使用默认路径下的配置文件。

2026-03-20 23:33:04 96

原创 planning模块(13) task PATH_DECIDER

modules/planning/scenarios/lane_follow/conf/pipeline.pb.txt 中的task会顺序执行,不过本专栏只介绍与路径规划和速度规划相关的task本篇主要介绍task PATH_DECIDERreference_line_info:当前参考线信息path_data:路径规划出来的路径path_decision:路径决策,在中通过AssessPath进行了初始化,并设置了默认值获取以自车中心为中心的bounding box,构建过程可参考是通过在。

2026-02-08 22:40:07 89

原创 planning模块(12)-路径规划后构建速度规划所用的数据

上一篇已经详细介绍过piecewise jerk path optimizer算法优化后,得到自车沿参考线方向上的优化后的ll′l′′。

2026-01-24 23:36:14 112

原创 planning模块(11)-路径规划优化算法(piecewise jerk path optimizer)

本篇将介绍路径规划piecewise jerk path optimizer(分段加加速度路径优化算法)上一篇已经介绍完了DecidePathBounds函数.本篇将介绍OptimizePath函数。

2026-01-17 18:08:01 130

原创 planning模块(10)-路径规划

上面函数主要是将笛卡尔坐标系下的规划起点,转换为frenet坐标系下的坐标。

2026-01-05 22:34:00 111

原创 planning模块-基于静态障碍物进一步缩放路径边界

indexed_obstacles就是在介绍的.通过添加的障碍物id和障碍物.obs->PerceptionSLBoundary()也是在介绍的ReferenceLine::GetSLBoundary函数sl_bound:获取的是障碍物的AABB矩形框(红框)sl_bound.boundary_point_size():是边界点如(p0, p1, p2, p3, mid1)

2026-01-05 22:33:01 135

原创 planning模块-动态障碍物碰撞检测

上一篇介绍了静态障碍物碰撞检测的逻辑,接下来介绍动态障碍物的碰撞检测逻辑,动态障碍物需要考虑动态障碍物的预测轨迹.

2025-12-27 23:31:11 757

原创 planning模块-静态障碍物碰撞检测

需要解释一下,从上面配置中获取到的front_edge_to_center/back_edge_to_center/left_edge_to_center/right_edge_to_center的参数是在自车坐标系下的,自车坐标系是以后轴中心为原点,也就是下图绿色原点,y轴左正右负,x轴上正下负.如果是因为上面逻辑的话,我的疑问是,因为起点被对称处理后,要么在橙色,要么在黄色,当限定在黄色时,说明起点的gx1 < gy1这个时候无论start和end两个点的x,y都对掉了.

2025-12-24 00:11:34 537

原创 planning模块-路径边界 障碍物

s_lateral_decision_safety_sorter_:是决策安全等级,数值越大决策越强 / 越保守 / 越安全,这里apollo认为横向决策只用到了两个一个是nudge,一个是ignore.nudge就是如果自车前方有静止障碍物,如果条件满足,自车会稍微稍一下然后绕过障碍物,ignore就相当于认为前方静止障碍物不影响通行,就当它不存在.在Frenet坐标系下,沿着车辆形势的方向为s方向,垂直于s的方向为l方向,并且l方向是车辆左侧为正值,车辆右侧为负值.

2025-12-21 14:39:38 508

原创 planning模块-笛卡尔坐标转Frenet坐标

上一篇介绍到了ToFrenetFrame函数,接下继续介绍笛卡尔坐标转换为frenet坐标下的流程.warm_start_s为默认参数-1heading:规划起点的方向角xy_point:规划起点笛卡尔坐标系的坐标数据s/l:基于map_path_获取到规划起点投影点的横纵向距离map_path_:可以理解为未平滑前的参考线(这里称为粗糙参考线)

2025-12-18 22:05:28 401

原创 planning模块(9)-路径规划(scenario/stage/task)

前面已经介绍过了参考线的平滑算法,接下来继续介绍路径规划算法.prediction_obstacles:感知结果chassis:底盘数据localization_estimate:定位数据local_view_:用来集中保存一次规划周期中Planning所“看到”的所有输入数据adc_trajectory_pb:planning最终输出的轨迹:时钟同步后,系统启动以来流逝了多少秒:拼接轨迹:planning最终输出的轨迹。

2025-12-16 18:16:00 454

原创 planning模块(8)-参考线的更新

上一篇已经介绍了SmoothRouteSegment函数的内容,如果存在换道的情况会生成两条平滑参考线,一条是自车所在方向,一条是所要切换的车道方向,平滑前会分别调用SmoothRouteSegment函数进行参考线平滑.如果是新的算路指令,当调用SmoothRouteSegment平滑成功后会进入下面逻辑下面就来介绍这个逻辑的作用是在获取当前自车位置,在平滑后参考线上横纵距离。

2025-12-12 20:32:52 593

原创 planning模块(7)-参考线的平滑

上一篇已经介绍了使用二次规划进行参考线平滑的方法.并且在上一篇中还提到了CSC矩阵,感兴趣的可以读一下接下来,继续介绍获取到平滑的参考点后的流程所有平滑后的参考点都存在了smoothed_point2d变量中。

2025-12-11 18:39:26 276

原创 CSC(Compressed Sparse Column)矩阵

indptr 告诉你:某一列的元素从 data 的哪个 index 开始。因为稀疏矩阵大多数元素都是 0,用普通二维数组存太浪费。用三个一维数组表示一个稀疏矩阵(很多 0 的矩阵)OSQP 强制要求 P 与 A 都用 CSC 格式。它是个二维矩阵,只是存储方式变成了 3 个一维数组。CSC:压缩列存储格式(稀疏矩阵的一种存储方式)每一列非零元素在 A_data 的起始位置的索引。indices 告诉你这些值来自哪一行。所以不用存 0,省空间,也加速计算。data 放所有非零的值。按列把非零元素存在一起。

2025-12-09 17:46:59 360

原创 planning模块(6)-参考线的平滑(二次规划)

上一篇已经介绍了采样点生成锚点数据的过程,并且将所有采样点生成的锚点数据设置到了平滑器中.接下来继续介绍使用二次规划平滑参考线的算法过程.从锚点数据中提取坐标存入raw_point2d,提取横向边界存入anchorpoints_lateralbound,将起点和终点的横向边界设置为0,防止车在起点和终点位置偏离车道中心线.

2025-12-09 00:09:36 787

原创 planning模块(5)-参考线的平滑

上一篇已经介绍了创建path的过程。

2025-12-04 22:13:07 524

原创 planning模块(4)-参考线的平滑

上一篇我们已经介绍了基于全局路线参考线的生成过程,本篇将介绍的是参考线的平滑,主要是使用二次规划进行平滑.通过CreateRouteSegments函数获取到的segments中,包含两条扩展后的参考线,第一条是自车所在当前车道前后的参考线,第二条是自车在换道边投影点前后的参考线.

2025-12-01 23:38:07 424

原创 planning模块(3)-参考线的生成

接着上一篇我们继续解释GetRouteSegments函数,上一篇已经解释了CanDriveFrom函数,它是在判断从GetNeighborPassages函数获取到的drive_passages,是否可以从当前自车位置开到drive_passages中所要切换的车道上.

2025-11-29 21:00:47 537

原创 planning模块(2)-参考线的生成

接下来继续分析GetWaypointIndex函数。

2025-11-27 13:12:23 388

原创 planning模块(1)-参考线的生成

上一篇文章已经解释了,全局路线计算的流程,并且也介绍了planning接收的逻辑.从这篇开始,将介绍参考线的生成,并且从本篇开始,尽量忽略流程相关代码解析,只专注算法部分,目的就是让初学者快速理解轨迹规划的基本流程.

2025-11-25 21:03:24 496

原创 routing模块(5)-全局路线的生成

Astar算法我们在上一篇已经介绍了,接下来就是全局路线的生成最后一部分了.最后一部分就是GeneratePassageRegion函数。

2025-11-21 18:50:08 565

原创 routing模块(4)-全局路线的生成

现在子图和原始拓扑图已经进行关联,相当于把子图通过edge结构关联到了原始的拓扑图中。

2025-11-20 10:51:29 433

原创 routing模块(3)-全局路线的生成

这里解释一下:虽然pb_node_.left_out()已经是按照boundary的区间比例转换为lane的可换道区间,但是要注意转换的时候是按照lane的长度,而不是按照node的长度,而node的长度有可能不是整条lane,比如你设置的终点,设置在了lane的中间某一点,那node的长度就不是lane的长度,所以这里要保证可换道区间在节点范围内。pb_node_.left_out():是通过AddOutBoundary函数获取到的,表示的是可换道的纵向范围。

2025-11-16 15:20:27 642

原创 routing模块(2)-全局路线的生成

在上篇文章中已经介绍了起点,途径点,终点构造成LaneWaypoint数据格式的过程,并且它们是存储在apollo::routing::RoutingRequest数据类型中的waypoint中第一篇也是Convert函数的处理过程接下来我们继续讲Convert函数之后的部分在Process函数中FillLaneInfoIfMissing函数。

2025-11-14 00:16:20 517

原创 Apollo10.0制作高精地图文件

如果使用的是map_gen_single_lane,那么生成的是一条车道,如果使用的是map_gen_two_lanes_right_ext则生成的是两条车道。假设记录下来的包的文件名为test.record.00000.202508119783211。此外,编译tools之后上面的工具都默认在路径/opt/apollo/neo/bin下。如果没有杂乱或缺点的位置,就可以使用了。

2025-11-10 23:33:36 528

原创 routing模块(1)-全局路线的生成

首先,创建lane_follow_command的client,然后中间省略部分是在获取上面介绍的LaneFollowCommand类型的数据,一般传入的就是目的地坐标,有时也会传入经由地坐标,然后通过SendRequest把请求算路的消息发出去.通过最近的那段segment的起点指向自车位置的向量,与最近这段segment的单位向量的叉积(向量积),就可以求出自车位置点到线段segment的有向距离,如果为正,表示自车在车道左侧,负表示自车在车道右侧。

2025-11-09 23:06:31 650 5

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除