主要内容

基于RRT的固定翼无人机运动规划

这个例子演示了在三维地图上给定起始和目标姿态的固定翼无人机(UAV)的运动规划,使用快速探索随机树(RRT)算法。固定翼无人机本质上是非完整的,在航路点之间移动时必须服从最大滚转角、飞行路径角、空速等气动约束。

在本例中,您将设置三维地图,提供起始姿势和目标姿势,使用三维Dubins运动原语使用RRT规划路径,平滑获得的路径,并模拟无人机的飞行。

%为可重复的结果设置RNG种子rng (1,“旋风”);

加载地图

加载3d入住地图uavMapCityBlock.mat,其中包含一组预先生成的障碍,并将其添加到工作区中。将地图均匀膨胀1米,以增加路径安全性,并考虑到固定翼无人机的翼展。占用地图是在ENU (East-North-Up)框架内。

mapData =负载(“uavMapCityBlock.mat”“核心”);omap = mapData.omap;%假设未知空间未被占用的核心。FreeThreshold = omap.OccupiedThreshold;充气(omap 1)图(“姓名”“CityBlock”)显示(omap)

图城市街区包含一个轴。标题为占用地图的轴包含面片类型的对象。

设定开始姿势和目标姿势

使用地图作为参考,选择一个未占用的开始姿势和目标姿势。

startPose = [12 22 25 pi/2];goalPose = [150 180 35 pi/2];图(“姓名”“开始和目标”) hMap = show(ommap);持有scatter3 (hMap startPose (1) startPose (2), startPose(3), 30岁,“红色”“填充”) scatter3 (hMap goalPose (1) goalPose (2), goalPose(3), 30岁,“绿色”“填充”)持有视图(63 [-31])

图StartAndGoal包含一个坐标轴。以占用地图为标题的坐标轴包含3个类型为patch, scatter的对象。

使用3d Dubins运动原语用RRT规划路径

RRT是一个基于树的运动规划器,它从给定状态空间的随机样本中增量地构建一个搜索树。树最终跨越搜索空间并连接开始状态和目标状态。连接两个状态使用uavDubinsConnection满足空气动力学约束条件的物体。使用validatorOccupancyMap3D目标,用于固定翼无人机与环境的碰撞检测。

定义状态空间对象

此示例提供预定义的状态空间,示例helperuavstatespace,用于路径规划。状态空间定义为[x y z航向角],在那里[x y z]指定无人机的位置,以及headingAngle以弧度为单位指定方向角。这个例子使用了uavDubinsConnection对象作为无人机的运动学模型,该模型受最大横滚角、空速和飞行轨迹角的约束。通过将UAV的最大横滚角、空速和飞行轨迹角度限制属性指定为名称-值对来创建状态空间对象。使用“界限”名称-值对参数,将UAV的位置和方向边界指定为4×2矩阵,其中前三行表示x-,y- - - - - -,z-三维占用地图内的轴边界和最后一行表示范围内的航向角(π-π,)弧度。

党卫军= ExampleHelperUAVStateSpace (“MaxRollAngle”π/ 6日,...“速度”,6,...“FlightPathAngleLimit”(-0.1 - 0.1),...“界限”, (-20 220;-20 220;10 100;π-π]);

根据目标的目标姿态设置工作空间的阈值边界。该阈值决定了目标位姿周围的目标工作空间目标区域的大小,用于工作空间目标区域方法的偏倚采样。

阈值= [(goalPose-0.5)' (goalPose+0.5)';π-π);

使用setWorkspaceGoalRegion函数来更新目标姿态及其周围区域。

setWorkspaceGoalRegion (ss、goalPose阈值)

定义状态验证器对象

validatorOccupancyMap3D对象确定如果xyz-地图上的位置已被占用。只有当所有中间状态都有效时,两个状态之间的运动才有效,这意味着无人机没有通过地图上任何被占用的位置。创建一个validatorOccupancyMap3D对象,方法是指定状态空间对象和膨胀的映射。然后设置验证距离,以米为单位,用于在状态之间插入。

sv = validatorOccupancyMap3D(党卫军,“地图”、omap);sv。ValidationDistance = 0.1;

设置RRT路径规划器

创建一个plannerRRT对象,将状态空间和状态验证器指定为输入。设定最大连接距离GoalBias,及MaxIterations属性,然后指定自定义目标函数。如果到目标的欧氏距离低于5米的阈值,则目标函数确定路径已达到目标。

规划师= plannerRRT (ss、sv);计划。MaxConnectionDistance = 50;计划。GoalBias = 0.10;计划。MaxIterations = 400;计划。GoalReachedFcn = @ ~, x, y)(规范(x - y (1:3)) (1:3) < 5);

执行路径规划

在三维空间中执行基于rrt的路径规划。规划者找到一条无碰撞且适合固定翼飞行的路径。

