百度Apollo中轨迹的表示方式

这篇具有很好参考价值的文章主要介绍了百度Apollo中轨迹的表示方式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

    本文只是对于初学者的一种直观普及,以及对于规划路径可视化的另外一种体会。对于做规划控制的工程师来说太简单。只是本人初学者,在学习控制模块时候对于模块输入参数有所迷惑。所以记录一下。

    首先明确轨迹表达的方式,以及对于控制模块输入的轨迹表达方式:

message ADCTrajectory
{
    .......
    repeated apollo.common.TrajectoryPoint trajectory_point;
    repeated apollo.common.PathPoint path_point;
    .......
}

message TrajectoryPoint
{
    // path point
    optional PathPoint path_point = 1;
    // linear velocity
    optional double v = 2;  // in [m/s]
    // linear acceleration
    optional double a = 3;
    // relative time from beginning of the trajectory
    optional double relative_time = 4;
    // longitudinal jerk
    optional double da = 5;
    // The angle between vehicle front wheel and vehicle longitudinal axis
    optional double steer = 6;
}
message PathPoint
{
    // coordinates
    optional double x = 1;
    optional double y = 2;
    optional double z = 3;

    // direction on the x-y plane
    optional double theta = 4;
    // curvature on the x-y planning
    optional double kappa = 5;
    // accumulated distance from beginning of the path
    optional double s = 6;
    // derivative of kappa w.r.t s.
    optional double dkappa = 7;
    // derivative of derivative of kappa w.r.t s.
    optional double ddkappa = 8;
    // The lane ID where the path point is on
    optional string lane_id = 9;
    // derivative of x and y w.r.t parametric parameter t in CosThetareferenceline
    optional double x_derivative = 10;
    optional double y_derivative = 11;
}

    可以看到ADCTrajectory表示一次规划的结果,其中的repeated字段表示数组。有多个轨迹点和路径点组成一段规划的路径。

1,这里有个理解的误区:ADCTrajectory也可以用来表示参考线,也可以用来表示EGO的实际运行路径。

2,TrajectoryPoint中既有Frenet坐标系下的参数:方位角以及曲率也有实际的笛卡尔坐标系下的位置。以上所有信息都来自上游的规划模块。

3,这些轨迹点中包含该点的速度加速度以及在该点的距离信息。这个距离后面会分析。

    有了以上信息后,发现控制模块的很多参数是已知的,比如速度,距离等信息。所有后端的控制模块的逻辑只需要更具这些轨迹中的要求去执行。至于规划的路径中各个点的速度,距离,方位角信息就是规划模块计算处理的结果。在做模拟测试的时候可以模拟路径,按照设计来规划,同时预期的结果可以通过数值分析看看是不是正确。

    分析一下control中的

    apollo_baidu-master/modules/control/testdata/lateral_controller_test/1_planning.pb.txt文件。

    这个文件是测试文件,记录了一段完整的规划路径。这个文件是txt文件格式,可以通过protobuf的API解析。【Apollo中的proto消息太多,又相互include。所以编译的时候发现proto转换后的.cc文件太多,编译太费事。其实可以学习百度使用Bazel的编译方式,每个最小化模块都编译为动态库。只要做增量编译就行,缩短了后续编译的时间。

    首先解析的X,Y的笛卡尔坐标:

百度Apollo中轨迹的表示方式,算法

     发现是一条近似的直线,也验证了这条规划轨迹是做纵向控制的。这个图的坐标单位没有统一,所以无法从图片中获取斜率。斜率的计算比较粗略。应为认为是直线,在线上任取三个点,三个点分别和前一个点(path_point)做delt(x)和delt(y),随后求出delt(y)/delt(x)。计算出斜率:3.681。

    其次看一下速度:

百度Apollo中轨迹的表示方式,算法

    速度从0时刻到424时刻也为线性增加,后面趋于平稳。可以后面的加速度做一下结合分析。

    加速度:

