【百度Apollo】循迹自动驾驶:探索基于视觉感知的路径规划与控制技术

news2024/11/15 9:03:10

在这里插入图片描述

🎬 鸽芷咕:个人主页

 🔥 个人专栏: 《linux深造日志》《粉丝福利》

⛺️生活的理想,就是为了理想的生活!

⛳️ 推荐

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。

文章目录

  • ⛳️ 推荐
  • 引入
  • 步骤一:录制轨迹
  • 步骤二:录制轨迹
      • 1. 选择循迹模式
      • 2. 选择车辆
      • 3. 启动循迹驾驶相关模块
      • 4. 查看连接状态
      • 5. 开启轨迹录制
      • 6. 关闭轨迹录制
  • 步骤三:启动循迹驾驶演示
      • 1. 将车辆遥控至上述章节录制循迹数据时的起始位置。
      • 2. 将遥控器切换到自动驾驶模式。
      • 3. 在 Dreamview+ 中点击操作底栏的 **START/启动** 按钮,启动自动驾驶。

引入

循迹自动驾驶是一种基于视觉感知的自动驾驶技术,通过对道路标线和环境的识别和分析,实现车辆的准确定位和精准控制,从而实现沿着规定的路径行驶。循迹自动驾驶技术在实际应用中具有广泛的应用前景,可以应用于智能车辆、物流配送、工业自动化等领域。

步骤一:录制轨迹

  1. 启动 Canbus 驱动

启动工控机后,在桌面上打开命令行终端(Terminal),进入 CAN 卡目录(默认在 home 路径下),启动 CAN 驱动:

bash ~/socketcan/start.sh
  1. 启动 Apollo Docker 环境

如果您使用的是包管理,请您按照以下步骤操作:

打开命令行终端,切换路径到 Apollo:

cd ~/apollo

输入以下命令进入 Apollo Docker 环境:

aem start #创建容器

aem enter #进入容器

buildtool build

‍注意:首次进入容器用buildtool build;如果是只编译更新的模块,使用以下命令buildtool build -p 模块名

如果您的终端如下面所示,说明您成功进入了 Apollo 的运行容器:

docs/工具使用/Dreamview+/实车路测模式/image.png

如果您使用的是源码,请您按照以下步骤进入 docker 环境:

打开命令行终端,切换路径到 Apollo:

cd ~/apollo #切换路径到apollo,注意cd与~/apollo之间有一个空格

输入以下命令启动 Apollo Docker 环境:

bash docker/scripts/dev_start.sh

启动 docker 环境:

bash docker/scripts/dev_into.sh

如果您的终端如下面所示,说明您成功进入了 Apollo 的运行容器:

[user@in-runtime-docker:/apollo]$

您可以通过包管理或源码方式启动 Dreamview+,请您选择一种方式按照相应命令启动 Dreamview+。

1.启动 Dreamview+
方式一:包管理方式

通过包管理方式进入 docker 环境中,在 docker 环境中执行以下命令启动 Dreamview+:

aem bootstrap start --plus

‍注意:

  • 如果您想要停止 Dreamview+,请输入aem bootstrap stop --plus
  • 如果您想要重启 Dreamview+,请输入aem bootstrap restart --plus

方式二:源码方式

通过源码方式进入 docker 环境,在 docker 环境中执行以下命令启动 Dreamview+:

bash scripts/bootstrap.sh start_plus

‍注意:

  • 如果您想要停止 Dreamview+,请输入bash scripts/bootstrap.sh stop_plus
  • 如果您想要重启 Dreamview+,请输入bash scripts/bootstrap.sh restart_plus

2.打开 Dreamview+

启动成功后,在浏览器输⼊localhost8888⽹址打开 Dreamview+ 界面。

  1. 启动并打开 Dreamview+

您可以通过包管理或源码方式启动 Dreamview+,请您选择一种方式按照相应命令启动 Dreamview+。

启动 Dreamview+

方式一:包管理方式

通过包管理方式进入 docker 环境中,在 docker 环境中执行以下命令启动 Dreamview+:

aem bootstrap start --plus

‍注意:

  • 如果您想要停止 Dreamview+,请输入aem bootstrap stop --plus
  • 如果您想要重启 Dreamview+,请输入aem bootstrap restart --plus

