【深蓝学院】移动机器人运动规划--第4章 动力学约束下的运动规划--笔记

news2024/11/18 4:22:19

0. Outline

在这里插入图片描述

1. Introduction

  1. 什么是kinodynamic?
    在这里插入图片描述

运动学(Kinematics)和动力学(Dynamics)都是力学的分支,涉及物体的运动,但它们研究的焦点不同。

  • 运动学专注于描述物体的运动,而不涉及运动的原因。它包括位置、速度、加速度等概念,并研究这些量之间的关系,以及它们如何随时间变化。运动学问题通常涉及计算物体在没有引力或其他力的作用下的理想运动。
  • 动力学则涉及力及其产生的效果,包括物体如何响应这些力。它关注的是运动的原因,即力和力矩是如何影响物体的运动状态。动力学分析会考虑到质量、重力、摩擦力以及其他作用在物体上的力,并试图解释物体是如何开始运动、维持运动或改变运动状态的。

总结来说,运动学是描述运动本身的规律(“发生了什么”),而动力学是研究产生这些运动的力的规律(“为什么会这样”)。

对于我们的运动规划,结合运动学和动力学,就不只是单纯地把运动目标当做质点看待,还要考虑微分约束,力的作用(加速度等)

  1. 为什么是kinodynamic planning?
  • 遵循corse-to-fine的过程。
  • 后端traj优化只能局部进行。
  • 不可行的解对于不完整的系统是无用的。
    在这里插入图片描述
    前面提到,本课程讲述的均为学院派的path planning的方法,也就是遵循上图所示的pipeline的方法:

给定任务->前端(在地图上)找出path->后端优化,生成机器人可执行的trajectory->完成plan任务。

会有一个问题,我们已经有了后端的优化,为什么不直接把考虑kinodynamic的任务交给后端完成?

答案是当然可以完全交给后端,但是这样会把所有动力学相关的约束都加到后端,使得后端非常难以设计。

相反地,如果在前端path finding时考虑一些kinodynamic的约束,前端生成的path在拓扑结构上比较符合实际的动力学模型,那么后端优化就相对容易进行,从前端得到的path会更容易优化。

也即遵循corse-to-fine的过程。

在这里插入图片描述

后端的轨迹优化只能局部地进行,上右图为例,drone正在往右上方运动,goal是五星,如果不考虑kinodynamic,则可能生成的path是紫色实现,被后端优化为紫色虚线,则需要减速到0再调头避障,如果考虑kinodynamic,path可能是绿色实线,被优化为绿色虚线,更符合实际的运动情况。

上左图的泊车规划mission,汽车很经典的一个动力学约束即不能横向移动,所以在path finding时就需要考虑这点。

实际上,考虑和不考虑动力学模型,生成的path在地图上的topology(拓扑结构)是不同的,不同拓扑结构的path基本上无法被优化为相同的trajectory。

例子:
在这里插入图片描述
独轮车和差速驱动小车,其中 u l , u r u_l,u_r ul,ur分别是左右轮转动的角速度,为了与独轮车的角速度 ω \omega ω做区分,使用了 u u u

在这里插入图片描述
以上是不同小车模型对应的约束,可以参考UIUC一个professor的这本书,这本书作者的自传还是比较有意思的。

2. State Lattice Planning(状态栅格搜索算法)

在这里插入图片描述

回顾基于搜索和基于采样的方法,共性是:构建搜索树对于path planning很关键。

在这里插入图片描述
我们之前不同node之间的连线(边)是直线,且假设这个直线是机器人feasiable的,但实际中不一定feasiable,我们可以构建feasiable edge,而构建的方法有两种:

  • Forward direction:在控制空间中离散地采样
  • Reverse direction:在状态空间中采出很多状态,再从状态生成到当前状态的feasiable edge

下面着重讲这两种方法。

首先看与L2和L3的联系:
在这里插入图片描述

L2中的grid map中的四连接或者八连接其实就是一种forward direction方法:在控制空间中均匀地采样。

在这里插入图片描述
L3中的PRM实际上就是在状态空间(state space)中采样,然后进行连接,collision checking就是尝试寻找feasiable motion connections的过程。

