主要内容

monteCarloLocalization

利用距离传感器数据和地图对机器人进行定位

描述

monteCarloLocalization系统对象™创建一个蒙特卡洛本地化(MCL)对象。MCL算法使用已知的环境地图、激光雷达扫描数据和里程计传感器数据来估计车辆在其环境中的位置和方向。

为了定位车辆,MCL算法使用粒子滤波器来估计车辆的位置。粒子代表车辆可能状态的分布,其中每个粒子代表一种可能的车辆状态。当车辆在环境中移动时,粒子聚集在一个单一的位置,并使用距离传感器感知环境的不同部分。里程计传感器测量车辆的运动。

一个monteCarloLocalization对象将姿态和激光雷达扫描数据作为输入。输入的激光雷达扫描传感器数据在其自身的坐标坐标系中给出,算法根据该坐标对数据进行变换SensorModel。SensorPose属性,您必须指定。输入位姿是通过积分里程计传感器随时间的数据来计算的。如果姿势的变化大于任何指定的更新阈值,UpdateThresholds,然后更新粒子,算法从粒子滤波器中计算新的状态估计。使用以下过程更新粒子:

  1. 粒子的传播基于姿态的变化和指定的运动模型,MotionModel

  2. 粒子根据接收到每个粒子的距离传感器读数的可能性被分配权重。这些似然权值基于您在中指定的传感器模型SensorModel

  3. 基于ResamplingInterval特性,从后验分布中对粒子进行重采样,去除权重较低的粒子。例如,重采样间隔为2意味着粒子在每一次更新后重新采样。

对象的输出是估计的位姿和协方差,以及的值isUpdated.这个估计状态是最高加权粒子簇的平均值和协方差。方法中指定的映射坐标中给出了输出位姿SensorModel。地图财产。如果位姿的变化大于任何更新阈值,则状态估计已经更新并且isUpdated真正的.否则,isUpdated估计值保持不变。为了持续跟踪机器人状态的最佳估计,重复这个传播粒子的过程,评估它们的可能性,并重新采样。

利用激光雷达扫描数据估计机器人的姿态和协方差:

  1. 创建monteCarloLocalization对象并设置其属性。

  2. 调用带有参数的对象,就像调用函数一样。

要了解更多关于System对象如何工作的信息,请参见什么是系统对象?

创建

描述

例子

制程= monteCarloLocalization返回一个MCL对象,该对象使用地图、距离传感器和里程计数据来估计车辆的姿态。默认情况下,分配的是一个空映射,因此在使用对象之前需要一个有效的映射分配。

