基于优化的自动驾驶车辆路径平滑


前言

  • 来源matlab工具箱Optimization Based Path Smoothing for Autonomous
    Vehicles;此示例向您展示如何通过保持平滑的曲率和与停车场障碍物的安全距离来优化汽车类机器人的路径。
  • 在此示例中,您可以使用 optimizePath 函数和 optimizePathOptions对象来优化规划路径。您可以使用任何二维路径规划器,plannerRRT、plannerRRTStar、plannerAstar、plannerHybridAStar等来规划从停车场入口到所需停车位的路径。在类似停车场的环境中,汽车经常需要急转弯并避开障碍物,如其他汽车、柱子、招牌等。路径规划器生成的路径可能并不总是安全、易于导航、平滑或运动学可行.在这种情况下,路径优化变得至关重要。optimizePathOptions对象具有大量参数和权重,您可以调整这些参数和权重以考虑环境和车辆约束,权重允许您在优化路径时设置它们的相对重要性。
    在这里插入图片描述

一、设置停车场环境

从停车场地图创建 binaryOccupancyMap 对象,并将地图分辨率设置为 3 米。

load("parkingMap.mat");
resolution = 3;
map = binaryOccupancyMap(map,resolution);

可视化地图。该地图包含一个停车场的平面图,其中一些停车位已被占用。

show(map)
title("Parking Lot Map")

在这里插入图片描述

二、选择停车位

以车辆当前在停车场入口处的位置为起始姿态,选择一个想要的无人停车位作为车辆的目标姿态。定义车辆的起始姿势和目标姿势为 [x y theta]向量。X和y用米表示位置,theta用弧度表示方向角。

startPose = [2 9 0];
goalPose = [27 18 pi/2];

可视化姿势

show(map)
hold on
quiver(startPose(1),startPose(2),cos(startPose(3)),sin(startPose(3)),2,...
       color=[0 0.75 0.23],LineWidth=2,...
       Marker="o",MarkerFaceColor=[0 0.75 0.23],MarkerSize=5,...
       DisplayName="Start Pose",ShowArrowHead="off");
quiver(goalPose(1),goalPose(2),cos(goalPose(3)),sin(goalPose(3)),2, ...
       color=[1 0 0],LineWidth=2,...
       Marker='o',MarkerFaceColor=[1 0 0],MarkerSize=5,...
       DisplayName="Goal Pose",ShowArrowHead="off");
legend(Location="southeast");
title("Start and Goal Poses in Parking Lot Map")
hold off

在这里插入图片描述

三、路径规划

使用 stateSpaceSE2 定义创建一个 validatorOccupancyMap 状态验证器。指定用于插值和验证路径段的地图和距离。

validator = validatorOccupancyMap(stateSpaceSE2,map=map);
validator.ValidationDistance = 0.1;

使用状态验证器对象初始化 plannerHybridAStar 对象。指定规划器的 MinTurningRadius 和 MotionPrimitiveLength 属性。

planner = plannerHybridAStar(validator,MinTurningRadius=3,MotionPrimitiveLength=4);

为可重复性设置默认随机数

rng("default");

规划从起始姿势到目标姿势的路径

refPath = plan(planner,startPose,goalPose);
path = refPath.States;

可视化规划的路径

show(planner,Tree="off");
legend(Location="southeast");
hold off

在这里插入图片描述
可视化车辆的方向

plot(rad2deg(refPath.States(:,3)));
title("Orientation of Vehicle Along the Path in degrees")

在这里插入图片描述

四、配置路径优化参数

规划器生成的路径由连续的路径段组成,但交叉点可能是不连续的。这些交叉点会导致转向角的突然变化。路径还可能包含增加额外驾驶时间的路段。为了避免这种运动,需要优化和平滑路径。路径有时非常靠近障碍物,这可能是有风险的,尤其是对于卡车等重型车辆。

  1. 创建优化选项
    创建 optimizePathOptions 对象以配置 optimizePath 函数的行为以及由此产生的路径。
options = optimizePathOptions