对于一个机器人模型 s ′ = f ( s , u ) s^\prime=f(s,u) s=f(s,u),其中 s s s为状态state, u u u为输入(类似于SLAM运动和观测方程),初始状态为 s 0 s_0 s0,可以通过以下两种方法生成feasiable local motion:
在这里插入图片描述

  1. 正向计算:在控制空间中采样,固定 输入 u ,控制时长 T 输入u,控制时长T 输入u,控制时长T,算出 s s s,此方法目的性不强,虽然实现容易,但是planning的效率很低。
  2. 反向计算:在状态空间中采样,采样出 s s s,计算出 u , T u,T u,T(状态 s 0 s_0 s0 s f s_f sf之间的connection),当然也可以固定一个 T T T,此方法目的指向性很强,难实现,但planning效率高。

以下的各种模型不做推导,默认给出的模型是使用共识。

2.1 Sample in control space

在这里插入图片描述
给定如上无人机模型,状态量为 s s s,包括位置 [ x y z ] \begin{bmatrix}x\\y\\z\end{bmatrix} xyz 和速度 [ x ˙ y ˙ z ˙ ] \begin{bmatrix}\dot{x}\\\dot{y}\\\dot z\end{bmatrix} x˙y˙z˙ ,输入为加速度 [ x ¨ y ¨ z ¨ ] \begin{bmatrix}\ddot{x}\\\ddot{y}\\\ddot z\end{bmatrix} x¨y¨z¨ ,系统方程为 s ˙ = A ⋅ s + B ⋅ u \dot{s}=A\cdot s+B\cdot u s˙=As+Bu为2阶方程。

当然,输入也可以为加速度的导数,叫做Jerk,则此时A和B分别需要增加维度,系统变为3阶。

在control space中进行8次采样,假设control time T = 1.0 s T=1.0s T=1.0s,初速度 v 0 = [ 1 0 0 ] v_0=\begin{bmatrix}1\\0\\0\end{bmatrix} v0= 100 ,则由运动学公式 P = P 0 + v 0 T + 1 2 a T 2 P=P_0+v_0T+\frac{1}{2}aT^2 P=P0+v0T+21aT2,可以得到 1.0 s 1.0s 1.0s之后的系统的状态,则到达这个状态过程中的轨迹就是前述的feasiable motion connections。

上最右图为jerk作为输入的结果。

其中系统为several-order integrator若干阶积分器,A的形式比较特殊,为nilpotent(幂零)矩阵(用来形容一个元素或矩阵的幂的某个次幂等于零),这个形式对于计算很重要。

在这里插入图片描述

如果我们想知道在运动过程中某个时刻系统处于什么状态,可以使用上右式计算,其中可对 e A t e^{At} eAt进行无穷级数展开,而由于A nilpotent,所以只需要展开前几项不为0的即可,于是 e A t e^{At} eAt就有一个closed-form的表达。

在这里插入图片描述

一个节点上进行了一次control space中的sample到了新的节点之后,在新的节点上继续进行sample,此过程不断进行,最终就形成了lattice graph,如上图所示为在control space中9离散化和25离散化的的lattice graph。

注意:

  • 在搜索过程中,为了节省计算时间,只在必要时才build graph,
  • 当是新发现node或者edge时才进行构建。
  • 可节省时间和计算资源。

在这里插入图片描述
给予kinodynamic的搜索,与之前的搜索不一样的点在于搜索树的构建,可以事先构建lattice graph的搜索树,也可以像上述的necessary时再构建,构建时遵循kinodynamic的约束,最终将collision-free的加入到搜索树中。

2.2 Sample in state space

在这里插入图片描述
上图所示对应一个Reeds & Shepp’s car的模型,不能侧移,8个neighbors只有6个能够直接到达,于是得到了6个sample的state,然后反算出如何从现在的state到达sample出的node(得到边)。在下一个neighbor上继续sample,反复sample即完成lattice graph的构建。

在这里插入图片描述
上图所示即为一个平面机器人模型,基于state space中的sample,构建了一个两层的lattice graph,从最里面的起点开始,向外sample一层,得到sampled state,反算出从各个state如何连接到当前状态的边,然后再向外sample一层,重复这个过程,得到第二层lattice graph。多层lattice graph仅仅是第一层不同,因为初始状态不同,第一层需要跟初始状态进行连接。

整个lattice graph复杂度比较高,所以实时使用时不会构建很深的lattice graph。

