【深蓝学院】移动机器人运动规划--第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.

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

第67讲自定义icon实现

element-plus内置有一些常用的icon供我们使用&#xff0c;但是我们假如需要用自己的icon时候&#xff0c;我们可以搞一个icon自定义组件&#xff1b; 先把icons文件放到src下&#xff1b; 再新建一个SvgIcon组件&#xff1b; index.vue <template><svg class"…

Qt中程序发布及常见问题

1、引言 当我们写好一个程序时通常需要发布给用户使用&#xff0c;那么在Qt中程序又是如何实现发布的呢&#xff0c;这里我就来浅谈一下qt中如何发布程序&#xff0c;以及发布程序时的常见问题。 2、发布过程 2.1、切换为release模式 当我们写qt程序时默认是debug模式&#x…

部分意图分类【LLM+RAG】

在生成人工智能领域工作最有价值的事情之一就是发现新兴技术如何融入新的解决方案。 举个例子&#xff1a;在为北美顶级金融服务公司之一设计对话式人工智能助手时&#xff0c;WillowTree 的数据和人工智能研究团队 (DART) 发现&#xff0c;将意图分类与大型语言模型 (LLM) 结合…

学生宿舍管理系统设计与实现(源码+数据库+文档)

学生宿舍管理小程序目录 目录 基于微信小程序的学生宿舍管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、管理员模块的实现 &#xff08;1&#xff09;学生信息管理 &#xff08;2&#xff09;公告信息管理 &#xff08;3&#xff09;宿舍信息管理 &am…

LeetCode---383周赛

题目列表 3028. 边界上的蚂蚁 3029. 将单词恢复初始状态所需的最短时间 I 3030. 找出网格的区域平均强度 3031. 将单词恢复初始状态所需的最短时间 II 一、边界上的蚂蚁 这题没什么好说的&#xff0c;模拟就行&#xff0c;本质就是看前缀和有几个为0。 代码如下 class S…

springBoot,springSecurity返回乱码

框架&#xff1a;SpringBoot3 问题&#xff1a;响应内容乱码 问题代码&#xff1a; // 成功登录响应的内容Overridepublic void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication…

MongoDB从入门到实战之.NET Core使用MongoDB开发ToDoList系统(1)-后端项目框架搭建

前言&#xff1a; 前面的四个章节我们主要讲解了MongoDB的相关基础知识&#xff0c;接下来我们就开始进入使用.NET7操作MongoDB开发一个ToDoList系统实战教程。本章节主要介绍的是如何快熟搭建一个简单明了的后端项目框架。 MongoDB从入门到实战的相关教程 MongoDB从入门到实战…

【从Python基础到深度学习】1. Python PyCharm安装及激活

前言&#xff1a; 为了帮助大家快速入门机器学习-深度学习&#xff0c;从今天起我将用100天的时间将大学本科期间的所学所想分享给大家&#xff0c;和大家共同进步。【从Python基础到深度学习】系列博客中我将从python基础开始通过知识和代码实践结合的方式进行知识的分享和记…

JVM 性能调优 - 常用的垃圾回收器(6)

垃圾收集器 在 JVM(Java虚拟机)中,垃圾收集器(Garbage Collector)是负责自动管理内存的组件。它的主要任务是在程序运行过程中,自动回收不再使用的对象所占用的内存空间,以便为新的对象提供足够的内存。 JVM中的垃圾收集器使用不同的算法和策略来实现垃圾收集过程,以…

ChatGpt报错:Your authentication token is no longer valid解决办法

今天打开ChatGpt突然提示Oops&#xff01;,Your authentication token is no longer valid.&#xff0c;之前还好好的&#xff0c;环境也没变啊&#xff0c;结果弄了好久终于解决&#xff0c;于是记录一下解决过程&#xff0c;顺便总结一下关于OpenAI各种报错的解决办法。 完整…

[C#]winform制作圆形进度条好用的圆环圆形进度条控件和使用方法

【创建圆形进度条流程】 在C# WinForms应用程序中创建一个圆形进度条&#xff08;通常用作仪表盘的显示&#xff09;可以通过多种方式实现。下面是一个简单的例子&#xff0c;演示如何使用System.Drawing命名空间中的图形绘制功能来绘制一个基本的圆形进度条。 首先&#xff0…

hook函数——useRef

useRef useRef 是一个 React Hook&#xff0c;它能帮助引用一个不需要渲染的值。也就是说useRef可以存储一个值&#xff0c;但是不被组件渲染&#xff0c;仅仅只是引用&#xff0c;主要包括两个方面&#xff0c;例如使用ref引用一个值&#xff0c;使用ref引用一个dom节点&…

C++ 贪心 区间问题 区间分组

给定 N 个闭区间 [ai,bi] &#xff0c;请你将这些区间分成若干组&#xff0c;使得每组内部的区间两两之间&#xff08;包括端点&#xff09;没有交集&#xff0c;并使得组数尽可能小。 输出最小组数。 输入格式 第一行包含整数 N &#xff0c;表示区间数。 接下来 N 行&…

第70讲axios后端请求工具类封装

axios工具类封装&#xff1a; // 引入axios import axios from axios;// 创建axios实例 const httpService axios.create({// url前缀-http:xxx.xxx// baseURL: process.env.BASE_API, // 需自定义baseURL:http://localhost:80/,// 请求超时时间timeout: 3000 // 需自定义 })…

gem5学习(19):gem5内存系统——The gem5 Memory System

目录 一、Model Hierarchy 二、CPU 三、Data Cache Object 四、Tags & Data Block 五、MSHR and Write Buffer Queues 六、Memory Access Ordering 七、Coherent Bus Object 八、Simple Memory Object 九、Message Flow 1、Memory Access Ordering&#xff08;re…

C++模版(初阶)

&#x1f308;函数复用的两种不恰当方式 ☀️1.函数重载 以Swap函数为例&#xff0c;有多少种参数类型组合&#xff0c;就要重载多少个函数&#xff1a; void Swap(int& left, int& right) {int temp left;left right;right temp; } void Swap(double& left,…

ChatGPT高效提问—prompt常见用法(续篇十一)

ChatGPT高效提问—prompt常见用法(续篇十一) 1.1 增加角色 ​ 在prompt里可以适当增加角色,来满足一些特殊场景的需求。先来看一个不带角色的简单示例。 输入prompt: ​ ChatGPT输出: ​ 如上所示,问题比较难,ChatGPT的答案也确实晦涩难懂。试想一下,如果将这个解释将…

fast.ai 深度学习笔记(四)

深度学习 2&#xff1a;第 2 部分第 8 课 原文&#xff1a;medium.com/hiromi_suenaga/deep-learning-2-part-2-lesson-8-5ae195c49493 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 来自 fast.ai 课程的个人笔记。随着我继续复习课程以“真正”理解它&#xff0c;这…

【深度学习】:实验6布置,图像自然语言描述生成(让计算机“看图说话”)

清华大学驭风计划 因为篇幅原因实验答案分开上传&#xff0c;深度学习专栏持续更新中&#xff0c;期待的小伙伴敬请关注 实验答案链接http://t.csdnimg.cn/bA48U 有任何疑问或者问题&#xff0c;也欢迎私信博主&#xff0c;大家可以相互讨论交流哟~~ 案例 6 &#xff1a;图像自…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Web组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之Web组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、Web组件 提供具有网页显示能力的Web组件&#xff0c;ohos.web.webview提供web控制能…