方式二:源码方式

通过源码方式进入 docker 环境,在 docker 环境中执行以下命令启动 Dreamview+:

bash scripts/bootstrap.sh start_plus

‍注意:

  • 如果您想要停止 Dreamview+,请输入bash scripts/bootstrap.sh stop_plus
  • 如果您想要重启 Dreamview+,请输入bash scripts/bootstrap.sh restart_plus

打开 Dreamview+

启动成功后,在浏览器输⼊localhost8888⽹址打开 Dreamview+ 界面。

步骤二:录制轨迹

1. 选择循迹模式

Mode/模式 中选择 Vehicle Test/实车路测 模式。

Operations/操作 中选择 Waypoint_Follow/循迹 操作。

2. 选择车辆

  • 如有对应车辆配置,可选择对应配置,

  • 如无对应车辆配置,可用默认配置。

3. 启动循迹驾驶相关模块

Modules/模块 中,选择启动 CanbusControlExternalCmdGPSLidarLocalizationPredictionRadarTransform 按钮。

docs/工具使用/Dreamview+/实车路测模式/image.png

‍注意:ExternalCmd 是 planning 的一个子进程,循迹会用到这个子进程,路测模式只开 planning 模块就可以。

4. 查看连接状态

查看 Component 状态。

docs/工具使用/Dreamview+/实车路测模式/image.png

‍说明:

  • Component 中显示绿色 OK 为正常,可以进行下面的操作。 - WARNING 黄色只是信号不好,模块已经启动,只要不是 ERROR 就不影响循迹。

开启 cyber_monitor,查看 channel 信息。

查看 cyber_monitor 数据。

进入 docker 环境,输入 cyber_monitor,启动的 cyber_monitor 工具中,可以看到很多 channel 信息,其中 /tf 和 /tf_static 对应 Transform 模块,/apollo/localization/pose 对应 Localization 模块,apollo/sensor/gnss/best_pose 对应 GPS 模块。

docs/工具使用/Dreamview+/实车路测模式/image.png

使用上下方向键选择 channel /apollo/sensor/gnss/best_pose 按右方向键进入此 channel,查看 sol_type 项是否是 NARROW_INT,若为 NARROW_INT,则表示 GPS 信号良好,符合定位要求;若不为 NARROW_INT,则遥控移动下车辆,直到出现 NARROW_INT 为止。

docs/工具使用/Dreamview+/实车路测模式/image.png

检查所有开启模块均正常后可以进行下面的操作。

5. 开启轨迹录制

将车辆遥控至录制轨迹起点,标记此时车辆车头方向和车辆位置,可以在车辆左前轮处画一个十字符号用于标记,示意图如下:

docs/工具使用/Dreamview+/实车路测模式/image.png

在操作底栏点击 Record/录制 按钮,启动轨迹录制。

docs/工具使用/Dreamview+/实车路测模式/image.png

6. 关闭轨迹录制

使用遥控器遥控车辆行驶一段轨迹,这里建议走直线,车辆停止后,点击 Stop/停止 录制按钮,关闭循迹录制。

docs/工具使用/Dreamview+/实车路测模式/image.png

关闭轨迹录制后,在 Record Name/数据包名称 中填写数据包名称,并单击 Save/保存

docs/工具使用/Dreamview+/实车路测模式/image.png

‍注意:数据包命名规则限制。

步骤三:启动循迹驾驶演示

1. 将车辆遥控至上述章节录制循迹数据时的起始位置。

此时,在 Dreamview+ 中车辆前方会生成一条蓝色的轨迹线,这条轨迹线就是刚才循迹录制生成的轨迹线。检查生成的轨迹线是否清晰无毛刺,确认轨迹是否与实际路线的大致相符,如果相差很大,比如本来录制的是直行,而轨迹显示的是大幅度转弯,请重新检查定位,并重新录制新轨迹线。

‍注意:车辆的起点位置和车头朝向都尽量与循迹录制时的车辆起点位置和车头朝向保持一致。

2. 将遥控器切换到自动驾驶模式。

3. 在 Dreamview+ 中点击操作底栏的 START/启动 按钮,启动自动驾驶。

docs/工具使用/Dreamview+/实车路测模式/image.png