制程= monteCarloLocalization (名称,值创建一个MCL对象,该对象具有一个或多个指定的附加选项名称,值对参数。

的名字属性名和价值对应的值。的名字必须出现在单引号内().可以以任意顺序指定多个名值对参数Name1, Value1,…,的家

属性

全部展开

用于开始定位的车辆的初始姿态,指定为一个三元素矢量,(x yθ),指示车辆的位置和方向。使用初始姿态估计初始化MCL对象使您能够使用更小的值获得最大粒子数,并且仍然收敛于一个位置。

初始姿态的高斯分布的协方差,指定为对角矩阵。三元素矢量和标量输入转换为对角矩阵。这个矩阵给出了不确定度的估计InitialPose

标志,指示是否执行全局定位,指定为真正的.默认值,方法初始化粒子InitialPose而且InitialCovariance属性。一个真正的值初始化整个映射中均匀分布的粒子,并忽略InitialPose而且InitialCovariance属性。全局定位需要大量的粒子来覆盖整个工作空间。只有当车辆位置和方向的初始估计不可用时,才使用全局定位。

最小和最大粒子数,指定为一个双元素向量,(最小最大)

似然场传感器模型,指定为likelihoodFieldSensor对象。默认值使用默认值likelihoodFieldSensorModel对象。在使用对象获得输出之后,调用释放要进行更改的对象SensorModel.例如:

制程= monteCarloLocalization;[isUpdated,姿势,协方差]=制程(范围、角度);release(mcl) mcl. sensormodel . numbeams = 120;

差动驱动的里程计运动模型,指定为odometryMotionModel对象。默认值使用默认值odometryMotionModel对象。在使用对象获得输出之后,调用释放要进行更改的对象MotionModel.例如:

制程= monteCarloLocalization;[isUpdated,姿势,协方差]=制程(范围、角度);release(mcl) mcl. motionmodel . noise = [0.25 0.25 0.4 0.4];

触发更新所需的最小状态更改,指定为一个三元素向量。的最小变化时,定位将更新粒子(x yθ)州是满足。只有当粒子滤波器更新时,位姿估计才会更新。

粒子重采样之间的过滤器更新次数,指定为正整数。

使用一个lidarScan对象作为扫描输入,指定为其中之一真正的

使用

描述

例子

isUpdated构成协方差) =制程(odomPose扫描利用MCL算法估计车辆的姿态和协方差。估计是基于从指定的车辆里程计计算出的姿态,odomPose,指定的激光雷达扫描传感器数据,扫描制程monteCarloLocalization对象。isUpdated指示是否根据UpdateThreshold财产。

要启用此语法,必须设置UseLidarScan财产真正的.例如:

制程= monteCarloLocalization (“UseLidarScan”,真正的);...[isUpdated,姿势,协方差]=制程(odomPose,扫描);

例子

isUpdated构成协方差) =制程(odomPose范围指定激光雷达扫描数据为范围而且

输入参数

全部展开

基于里程计的姿势,指定为三元素矢量,(x yθ).这个姿势是通过积分时间的里程计计算出来的。

激光雷达扫描读数,指定为lidarScan对象。

依赖关系

要使用此参数,必须设置UseLidarScan财产真正的

恢复期。使用LidarScan = true;

扫描数据的范围值,指定为以米为单位的元素向量。这些范围值是从指定的激光扫描传感器的距离.的范围Vector必须具有与对应的相同数量的元素向量。

扫描数据中的角度值,指定为以弧度为单位的元素矢量。这些角度值是指定的范围被测量。的向量必须与对应的向量长度相同范围向量。

输出参数

全部展开

位姿更新的标志,返回为逻辑。如果姿势的变化大于任何更新阈值,则输出为真正的.否则,它是.一个真正的输出意味着返回更新后的姿态和协方差。一个输出意味着姿势和协方差没有更新,并且与上次更新时相同。

当前姿态估计,作为三元素向量返回,(x yθ).姿态被计算为最高加权粒子簇的平均值。

当前姿势的协方差估计,作为矩阵返回。这个矩阵给出了当前姿态的不确定性的估计。协方差计算为最高加权粒子群的协方差。

对象的功能

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

发行版(obj)

全部展开

getParticles 从定位算法中获取粒子
一步 运行系统对象算法
释放 释放资源并允许更改系统对象属性值和输入特征
重置 的内部状态重置系统对象

例子

全部折叠

创建一个monteCarloLocalization对象,指定一个传感器模型,并使用一步方法。

注意:从R2016b开始,您可以像调用函数一样调用带有参数的对象,而不是使用step方法来执行System对象定义的操作。例如,y =步骤(obj, x)而且y = obj (x)执行相同操作。

创建一个monteCarloLocalization对象。设置UseLidarScan财产真正的

制程= monteCarloLocalization;恢复期。使用LidarScan = true;

将带有占用网格图的传感器模型分配给对象。

sm = likelihoodFieldSensorModel;p = 0 (200200);sm。地图= occupancyMap(p,20); mcl.SensorModel = sm;

创建样品激光扫描数据输入。

范围= 10 * 1 (1300);范围(1130:170)= 1.0;角= linspace(-π/ 2π/ 2300);odometryPose = [0 0 0];

创建一个lidarScan对象,通过指定范围和角度。

扫描= lidarScan(范围、角度);

估计车辆的姿态和协方差。

(isUpdated estimatedPose,协方差)=制程(odometryPose扫描)
isUpdated =逻辑1
estimatedPose =1×30.0350 -0.0126 0.0280
协方差=3×30.9946 -0.0012 0 -0.0012 0.9677 00 0 0.9548

参考文献

[1]特龙,塞巴斯蒂安,沃尔夫拉姆·伯加德,迪特尔·福克斯。概率的机器人.麻省理工学院出版社,2005年。

Dellaert, F., D. Fox, W. Burgard, S. Thrun。移动机器人的蒙特卡洛定位。1999 IEEE机器人与自动化国际会议论文集。

扩展功能

C / c++代码生成
使用MATLAB®Coder™生成C和c++代码。

版本历史

介绍了R2019b

Baidu
map