前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >复杂约束下自动驾驶车辆的运动规划解析

复杂约束下自动驾驶车辆的运动规划解析

作者头像
一点人工一点智能
发布于 2023-03-29 05:45:04
发布于 2023-03-29 05:45:04
6620
举报

转载自:智驾最前沿

原文地址:复杂约束下自动驾驶车辆的运动规划解析

01  什么是Motion Planning

Motion Planning是在遵循道路交通规则的前提下,将自动驾驶车辆从当前位置导航到目的地的一种方法。

在实际开放道理场景下,自动驾驶要处理的场景非常繁杂:空旷的道路场景、与行人、障碍物共用道理的场景、空旷的十字路口、繁忙的十字路口、违反交通规则的行人/车辆、正常行驶的车辆/行人等等。场景虽然复杂,但都可以拆解为一系列简单行为(behavior)的组合:

将这些简单的行为(behavior)组合起来,就可以完成复杂的驾驶行为。

02  Motion Planning的约束条件(constraints)

Motion Planning是一个复杂的问题,它的执行过程需要满足很多约束条件:

2.1 车辆运动学约束

车辆运动受到运动学约束,比如它不能实现瞬时侧向移动,前驱的车辆必须依赖前轮的转向才能实现变道、转向等操作,在弯道上不能速度过快等等。通常我们采用单车模型(Bicycle Model)对车辆运动进行建模。

2.2 静态障碍物(Static Obstacle)约束

静态障碍物(Static Obstacle)是道路上静止的车辆、路面中间的石墩子等车辆不可行驶的区域。Motion Planning需要避开这些静态障碍物,避免与它们发生碰撞。解决碰撞的思路大概有两种:

1)将静态障碍物(Static Obstacle)在网格占位图中表示出来,然后检测规划路线是否与静态障碍物区域相交。

2)将车辆的轮廓扩大,比如扩展成一个圆形,然后检测障碍物是否与Circle发生碰撞。

2.3 动态障碍物约束

Motion Planning要实时处理行人、车辆等各种运动的障碍物,避免与障碍物发生碰撞事故。

2.4 道路交通规则约束

车辆在道路上行驶必须要遵守车道线约束规则(比如左转专用道只能左转、实线不能变道、路口必须遵守红绿灯的指示)和各种标志标牌的指示。

03  Motion Planning的优化目标

了解Motion Planning的约束条件之后,需要构造目标优化函数,然后最小化目标函数,从而获得在当前环境下的最优运动轨迹。目标函数的种类有很多,下面枚举一些常用的目标函数。

1)关注路径长度(Path Length),寻求到达目的地的最短路径。

2)关注通行时间(Travel Time),寻求到达目的地的最短时间。

3)惩罚偏离参考轨迹和参考速度的行为。

4)考虑轨迹平滑性(Smoothness)

5)考虑曲率约束(Curvature)

通过组合设计自己的目标优化函数,从而获得较好的Planning效果。

04  分级运动规划器

Motion Planning是一个异常复杂的问题,所以通常我们把它切分为一系列的子问题(Sub Problem)。比如Mission Planner、Behavior Planner、Local Planner、Vehicle Control等。

4.1 Mission Planner

Mission Planner关注High-Level的地图级别的规划;通过Graph Based的图搜索算法实现自动驾驶路径的规划。

4.2 Behavior Planner

Behavior Planner主要关注交通规则、其它道路交通参与者(自行车、行人、社会车辆)等等,决定在在当前场景下应该采取何种操作(如停车让行、加速通过、避让行人等等)。

Behavior Planner的实现方式比较常见的有几种:有限状态机(Finite State Machines)、规则匹配系统(Rule Based System)、强化学习系统(Reinforcement Learning)。

有限状态机中的State是各个行为决策,根据对外界环境的感知和交通规则的约束在各个状态之间转换。比如在路口红绿灯的场景,当路口交通灯为红色不可通行时,车辆会首先切换到Decelerate to Stop状态,然后在路口停止线完全停下来,进入Stop状态,并持续在Stop状态等待,直至交通灯变为绿色允许车辆通行,车辆进入Track Speed状态,继续前行。

Rule-Based System是通过一系列的分级的规则匹配来决定下一步的决策行为。比如交通灯绿色->通行;交通灯红色->停车等待。

基于强化学习的Behavior Planner系统如下:

4.3 Local Planner

Local Planner关注如何生成舒适的、碰撞避免的行驶路径和舒适的运动速度,所以Local Planner又可以拆分为两个子问题:Path Planner和Velocity Profile Generation。Path Planner又分为Sampling-Based Planner、Variational Planner和Lattice Planner。