车辆就会启动循迹,沿着已有的轨迹进行自动驾驶,观察车辆运动轨迹,包括速度、方向等是否与之前录制的一致。

docs/工具使用/Dreamview+/实车路测模式/image.png

‍注意:

  • 车辆在循迹自动驾驶时,并没有使用到感知相关的传感器,遇到障碍物不会刹停或者避让,遇到紧急情况请及时遥控器接管。这也是寻找宽阔人少车少封闭场所的原因。 - 车辆可能开始起步比较猛,请用遥控器随时接管,紧急情况下,快速按下急停按钮。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1423029.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

牛啊!能透视大模型内部结构的可视化工具!

哈喽,大家好。 今天给大家分享一个非常牛逼的可视化工具,可以清晰了解 GPT 大模型内部的结构。 哦,对了!给大家准备了国内用的 ChatGPT key,见评论区。 这个工具可以支持查看 GPT2 和 GPT3 的网络架构。 但能进行交互…

区间时间检索

参数形式 sql <if test"params.beginOrderDate ! null and params.beginOrderDate ! "><!-- 开始时间检索 -->AND DATEDIFF(day,#{params.beginOrderDate},b.order_date) > 0</if><if test"params.endOrderDate ! null and params.endO…

ov通配符ssl证书申请时间长吗

通配符SSL证书是SSL数字证书的一种&#xff0c;可以同时保护主域名以及同一个域名下的所有子域名。用户在申请通配符SSL证书时需要CA认证机构对提交的信息进行审核&#xff0c;审核时间根据证书的品牌、类型而变化。今天就随SSL盾小编了解OV通配符SSL证书申请时间。 1.通配符S…

蓝桥杯 第 2 场 小白入门赛

目录 1.蓝桥小课堂-平方和 2.房顶漏水啦 3.质数王国 4.取余 5.数学尖子生 6.魔术师 比赛链接 1.蓝桥小课堂-平方和 简单签到直接按照题目处理即可注意开long long void solve(){LL x; cin>>x;LL ans x*(x1)*(2*x1)/6;cout<<ans<<endl; } 2.房顶漏水…

STM32——DMA

STM32——DMA 1.DMA介绍 什么是DMA&#xff1f; DMA(Direct Memory Access&#xff0c;直接存储器访问) 提供在外设与内存、存储器和存储器、外设与外设之间的高速数据传输使用。它允许不同速度的硬件装置来沟通&#xff0c;而不需要依赖于CPU&#xff0c;在这个时间中&…

C语言应用实例——贪吃蛇

&#xff08;图片由AI生成&#xff09; 0.贪吃蛇游戏背景 贪吃蛇游戏&#xff0c;最早可以追溯到1976年的“Blockade”游戏&#xff0c;是电子游戏历史上的一个经典。在这款游戏中&#xff0c;玩家操作一个不断增长的蛇&#xff0c;目标是吃掉出现在屏幕上的食物&#xff0c…

shell - 免交互

一.Here Document 免交互 1. 交互的概念 交互&#xff1a;当计算机播放某多媒体程序的时候&#xff0c;编程人员可以发出指令控制该程序的运行&#xff0c;而不是程序单方面执行下去&#xff0c;程序在接受到编程人员相应的指令后而相应地做出反应。 对于Linux操作系统中&…

【RT-DETR有效改进】Bi-FPN高效的双向特征金字塔网络(附yaml文件+完整代码)

👑欢迎大家订阅本专栏,一起学习RT-DETR👑 一、本文介绍 本文给大家带来的改进机制是BiFPN双向特征金字塔网络,其是一种特征融合层的结构,也就是我们本文改进RT-DETR模型中的Neck部分,它的主要思想是通过多层级的特征金字塔和双向信息传递来提高精度。本文给大家带…

零基础爬什么值得买的榜单——爬虫练习题目一(答一)

完蛋 蚌埠住了 引言日常吐槽言归正传 步骤一分析网页分析网络加载详细说说网络面板实际操作 测试代码测试结果知识点JS和Fetch/XHR是什么&#xff1f;有什么关联&#xff1f;网页数据的中文为什么是16进制数&#xff0c;以及如何判断&#xff1f; 结尾 引言 日常吐槽 今天剪辑…

力扣题目训练(5)

2024年1月29日力扣题目训练 2024年1月29日力扣题目训练345. 反转字符串中的元音字母349. 两个数组的交集350. 两个数组的交集 II96. 不同的二叉搜索树97. 交错字符串44. 通配符匹配 2024年1月29日力扣题目训练 2024年1月29日第五天编程训练&#xff0c;今天主要是进行一些题训…

回归预测 | Matlab基于OOA-LSSVM鱼鹰算法优化最小支持向量机的数据多输入单输出回归预测

回归预测 | Matlab基于OOA-LSSVM鱼鹰算法优化最小支持向量机的数据多输入单输出回归预测 目录 回归预测 | Matlab基于OOA-LSSVM鱼鹰算法优化最小支持向量机的数据多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 Matlab基于OOA-LSSVM鱼鹰算法优化最小…

Windows断开映射磁盘提示“此网络连接不存在”,并且该磁盘直在资源管理器中

1、打开注册表编辑器 快捷键winR 打开“运行”&#xff0c; 输入 regedit 2、 删除下列注册表中和无法移除的磁盘相关的选项 \HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2\ 3、打开“任务管理器”&#xff0c;重新启动“Windows资源…

C++指针比较

内存中各个数据的存放方式。 数组str1、str2、str3、str4都是在栈中分配的&#xff0c;内存中的内容都为“abc”加一个“\0”&#xff0c;但是他们的位置是不同的&#xff0c;因此代码第15行和第16行输出的都是0. 指针str5、str6、str7、str8也是在栈中分配的&#xff0c;他们…

Shell中的awk

一、awk 1.1.awk工作原理 逐行读取文本&#xff0c;默认以空格或tab键为分隔符进行分隔&#xff0c;将分隔所得的各个字段保存到内建变量中&#xff0c;并按模式或者条件执行编辑命令。 awk倾向于将一行分成多个"字段"然后再进行处理。 awk信息的读入也是逐行读取…

Apple Vision Pro 评测:这款顶尖头显仅是对未来的初步探索

原文&#xff1a;Apple Vision Pro Review: The Best Headset Yet Is Just a Glimpse of the Future 作者&#xff1a;Joanna Stern 戴上 Apple Vision Pro 混合现实头显整整近 24 小时后&#xff0c;有几件事让我颇感意外&#xff1a; 我居然没感到恶心。我竟然高效完成了大…

springboot---四大核心

四大核心 Starter简介总结 Autoconfigure简介示例原理自定义starter打包实践 总结 CLIActuator Starter 简介 springboot项目中几乎项目依赖中基本上全是各种各样的starter, 那么到底什么是starter? starter是一组方便的依赖描述符&#xff0c;当我们使用它时&#xff0c;可…

推荐系统|排序_多目标模型

文章目录 四大特征用户特征物品特征统计特征场景特征 训练过程中会遇到的问题 四大特征 ID相当于是人拥有的身份证&#xff0c;能够唯一确定出一个人 用户特征 主要指的是用户ID和用户画像 物品特征 主要是指物品ID和物品画像以及物品持有人。 统计特征 统计特征既包括对…

Java并发基础:CompletionService全面解析!

内容概要 CompletionService的优点在于能够解耦任务提交与结果获取&#xff0c;有效的整合线程池与阻塞队列&#xff0c;实现任务完成顺序的处理&#xff0c;提升系统吞吐量&#xff0c;它简化了多线程编程的复杂性&#xff0c;使开发者能够更专注于业务逻辑&#xff0c;而不必…

【昕宝爸爸小模块】深入浅出详解之常见的语法糖

深入浅出详解之常见的语法糖 一、&#x1f7e2;关于语法糖的典型解析二、&#x1f7e2;如何解语法糖&#xff1f;2.1&#x1f7e2;糖块一、switch 支持 String 与枚举2.2&#x1f4d9;糖块二、泛型2.3&#x1f4dd;糖块三、自动装箱与拆箱2.4&#x1f341;糖块四、方法变长参数…

TOP100 矩阵

1.73. 矩阵置零 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 提示&#xff1a; m matrix.lengthn matrix[0].length1 < m, n < 200-2^31 < matrix[i][j] < 2^31 - 1 思路&#xf…