2.3 Comparison

在这里插入图片描述
在control space和state space中采样的对比:

  • 相同点:且在初始角速度方向的轨迹非常dense,如果某条轨迹发生了碰撞,那么周围其它的轨迹也很可能都碰撞,即对不同的输入有非常相似的输出。
  • 不同点:同样地,以汽车为例,在control space中sample会存在很多not collision-free的情况,目的性不强,而state space中采样目的性较强。

讲到这里,自然会产生一个疑问:既然state space中采样这么高效,为什么不直接在state space中采样?放弃control space中采样?
答案是在state space中采样很难实现(hard to implement),下面将继续讨论Boundary value problem。

3. Boundary value problem(BVP,两点边界值最优控制问题)

3.1 Exmaple:Drone

在这里插入图片描述
BVP是state sampled lattice planning的基础,通常转换为复杂的数值优化问题。
给定这样一个例子:以横轴x坐标为状态,初始状态为a,T时刻状态为b
在这里插入图片描述
假设x方向运动满足一个5阶多项式,给定了边界条件,求解超定方程,显然有多组解,找到解不难,难点是找到最优解。

在这里插入图片描述

最优化边界值问题即OBVP,
状态由p,v,a这3部分组成,输入 u = j e r k u=jerk u=jerk,初始状态和目标状态已知,目的是最小化jerk平方的积分(当做cost function),针对无人机,xyz每个方向分别考虑,这里为了简化问题,只考虑一维的情况,把 k k k省略。
在这里插入图片描述

这里使用"Pontryagin’s minimum principle" (“庞特里亚金最小值原理”)来求解OBVP。(这是控制理论中的一个重要原则,由苏联数学家L.S.庞特里亚金(Lev Semyonovich Pontryagin)提出,主要应用于最优控制问题的解决。这个原理提供了求解确定控制变量以最小化性能指标的问题的必要条件。)

求解过程需要定义对应的costate和 Hamiltonian function(在最优控制理论中,“costate”一般翻译为“共轭态”或者“余态”。它在庞特里亚金最小值原理中扮演着重要角色,与系统状态变量相对应的是一组新的变量,这些变量通过哈密顿体系的方程与状态变量相联系。共轭态变量通常在解决最优控制问题时出现,用于构造系统的哈密顿函数。)

costate维度和状态变量维度相同。

因为我们的目标状态是一个硬约束,必须满足,所以我们的边界条件是不满足的。

在这里插入图片描述

由H求出最优的 λ \lambda λ的形式, H H H s = [ p , v , a ] s=[p,v,a] s=[p,v,a]求导取负得 ( 0 , − λ 1 , − λ 2 ) (0,-\lambda_1,-\lambda_2) (0,λ1,λ2),设 λ 1 = α \lambda_1=\alpha λ1=α,则整个 λ \lambda λ可以表达为

1 T [ − 2 α 2 α t + 2 β − α t 2 − 2 β t − 2 γ ] \begin{align} \frac{1}{T}\begin{bmatrix}-2\alpha\\2\alpha t+2\beta \\-\alpha t^2-2\beta t-2\gamma \end{bmatrix} \end{align} T1 2α2αt+2βαt22βt2γ
λ \lambda λ形式先放在这里,其中 α , β , γ \alpha,\beta,\gamma α,β,γ都是未知数,后面可用硬约束确定。

考虑 u ∗ ( t ) u^*(t) u(t)是对 H H H求最小值,因为 s ∗ s^* s为最优, s s s中有 p , v , a p,v,a p,v,a已经固定,所以 a r g m i n j ( t ) H ( s ∗ ( t ) , u ( t ) , λ ( t ) ) arg \mathop{min}\limits_{j(t)}H(s^*(t),u(t),\lambda(t)) argj(t)minH(s(t),u(t),λ(t))只跟$$j有关,提出来为

H = 1 T j 2 + λ 3 j \begin{align} H=\frac{1}{T}j^2+\lambda_3 j \end{align} H=T1j2+λ3j
a r g m i n j ( t ) H arg \mathop{min}\limits_{j(t)}H argj(t)minH,则求导等于0得
H ′ = 2 T j + λ 3 = 0 \begin{align} H^\prime=\frac{2}{T}j+\lambda_3=0 \end{align} H=T2j+λ3=0