优化选项分为四类:

  • Trajectory Parameters 轨迹参数
  • Obstacle Parameters 障碍物参数
  • Solver Parameters 求解器参数
  • Weights 权重
  1. 轨迹参数
    轨迹参数用于指定车辆在沿路径移动时的约束,如速度、加速度、转弯半径等。它们是软限制,这意味着求解器在优化路径时可能会稍微改变它们。调整以下参数,
  • MinTurningRadius - 车辆的转弯半径。增加 MinTurningRadius 将导致更大的路径曲率。
  • MaxVelocity - 车辆可以达到的最大速度。改变它会改变车辆速度和轨迹时间。
  • MaxAcceleration - 车辆可能的最大加速度。
  • ReferenceDeltaTime - 两个连续姿势之间的旅行时间。增加这将增加车辆速度。
  • MaxPathStates - 路径中允许的最大姿势数。增加它可以提供更平滑的轨迹,但也可能会增加优化时间。
options.MinTurningRadius = 3; % meters
options.MaxVelocity = 5; % m/s
options.MaxAcceleration = 1; % m/s/s
options.ReferenceDeltaTime = 0.1; % second

separationBetweenStates = 0.2; % meters
numStates = refPath.pathLength/separationBetweenStates;
options.MaxPathStates = round(numStates);
  1. 障碍物参数
    障碍物参数指定了路径中障碍物的影响。如果障碍物有移动的可能,或者它们的尺寸不准确,那么你应该保持更高的安全边际。在这个例子中,由于大多数障碍是车道标记和静止的车辆,安全边际可以更小。调优以下参数:
  • ObstacleSafetyMargin - 路径应与障碍物保持的安全边距。增加安全裕度将使路径更安全并增加与障碍物的距离。
  • ObstacleInclusionDistance - 距离路径此距离内的障碍物将被包括在优化中。
  • ObstacleCutOffDistance - 距离路径超出此距离的障碍物将在优化期间被忽略。该值必须始终大于障碍物包含距离。
    对于 ObstacleInclusionDistance 和 ObstacleCutOffDistance 之间的障碍物,考虑在包含距离和截止距离之间的左侧和右侧最近的障碍物。
options.ObstacleSafetyMargin = 2; % meters
options.ObstacleInclusionDistance = 0.75; % meters
options.ObstacleCutOffDistance = 2.5; %i meters
  1. 求解器参数
    求解器参数指定优化路径时使用的求解器选项。这些参数的较高值会改善优化结果,但也会影响优化时间,因此应根据需要对其进行调整。调整以下参数,
  • NumIteration - 在优化期间调用求解器的次数,在每次调用之前,路径中的位姿数会根据参考增量时间进行调整。
  • MaxSolverIteration - 每次求解器调用的最大迭代次数。
    如果路径已经很密集,则可以减少 NumIteration 并增加 MaxSolverIteration。如果路径稀疏,则 NumIteration 可以更高,MaxSolverIteration 可以保持更低。
options.NumIteration = 4; 
options.MaxSolverIteration = 15;
  1. 权重
    权重定义了上述各种约束的相对重要性。由于大多数约束都是软限制,因此权重决定了约束在优化路径时的重要性。调整以下权重,
  • WeightTime - 时间分量的权重,增加它会导致更短的旅行时间和路径。
  • WeightSmoothness - 增加这个权重将使路径更平滑。
  • WeightMinTurningRadius - 增加这将尝试保持转弯半径大于大部分路径的最小值。
  • WeightVelocity - 增加这将确保更紧密地遵循速度约束。
  • WeightObstacles - 增加这将确保车辆不会越过障碍物。
options.WeightTime = 10;
options.WeightSmoothness = 1000;
options.WeightMinTurningRadius = 10;
options.WeightVelocity = 10;
options.WeightObstacles = 50;

五、路径优化

使用 optimizePath 函数根据上面定义的优化选项优化规划器生成的路径。

[optimizedPath,kineticInfo] = optimizePath(path,map,options);
drivingDir = sign(kineticInfo.Velocity);

可视化优化的路径

show(planner,Tree="off");
hold on
forwardMotion = optimizedPath(drivingDir==1,:);
reverseMotion = optimizedPath(drivingDir==-1,:);
quiver(forwardMotion(:,1),forwardMotion(:,2),cos(forwardMotion(:,3)),sin(forwardMotion(:,3)),...
    0.1,Color=[0 0.45 0.74],LineWidth=1,DisplayName="Optimized Forward Path");
quiver(reverseMotion(:,1),reverseMotion(:,2),cos(reverseMotion(:,3)),sin(reverseMotion(:,3)),...
    0.1,Color=[0.47 0.68 0.19],LineWidth=1,DisplayName="Optimized Reverse Path");