百度Apollo中轨迹的表示方式,算法

     V= a(t)的速度公式可以看出:随着时间的增加,只要a>0,么V是增加的。在0-104区间 加速度减小,128-250区间加速度增加。粗略看下速度的变化图:速度变化变得平缓。从区间 410开始到结束,加速度又波动,但是基本在没有加速的数值间震荡。通过速度图我们看到速度区域平缓,没有明显增加。

    这里有两个问题:

    (1)加速度抖动会不会影响直接的控车效果,车辆会不会出现抖动。

    (2)加速度数值和V的计算关系不能完全安V = a(t)来获取。可能要系数用来矫正,或者采样的精度不够。

    最后看下距离图:

百度Apollo中轨迹的表示方式,算法

    这应该就是S-T,距离的累加呈线性增加关系。表示车辆在坐标系的运动没有横向的的分量。做的直线运动。随着时间的增加,距离在增加。

     最后讲一下Frenet坐标系的理解。公式不推了网上很多。问题在为什么用这个笛卡尔和Frenet转换的公式,以及什么地方使用。

    SL坐标和frenet坐标系没有直接关系。frenet是自然坐标系的一种表示,就是把物体的运动做切向和法线方向的两个分解。在空间中还有第三个分量,垂直于平面的一个分量。和笛卡尔坐标系的关系如图:

百度Apollo中轨迹的表示方式,算法

    给定一个点,就可以判断这个点在参考线上的投影点之间的距离(法线方向),至于路程距离(S),其实没明白为什么可以通过参考线的frenet坐标推算出车辆行驶距离(S)。车辆完全可以不按照参考路径来行驶。

    XYZ就是笛卡尔坐标系,xyz就是运动轨迹上一点的切线和法线以及垂直这个平面的z向量。这个坐标系通过积分可以计算出曲线上两个点的距离。就是我们说的S。对于S求导可以得到速度,在对于S求二阶导可以得到加速度。

    我们经常看到SL坐标系,这个坐标系仅仅只是和frenet的计算结果有关系(距离)。这里推荐一篇“古月居”的博客,其中的效果图演示了SL的关系。

Frenet坐标系下的无人车轨迹规划详细讲解与ROS实现 - 古月居 (guyuehome.com)

   S代表了路程的的累加,如同前文分析的情况:当车辆直线匀速运动时,S会随时间的增加呈线性增加的关系。这里其实还有一点当车辆沿直线变加速度后,虽然法线方向没有分量,但是单位时间内行驶的距离一定会变化,因此S的斜率会改变。SL坐标中的S变换不能体现出车辆的实际运行情况。只能判断行驶距离。应为ST的横坐标是时间,而SL的横坐标是参考点法线方向的距离。

   L代表了法线方向的位移距离,当法线方向有加速度后。L就会有数值(横向距离)。 这里开始疑惑了:参考线SL的坐标形式是曲线还是直线?希望知道的老师可以回答一下,谢谢。任意一个参考线上的点L的位移是0。

百度Apollo中轨迹的表示方式,算法

   可以看下这个函数内部如何使用公式。目睹其实求出S L 以及SL各自的导数。

void TrajectoryAnalyzer::ToTrajectoryFrame(const double x, const double y,
													const double theta, const double v,
													const PathPoint &ref_point,
													double *ptr_s, double *ptr_s_dot,
													double *ptr_d,
													double *ptr_d_dot) const 

    文章很多知识点还没有彻底说明白,如果有误欢迎指正交流,谢谢。

    随后推荐一篇文章:

    Frenet坐标系及其与笛卡尔坐标转换(1)原理 - 知乎 (zhihu.com)文章来源地址https://www.toymoban.com/news/detail-637116.html

