欢迎大家关注我的B站:
偷吃薯片的Zheng同学的个人空间-偷吃薯片的Zheng同学个人主页-哔哩哔哩视频 (bilibili.com)
本篇文章基于MATLAB导航工具箱的官方文档,详情参考Motion Planning - MATLAB & Simulink - MathWorks 中国
1 nav.StatePropagator
这是定义好的类,该类是与从 nav 派生的 kinodynamic 路径规划器一起使用的所有状态传播器的接口,如果要为自定义运动模型或控制系统定义传播器,请从此类派生。此类生成控件、传播状态并估计状态之间的成本或距离。受控系统将两个主要方程分为两个步骤:
(1)[u(i),steps] = controlFcn(q(i-1),u(i-1),qTgt)
从上一个状态、控件输入和目标状态生成下一个控制命令
(2)q(i) = q(i-1) + integrate(q,u(i),steps)
使用生成的命令将状态传播到指定的步骤数
propagatorObj = nav.StatePropagator(stateSpace,stepSize,numControlOutput)
StateSpace:规划时采样的状态空间
ControlStepSize:每个控制命令的持续时间,默认为0.1秒
NumControlOutput:控制命令的变量数
2 mobileRobotPropagator
这是轮式机器人系统的状态传播器
mobileProp = mobileRobotPropagator
mobileProp = mobileRobotPropagator(Name,Value)
StateSpace:规划时采样的状态空间
Environment:地图
DistanceEstimator:用于估计传播成本,默认是欧几里得距离,可以选择'euclidean','dubins','reedsshepp'
GoalDistance:判断到达终点的阈值,默认为1
KinematicModel:用于传播状态的运动学模型,默认 'bicycle'
Type | State Vector | Control input |
'bicycle' | [x y theta] | [v psi] |
'ackermann' | [x y theta psi] | [v psiDot] |
Integrator:传播状态时数值积分的办法,'rungekutta4'默认,更加准确,'euler'速度更快
ControlPolicy:控制命令生成的策略,如下
(1)默认,'linearpursuit'
— 对随机速度进行采样,并计算沿矢量的查找点,该观察点将初始状态连接到目标状态
(2)'arcpursuit'
— 对随机速度进行采样,并沿与目标状态相切并与初始 xy 位置相交的弧计算前瞻点
(3)'randomsamples'
— 从控制空间绘制一组有限的随机对照样本,并传播到每个样本。传播器选择最接近目标的样本,然后执行验证
ControlLimits:控制命令的限制,对每个状态的控制命令需在某些范围内
ControlStepSize:每个控制命令的持续时间,默认为0.1秒
MaxControlSteps:最大控制步骤数,默认为10
对象函数:
propagate:不需要验证状态的传播系统
[q,u,steps] = propagate(mobileProp,q0,u0,qTgt,maxSteps)
mobileProp:指定为mobileRobotPropagator
q0、u0、qtgt、maxSteps:初始状态、初始控制、目标状态、最大步长
q、u、steps:状态矩阵,控制矩阵、从每个状态和控制输入到下一个的步长数
propagate与propagateWhileValid用法一样,只是会验证状态
sampleControl:
[u,steps] = sampleControl(mobileProp,q0,u0,qTgt)