j = λ 3 T 2 \begin{align} j=\lambda_3\frac{T}{2} \end{align} j=λ32T
由式(1)的推导
λ 3 = 1 T ( − α t 2 − 2 β t − 2 γ ) \begin{align} \lambda_3=\frac{1}{T}(-\alpha t^2-2\beta t-2\gamma) \end{align} λ3=T1(αt22βt2γ)
带入(4)得
u ∗ ( t ) = 1 2 α t 2 + β t + γ \begin{align} u^*(t)=\frac{1}{2}\alpha t^2+\beta t+\gamma \end{align} u(t)=21αt2+βt+γ

得到 u ∗ ( t ) u^*(t) u(t)后,分别对 u ∗ ( t ) u^*(t) u(t)进行一二三次积分得 s ∗ ( t ) s^*(t) s(t)的三个分量,即可得 s ∗ ( t ) s^*(t) s(t)
在这里插入图片描述
其中 s ∗ ( 0 ) = s ( 0 ) = [ p 0 , v 0 , a 0 ] T s^*(0)=s(0)=[p_0,v_0,a_0]^T s(0)=s(0)=[p0,v0,a0]T

在这里插入图片描述

再带入我们的硬约束,即目标状态 s ( t ) = s f s(t)=s_f s(t)=sf,其中 [ Δ p Δ v Δ a ] \begin{bmatrix} \Delta p\\\Delta v\\\Delta a \end{bmatrix} ΔpΔvΔa 可算出,只与 T T T相关,所以最终 [ α β γ ] \begin{bmatrix}\alpha\\\beta\\\gamma \end{bmatrix} αβγ 均只与 T T T有关,确定 T T T之后,可以算出其中任意变量,包括cost J J J,那么最小化cost最终转换为一个多项式求根的问题。

在这里插入图片描述

对于我们这里的硬约束,边界条件不满足,无法使用,直接使用给定的fixed final state来计算 [ α β γ ] \begin{bmatrix}\alpha\\\beta\\\gamma \end{bmatrix} αβγ

最后,回归到问题本身,我们的目的是求出从起点到终点的feasiable connections,求出了最优state s ∗ ( t ) s^*(t) s(t)的表达式,也就知道了从起点到终点的各个时刻的state,轨迹也就求出了。

一般情况
前面的情况都是fixed final state,更一般地,如果final state is partially-free部分自由,只固定了一部分,如最终状态 s f s_f sf中只知道 p f p_f pf,而 v f , a f v_f,a_f vf,af未知,那么最终的自由度也相应的增大,对于costate也有边界条件。(这部分会在作业中涉及到,暂不深入讨论)
在这里插入图片描述

3.2 Another example:Car

在这里插入图片描述
与drone不同的是,car无法侧移,无法像drone那样再任意一个轴上自由运动,car运动的控制:前后的 v v v和打方向盘的 ω \omega ω

构造满足car的动力学约束,解满足次约束的轨迹生成问题,此问题比drone更复杂,不容易colse-formed linearization,所以一般采用数值求解,求取Jacobian和Hessian,所以该过程一般是offline进行的,offline生成lattice graph,在线地贴到机器人的状态桑,进行online search
在这里插入图片描述
上图左是在state space中sample,右下贴到机器人状态里,贴完之后,问题就转换为一个graph search problem,可以使用A*,JPS等求解。右上是在control space中sample。

3.3 Trajectory Library

在这里插入图片描述
这里指的是单层的lattice,用于local collision avoidance
不是用于graph search的,而是在单层lattice上对不同的trajectory进行打分(risk,information,energy等),选择一条collision free的、cost小的trajectory,对于找不到collision free的,可能需要借助global planner进行脱困等。
在这里插入图片描述
Trajectory Library的一个应用,ref[6]

3.4 Heuristic(略讲)

在这里插入图片描述
kinodynamic planning也希望借助之前的heuristic来加速求解,此处的heuristic function的设计涉及两个方面,ref[7]:

  1. 假设不存在障碍物(Assume no obstacle existence):基于动力学约束进行无障碍物规划。
  2. 假设不存在动力学(Assume no dynamic existence):基于障碍物进行无动力学约束规划。

在这里插入图片描述

OBVP的A*中,与之前不同点在于g值的计算,grid map可能直接是格子的距离,而这里需要考虑动力学约束。

