论文:《Efficient Trajectory Planning for Multiple Non-holonomic Mobile Robots via Prioritized Trajectory Optimization》 Juncheng Li

 

最近看到了好多用这种套路作轨迹优化的,无人机也有,无人车也有,单车也有,多车也有:

初始路径-->安全走廊-->非线性/凸优化问题-->求解器求解

 

Introduction

本文提出了一种创新的方法,在富含障碍物的环境,为non-holonomic移动机器人多车生成避障的最优轨迹。

为了提高计算效率,decoupled planning方法被提出[6],就是序列优先级。每个agent的轨迹需要避免与之前的agent的轨迹发生冲突。

文献[7][8]提出的轨迹优化方法,利用sequential planning,显著提高了计算效率。这些decoupled planning methods都很快,但是存在

的问题是--不完备。有些场景下的可行解,可能发现不了。

 

在富含障碍物的环境,单机轨迹规划有大量的研究,套路分为前端路径规划和后端轨迹优化。(这里提到了很多高飞老师的研究。)

多机轨迹规划,也采用两段的套路(可以保证完备),(这里提到的研究还是无人机的,无人车的研究这么少么?)

多无人机可以用quadratic program (QP) problem表示,然后优化。

 

无人机的多车轨迹规划,是作用在线性动力学linear dynamics的,因此轨迹优化可以表示为QP问题,这个是凸优化,容易求解。

但是在现代工业,很多差速驱动的机器人,是非线性动力学nonlinear dynamics,轨迹优化只能表示为非凸的非线性问题(NLP)。

 

分布式的规划方法,计算效率高,但是不能保证无死锁并且在迷宫形的环境性能很差。基于上述问题的考虑,我们的方法可以生成安全,可行,接近最优的多机器人轨迹。

在前端和后端两个阶段,机器人的非线性运动模型都被考虑进去,以保证轨迹的可行。我们提出了一种优先级轨迹优化方法,使得计算效率提高,可以用于大规模的机器人群体。

本文是在连续空间集中式多non-holonomic机器人轨迹规划的第一次尝试,主要贡献如下:

  • 大规划无滑移多机器人轨迹规划。
  • 优先级优化方法提高了计算效率。(这个在李柏的书里也有专门的介绍)

问题描述:

0.碰撞模型

每个robot定义为一个半径为R的圆形,根据圆形占据的栅格是否碰撞来确定。

如果一个圆形不够精确,那可以用两个圆形,这些是无人车里常用的方法。

1.初始路径构成waypoints

这里初始路径是(x, y, theta)的集合。

2.kinematic model

本文采用差速轮的unicycle model,状态为(x, y, theta),机器人通过线性速度和角速度控制。

多车辆路径规划算法 python 多车辆路径优化问题_优先级

多车辆路径规划算法 python 多车辆路径优化问题_无人机_02

3.最大速度,最大角速度

看到这里,真正的差速轮是没有转弯半径限制的,如果想限制,那只能在这里加了。v / w > R。

多车辆路径规划算法 python 多车辆路径优化问题_优先级_03

 

 

具体方法:

 

多车辆路径规划算法 python 多车辆路径优化问题_栅格_04

 

 A. Discrete Path Planning

将占据栅格地图转化为一种2-D grid graph。相比于传统的栅格地图,我们考虑了位置和朝向。x,y变成了x, y, theta。

多车辆路径规划算法 python 多车辆路径优化问题_多车辆路径规划算法 python_05

 

首先就要构建这个图了。假设图的栅格尺寸为D,dT表示机器人移动一个边需要的时间。考虑到机器人的运动学约束:

多车辆路径规划算法 python 多车辆路径优化问题_优先级_06

 

确定了D和dT,就可以构建这个图。

 

离散路径的冲突处理,采用ECBS来处理。这里冲突定义两类,一个是节点之间,一个是边之间。(不是优先级吗?怎么初始路径还需要ECBS呢?可能优先级是针对轨迹优化的)

 

多车辆路径规划算法 python 多车辆路径优化问题_无人机_07