legend(Location="southeast");
title("Planned Path and Optimized Path")
hold off

在这里插入图片描述
沿着优化路径绘制车辆的方向

plot(rad2deg(optimizedPath(:,3)))
title("Orientation of Vehicle Along the Optimized Path in degrees")

在这里插入图片描述

  • 1
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: UR逆运动学解析法是指通过分析机械臂末端执行器的位姿以及关节位置,从而求解出机械臂各个关节的角度解。在解的过程中需要对可能的解进行筛选,以找到合理的解。 在UR逆运动学解析法中,首先确定机械臂末端执行器的位姿,包括位置和姿态。然后根据机械臂的结构和参数,通过几何法或者数学方法,将位姿转换为关节角度的函数关系。接着,解析出关节角度的表达式,即逆运动学方程。 然而,由于机械臂的复杂性和非线性特性,逆运动学方程通常具有多个解,这些解被称为解空间。在解的筛选中,需要根据具体的应用需求和机械臂的运动限制,对解空间进行筛选,找到合适的解。 解的筛选可以通过以下几种方式来进行。一是通过约束条件来筛选解,例如限制关节角度的范围、避免碰撞等。二是通过评估指标来筛选解,例如选择最优解或者根据特定的目标函数来确定最佳解。三是通过启发式方法,利用经验或者规则来筛选解。 综上所述,UR逆运动学解析法的解筛选是一个重要的步骤,它确保机械臂的关节角度解在运动学限制内且满足实际需求。不同应用场景需要根据具体情况采用不同的筛选方法,以获取合适的解。 ### 回答2: UR逆运动学解析法是指根据已知的末端执行器的位置和姿态,通过逆运动学解算确定UR机械臂各个关节的角度。解的筛选指的是在多个解的情况下,如何选择最合适的解。 在UR逆运动学解析法中,由于UR机械臂具有较大的自由度,通常会有多个解存在。解的筛选需要根据实际需求和约束条件来进行。 首先,可以考虑机械臂的工作空间范围。在解的筛选中,应选择那些在工作空间范围内的解。如果解超出了工作空间限制,就需要进行调整或排除。 其次,可以考虑机械臂的关节限制。UR机械臂各个关节通常有一定的角度限制范围,解的筛选中应选择符合关节约束的解。若解超出了关节限制范围,就需要进行调整或排除。 另外,还可以考虑机械臂的路径规划需求。有时候解的选择会受到路径规划的要求影响。比如,某些解在执行机械臂路径规划时可能路径时间较短或避免碰撞等方面更优。 此外,还需要考虑运动的顺序。根据具体应用场景和实际需求,可能需要选择特定的解来满足运动的顺序需求。 综上所述,UR逆运动学解的筛选需要综合考虑工作空间、关节限制、路径规划需求和运动顺序等因素。在不同的应用场景下,选择最合适的解可以使机械臂运动更加灵活、高效、安全。 ### 回答3: UR逆运动学解析法的解的筛选主要是针对机械臂的逆运动学问题,根据机械臂的构型和运动约束,确定合适的解。逆运动学问题是指在给定末端执行器的位置和姿态时,确定机械臂关节的位置和角度。UR逆运动学解析法主要分为以下几个步骤进行解筛选。 首先,根据机械臂的构型和运动范围限制,筛选出满足机械臂结构约束条件的解。例如,对于一些关节的运动范围有限制的机械臂,需要排除超出运动范围的解。 其次,考虑机械臂的运动平滑性和连续性,筛选出满足运动平滑性的解。这要求机械臂关节的运动在各个位置过渡平滑,避免出现关节突变或角度跳跃等不连续运动。 再次,考虑机械臂的运动优化,筛选出满足优化条件的解。例如,可以通过优化目标函数,如最短路径或最小能耗等,对解进行筛选,选择最佳的运动路径。 最后,根据机械臂应用的需求和操作要求,筛选出满足具体应用需求的解。例如,对于需要特定末端执行器姿态或姿态范围的应用,可以筛选出满足姿态要求的解。 总的来说,UR逆运动学解析法的解的筛选主要考虑机械臂的结构约束、运动平滑性、运动优化和应用需求等方面,以确定最合适的解。这样可以保证机械臂运动的准确性和稳定性,满足具体应用的要求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值