最经典的Sampling-Based Planner算法是Rapidly Exploring Random Tree,RRT算法。

Variational Planner根据Cost Function进行优化调整,从而避开障碍物,生成安全的轨迹。

Lattice Planner将空间搜索限制在对车辆可行的Action Space。

Velocity Profile Generation要考虑到限速、速度的平滑性等。

Vehicle Control将Planner的规划结果转化为车辆的运动行为。

1. 书籍推荐-《强化学习与最优控制》

2. 两万字详解自动驾驶开发工具链的现状与趋势!

3. 自动驾驶规划控制常用的控制方法有哪些?

4. 无人驾驶系统技术架构梳理:从感知、规划到控制

5. 书籍推荐-《机器人路径规划与协作:基础、算法与实验》

6. 书籍推荐-《复杂地形中,SLAM技术在移动机器人中的应用》

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
Lua:协程,coroutine.create,coroutine.resume, coroutine.yield
http://cloudwu.github.io/lua53doc/manual.html#2.6 Lua 支持协程,也叫 协同式多线程。 一个协程在 Lua 中代表了一段独立的执行线程。 然而,与多线程系统中的线程的区别在于, 协程仅在显式调用一个让出(yield)函数时才挂起当前的执行。 调用函数 coroutine.create 可创建一个协程。 其唯一的参数是该协程的主函数。 create
立羽
2023/08/24
2670
挑战一晚上从零入门lua语言,直接对标Python快速上手
缘起:项目要用。 学习时间:懒,所以速战速决吧。 学习方法:直接对标Python。
看、未来
2021/12/01
1.5K0
挑战一晚上从零入门lua语言,直接对标Python快速上手
lua--协程、异常处理、面向对象
协程是单核的,是一个线程下执行的,所以每一时刻只会有一个协程在运行。线程一般由cpu调度,协程由用户调用
aruba
2022/06/27
6930
lua--协程、异常处理、面向对象
【Lua】协程
从多线程的角度看,协程(Coroutine)与线程(thread)类似:协程是一系列的可执行语句,拥有自己的栈、局部变量和指令指针,同时协程又与其它协程共享全局变量和其它几乎一切资源。 线程和协程的主要区别: 一个多线程程序可以同时并行运行多条线程,而协程却需要彼此协作地运行,即在任意时刻只能有一个协程运行,且协程的切换是在用户态手动控制的,只有当正在运行的协程显示的要求被挂起(suspend)时,其执行才会暂停。
六月丶
2022/12/26
6570
producer
在这个示例中,我们定义了两个函数:producer和consumer。producer函数是一个生产者,它生成一系列数字并使用coroutine.yield挂起。consumer函数是一个消费者,它通过调用coroutine.resume来消费产品。
Yolo-Yolo
2024/12/03
870
producer
代码片段|Lua使用协程制作定时器
Lua 中的协程(coroutine)是一种轻量级的线程,它们共享同一个全局状态,但拥有独立的栈空间。协程允许在 Lua 中实现非阻塞的多任务处理,而无需操作系统的线程调度。这使得协程非常适合用于实现像定时器、网络请求、异步 I/O 等场景。
keyle
2024/11/01
2120
代码片段|Lua使用协程制作定时器
coroutine
下面是一个使用 coroutine.wrap 的完整示例代码,它演示了如何创建和使用协同程序:
Yolo-Yolo
2024/12/11
740
coroutine
Lua基础教程2(长文预警)
这一篇记录一些关于Lua的更深入一些的东西主要是table的使用。但是不涉及IO,Debug,垃圾回收,OOP,数据库访问。这些东西我觉得可以单独放在一个专题写。
keyle
2024/11/01
1120
Lua基础教程2(长文预警)
lua语言:类型,基本语法,函数
两个取值 false 和 true。但要注意 Lua 中所有的值都可以作为条件。在控制结构的条 件中除了 false 和 nil 为假,其他值都为真。所以 Lua 认为 0 和空串都是真。
立羽
2023/08/24
5240
coroutine
以下是一个简单的 Lua 脚本,演示了如何使用协同程序来实现一个简单的任务队列处理器。
Yolo-Yolo
2024/12/10
560
coroutine
lua学习笔记
最重要的当然是工作原因,最近有个项目是相关于游戏服务器的,而用的框架是skynet,用的语言是lua。
用户7962184
2020/11/20
1K0
工具| 诸神之眼nmap定制化之并发处理
当我们使用nmap来进行大规模探测的时候,速度和准确度是摆在我们面前的两个问题,这时需要考虑到nmap的并发处理能力。 0x01 nmap本身的并发执行 相关参数 -T<0-5> Set timing template (higher is faster) --min-hostgroup/max-hostgroup <size> 并行主机扫描组大小 。 将多个目标IP地址分成扫描组,然后在同一时间对一个扫描组进行扫描。 hostgroup代表了一个扫描组。 --min-hostgroup 一个扫描组的下
漏斗社区
2018/03/28
3K0
工具| 诸神之眼nmap定制化之并发处理
lua
数学库由算术函数的标准集合组成,比如三角函数库(sin, cos, tan, asin, acos, etc.), 幂指函数(exp, log, log10),舍入函数(floor, ceil)、max、min,加上一个变量 pi。数学 库也定义了一个幂操作符(^)。 所有的三角函数都在弧度单位下工作。(Lua4.0 以前在度数下工作。)你可以使用 deg 和 rad 函数在度和弧度之间转换。
radaren
2018/08/28
2.3K0
利用LUA协程实现FUTURE模式
1. Future模式: 参见 http://www.cnblogs.com/zhiranok/archive/2011/03/26/Future_Pattern.html 使用future的好处是即利用了异步的并行能力,又保证主逻辑串行执行,保持简单。 2. Lua 协程 sina Timyang 的介绍 http://timyang.net/lua/lua-coroutine/ lua coroutine 通过create创建一个伪线程,该“线程”通过yield可以挂起自己,通过调用resume可以使该
知然
2018/03/09
2.2K0
破解 Kotlin 协程 番外篇(2) - 协程的几类常见的实现
前面一篇文章我们大概讨论了协程是怎么一回事,也举了一些例子,不过整体上覆盖的细节比较少。这篇文章我们按照协程的经典论文 “Revisiting Coroutines” 的思路展开,详细的讨论下协程究竟是怎样的存在。当然由于涉及语言较多,个人水平有限,如有不恰当之处,欢迎大家指正。
bennyhuo
2020/02/20
1.6K0
Lua热更新
此文章部分内容和思维导图来源于唐老狮相关Lua课程,通过Vistual Studio Code语法测试,如有问题,请在以下留言
七鳄不是鳄
2023/02/27
3.6K0
Lua热更新
openresty源码剖析——lua代码的执行
上一篇文章中(https://cloud.tencent.com/developer/article/1037840)我们讨论了openresty是如何加载lua代码的 那么加载完成之后的lua代码又是如何执行的呢 ##代码的执行  在init_by_lua等阶段  openresty是在主协程中通过lua_pcall直接执行lua代码 而在access_by_lua  content_by_lua等阶段中,openresty创建一个新的协程,通过lua_resume执行lua代码 二者的区别在于能否执行n
magicsoar
2018/02/06
2.5K0
Lua 5.1 参考手册
Lua 是一个扩展式程序设计语言,它被设计成支持通用的过程式编程,并有相关数据描述的设施。 Lua 也能对面向对象编程,函数式编程,数据驱动式编程提供很好的支持。 它可以作为一个强大、轻量的脚本语言,供任何需要的程序使用。 Lua 以一个用 clean C 写成的库形式提供。(所谓 Clean C ,指的 ANSI C 和 C++ 中共通的一个子集)
sunsky
2020/08/20
4.1K0
Python基础11-迭代器,生成器
-多年互联网运维工作经验,曾负责过大规模集群架构自动化运维管理工作。 -擅长Web集群架构与自动化运维,曾负责国内某大型金融公司运维工作。 -devops项目经理兼DBA。 -开发过一套自动化运维平台(功能如下): 1)整合了各个公有云API,自主创建云主机。 2)ELK自动化收集日志功能。 3)Saltstack自动化运维统一配置管理工具。 4)Git、Jenkins自动化代码上线及自动化测试平台。 5)堡垒机,连接Linux、Windows平台及日志审计。 6)SQL执行及审批流程。 7)慢查询日志分析web界面。
DriverZeng
2022/09/26
2860
Python基础11-迭代器,生成器
每天3分钟,重学ES6-ES12(十五)异步代码处理方案
持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第27天,点击查看活动详情
虎妞先生
2022/09/19
4180
相关推荐
Lua:协程,coroutine.create,coroutine.resume, coroutine.yield
更多 >
LV.1
星河造梦坊青岛信息科技有限公司
目录
  • 01  什么是Motion Planning
  • 02  Motion Planning的约束条件(constraints)
    • 2.1 车辆运动学约束
    • 2.2 静态障碍物(Static Obstacle)约束
    • 2.3 动态障碍物约束
    • 2.4 道路交通规则约束
  • 03  Motion Planning的优化目标
  • 04  分级运动规划器
    • 4.1 Mission Planner
    • 4.2 Behavior Planner
    • 4.3 Local Planner
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档