关于lattice planner

news2024/9/22 19:42:54

使用编程创建驾驶场景。

1.使用Driving scenario Designer 交互方式创建驾驶场景 

2.导出matalb function 

3.修正这个函数,创建原始场景的变体。

4.调用这个函数,生成drivingScenario object。

5.在simulink中仿真,导入这个objcet ,使用Scenario Reader 模块

在APP中创建场景。

drivingScenarioDesigner('LeftTurnScenarioNoSensors.mat')

点击导出MATLAB Function

 生成了下图的函数

 

 

 

 

function [scenario, egoVehicle] = LeftTurnScenarioNoSensors()
% createDrivingScenario Returns the drivingScenario defined in the Designer

% Generated by MATLAB(R) 9.13 (R2022b) and Automated Driving Toolbox 3.6 (R2022b).
% Generated on: 21-Aug-2023 22:30:51

% Construct a drivingScenario object.构建结构体对象
scenario = drivingScenario;

% Add all road segments
roadCenters = [150 24.2 0;
    134.3 24.7 0;
    54 24.2 0];
laneSpecification = lanespec([2 2]);
road(scenario, roadCenters, 'Lanes', laneSpecification, 'Name', 'Road');

roadCenters = [105 75 0;
    105.2 54.5 0;
    105 -20 0];
laneSpecification = lanespec([2 2]);
road(scenario, roadCenters, 'Lanes', laneSpecification, 'Name', 'Road1');

% Add the ego vehicle
egoVehicle = vehicle(scenario, ...
    'ClassID', 1, ...
    'Position', [56 19 0], ...% 初始位置
    'Mesh', driving.scenario.carMesh, ...% 车的形状
    'Name', 'egoVehicle');
waypoints = [56 19 0;
    135 19 0];
speed = 10;
smoothTrajectory(egoVehicle, waypoints, speed);

% Add the non-ego actors
otherVehicle = vehicle(scenario, ...
    'ClassID', 1, ...
    'Position', [103 73 0], ...
    'Mesh', driving.scenario.carMesh, ...
    'Name', 'otherVehicle');
waypoints = [103 73 0;
    102.8 34.3 0;
    114.3 22.4 0;
    148.1 22.4 0];
speed = [11;10;10;11];
yaw =  [-90;-90;0;0];
smoothTrajectory(otherVehicle, waypoints, speed, 'Yaw', yaw);

运行这个函数会返回道路场景、车以及车上传感器所采集的信息。

修改函数,创建场景变体。

上边代码相当于给你个代码壳子,你可以往里填充。一个常见的变体是测试主车以不同的速度行驶。在上边代码中,ego车的车速是10 m/s。为了生成不同的速度,你可以在上述代码中添加接口。

(1)添加输入变量。

 (2)在平滑轨迹中,替换了speed.

 (3)还可以考虑

修改路和车道的参数。修改轨迹或者车辆初始位置;修改车辆参数。

(4)调用你修改的这个函数

 

 可以看到确实是20m/s

 没修改之前的场景 (10m/s)VS 修改之后的场景(20m/s)

主车跟左拐车没有相遇。

 注意,如果你的主车有传感器,你要使用这个命令去打开app

drivingScenarioDesigner(scenario,sensors).

注意更改classId ,car是1,truck是2。

在simulink中导入场景

使用Scenario Reader 模块。

关于Simulink中如何使用,

 可以通过一个简单的例子来学会。

首先输入Scenario Reader,依次选择

 最后加个小wifi

 炫酷的鸟瞰图。这个场景过于简单,所以不炫酷。

 回到lattice

首先运行的是这个函数。 

 首先看一下车道中心线

 主车和五辆车

function [scenario, egoVehicle] = drivingScenarioTrafficExample()
% createDrivingScenario Returns the drivingScenario defined in the Designer

% Generated by MATLAB(R) 9.9 (R2020b) and Automated Driving Toolbox 3.2 (R2020b).
% Generated on: 28-Apr-2020 15:04:44

% Construct a drivingScenario object.
scenario = drivingScenario;% 创建一个drivingScenario对象