到了这里,关于百度Apollo中轨迹的表示方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 百度Apollo:自动驾驶技术的未来应用之路

    随着科技的不断进步,自动驾驶技术正逐渐成为现实,颠覆着我们的出行方式。作为中国领先的自动驾驶平台,百度Apollo以其卓越的技术和开放的合作精神,正在引领着自动驾驶技术的未来应用之路。本文将从城市交通、出行体验和环境保护等方面,为您解析百度Apollo在自动

    2024年02月11日
    浏览(42)
  • 百度Apollo:引领自动驾驶技术创新的先锋

    大家好,我是萝卜头不吃萝卜头,今天和大家分享一下我学习百度Apollo自动驾驶的心得。 在七月份的时候,我收到了Apollo开发者社区的邀请,进行学习Apollo自动驾驶汽车的2023星火培训训练,在刚收到的时候觉得自己作为一名前端开发人员,学习这个领域有点胡闹,在自己的

    2024年02月11日
    浏览(65)
  • 百度Apollo:引领自动驾驶技术的创新与突破

    随着科技的迅猛发展,自动驾驶技术正成为未来交通领域的重要发展方向。在这个领域中,百度Apollo作为中国领先的自动驾驶平台,以其卓越的创新能力和开放合作精神,在推动自动驾驶技术的发展上有着举足轻重的地位。本文将从技术创新、开放合作、生态建设和安全可靠

    2024年02月11日
    浏览(55)
  • 百度Apollo学习心得:探索自动驾驶技术的前沿之旅

    百度Apollo是一项引领自动驾驶技术发展的开放平台,通过深度学习、感知与决策、定位与控制等关键技术,为开发者提供了丰富的工具和资源。在学习百度Apollo的过程中,我深刻认识到自动驾驶技术的重要性和挑战,并积累了宝贵的学习心得。本文将分享我的学习心得,希望

    2024年02月11日
    浏览(38)
  • Apollo 7周年大会:百度智能驾驶的展望与未来

    本心、输入输出、结果 编辑 | 简简单单 Online zuozuo 地址 | https://blog.csdn.net/qq_15071263 个人简介 : 简简单单Online zuozuo,目前主要从事 Java 相关工作,商业方向为 B、G 端,主要使用Java、Python 进行日常开发,喜欢探索各个方面的内容,对很多的方向、内容感兴趣 :目前对 AIGC、云

    2024年04月28日
    浏览(39)
  • 内卷的上海车展上,百度Apollo带来新型开放整零关系

    /nbsp; 导读 nbsp;/ 汽车的智能化发展已然成为了当前市场最有热度的话题,更有希望引领新一代产业革命的浪潮。百度作为最早探索智能驾驶领域的企业之一,多年来始终打磨技术产品,已经形成了全栈的解决方案,从而帮助企业造好车。 在上海车展前夕,百度Apollo也举办了汽

    2023年04月24日
    浏览(37)
  • 使用百度地图路书为骑行视频添加同步轨迹

    使用 gopro 记录骑行过程 (参考《使用二手 gopro 做行车记录仪 》),事后将视频文件导出来回顾整个旅程,会发现将它们与地图对应起来是一件困难的事。想要视频和地图对应,首先需要上报每个时刻的位置,gopro 本身是支持的,然而要到版本 5 才可以,我的 3+ 太老了没这能力

    2024年02月16日
    浏览(60)
  • JAVA开发(通过Apollo注入配置信息的几种方式)

    在springCloud中有一个重要的组件就是配置中心,config:server,用于配置springboot中需要注入的各种配置项。但是现在发现越来越多的企业使用Apollo进行集成。博主在开发中也是使用Apollo进行配置。本文总结Apollo的的使用,集成到springboot,和注入方式等。   Apollo是携程框架部门研

    2024年02月09日
    浏览(65)
  • Apollo星火计划学习笔记——Apollo开放空间规划算法原理与实践

    Apollo星火计划课程链接如下 星火计划2.0基础课:https://apollo.baidu.com/community/online-course/2 星火计划2.0专项课:https://apollo.baidu.com/community/online-course/12     开放空间算法的配置主要在 valet_parking_config.pb.txt 中,分为4个部分: OPEN_SPACE_ROI_DECIDER 、 OPEN_SPACE_TRAJECTORY_PROVIDER 、 OPE

    2023年04月10日
    浏览(37)
  • 图的分类及表示方式

    图是描述复杂事务的数据表示形式,由节点和边组成,数学上一般表述为G(V,E)。其中的V(vertical)代表节点,可被理解为事物;E(edge)代表边,描述的是两个事物之间的关系。例如一个图的社交网络图,每个人都可视为节点,而人与人之间的关系可被视为边。 节点的邻

    2024年02月11日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包