Kinodynamic Path Finding

一、引言

1.概念

Kinodynamic = kinematic(avoid obs)+dynamic(bounds to v、a、force)

2.motivation

既然后端可以轨迹优化为什么前端还需要做符合动力学约束的轨迹?

经典motion plan框架:前端搜索+后端轨迹优化

答:

plan是一个从粗糙到细致的过程;后端轨迹优化只能局限在局部;不可行的参考路径对于非完整约束系统来无意义

例1:

                                                       

对于左图无人机规划问题,在不考虑动力学约束的情况下(初速度约束)规划出的path应该为紫色实线,kinodynamic planning则规划绿色实线,后端优化只局限在局部,不能改变整体趋势,所以紫色实线在优化为虚线后会拐弯,对比之下绿色虚线轨迹更加平滑。

例2:

对于右图车辆规划问题,车辆是非完整约束系统,无法横移,如若按照质点考虑的path则毫无意义

二、Lattice Search

1.Basic idea

(1)原则

graph中机器人的移动必须符合机器人运动规则,而不再可以随意移动

(2)控制空间采样与状态空间采样

①正向方法

离散control space,我感觉可以理解为dwa的思想,离散许多控制量,然后前向执行一段时间,获得离散connection

②逆向方法

从机器人周围离散许多state space,计算从当前状态到下一个状态的连接(connection)

(3)两类实例

①基于搜索的规划中获得节点之间的连接性就是状态空间离散

②基于采样的规划中获取边就是状态空间离散

2.基于差速机器人对比两种采样

首先建立差速模型,设置初始速度,后通过两种方式获取可行plan

(1)控制空间采样

给与系统不同的输入u,保持一段时间T,前向积分,获得控制空间离散

但是这种离散没有任务导向,使得效率低下

(2)状态空间采样

在空间中采样一个末尾状态(包括位置与姿态信息),根据初始状态与末尾状态解出中间这条边

这种规划具有到导向性,但是很难计算

3.控制空间离散无人机实例

(1)建模

如图所示,系统状态为位置与速度,输入为加速度,得到A、B矩阵,是一个积分模型

(2)高阶拓展

也可以拓展为更高阶的模型,将jerk(加速度的导数)作为u,则状态为位置、速度、加速,得到一个更高维度的A、B矩阵

(3)幂零矩阵

但是!!无论是几维度的A,A矩阵都是幂零矩阵,也就是说A的某次方为零阵

(4)状态转移方程

前向sample后获得末尾状态,如何通过初始状态与末尾状态获得轨迹,此时需要状态转移方程s(t),这时候A是幂零矩阵就有助于求解状态转移矩阵了

4.Lattice graph构建

给定一个初始的状态,给定不同的控制输入,让系统到达不同的位置,继续离散控制输入,又会获得不同的位置

U离散九份、二十五份:

注意:不一定是做所有的graph做完之后再进行搜索,也可以具有导向性,也可以边搜索边建立graph,这样可以节省计算时间

5.控制空间离散车辆实例

选取一个初始状态,离散u,前向积分,选取不与障碍物碰撞的结果

6.状态空间离散

(1)离散的是末尾状态

(2)状态空间离散受初始状态影响小

两层lattice graph在不同初始状态下的sample:只有第一层不同,第二层相同

7.控制空间采样与状态空间采样性质

控制空间采样无目的性,容易违反边界条件、而且容易受到初始条件影响大(状态空间采样只有第一层不同,第二层相同)、控制空间受初始状态影响导致采样同质化严重

状态空间采样是由于反算,所以具有目的性,但是bvp问题很难计算

  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Finding bugs(寻找错误)是指在软件开发过程中,为了保证软件的质量和稳定性,通过一系列的测试和调试过程,找出软件中存在的错误和缺陷,并进行修复的活动。 寻找错误是软件开发过程中必不可少的一步。在软件开发过程中,无论是编写代码、设计界面还是实施功能,都可能出现各种各样的错误。这些错误可能导致软件无法正常运行、功能异常或者性能低下。为了及时发现和修复这些错误,需要进行系统而全面的错误寻找工作。 寻找错误的方法和技巧有很多种。其中一种常用的方法是黑盒测试。黑盒测试是指在不了解软件内部结构和具体实现的情况下,通过输入一些指定的测试用例,观察软件的输出结果,并与预期结果进行对比,从而判断软件是否存在错误。另外一种方法是白盒测试。白盒测试是指在了解软件内部结构和具体实现的情况下,通过对代码进行逐行逐句的检查,发现其中潜在的错误。 除了以上的方法,还可以使用自动化的测试工具来辅助寻找错误。这些工具能够模拟用户的操作,快速地执行大量的测试用例,并生成详细的测试报告,帮助开发人员准确定位和修复错误。 在寻找错误的过程中,要保持耐心和专注。有时候错误可能隐藏得很深,需要仔细地分析和调试。同时,还要注重记录和总结错误,以便后续的修复工作。 总之,寻找错误是软件开发过程中不可或缺的一环。通过系统而全面的测试和调试工作,可以及时发现和修复软件中存在的错误和缺陷,提高软件的质量和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值