主要内容

动态浮夸

动态胶囊的障碍物列表

描述

动态浮夸对象管理二维空间中基于胶囊的碰撞对象的两个列表。碰撞物体分为两个列表,自我身体和障碍物。对于3-D的自我身体和障碍物,见DynamicCapsulelist3d.目的。

两个列表中的每个碰撞对象都有三个关键元素:

  • ID- 标识每个对象的整数,存储在Egoids.自我身体的财产和explicsids.障碍的财产。

  • 状态- 物体的位置和方向作为m-By-3矩阵,每行的形式[x y theta]m是世界框架中对象路径的状态的数量。状态列表假定每个状态通过固定的时间间隔分隔。XY.- 坐在数米,而且θ.是在弧度。默认的本地原点位于胶囊左侧半圆的中心。

  • 几何学- 基于指定的长度和半径的基于胶囊的对象的大小。半径适用于半圆形端盖,长度适用于中央矩形长度。要将胶囊几何和局部原点移位相对于默认源点,请指定相对于胶囊的本地帧的固定变换。

胶囊几何图像显示胶囊尺寸的位置和方向。正X是世界框架的正确方向。积极的y。正θ是来自世界框架的逆时针旋转。胶囊几何形状具有用于圆形端的半径和中间矩形部分的长度。

使用对象函数动态添加,删除和更新环境中各种对象的几何形状和状态。要添加自我身体,请参阅addego.对象功能。要添加障碍,请参阅addobstacle.对象功能。

在指定所有对象状态后,验证自我身体路径,并检查使用每个步骤的障碍物的碰撞核对机构对象功能。该功能仅检查自我身体是否与障碍物碰撞,忽略仅障碍物之间或仅障碍物之间的碰撞。

创建

描述

例子

alpactlelist =动态通道创建一个基于动态胶囊的障碍物列表,没有自我身体或障碍物。要开始构建障碍物列表,请使用addego.或者addobstacle.对象功能。

特性

展开全部

障碍物列表中的最大时间阶数,指定为正整数。步骤数确定到最大长度状态特定的自我身体或障碍物的领域。

数据类型:双倍的

此属性是只读的。

自我身体的标识符列表,作为正整数的矢量返回。

数据类型:双倍的

此属性是只读的。

障碍物的标识符列表,作为正整数的向量返回。

数据类型:双倍的

此属性是只读的。

列表中的障碍次数,作为整数返回。

数据类型:双倍的

此属性是只读的。

列表中的自我尸体数量,作为整数返回。

数据类型:双倍的

对象功能

addego. 将自我尸体添加到胶囊清单上
addobstacle. 为2-D胶囊列表添加障碍
核对机构 检查自我身体和障碍物之间的碰撞
eGoogometry. 自我体的几何特性
Efopose. 自我尸体的姿势
障碍物 障碍物的几何特性
explatlepose. 障碍的姿势
Removeego. 从胶囊清单中删除自我尸体
removeobstacle. 从胶囊列表中删除障碍物
表演 在环境中展示自我身体和障碍
UpdateEgoGeometry. 更新自我身体的几何属性
更新 更新自我身体的国家
updateobstraclegeometry. 更新障碍物的几何属性
updateobstraclepose. 更新障碍状态

例子

全部收缩

建立一个自我身体路径并使用障碍状态动态浮夸目的。在不同时间戳的环境中可视化所有对象的状态。通过检查环境中的障碍物来验证自我身体的路径。

创造动态浮夸目的。提取用作对象路径的时间戳数的最大步骤数。

obslist =动态浮夸的人;numsteps = obslist.maxnumsteps;

添加自我身体

通过在结构中指定ID,几何形状和状态来定义自我身体。胶囊几何形状的长度为3米和半径为1米。将状态指定为来自的线性路径X= 0m到X= 100m.

Egoid1 = 1;geom = struct(“长度”,3,“半径”,1,“fixedtransform”,眼睛(3));= linspace(0,1,obslist.maxnumsteps)'。* [100 0 0];Egocapaule1 = struct('ID',Egoid1,'状态',状态,'几何学',地质);addego(obslist,egocapaule1);显示(obslist,“timestep”,[1:numsteps]);ylim([ -  20 20])

图包含轴。轴包含类型贴片的对象。

添加障碍

为两个障碍指定各种障碍物,其在相反的方向上以5米分开5米y-axis。假设障碍物具有相同的几何形状地质作为自我身体。

Obsstate1 = Sourse + [0 5 0];Obsstate2 = Sourse + [0-5 0];淫响= struct('ID',1,'状态',overstate1,'几何学',地质);淫响= struct('ID'2,'状态',oderstate2,'几何学',地质);addobstacle(obslist,lobape1);addobstacle(obslist,lobapsule2);显示(obslist,“timestep”,[1:numsteps]);ylim([ -  20 20])

图包含轴。轴包含3个类型的贴片物体。

更新障碍

随着时间的推移改变你的障碍位置和几何尺寸。使用先前生成的结构,修改字段,并使用该字段更新障碍updateobstraclegeometry.updateobstraclepose.对象功能。将第一个障碍的半径减小到0.5米,并改变朝向自我身体的路径。

lobapeule1.geometry.radius = 0.5;lobapsule1.states =......[linspace(0,100,numsteps)'......% Xlinspace(5,-4,numsteps)'......%Y.零(numsteps,1)];%thetaupdateobstraclegeometry(obslist,1,lobape1);updateobstraclepose(obslist,1,淫响1);

检查碰撞

可视化新路径。展示自我身体和障碍物之间的碰撞,其中显示器亮相红色。请注意,障碍物之间未检查碰撞。

显示(obslist,“timestep”,[1:numsteps],“展示”,1);ylim([ -  20 20])xlabel(“x(m)”)ylabel(“y(m)”

图包含轴。轴包含3个类型的贴片物体。

以编程方式检查碰撞通过使用核对机构对象功能。该函数返回指示每次步骤的状态的逻辑值向量。向量被转换以用于显示目的。

collisims = checkcollision(obslist)'
碰撞=1x31逻辑阵列0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 11 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0

要验证具有大量步骤的路径,请使用任何碰撞值矢量上的功能。

如果任何(碰撞)DISP(“检测到碰撞”。结尾
检测到的碰撞。

更新自我路径

为自我身体指定新路径。再次可视化路径,显示碰撞。

Egocapaule1.states =......[linspace(0,100,numsteps)'......% X3 * sin(linspace(0,2 * pi,numsteps))'......%Y.零(numsteps,1)];%thetaUpdateEgopose(obslist,1,Egocapaule1);显示(obslist,“timestep”,[1:numsteps],“展示”,1);ylim([ -  20 20])

图包含轴。轴包含3个类型的贴片物体。

扩展能力

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

在R2020B中介绍