% Add all road segments
roadCenters = [0 50 0;
    150 50 0;
    300 75 0;
    310 75 0;
    400 0 0;
    300 -50 0;
    290 -50 0;
    0 -50 0;
    0 -50 0];
laneSpecification = lanespec(4);% 四个车道
road(scenario, roadCenters, 'Lanes', laneSpecification, 'Name', 'Road');

% Add the ego vehicle
egoVehicle = vehicle(scenario, ...
    'ClassID', 1, ...
    'Position', [10.7 51.4 0], ...
    'Name', 'Car');

% Add the non-ego actors
car1 = vehicle(scenario, ...
    'ClassID', 1, ...
    'Position', [34.7 49.3 0], ...
    'Name', 'Car1');
waypoints = [34.7 49.3 0;
    60.1 48.2 0;
    84.2 47.9 0;
    119 49.3 0;
    148.1 51.4 0;
    189.6 58.7 0;
    230.6 68 0;
    272.6 74.7 0;
    301.4 77.5 0;
    316.7 76.8 0;
    332.4 75.2 0;
    348.9 72.2 0;
    366.2 65.1 0;
    379.6 55.6 0];
speed = [10;10;10;10;10;10;10;10;10;10;10;10;10;10];
trajectory(car1, waypoints, speed);

car2 = vehicle(scenario, ...
    'ClassID', 1, ...
    'Position', [17.6 46.7 0], ...
    'Name', 'Car2');
waypoints = [17.6 46.7 0;
    43.4 45.5 0;
    71.3 43.8 0;
    102.3 43.5 0;
    123.5 45.5 0;
    143.6 47.4 0;
    162.4 50 0;
    198.5 61 0;
    241.1 70.1 0;
    272.3 74.1 0;
    292 76.6 0;
    312.8 77.2 0;
    350.3 75.2 0;
    362.5 70.4 0;
    375.9 63.3 0;
    390.7 49.9 0;
    401.3 33 0];
speed = [9;9;9;9;9;9;9;9;9;9;9;9;9;9;9;9;9];
trajectory(car2, waypoints, speed);

car3 = vehicle(scenario, ...
    'ClassID', 1, ...
    'Position', [62.6 51.9 0], ...
    'Name', 'Car3');
waypoints = [62.6 51.9 0;
    87.4 51.3 0;
    117.7 52.2 0;
    147.6 55 0;
    174.9 59.7 0;
    203.3 65.8 0;
    265 69.7 0;
    288.3 73.1 0;
    314.5 73.1 0;
    334.9 70.8 0;
    360 59.9 0];
speed = [6;6;6;6;6;6;6;6;6;6;6];
trajectory(car3, waypoints, speed);

car4 = vehicle(scenario, ...
    'ClassID', 1, ...
    'Position', [101.7 41.1 0], ...
    'Name', 'Car4');
waypoints = [101.7 41.1 0;
    124.6 42 0;
    148.5 43.9 0;
    171.9 48.2 0;
    197.1 52.8 0;
    222.3 58.5 0;
    252.4 64.4 0;
    281.4 68.5 0;
    307.7 69.5 0;
    329.9 68.2 0;
    352.7 62.8 0];
speed = [7;7;7;7;7;7;7;7;7;7;7];
trajectory(car4, waypoints, speed);

car5 = vehicle(scenario, ...
    'ClassID', 1, ...
    'Position', [251.3 75.6 0], ...
    'Name', 'Car5');
waypoints = [251.3 75.6 0;
    255.7 76.7 0];
speed = [0.01;0.01];
trajectory(car5, waypoints, speed);

车辆的参数

carLen   = 4.7; % in meters
carWidth = 1.8; % in meters
rearAxleRatio = .25;

画出这个场景

 构造参考路径

结构体,referencePathFrenet。这个结构题可以给出,沿着路径长度的状态。

找到匹配点,提供坐标系转换。

waypoints = [0 50; 150 50; 300 75; 310 75; 400 0; 300 -50; 290 -50; 0 -50]; % in meters
refPath = referencePathFrenet(waypoints);

这两个代码生成了这个结构体

 这六列是什么(x,y,)

 使用show函数show出来,这里就不求甚解了。

