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

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://xiahunao.cn/news/2778297.html

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

相关文章

【蓝桥杯冲冲冲】k 短路 / [SDOI2010] 魔法猪学院

蓝桥杯备赛 | 洛谷做题打卡day33 文章目录 蓝桥杯备赛 | 洛谷做题打卡day33题目背景题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示数据规模数据更新日志 题解代码我的一些话 【模板】k 短路 / [SDOI2010] 魔法猪学院 题目背景 注:对于 k k k 短路问…

mysql学习笔记-MYSQL介绍

什么是Mysql MySQL目前属于Oracle公司,常见的关系型数据库还有:sql server ,MarlaDB,DB2等MYSQL区别于其它关系型数据库的很大一个特点是支持插件式的存储引擎支持如:innoDB,MyLSAM,Memory等MySQL是一种DBMS&#xff…

微信小程序(四十)API的封装与调用

注释很详细,直接上代码 上一篇 新增内容: 1.在单独的js文件中写js接口 2.以注册为全局wx的方式调用接口 源码: utils/testAPI.js const testAPI{/*** * param {*} title */simpleToast(title提示){//可传参,默认为‘提示’wx.sho…

2024春晚刘谦魔术与约瑟夫环问题

各位小伙伴们大家——过~年~好~~![]~( ̄▽ ̄)~* 昨晚播出了2024春节联欢晚会,本着在乡下无聊也是无聊不如看看今年春晚有没有什么乐子的心态从晚上20点到次日0点40共4个多小时的时间在人生中首次看完了一整场春晚直播 (((φ(◎ロ◎…

Mysql索引优化建议

1,最左前缀法则 如果为一张表创建了多列的组合索引,要遵守最左前缀法则。就是指查询从索引的最左前列开始并且不要跳过索引中的列。(因为Mysql的InnoDB引擎的索引树是一个按顺利排序存储的数据结构(BTREE)&#xff0c…

[论文精读]Community-Aware Transformer for Autism Prediction in fMRI Connectome

论文网址:[2307.10181] Community-Aware Transformer for Autism Prediction in fMRI Connectome (arxiv.org) 论文代码:GitHub - ubc-tea/Com-BrainTF: The official Pytorch implementation of paper "Community-Aware Transformer for Autism P…

ClickHouse--02--安装

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 安装官网 ;[https://clickhouse.com/docs/zh/getting-started/install](https://clickhouse.com/docs/zh/getting-started/install)![在这里插入图片描述…

【算法与数据结构】42、LeetCode接雨水

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析:   程序如下: 复杂度分析: 时间复杂度: O ( ) O() O()。空间复…

JDK新特性

JDK新特性 函数式接口和Lambda 表达式Stream流操作新日期API操作其他新特性 Lambda 是一个匿名函数,我们可以把 Lambda表达式理解为是一段可以传递的代码(将代码 像数据一样进行传递)。可以写出更简洁、更 灵活的代码。作为一种更紧凑的代码…

网络原理(一)

💕"Echo"💕 作者:Mylvzi 文章主要内容:网络原理(一) 一. 应用层 应用层是和程序员联系最密切的一层,对于应用层来说,程序员可以自定义应用层协议,应用层的协议一般要约定好以下两部分内容: 根据需求,明确要传输哪些信…

[职场] 测试工程师面试会问些什么 #其他#微信#学习方法

测试工程师面试会问些什么 在测试工程师面试过程中,可能会涉及到具体测试工具、技术和方法的问题。所以在准备面试前,需要熟悉常用的测试理论和实践,掌握基本的测试技能和工具使用。 一.常见问题及答案 1. 你是如何理解软件测试的作用和重要…

nginx添加lua模块

目录 已安装了nginx,后追加lua模块nginx 重新编译知识参考: 从零安装一、首先需要安装必要的库(pcre、zlib、openssl)二、安装LUA环境及相关库 (LuaJIT、ngx_devel_kit、lua-nginx-module)注意:…

C# 夺冠,微软.NET前途光明!

本文以C# 摘得 “2023 年度编程语言“称号为背景,介绍.NET的历史、生态及发展势头,该文章是本人C#专栏的第一篇文章。 这里写目录标题 1.C#摘得"2023年度编程语言"奖项2.什么是.NET?2.1.NET简史2.2.NET是用于应用程序开发的生态系…

【Java EE初阶十二】网络初识

1. 网络发展史 网络发展的几个主要时期: 单机时代->局域网时代->广域网时代->移动互联网时代 随着时代的发展,越来越需要计算机之间互相通信,共享软件和数据,即以多个计算机协同工作来完成 业务,就有了网络互…

【Linux系统学习】6.Linux系统软件安装

实战章节:在Linux上部署各类软件 前言 为什么学习各类软件在Linux上的部署 在前面,我们学习了许多的Linux命令和高级技巧,这些知识点比较零散,进行练习虽然可以基础掌握这些命令和技巧的使用,但是并没有一些具体的实…

LLM之RAG实战(二十五)| 使用LlamaIndex和BM25重排序实践

本文,我们将研究高级RAG方法的中的重排序优化方法以及其与普通RAG相比的关键差异。 一、什么是RAG? 检索增强生成(RAG)是一种复杂的自然语言处理方法,它包括两个不同的步骤:信息检索和生成语言建模。这种方…

YOLOv8算法改进【NO.101】引入最新的损失函数Focaler-IoU

前 言 YOLO算法改进系列出到这,很多朋友问改进如何选择是最佳的,下面我就根据个人多年的写作发文章以及指导发文章的经验来看,按照优先顺序进行排序讲解YOLO算法改进方法的顺序选择。具体有需求的同学可以私信我沟通: 第一…

C#向数组指定索引位置插入新的元素值:自定义插入方法 vs List<T>.Add(T) 方法

目录 一、使用的方法 1.自定义插入方法 2.使用List.Add(T) 方法 二、实例 1.示例1:List.Add(T) 方法 2.示例:自定义插入方法 一、使用的方法 1.自定义插入方法 首先需要定义一个一维数组,然后修改数组的长度(这里使用Length属性获取…

统计数字出现次数的数位动态规划解法-数位统计DP

在处理数字问题时,我们经常遇到需要统计一定范围内各个数字出现次数的情况。这类问题虽然看起来简单,但当数字范围较大时,直接遍历统计的方法就变得不再高效。本文将介绍一种利用数位动态规划(DP)的方法来解决这一问题,具体来说,是统计两个整数a和b之间(包含a和b)所有…

题目练习(生死时速2.0版)

题目一(Before an Exam) 题意翻译 题目背景 明天皮特将要考生物。他并不很喜欢生物,但在 d 天前他得知他将不得不参加此次考试。皮特严厉的父母勒令他立即复习,因此他在第 i 天将需要学习不少于 minTimei​ 小时,不…