在这里插入图片描述

上面这个工作使用了“Assume no obstacle existence”的思想,ref[8]。上左图,如果直接使用Euclidean 2D Distance作为heuristic,需要扩展很多节点,而如果使用Assume no obstacle existence进行引导(文章中叫non-holonomic-without-obstacles),会减少很多需要扩展的节点。


补充non-holonomic-without-obstacles:

在机器人学和自动控制领域,“non-holonomic”一词用于描述那些不能完全通过其局部速度来控制的系统。非完整性(non-holonomic)系统的典型特点是它们的运动状态被一些不等于系统自由度数量的约束所限制,这些约束是非积分的,这意味着它们不能直接转换为位置的约束。例如,汽车通常被视为非完整性系统,因为它不能直接横向移动,汽车的移动方向受到与车轮方向相一致的约束。

“without obstacles”意味着在考虑系统运动或进行路径规划时,我们假设环境中没有障碍物。因此,系统的运动规划将不需要考虑绕过障碍物的问题。

将这两个概念结合起来,“non-holonomic-without-obstacles”通常指的是对一个非完整性系统(如汽车、机器人等)进行运动规划,而且在这个规划过程中,我们假设环境中没有需要避免的障碍物。简而言之,这是一个关于非完整性系统在空旷环境下运动规划的场景。


3.5 Planning in Frenet-serret Frame(略讲)

在运动规划和机器人学领域,Frenet-Serret框架(或简称Frenet框架)提供了一种描述物体在曲线路径上运动的方法。这个框架由三个正交单位向量组成:切向量(T),法向量(N)和副法向量(B)。这三个向量分别描述了路径的方向、路径曲率的方向以及路径扭率的方向。在这个框架下,物体的运动可以通过沿着切线(纵向)的速度、法线(横向)的偏移以及副法线上的变化来描述。

“Planning in Frenet-Serret frame” 指的是在这样的坐标系统下进行路径或运动的规划。在自动驾驶汽车技术中,这种方法常用来计算车辆在道路上的理想轨迹,其中车辆的位置可以根据沿道路中心线测量的距离(纵向)和相对于道路中心线的横向偏移来定义。这种规划方法可以帮助算法有效地处理曲线道路,同时考虑车辆的动态约束和周围环境。

在这里插入图片描述
车辆自动驾驶其中有一个任务是跟随车道线,可以把任务分解:

  1. 可以把车辆的运动(状态)分解为切向和径向的运动,表示为两个五次多项式(为什么是5次,可以参考论文ref[9],ref[10]),
  2. 求解OBVP问题

在这里插入图片描述
状态同样为 [ p , v , a ] [p,v,a] [p,v,a],终止条件我们一般不希望车子出现侧滑,所以 v , a v,a v,a一般都为0,然后解OBVP。

切向方向比较复杂,具体可以参考ref[9][10].

提供一个python实现的robotics仿真的平台ref[15]

4. Hybrid A*(search based kinodynamic planning具体算法)

一种具体的kinodynamic planning算法。

4.1 Workflow

在这里插入图片描述
基本思想:在control space中sample的lattice graph太过稠密,且采样出的traj不够diverge,一条traj发生collision之后,neighbors也容易发生。结合A*和lattice graph的思想,在lattice graph构建过程中每个grid中只保留一个feasiable connection node,通过一种方法计算计算cost,如果当前grid中node的cost比之前node的小,替换之前的node,此做法称为prune剪枝。ref[11,12]

在这里插入图片描述
上图为hybrid A* 的伪代码,Hybrid A* 的 f = g + h f=g+h f=g+h中的 g g g h h h 都和传统A* 不同,都需要考虑kinodynamic进行设计。

相较于传统A*,Hybrid A* 除了需要维护每个节点的 f f f值,还需要维护每个node的state(比如位置,速度,加速度)。

在这里插入图片描述
ref[11,12]中的heuristic的设计对比,abcd分别为

  • 2D欧式距离,
  • non-holonomic-without-obstacles,
  • non-holonomic-without-obstacles在死胡同时work bad,
  • non-holonomic-without-obstacles + holonomic-with-obstacles(A*,Dijkstra等shortest path算法)。(这里的“+”不一定为数值加)

4.2 Other tricks

