1.Apollo 8.0 配置参数读取源码解析:以 Planning 模块为例
2.自动驾驶笛卡尔坐标系和frenet坐标系相互转换
3.无人驾驶技术入门(十一)| 无人驾驶中的发布CAN消息解析
4.Windows的Ubuntu子系统下载Apollo EDU 发行版试验planning模块
5.Apollo6.0安装文档教程——环境搭建、安装、源码源码编译、剖析测试
6.carlta什么牌子的发布
Apollo 8.0 配置参数读取源码解析:以 Planning 模块为例
目录
在本篇讨论中,我们将剖析 Apollo 8.0 配置参数的源码源码读取过程,以 Planning 模块为例进行深入探讨。剖析title 半价商城源码
1. 配置参数分类
了解 Apollo 中各模块的发布启动机制,主要通过主文件 mainboard 编译生成的源码源码可执行文件以及动态链接库的加载实现。Planning 模块的剖析 DAG 文件 (apollo/modules/planning/dag/planning.dag) 指定了模块的动态链接库和单个组件 PlanningComponent 的配置。
配置参数分为两类:基于 ProtoBuf 的发布参数和 gflags 命令行参数。Planning 模块的源码源码 ProtoBuf 配置文件为 (apollo/modules/planning/conf/planning_config.pb.txt),与之对应的剖析 ProtoBuf 接口文件为 (apollo/modules/planning/proto/planning_config.proto)。而 gflags 命令行参数配置文件为 (apollo/modules/planning/conf/planning.conf)。发布
1.1 ProtoBuf 参数
ProtoBuf 参数通过 module_config.components.config.config_file_path 指定配置文件路径,源码源码文件中的剖析参数在组件初始化时被读入 ProtoBuf 对象。
1.2 gflags 命令行参数
gflags 参数通过 module_config.components.config.flag_file_path 指定,文件中的命令行参数在初始化时由 gflags 解析。
2. 配置参数读取流程
主入口文件 (apollo/cyber/mainboard/mainboard.cc) 的 main 函数负责加载 DAG 文件并启动模块。解析命令行参数、读取 DAG 文件、执行模块加载逻辑。
2.1 加载 DAG 文件
解析命令行参数形成 ModuleArgument,用于存储参数信息。执行主流程时,ModuleController 负责加载所有模块,并处理模块组件的注册、实例化和初始化。
2.2 读取配置参数
ModuleController 通过 LoadModule 方法读取模块配置,具体步骤涉及读取 ProtoBuf 参数和 gflags 命令行参数。
3. 总结
本文通过分析 Planning 模块的配置读取过程,清晰展示了 Apollo 8.0 中配置参数的完整读取流程。通过理解这一过程,开发者能够更深入地掌握 Apollo 的模块启动和配置机制。
自动驾驶笛卡尔坐标系和frenet坐标系相互转换
自动驾驶中的uniapp免费项目源码车辆运动在笛卡尔坐标系和Frenet坐标系之间转换是关键。在笛卡尔系统中,车辆运动通过航向角[公式]和曲率[公式]描述,而在Frenet坐标(S-L坐标)下,车辆运动则用[公式]表示,其中下标[公式]和[公式]分别代表车辆和参考点,对时间求导用点表示,对自变量求导用撇表示。 Frenet坐标系常用于路径规划,通过先在S-L坐标系规划轨迹得到[公式]关系,再在S-T图规划速度得到[公式]。参考线通常用散点表示,包含位置[公式]、切线方向[公式]、曲率[公式]等信息。在Apollo源码中,涉及如下转换:从笛卡尔的[公式]和[公式]转换到S-L的[公式]和[公式]
从S-L的[公式]到笛卡尔的[公式]
例如,从笛卡尔到S-L,首先找到最近的参考点,通过向量关系推导出[公式],然后利用速度关系式[公式],结合向心力类比的Frenet公式推导出[公式]。整个过程涉及速度的定义、链式求导法则和Frenet公式的应用。 在S-L坐标到笛卡尔坐标转换时,通过参考点的几何位置和车辆与参考线的关系,可以计算速度、加速度等参数,从而完成坐标间的转换。这些转换公式确保了自动驾驶系统在不同坐标系间的运动描述和控制的灵活性和准确性。无人驾驶技术入门(十一)| 无人驾驶中的CAN消息解析
前言
本文聚焦于无人驾驶技术中至关重要的CAN总线机制。在无人驾驶系统中,CAN总线扮演着不可或缺的角色,不仅用于传输VCU信号,专业小助手源码还涉及雷达、Mobileye等传感器的数据交换。
实现一个完整的无人驾驶系统需涉及感知、融合、规划与控制等多个层级。在这篇分享中,重点探讨了“驱动层”相关的CAN总线内容。
正文
作为高效可靠的通信机制,CAN总线在汽车电子领域广泛应用。本文着重于解释在无人驾驶系统接收到CAN消息后,如何利用CAN协议解析出所需数据,解析传感器信息是自动驾驶工程师的核心技能。
认识CAN消息
以Apollo开源代码为例,剖析CAN消息结构,包括ID号、长度、数据和时间戳。ID号用于确认节点间通信,扩展帧和普通帧的区分依据于此。长度表示数据量,最多8个无符号整数或8*8个bool类型数据。数据部分是消息的核心,通过8*8方格可视化,解析变得直观。时间戳记录接收时刻,用于判断通信状态。
认识CAN协议
业界使用后缀为dbc的文件存储CAN协议,Vector公司的CANdb++ Editor软件专门用于解析dbc文件。Mobileye的车道线信息通过dbc文件格式传递,以ID号0x的LKA_Left_Lane_A为例,解析信号包括类型、质量、曲率等物理量。爬虫源码包下载通过软件界面直接关联彩色图与data,解析过程变得清晰。
解析CAN信号
解析过程基于彩色图与data的一一对应关系,通过叠加图表,揭示数据结构。对于Factor为1的物理量,解析直接。Factor为小数的物理量则需运用位移运算。以Apollo源码为例,通过移位和位运算解析出完整物理量。
与CAN类似的通信协议
虽然传感器采用不同通信方式,如雷达、激光雷达、GPS和惯导,但解析方法保持一致。解析的关键在于理解信号的类型、值和单位。
结语
本篇分享全面解析了CAN总线消息的解析过程,涵盖了无人驾驶系统驱动层的基本理论。解析ID不同的CAN消息结构要求高度细致,避免后续处理中的意外错误。如有疑问,欢迎在评论区互动。赞赏与关注是对文章价值的直接体现。
获取相关软件和文件的方法,请关注公众号:自动驾驶干货铺,后台回复“CAN”获取。更多Mobileye资料和技术支持,值乎平台提问。
Windows的Ubuntu子系统下载Apollo EDU 发行版试验planning模块
在Windows系统上使用Linux的方法主要有三种:安装双系统、使用虚拟机+Linux和Windows 的WSL(Windows Subsystem for Linux)。前两者需要较复杂的操作且存在一定的硬件要求,而WSL则较好地解决了这些问题,看资金指标源码使得在Windows系统上运行Linux变得更加简便。
接下来,我们开始下载Apollo EDU发行版。首先,需要下载并运行EDU下载脚本,通常该脚本会自动下载并解压Apollo EDU发行版,省去了手动下载和解压的步骤。
为了运行Apollo EDU,需要安装并配置docker。若电脑已安装并配置好docker,则可略过此步骤。对于centos7的内核,推荐使用脚本安装docker,而centos6则使用客户端命令进行安装。安装过程可能会提示需要输入密码并可能需要重启电脑,按照提示操作即可。
安装成功后,进入脚本文件夹并执行命令启动Apollo环境。如果一切正常,将会有相应提示。启动完毕后,在同一目录下执行命令进入环境,此时脚本文件夹会被挂载到容器的/apollo_workspace中。
在Apollo环境中,可以编译planning源码包。使用特定的命令指定编译工具并引入planning的源码进行编译。除了planning模块,还可以引入其他模块如dreamview、routing、task_manager和monitor等,具体方法为输入相关命令查看。编译时,确保在工作空间目录下执行脚本编译命令。首次编译可能需要从网上拉取部分依赖包,受网速和电脑配置影响,整个过程可能需要分钟左右,请耐心等待。编译完成后,环境变量需要手动刷新。
进行planning的调试时,可以运行dreamview。若已启动dreamview,可使用命令重启dreamview进程。dreamview和monitor会自动启动,通过浏览器访问localhost:即可打开dreamview。
要进入sim control仿真模式进行调试,选择MKz Standard Debug菜单下的车辆型号、地图以及Sim Control。点击左侧Module Control栏,启动需要调试的模块进程,如Planing和Routing模块。设置车辆仿真行驶路径,拖动或点击鼠标在地图中设置路径。发送路由请求后,可以观察到red line是routing模块搜索出的路径,而planning模块实时规划的局部路径显示为light blue track。
若需对planning模块进行调试,直接修改工作空间中的planning源码即可。修改完成后,重新运行编译脚本并重启dreamview中的planning模块即可。整个流程中,通过Windows环境下的WSL和Apollo EDU发行版,使得在Windows系统上实现Linux应用开发与调试成为可能。
Apollo6.0安装文档教程——环境搭建、安装、编译、测试
一、环境搭建 为了安装Apollo 6.0,您需要以下环境准备:Ubuntu .,安装教程参阅相关资源。
NVIDIA显卡驱动,根据官方指南进行安装。
Docker引擎,Apollo安装步骤中完成。
NVIDIA容器工具,Apollo安装步骤中完成。
安装过程中,请确保禁用nouveau驱动,操作步骤如下: 在终端中添加指定内容至文件末尾并保存,然后重启系统。重启后执行命令,检查禁用状态。 二、下载源码 前往Apollo下载地址,选择对应版本。 三、安装 安装Docker:进入Apollo 6.0的docker目录,执行安装命令。安装完成后,重启电脑。 安装NVIDIA容器工具:与Docker安装同步进行。 创建Apollo容器:下载所需image,此过程可能耗时较长。成功后,会显示“[OK], Enjoy!”。 进入容器:执行相关命令。 四、编译与测试 编译Apollo:根据容器中的GPU状态(有或无)进行编译。可能遇到的warning如“DimsNCHW”被标记为过时,这是正常现象,不会影响后续使用。 启动Dreamview:可能遇到权限问题,使用chmod进行授权。如果问题仍未解决,授权整个Scripts目录并执行。 Dreamview查看:在浏览器中输入/ulisesbocchi...使用jasypt-spring-boot提供的方法对需要加密的配置进行加密,然后将加密内容配置在Apollo中。项目启动时,jasypt-spring-boot会解密Apollo加密的配置,让使用者获取解密后的内容。
创建一个新的Maven项目,并加入Apollo和jasypt的依赖。具体依赖信息如下:
创建一个加密的工具类,用于加密配置。执行main方法后,可以得到如下输出:
input就是hello加密后的内容,将input的值复制存储到Apollo中。存储格式需要遵循一定规则,即需要将加密内容用ENC包起来,这样jasypt才会解密这个值。
使用时可以直接根据名称注入配置,例如:
input的值就是解密后的值,使用者无需关心解密逻辑,jasypt框架在内部处理好了。
jasypt整合Apollo也存在一些不足之处。目前,我只发现了以下两个问题:
上述两个问题与jasypt实现方式有关,意味着这种加密方式可能仅适用于数据库密码等场景,启动时可以解密,且仅使用一次。对于需要加密的核心业务配置,jasypt无法支持实时更新。下章节我将讲解如何修改Apollo源码来解决这两个问题。
扩展Apollo支持存储加解密
前文介绍了如何使用jasypt为Apollo中的配置进行加解密操作,基本需求可实现。但仍存在一些不足之处。
jasypt仅在启动时解密带有ENC(xx)格式的配置,当配置发生修改时无法更新。由于Apollo框架本身不具备对配置加解密的功能,若想实现加解密并支持动态更新,就需要修改Apollo源码来满足需求。
修改源码需要重新打包。这里介绍一种简单实现方法:创建一个与Apollo框架中相同类名的类进行覆盖,这样无需替换已使用的客户端。
若配置中心存储的内容是加密的,意味着Apollo客户端从配置中心拉取下来的配置也是加密的。我们需要在配置拉取下来后对其进行解密,然后再执行后续流程,如绑定到Spring中。在业务点进行切入后,配置中心加密的内容可自动转换为解密后的明文,对使用者透明。
通过分析Apollo源码,我找到了一个最合适的切入点来完成这项任务,即com.ctrip.framework.apollo.internals.DefaultConfig类。DefaultConfig是Config接口的实现类,配置的初始化和获取都会经过DefaultConfig的处理。
在DefaultConfig内部有一个更新配置的方法updateConfig,可在该方法中对加密数据进行解密处理:
这里使用AES进行解密,意味着配置中心的加密内容也需要使用相同的加密算法进行加密。至于格式,仍使用ENC(xx)格式来标识加密配置内容。解密后将明文内容重新赋值到Properties中,其他流程保持不变。
创建一个加密测试类,加密配置内容,并将其复制存储到Apollo中。输出内容如下:
Ke4LIPGOp3jCwbIHtmhmBA==
存储到Apollo中时,需要用ENC将加密内容包起来,如下:
test.input = ENC(Ke4LIPGOp3jCwbIHtmhmBA==)
使用之前的代码进行测试,Config获取和Spring注入的方式可以成功获取到解密后的数据,并且在配置中心修改后也能实时推送到客户端并成功解密。
本文摘自于《Spring Cloud微服务入门实战与进阶》一书。这是朋友写的一本新书,豆瓣评分8.2。
分享Apollo全局规划(Routing)模块最全教程
本文提供Apollo全局规划(Routing)模块的全面解读,旨在帮助学习全局路径规划及理解Apollo框架。资料内容丰富,覆盖源代码注释(包含详尽代码注释)、流程图(使用思维导图及各种框架流程图)、核心算法解读(每个涉及算法均有解析及推导)、相关软件工具链学习(如C++、Python、ROS、Ubuntu、Git等)、行业现状及报告等多个方面。此套资料颗粒度极高,总结整理不易。 如需获取资料,请私聊或访问链接:mbd.pub/o/m/author-aWuU... 获取资料后,后续有任何问题可随时咨询。 以下是学习资料列表概览: 资料数量众多,每份文档通常超过几十页,内容详细深入。部分资料截图如下: 扩展学习资源: 欲了解Apollo其他模块,推荐以下资源:分享Apollo决策规划(planning)模块最全教程 - 知乎 (zhihu.com)
分享Apollo预测(prediction)模块最全教程 - 知乎 (zhihu.com)
分享Apollo控制(control)模块最全教程 - 知乎 (zhihu.com)