采用ECBS获取无冲突的离散路径(那就是说,作者把ECBS的下层搜索修改了?)

在轨迹优化过程,两个robots之间每个时间步的路径点距离都会被检测,所以每一个robot的离散路径长度都相等(这里想表达的应该是路径短的robot到达终点后,持续存在!持续到跟最长的那个路径相等)。

 

B.安全走廊构建:

这个安全走廊构建方法有很多,刘思康,高飞,李柏,港科大,等等,有很多构建方法。

每个robot的离散路径,里边即waypoints rk,每两个waypoints之间的线段用Ik = < rk-1----->rk >表示。在每个线段附近生成无碰撞的凸多面体Sk。

需要满足以下条件:

凸多面体跟障碍物没有交集

多车辆路径规划算法 python 多车辆路径优化问题_优先级_08

 

 相邻多面体之间必须有交集

多车辆路径规划算法 python 多车辆路径优化问题_栅格_09

 

本文参考了《Efficient multi-agent trajectory planning with feasibility guarantee using relative bernstein polynomial》中关于走廊生成的方法。

分别在x轴和y轴方向扩张到最大空间。但是对角线的线段,是有可能没有凸多面体的,需要加密waypoints,满足一下条件即可确保走廊连续(即确定最大waypoints间隔):

每一段重新分割成h小段, 路径长度为M, 新的采样包含waypoints个数H = 1 + h * ( M - 1 )

Ri是机器人碰撞半径。

多车辆路径规划算法 python 多车辆路径优化问题_优先级_10

 

如果下一段线段被上一个凸多面体完全包围,那就不用再求了。

 

C.轨迹优化问题:

问题描述:

多车辆路径规划算法 python 多车辆路径优化问题_栅格_11

一些参数:

多车辆路径规划算法 python 多车辆路径优化问题_无人机_12

 

简化问题:

多车辆路径规划算法 python 多车辆路径优化问题_无人机_13

 

目标函数分为两部分:

1.连个连续的控制输入之间的差值需要惩罚;应该是这里是差分驱动,控制输入为速度,所以没有用比较常用的minimum snap。

2.最优轨迹与参考轨迹之间的差值。这里作者说的是因为初始的参考轨迹已经是可行路径啦,所以要惩罚这个偏离。额,感觉这里有问题,没必要贴近初始轨迹。

 

4.Prioritized Trajectory Optimization

对于大规模的机器人队伍,上边的问题求解是不够有效的。我们提出了优先级的轨迹优化方法。

robots分为一些groups,优先级低的求解时,把高优先级的轨迹作为障碍物要避免碰撞。

如果优先级排的不好,可能导致低级的robot轨迹优化失败,我们提出了分组和优先级排序的方法

 

仿真:

A.实施细节

Ubuntu 16.04 with Intel i5-6300HQ @2.30GHz CPU and 12GB of RAM

地图:OctoMap地图表示占据栅格地图

求解器:内点法非线性求解器IPOPT

参数:碰撞模型半径0.15m,栅格图尺寸D=1m(在这么大的栅格上是必须的吗),移动一个edge耗时∆T=1.6s,最大线速度1m/s,最大角速度1rad/s。构建安全走廊时,每一段线分为h=5个小段。

B.计算效率和解质量

环境大下:10 m X 12 m,包含6个3 X 0.6m的货架

ECBS次优系数:1.5

多车辆路径规划算法 python 多车辆路径优化问题_优先级_14

 

与coupled方法(不分优先级)作对比,可以看出,求解时间减少,但是最优性依然保证!!

多车辆路径规划算法 python 多车辆路径优化问题_栅格_15

C.成功率

多车辆路径规划算法 python 多车辆路径优化问题_优先级_16

 

 

实验:

碰撞模型半径:R=0.3m

最大线速度:0.6m/s

最大角速度:0.6m/s

移动一个edge的时间间隔:∆T=2.65s

其他参数同仿真

将优化的轨迹上传,使用MPC-based 轨迹跟踪控制方法来执行轨迹。