在这里插入图片描述
Analytic Expansions即one-shot heuristic,指在Hybrid A* 搜索过程中,尝试直接不考虑动力学模型,使用sortest-path算法解出cur to goal的optimal path,然后对该path进行kinodynamic check和collision-check,如果都满足则可直接结束当前hybrid A* 求解,完成planning。

在实际中,频繁地进行one-shot会耗费大量计算时间,所以可以每隔N次(如20次)进行一次one-shot,如果one-shot成功则直接结束,否则继续hybrid A*。随着hybrid A* 的搜索,search graph会越来越接近goal,one-shot成功的概率也会越来越高,相应地,N可以变小,越来越频繁地进行one-shot,以提高搜索效率。

4.3 Application

在这里插入图片描述
在这里插入图片描述
Boyu Zhou, Fei Gao在phd阶段的一项工作,(ref[14]):(前端)kinodynamic的path search(hybrid A*) + (后端)距离场的梯度进行局部的飞行器轨迹优化

运用kinodynamic而非shortest-path的前端目的是给无人机一个更好的初值,飞得更快。

这里UAV model是nilpotent,状态转移可以close-formed推导出来,可以evaluate cost,为search提供了便利。

5. Kinodynamic RRT*

简记为KRRT*
在这里插入图片描述

和RRT* 相似,但是有区别。

在这里插入图片描述
如何采样,RRT* 直接采样位置,而Kinodynamic RRT* 需要在full state space中采样,包括p,v,a等。

在这里插入图片描述
在这里插入图片描述
由于汽车控制是non-holonomic,存在运动约束,所以是一个带约束的最优控制问题OBVP。对于OBVP的求解,之前用的是Pontryagin’s minimum principle构建Hamiltonian function那一套来求解,KRRT* 论文中采用的求解方法是构建一个cost函数 c [ π ] c[\pi] c[π],并最小化该函数,ref[17]。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
RRT* 中寻找x_near只在低维画个圆,在圆内找,圆的半径实际上就是距离采样点x_new的cost相同的流形,而KRRT* 需要考虑高维的near,此处定义距离x_new的cost相同,“半径”取为 r r r,引申出**正向可达集(forward reachable set),反向可达集(backward reachable set)。**正向是我到哪,反向是哪到我。

确定x_Near,ChooseParent时需要计算backward reachable set(哪到我),进行rewire时需要计算forward reachable set(我到哪)。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


本章涉及的内容非常多,很多方面并没有深入探究,提供了很多参考论文,可自行仔细研究。
摘重要的文献看BVP,Hybrid A*,Kinodynamic RRT*这三个工作。

6. Reference

[1] (control space sample参考论文) Search-based Motion Planning for Quadrotors using Linear Quadratic
Minimum Time Control,Sikang Liu, Nikolay Atanasov, Kartik Mohta, and Vijay Kumar.

[2] (state space sample参考论文) Generating Near Minimal Spanning Control Sets for Constrained Motion Planning in Discrete State Spaces,Mihail Pivtoraiko and Alonzo Kelly.

[3] (两种sample方法的对比)State Space Sampling of Feasible Motions for High-Performance Mobile Robot Navigation in Complex Environments, Thomas M. Howard, Colin J. Green, and Alonzo Kelly.

[4] (OBVP推导部分参考教材)A Computationally Efficient Motion Primitive for Quadrocopter Trajectory Generation, Mark W. Mueller, Markus Hehn, and Raffaello D’Andrea Dynamic Programming and Optimal Control, D. P. Bertsekas.

[5] (Car的最优轨迹生成问题参考论文,34)Optimal Rough Terrain Trajectory Generation for Wheeled Mobile Robots, Thomas M. Howard Alonzo Kelly

[6] (Trajectory Library应用参考论文) Maximum Likelihood Path Planning for Fast Aerial Maneuvers and Collision Avoidance Ji Zhang, Chen Hu, Rushat Gupta Chadha, and Sanjiv Singh.

[7] (kinodynamatic heuristic design参考论文) Planning Long Dynamically Feasible Maneuvers for Autonomous Vehicles, Maxim Likhachev, Dave Ferguson.

[8] (Heuristic design的工作参考论文) Path Planning for Autonomous Vehicles in Unknown Semi-structured Environments, Dmitri Dolgov, Sebastian Thrun, Michael Montemerlo, James Diebel.

