controllerPurePursuit

创建控制器以跟踪一组航点

controllerPurePursuit System 对象™ 创建了一个控制器对象,用于使差分驱动飞行器沿着一组航点前进。该对象根据当前姿态计算飞行器的线速度和角速度。使用更新的姿势连续调用该对象可为车辆提供更新的速度指令。使用最大角速度(MaxAngularVelocity)和期望线速度(DesiredLinearVelocity)属性可根据飞行器的性能更新速度。

LookaheadDistance 属性计算路径上的一个前视点,该点是车辆的局部目标。角速度指令就是根据这个点计算出来的。改变 LookaheadDistance 会对算法性能产生重大影响。前视距离越大,车辆行驶的轨迹就越平滑,但也会导致车辆在行驶过程中走弯路。如果前视距离较小,则会导致跟踪路径时出现振荡,造成不稳定行为。有关纯粹追逐算法的更多信息,请参阅纯粹追逐控制器。

计算线速度和角速度控制指令:

  1. 创建 controllerPurePursuit 对象并设置其属性。
  2. 调用带有参数的对象,就像调用函数一样。

要进一步了解系统对象的工作原理,请参阅什么是系统对象?

语法

controller = controllerPurePursuit

controller = controllerPurePursuit(Name,Value)

描述

controller = controllerPurePursuit 创建一个纯粹追逐对象,使用纯粹追逐算法计算差速驱动车辆的线速度和角速度输入。

controller = controllerPurePursuit(Name,Value)创建一个纯粹的追寻对象,并带有由一个或多个 Name,Value 对指定的附加选项。Name 是属性名称,Value 是相应的值。名称必须位于单引号('')内。您可以按任意顺序指定多个名称-值对参数,如 Name1,Value1,...,NameN,ValueN。未指定的属性保留其默认值。

示例:controller = controllerPurePursuit('DesiredLinearVelocity', 0.5)

属性

DesiredLinearVelocity - 预期恒定线速度
0.1(默认值) | 以米/秒为单位的标量
预期恒定线速度,指定为标量,单位为米/秒。控制器假定车辆以恒定线速度行驶,计算出的角速度与线速度无关。

数据类型: 双

LookaheadDistance - 前视距离
1.0(默认) | 以米为单位的标量
前视距离,以米为单位的标量。前视距离会改变控制器的响应。前视距离越大,行驶路径越平滑,但在转弯时转弯幅度越大。前视距离较小的车辆紧跟路径并急转弯,但有可能在路径中产生振荡。

数据类型:双

MaxAngularVelocity - 最大角速度
1.0(默认值) | 标量,单位为弧度/秒
最大角速度,以每秒弧度为单位的标量。控制器会在给定值时使绝对角速度输出达到饱和。

数据类型: 双

Waypoints - 航点
[ ] (默认) | n-by-2 数组
以 [x y] 对的 n-by-2 数组形式指定的航点,其中 n 是航点的数量。您可以从 mobileRobotPRM 类或其他来源生成航点。

数据类型:双

使用方法

语法

[vel,angvel] = controller(pose)

[vel,angvel,lookaheadpoint] = controller(pose)

描述

[vel,angvel] = controller(pose) 处理车辆的位置和方向(pose),并输出线速度(vel)和角速度(angvel)。

[vel,angvel,lookaheadpoint] = controller(pose) 返回前视点,即用于计算速度指令的路径上的一个位置。路径上的这个位置是通过控制器对象上的 LookaheadDistance 属性计算得出的。

输入参数

pose - 车辆的位置和方向
形式为 [x y theta] 的 3-by-1 矢量
以[x y theta]形式指定的车辆位置和方向的 3-by-1 向量。车辆姿态为 x 和 y 位置,角度方向 θ(弧度)从 x 轴测量。

输出参数

vel - 线性速度
标量,单位为米/秒
线速度标量,单位为米/秒。

数据类型: double

angvel - 角速度
标量,单位为弧度/秒
以每秒弧度为单位的角速度标量。

数据类型: 双

lookaheadpoint - 路径上的前瞻点
[x y] 矢量
路径上的前视点,以 [x y] 向量的形式返回。该值根据 LookaheadDistance 属性计算得出。

例子

获取更多 Pure Pursuit 对象信息

对象函数

要使用对象函数,请将系统对象指定为第一个输入参数。例如,要释放名为 obj 的 System 对象的系统资源,请使用以下语法:

release(obj)

专用于控制器PurePursuit

info

controllerPurePursuit 对象的特征信息

语法

controllerInfo = info(controller)

描述

controllerInfo = info(controller) 返回一个结构体 controllerInfo,其中包含有关 controllerPurePursuit 对象 controller 状态的附加信息。该结构包含 RobotPose 和 LookaheadPoint 字段。

例子

输入参数

controller - 纯粹追求控制器
controllerPurePursuit 对象
纯追踪控制器,指定为 controllerPurePursuit 对象。

输出参数

controllerInfo - 有关 controllerPurePursuit 对象的信息
结构
关于 controllerPurePursuit 对象的信息,以结构形式返回。该结构包含两个字段