ax = show(refPath);
axis(ax,'equal'); xlabel('X'); ylabel('Y');

 详细阅读 referencePathFrenet 

给wayPoints (x,y)或者(x,y,theta)--》平滑修补成连续曲线。

 查询路径上最接近全局状态的点;插值;坐标系转换‘

 全局状态是[x,y,theta,kappa,speed,accel]

 

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

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

相关文章

无涯教程-PHP - File 函数

文件系统功能用于访问和操纵文件系统&#xff0c;PHP为您提供了操纵文件的所有功能。 运行时配置 这些功能的行为受php.ini中的设置影响。 NameDefaultChangeableChangelogallow_url_fopen"1"PHP_INI_ALLPHP_INI_ALL in PHP < 4.3.4. PHP_INI_SYSTEM in PHP &l…

网络编程(IO模型)

一、阻塞IO 1.最常用&#xff0c;最简单&#xff0c;效率最低的。 2.创建套接字文件描述符后&#xff0c;默认处于阻塞IO模式; 3.read, write, recv, send, recvfrom ,sendto&#xff0c;accept 二. 非阻塞IO 1.防止进程阻塞在IO函数上&#xff0c;但是如果想要获取到有效…

WebRTC音视频通话-iOS端调用ossrs直播拉流

WebRTC音视频通话-iOS端调用ossrs直播拉流 之前实现iOS端调用ossrs服务&#xff0c;文中提到了推流。没有写拉流流程&#xff0c;所以会用到文中的WebRTCClient。请详细查看&#xff1a;https://blog.csdn.net/gloryFlow/article/details/132257196 一、iOS播放端拉流效果 二…

A*算法图文详解

基本概念 A*算法最早于1964年在IEEE Transactions on Systems Science and Cybernetics中的论文《A Formal Basis for the Heuristic Determination of Minimum Cost Paths》中首次提出。其属于一种经典的启发式搜索方法&#xff0c;所谓启发式搜索&#xff0c;就在于当前搜索…

【校招VIP】测试计划之H5测试

考点介绍&#xff1a; H5即HTML的第5个版本&#xff0c;是一种高级的网页技术&#xff0c;可以理解为一个网页。使用原生制作APP&#xff0c;即在基于目前的智能手机的操作系统&#xff08;Android、iOS、Windows phone&#xff09;的基础上&#xff0c;使用相应平台支持的开发…

五金实体店:如何快速开发做出自己的小程序商城?

现如今&#xff0c;小程序已经成为了各行各业的发展趋势&#xff0c;对于五金实体店而言&#xff0c;开发一个自己的小程序商城能够帮助实现线上线下融合&#xff0c;扩大销售渠道&#xff0c;提升品牌影响力。下面就让我们来了解如何快速开发一个小程序商城吧。 首先&#xff…

[赛博昆仑] 腾讯QQ_PC端,逻辑漏洞导致RCE漏洞

简介 !! 内容仅供学习,请不要进行非法网络活动,网络不是法外之地!! 赛博昆仑是国内一家较为知名的网络安全公司&#xff0c;该公司今日报告称 Windows 版腾讯 QQ 桌面客户端出现高危安全漏洞&#xff0c;据称“黑客利用难度极低、危害较大”&#xff0c;腾讯刚刚已经紧急发布…

STP知识总结