[pthObj, solnInfo] =计划(规划师、startPose goalPose);

模拟无人机沿规划路径飞行

可视化计划的路径。根据无人机Dubins连接,插值规划的路径。用绿线绘制插值的状态。

使用提供的辅助功能模拟无人机飞行,exampleHelperSimulateUAV,需要航路点、空速和到达目标所需的时间(基于空速和路径长度)。helper函数使用固定翼基于航路点生成的控制输入,建立无人机行为仿真模型。用红线标出模拟的状态。

需要注意的是,由于控制跟踪误差小,模拟无人机飞行与规划路径略有偏离。此外,三维杜宾斯路径假设无人机滚转角度的瞬时变化,但实际动力学对滚转命令的响应较慢。一种补偿这种滞后的方法是用更保守的空气动力学约束来规划路径。

如果(solnInfo.IsPathFound)图(“姓名”“OriginalPath”可视化3d地图显示(omap)保持startPose scatter3 (startPose (1) (2), startPose(3), 30岁,“红色”“填充”) scatter3 (goalPose (1), goalPose (2), goalPose(3), 30岁,“绿色”“填充”) interpolatedpathbj = copy(pthObj);插入(interpolatedPathObj, 1000)%绘制基于UAV Dubins连接的插值路径hReference = plot3 (interpolatedPathObj.States (: 1),...interpolatedPathObj.States (:, 2),...interpolatedPathObj.States (:, 3),...“线宽”2,“颜色”“g”);%绘制基于固定翼制导模型的无人机仿真轨迹%计算总飞行时间并增加一个缓冲区timeToReachGoal = 1.05 *通路长度(pthObj) / ss.AirSpeed;路点= interpolatedPathObj.States;[xENU、射弩、zENU] = exampleHelperSimulateUAV(锚点,ss.AirSpeed timeToReachGoal);hSimulated = plot3 (xENU、射弩、zENU,“线宽”2,“颜色”“r”); 图例([H参考,H模拟],“参考”“模拟”“位置”“最佳”)持有视图(63 [-31])结束

图OriginalPath包含一个轴。以占用地图为标题的坐标轴包含5个类型为patch, scatter, line的对象。这些对象代表Reference, Simulated。

平滑杜宾斯路径,模拟无人机轨迹

最初计划的路径在朝着目标前进时做了一些不必要的转弯。利用本文给出的路径平滑算法简化三维Dubins路径,exampleHelperUAVPathSmoothing.该功能删除了中间3-D杜宾斯姿势基于迭代策略。有关平滑策略的更多信息,请参阅[1].平滑函数将非连续的三维杜宾斯姿势相互连接起来,只要这样做不会导致碰撞。该过程生成的平滑路径改善了固定翼仿真模型的跟踪特性。用这些新的平滑的航路点来模拟固定翼无人机模型。

如果(solnInfo.IsPathFound) smoothWaypointsObj = exampleHelperUAVPathSmoothing(ss,sv,pthObj);图(“姓名”“SmoothedPath”绘制3d地图显示(omap)保持startPose scatter3 (startPose (1) (2), startPose(3), 30岁,“红色”“填充”) scatter3 (goalPose (1), goalPose (2), goalPose(3), 30岁,“绿色”“填充”)interpolatedSmoothWaypoints=复制(SmoothWayPointsBj);插值(插值平滑航路点,1000)%绘制基于无人机Dubins连接的平滑路径hReference = plot3 (interpolatedSmoothWaypoints.States (: 1),...interpolatedSmoothWaypoints.States (:, 2),...interpolatedSmoothWaypoints.States (:, 3),...“线宽”2,“颜色”“g”);%绘制基于固定翼制导模型的模拟飞行路径路点= interpolatedSmoothWaypoints.States;timeToReachGoal = 1.05 *通路长度(smoothWaypointsObj) / ss.AirSpeed;[xENU、射弩、zENU] = exampleHelperSimulateUAV(锚点,ss.AirSpeed timeToReachGoal);hSimulated = plot3 (xENU、射弩、zENU,“线宽”2,“颜色”“r”); 图例([H参考,H模拟],“SmoothedReference”“模拟”“位置”“最佳”)持有视图(63 [-31]);结束

Figure SmoothedPath包含一个轴。以占用地图为标题的坐标轴包含5个类型为patch, scatter, line的对象。这些对象代表SmoothedReference, Simulated。

平滑的路径更短,显示改进的跟踪整体。

工具书类

比尔德,兰德尔·W.和蒂莫西·W·麦克莱恩。小型无人飞机:理论与实践.普林斯顿:普林斯顿大学出版社,2012。

Hornung, Armin, Kai M. Wurm, Maren Bennewitz, Cyrill Stachniss和Wolfram Burgard。八叉树:一种高效的概率三维映射框架自主机器人34岁的没有。3(2013年4月):189-206。https://doi.org/10.1007/s10514-012-9321-0