RobotPose - 以 [x y theta] 形式存在的三元素向量,对应车辆的 x-y 位置和方向。角度(θ)以弧度为单位,正角从 x 轴逆时针方向测量。

LookaheadPoint- 以 [x y] 形式存在的双元素矢量。该位置是用于计算最后一次调用对象的输出的路径上的一个点。

所有系统对象通用

step

运行系统对象算法

语法

step(obj,___)

描述

step(obj,___) 调用 System 对象™ 并运行算法。根据系统对象的不同,step 可以返回输出参数。

注意

从 R2016b 开始,您可以调用带有参数的对象,就像调用函数一样,而不是使用 step 方法来执行 System 对象定义的操作。例如,y = step(obj,x) 和 y = obj(x) 执行等价操作。

例子

使用步骤运行对象

% 使用步骤方法运行系统对象计数器的算法。

obj = Counter;%创建一个 Counter 对象并设置属性。
obj.UseIncrement = false
% 运行计数器。
step(obj,1)

输入参数

obj - 要运行的系统对象
系统对象
要运行其算法的系统对象。根据系统对象的不同,可能需要额外的输入参数。

release

释放资源,允许更改系统对象属性值和输入特征

语法

release(obj)

描述

release(obj) 释放内存、文件句柄或硬件连接等系统资源,并允许更改属性和输入特征。

例子

释放和重置对象

% 使用 release 方法释放资源并更改 System object™ 计数器的属性。

obj = Counter;%创建一个 Counter 对象并设置属性。
obj.UseIncrement = false
% 重置并释放物体。
reset(obj)
release(obj)

输入参数

obj - 要释放的系统对象
系统对象
要释放的系统对象。

reset

重置系统对象的内部状态

语法

reset(obj)

描述

reset(obj) 会将 System 对象™ 的内部状态和输入属性重置为初始值。

  1. 如果 obj 写入或读取文件,reset 会将对象重置为文件的开头。
  2. 如果 obj 更改了属性,则会将属性重置为初始默认值。
  3. 如果 obj 使用随机数生成种子,则重置种子属性。

例子

% 使用 release 方法释放资源并更改 System object™ 计数器的属性。

obj = Counter;%创建一个 Counter 对象并设置属性。
obj.UseIncrement = false
% 重置并释放物体。
reset(obj)
release(obj)

输入参数

obj - 要重置的系统对象
系统对象
要重置其状态的系统对象。

Pure Pursuit Controller

纯追逐是一种路径跟踪算法。它能计算出机器人从当前位置移动到机器人前方某个前视点的角速度指令。假设线速度是恒定的,因此可以在任意点改变机器人的线速度。然后,算法会根据机器人的当前位置移动路径上的前视点,直到路径的最后一点。这可以理解为机器人在不断追逐前方的一个点。LookAheadDistance 属性决定了前视点的位置。

controllerPurePursuit 对象并非传统意义上的控制器,而是一种用于路径跟踪的跟踪算法。您的控制器对指定的航点列表是唯一的。可以指定所需的线速度和最大角速度。这些属性是根据车辆规格确定的。将车辆的姿态(位置和方向)作为输入,可利用该对象计算出机器人的线速度和角速度指令。机器人如何使用这些指令取决于您所使用的系统,因此请考虑机器人如何根据这些指令执行运动。最后一个重要属性是 "前视距离"(LookAheadDistance),它告诉机器人在路径上要跟踪多远。下文将对该属性进行详细说明。

参考坐标系

了解纯粹追寻算法的输入和输出所使用的参考坐标系非常重要。下图显示了参考坐标系。输入航点为 [x y] 坐标,用于计算机器人的速度指令。机器人的姿态由[x y theta]形式的 xy 位置和角度组成。x 和 y 的正方向分别为右方向和上方向(图中蓝色部分)。Theta 值是机器人从 x 轴逆时针方向测量的角度方位,单位为弧度(目前机器人的弧度为 0)。

前视距离

前视距离(LookAheadDistance)属性是控制器的主要调整属性。前视距离是指在计算角速度指令时,机器人应从当前位置沿路径前视多远。下图显示了机器人和前视点。从图中可以看出,实际路径与航点之间的直线并不一致。

 更改该参数的效果会改变机器人跟踪路径的方式,主要有两个目标:重新获得路径和保持路径。为了在航点之间快速恢复路径,较小的前视距离(LookAheadDistance)会使机器人快速向路径移动。然而,如下图所示,机器人会偏离路径,并沿着所需的路径摆动。为了减少沿路径的摆动,可以选择较大的前视距离,但这可能会导致拐角处的曲率变大。

 LookAheadDistance 属性应根据您的应用和机器人系统进行调整。不同的线速度和角速度也会影响这一响应,因此路径跟随控制器应加以考虑。

限制条件

这种纯粹的追求算法有一些局限性需要注意:

如上图所示,控制器无法完全遵循航点之间的直接路径。必须对参数进行调整,以优化性能,并随着时间的推移逐渐向路径靠拢。

这种纯粹的追逐算法无法将机器人稳定在某一点上。在您的应用中,应该应用目标位置的距离阈值,使机器人停在所需目标附近。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值