目录 生成树协议 导致问题 生成树 存在算法 1、802.1D 接口状态 收敛时间 结构变化 802.1D 缺点 2、PVST cisco私有 3、PVST 缺点 4、快速生成树 快速原理 边缘接口 5、MSTP/MST/802.1S 生成树协议 生成树协议是一种工作在OSI网络模型中第二层(数据链路层…

TCP特点UDP编程

目录 1、tcp协议和udp协议 2、多线程并发和多进程并发&#xff1a; &#xff08;1&#xff09;多进程并发服务端 &#xff08;2&#xff09;多进程并发客户端&#xff1a; 3、tcp: 4、粘包 5、UDP协议编程流程 (1)服务器端&#xff1a; (2)客户端&#xff1a; 6、tcp状…

JavaEE初阶:Java线程的状态

目录 获取当前线程引用 休眠当前线程 线程的状态 1.NEW 2.TERMINATED 3.RUNNABLE 4.WAITING 5.TIMED_WAITING 6.BLOCKED 多线程的意义 单线程 多线程 获取当前线程引用 public static Thread currentThread(); 这个方法返回当前线程的引用。但是我…

WSL2 Ubuntu20.04 配置 CUDA

前言 本文主要讲解如何在 Widnows 11 环境下的 WSL2&#xff08;Ubuntu20.04&#xff09;配置 CUDA 来启用 GPU 加速&#xff08;本文默认您已经在 Windows 上安装完成 Nvidia CUDA&#xff09; 配置流程 检查驱动 打开 GeForce Experience 检查驱动程序的情况&#xff0c;…

基于 BlockQueue(阻塞队列) 的 生产者消费者模型

文章目录 阻塞队列&#xff08;BlockQueue&#xff09;介绍生产者消费者模型 介绍代码实现lockGuard.hpp&#xff08;&#xff09;Task.hpp&#xff08;任务类&#xff09;BlockQueue.hpp&#xff08;阻塞队列&#xff09;conProd.cc&#xff08;生产者消费者模型 主进程&#…

从来不懂K8s的人10分钟内将应用跑在了K8s中

大家可能都听说过 K8s 或者 docker &#xff0c;可能有容器编排的概念&#xff0c;知道这会提高运维效率&#xff0c;但是由于上手难度高迟迟没有学习它。 今天我以自己的实际经历教大家将自己的应用在10分钟内部署到k8s中&#xff0c;你不需要懂任何的 docker 命令和 k8s 命令…

LinkedList

LinkedList的模拟实现&#xff08;底层是一个双向链表&#xff09;LinkedList使用 LinkedList的模拟实现&#xff08;底层是一个双向链表&#xff09; 无头双向链表&#xff1a;有两个指针&#xff1b;一个指向前一个节点的地址&#xff1b;一个指向后一个节点的地址。 节点定…

STM32单片机实现Bootloader跳转的关键步骤

感谢关注&#xff01; 本期话题 现在越来越多的嵌入式设备支持远程自动升级&#xff0c;不需要再借助下载器。这样对于设备的维护非常方便。 当然若使设备支持远程升级&#xff0c;需要编写支持升级的程序代码&#xff0c;可以称之为 BootLoader。 也就是说&#xff0c;将设…

【二叉树构建与遍历3】先序遍历+后序遍历构建一个满二叉树并输出中序遍历 C++实现

注意&#xff1a;根据先序遍历与后序遍历只有在满二叉树的情况下才能确定一个唯一的树。这里介绍的是根据先序遍历后序遍历构建一个满二叉树并输出中序遍历顺序。 思路&#xff1a; 先来一个例子&#xff1a; 先序遍历序列为&#xff1a;FDXEABG 后序遍历序列为&#xff1a;…

股票委托接口的部分源码分析(一)

对于一些股票委托接口的源码分析需要具体指定的交易系统可能有不同的接口实现。以下是对一个常见的股票委托接口实现的源码分析示例&#xff1a; import requestsdef place_order(symbol, price, quantity, side): url https://example.com/api/place_order payload {…

gRPC 客户端调用服务端需要连接池吗?

发现的问题 在微服务开发中&#xff0c;gRPC 的应用绝对少不了&#xff0c;一般情况下&#xff0c;内部微服务交互&#xff0c;通常是使用 RPC 进行通信&#xff0c;如果是外部通信的话&#xff0c;会提供 https 接口文档 对于 gRPC 的基本使用可以查看文章 gRPC介绍 对于 g…

ClickHouse(二十三):Java Spark读写ClickHouse API

进入正文前&#xff0c;感谢宝子们订阅专题、点赞、评论、收藏&#xff01;关注IT贫道&#xff0c;获取高质量博客内容&#xff01; &#x1f3e1;个人主页&#xff1a;含各种IT体系技术&#xff0c;IT贫道_Apache Doris,大数据OLAP体系技术栈,Kerberos安全认证-CSDN博客 &…