[9] (Planning in Frenet-serret Frame参考1) Optimal Trajectory Generation for Dynamic Street Scenarios in a Frenet Frame, Moritz Werling, Julius Ziegler, Sören Kammel, and Sebastian Thrun

[10] (Planning in Frenet-serret Frame参考2) Optimal trajectories for time-critical street scenarios using discretized terminal manifolds, Moritz Werling, Sören Kammel, Julius Ziegler and Lutz Gröll

[11] (Hybrid A*参考论文1) Practical Search Techniques in Path Planning for Autonomous Driving, Dmitri Dolgov, Sebastian Thrun.

[12] (Hybrid A*参考论文2) Path Planning for Autonomous Vehicles in Unknown Semi-structured Environments, Dmitri Dolgov, Sebastian Thrun.

[13] (Hybrid A*应用参考1) Practical Search Techniques in Path Planning for Autonomous Driving, Dmitri Dolgov, Sebastian Thrun.

[14] (Gao Fei phd阶段hybrid A*相关的drone motion planning工作) Robust and Efficient Quadrotor Trajectory Generation for Fast Autonomous Flight, Boyu Zhou, Fei Gao.

[15] (机器人算法仿真平台1) https://pythonrobotics.io/

[16] (机器人算法仿真平台2) https://atsushisakai.github.io/PythonRobotics/index.html

[17] (KRRT* 与3.1节不同的OBVP求解方法) F. Lewis, V. Syrmos. Optimal Control. John Wiley & Sons.

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

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

相关文章

反应式编程

反应式编程 前言1 反应式编程概览2 初识 Reactor2.1 绘制反应式流图2.2 添加 Reactor 依赖 3.使用常见的反应式操作3.1 创建反应式类型3.2 组合反应式类型3.3 转换和过滤反应式流3.4 在反应式类型上执行逻辑操作 总结 前言 你有过订阅报纸或者杂志的经历吗?互联网的确从传统的…

第66讲管理员登录功能实现

项目样式初始化 放assets目录下; border.css charset "utf-8"; .border, .border-top, .border-right, .border-bottom, .border-left, .border-topbottom, .border-rightleft, .border-topleft, .border-rightbottom, .border-topright, .border-botto…

WWW 万维网

万维网概述 万维网 WWW (World Wide Web) 并非某种特殊的计算机网络。 万维网是一个大规模的、联机式的信息储藏所。 万维网用链接的方法能非常方便地从互联网上的一个站点访问另一个站点,从而主动地按需获取丰富的信息。 这种访问方式称为“链接”。 万维网是分…

线上编程答疑解惑回顾,初学编程中文编程在线屏幕共享演示

线上编程答疑解惑回顾,初学编程中文编程在线屏幕共享演示 一、学编程过程中有不懂的怎么办? 编程入门视频教程链接 https://edu.csdn.net/course/detail/39036 编程工具及实例源码文件下载可以点击最下方官网卡片——软件下载——常用工具下载——编…

Python入门知识点分享——(二十)继承和方法重写

今天是大年三十,祝大家龙年大吉,当然无论何时何地,我们都不要忘记继续学习。今天介绍的是继承和方法重写这两种面向对象编程特点。继承机制指的是,一个类(我们称其为子类或派生类)可以使用另一个类&#xf…

无心剑中译佚名《春回大地》

The Coming of Spring 春回大地 I am coming, little maiden, With the pleasant sunshine laden, With the honey for the bee, With the blossom for the tree. 我来啦,小姑娘 满载着欣悦的阳光 蜂儿有蜜酿 树儿有花绽放 Every little stream is bright, All …

【Leetcode】LCP 30. 魔塔游戏

文章目录 题目思路代码结果 题目 题目链接 小扣当前位于魔塔游戏第一层,共有 N 个房间,编号为 0 ~ N-1。每个房间的补血道具/怪物对于血量影响记于数组 nums,其中正数表示道具补血数值,即血量增加对应数值;负数表示怪…

Apache Zeppelin 整合 Spark 和 Hudi

一 环境信息 1.1 组件版本 组件版本Spark3.2.3Hudi0.14.0Zeppelin0.11.0-SNAPSHOT 1.2 环境准备 Zeppelin 整合 Spark 参考:Apache Zeppelin 一文打尽Hudi0.14.0编译参考:Hudi0.14.0 最新编译 二 整合 Spark 和 Hudi 2.1 配置 %spark.confSPARK_H…

moduleID的使用

整个平台上有很多相同的功能,但是需要不同的内容。例如各个模块自己的首页上有滚动新闻、有友好链接等等。为了公用这些功能,平台引入了moduleID的解决方案。 在前端的配置文件中,配置了模块号: 前端页面请求滚动新闻时&#xff0…

Sam Altman计划筹集5至7万亿美元;OPPO发布AI时代新功能

🦉 AI新闻 🚀 Sam Altman计划筹集5至7万亿美元,建立全球芯片帝国 摘要:Sam Altman宣布计划筹集5至7万亿美元来建立全球芯片帝国,以满足日益增长的AI基础设施需求。他已在全球寻求资金,包括中东土豪。此外…

Flume拦截器使用-实现分表、解决零点漂移等

1.场景分析 使用flume做数据传输时,可能遇到将一个数据流中的多张表分别保存到各自位置的问题,同时由于采集时间和数据实际发生时间存在差异,因此需要根据数据实际发生时间进行分区保存。 鉴于此,需要设计flume拦截器配置conf文件…

Java 内存区域介绍

(1)程序计数器 程序计数器主要有两个作用: 字节码解释器通过改变程序计数器来依次读取指令,从而实现代码的流程控制,如:顺序执行、选择、循环、异常处理。 在多线程的情况下,程序计数器用于记录…

【开源】JAVA+Vue.js实现计算机机房作业管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 登录注册模块2.2 课程管理模块2.3 课时管理模块2.4 学生作业模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 课程表3.2.2 课时表3.2.3 学生作业表 四、系统展示五、核心代码5.1 查询课程数据5.2 新增课时5.3 提交作…

360 安全浏览器 - 页面布局 - 常用网址

360 安全浏览器 - 页面布局 - 常用网址 自定义样式 let myStyle {https://www.baidu.com/: {color: #001483,backgroundColor: #FFF,icon: https://www.baidu.com/favicon.ico},https://blog.csdn.net/jx520: {backgroundColor: #fc5531,icon: https://g.csdnimg.cn/static/l…

离线数仓(一)【数仓概念、需求架构】

前言 今天开始学习数仓的内容,之前花费一年半的时间已经学完了 Hadoop、Hive、Zookeeper、Spark、HBase、Flume、Sqoop、Kafka、Flink 等基础组件。把学过的内容用到实践这是最重要的,相信会有很大的收获。 1、数据仓库概念 1.1、概念 数据仓库&#x…

【Linux】指令提权-sudo

Hello everybody,新年快乐!哈哈!今天打算给大家讲讲指令提权的相关知识,虽然内容不多,但有时却很有用。在我们学习过权限,vim后就可以学习指令提权啦,没看过的宝子们建议先去看一看我之前的文章…

〖大前端 - ES6篇②〗- let和const

说明:该文属于 大前端全栈架构白宝书专栏,目前阶段免费,如需要项目实战或者是体系化资源,文末名片加V!作者:哈哥撩编程,十余年工作经验, 从事过全栈研发、产品经理等工作,目前在公司…

缓存穿透、缓存击穿与缓存雪崩

缓存穿透、缓存击穿与缓存雪崩 1.本质区别 缓存穿透指的是数据库不存在数据,导致无法缓存,每次查询都查数据库,数据库压垮 缓存击穿指的是缓存键值对key过期了,key过期期间,大量请求访问,不经过缓存&…

Python操作MySQL基础

除了使用图形化工具以外,我们也可以使用编程语言来执行SQL从而操作数据库。在Python中,使用第三方库: pymysql来完成对MySQL数据库的操作。 安装第三方库pymysql 使用命令行,进入cmd,输入命令pip install pymysql. 创建到MySQL的数据库连接…

代码随想录算法训练营day15||二叉树part02、102.二叉树的层序遍历、 226.翻转二叉树(优先掌握递归)、101. 对称二叉树 (优先掌握递归)

102.二叉树的层序遍历 题目:给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。 接下来我们再来介绍二叉树的另一种遍历方式:层序遍历。 层序遍历一个二叉树。就是…