主要内容

dynamicCapsuleList

基于动态胶囊的障碍列表

描述

dynamicCapsuleListobject在二维空间中管理两个基于胶囊的碰撞对象列表。碰撞对象被分为两个列表,自我体和障碍。关于3d中的自我体和障碍,请参见dynamicCapsuleList3D对象。

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

  • ID——标识每个对象的整数,存储在EgoIDs自我肉体的财产和ObstacleIDs障碍物的属性。

  • ——物体的位置和方向-by-3矩阵,其中每一行都是形式[x y]而且是物体在世界框架中沿路径的状态数。状态列表假设每个状态被固定的时间间隔隔开。xy-位置以米为单位,和θ是以弧度为单位。默认的局部原点位于囊左半圆的中心。

  • 几何基于胶囊的对象的大小基于指定的长度和半径。半径适用于半圆端盖,长度适用于中心矩形长度。若要相对于默认原点点移动胶囊几何形状和局部原点,请指定相对于胶囊局部框架的固定变换。

显示胶囊尺寸的位置和方向的胶囊几何图像。正X在世界框架中是正确的方向。Y是正的。正是从世界坐标系逆时针旋转。胶囊的几何形状有圆形末端的半径和中间矩形部分的长度。

使用对象函数来动态添加、删除和更新环境中各种对象的几何形状和状态。要添加自我体,请参见addEgo对象的功能。若要添加障碍,请参见addObstacle对象的功能。

方法指定所有对象状态后,验证自我-身体路径,并在每一步检查是否与障碍物发生碰撞checkCollision对象的功能。该函数只检查自我体是否与障碍物发生碰撞,忽略障碍物或自我体之间的碰撞。

创建

描述

例子

obstacleList = dynamicCapsuleList创建一个基于胶囊的动态障碍列表,没有自我体或障碍。要开始构建障碍列表,请使用addEgoaddObstacle对象的功能。

属性

全部展开

障碍列表中的最大时间步数,指定为正整数。步数决定了的最大长度场为特定的自我体或障碍。

数据类型:

此属性是只读的。

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

数据类型:

此属性是只读的。

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

数据类型:

此属性是只读的。

列表中的障碍物数量,返回为整数。

数据类型:

此属性是只读的。

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

数据类型:

对象的功能

addEgo 将自我躯体添加到胶囊列表中
addObstacle 在二维胶囊列表中添加障碍
checkCollision 检查自我身体和障碍物之间的碰撞
egoGeometry 自我体的几何性质
egoPose 自我身体的姿势
obstacleGeometry 障碍物的几何特性
obstaclePose 障碍的构成
removeEgo 从胶囊列表中删除自我体
removeObstacle 移除胶囊列表中的障碍
显示 展示自我的身体和环境中的障碍
updateEgoGeometry 更新自我身体的几何属性
updateEgoPose 更新自我身体的状态
updateObstacleGeometry 更新障碍物的几何属性
updateObstaclePose 更新障碍状态

例子

全部折叠

建立自我的身体路径和保持障碍状态使用dynamicCapsuleList对象。可视化环境中所有对象在不同时间戳时的状态。通过检查与环境中障碍物的碰撞来验证自我体的路径。

创建dynamicCapsuleList对象。提取要用作对象路径时间戳数量的最大步骤数。

obsList = dynamicCapsuleList;numSteps = obsList.MaxNumSteps;

添加自我身体

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

egoID1 = 1;Geom = struct(结构)“长度”3,“半径”, 1“FixedTransform”、眼睛(3));states = linspace(0,1,obsList.MaxNumSteps)'。*[100 00];egoCapsule1 = struct(“ID”egoID1,“州”州,“几何”、几何学);addEgo (obsList egoCapsule1);显示(obsList“步伐”(1: numSteps));ylim (20 [-20])

图中包含一个axes对象。axes对象包含一个patch类型的对象。

添加障碍

指定两个障碍物的状态,这两个障碍物与自我体相距5米,方向相反y设在. .假设障碍物具有相同的几何形状几何学作为自我的身体。

obsState1 = states + [0 5 0];obsState2 = states + [0 -5 0];obsCapsule1 = struct(“ID”, 1“州”obsState1,“几何”、几何学);obsCapsule2 = struct(“ID”2,“州”obsState2,“几何”、几何学);addObstacle (obsList obsCapsule1);addObstacle (obsList obsCapsule2);显示(obsList“步伐”(1: numSteps));ylim (20 [-20])

图中包含一个axes对象。axis对象包含3个patch类型的对象。

更新障碍

随着时间的推移,改变障碍物的位置和几何尺寸。方法使用先前生成的结构、修改字段并更新障碍updateObstacleGeometry而且updateObstaclePose对象的功能。将第一个障碍物的半径减少到0.5米,并改变路径将其移向自我体。

obsCapsule1.Geometry。半径= 0.5;obsCapsule1。州=...[linspace(0100年,numSteps)”...% xlinspace (5 4 numSteps) '...y %0 (numSteps 1)];updateObstacleGeometry (obsList 1 obsCapsule1);updateObstaclePose (obsList 1 obsCapsule1);

检查碰撞

想象新的路径。展示自我身体和障碍物碰撞的地方,用红色标出。注意障碍物之间的碰撞没有被检查。

显示(obsList“步伐”(1: numSteps),“ShowCollisions”1);Ylim ([-20 20]) xlabel(“X”(m)) ylabel (“Y (m)”

图中包含一个axes对象。axis对象包含3个patch类型的对象。

方法以编程方式检查冲突checkCollision对象的功能。该函数返回一个逻辑值向量,指示每个时间步的状态。为了显示,矢量被调换了位置。

碰撞= checkCollision(obsList)'
碰撞=1x31逻辑数组0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0

要验证具有大量步骤的路径,请使用任何碰撞值向量上的函数。

如果任何(碰撞)disp (“碰撞检测。”结束
碰撞检测。

更新自我路径

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

egoCapsule1。州=...[linspace(0100年,numSteps)”...% x3 * sin (linspace(0, 2 *π,numSteps))”...y %0 (numSteps 1)];updateEgoPose (obsList 1 egoCapsule1);显示(obsList“步伐”(1: numSteps),“ShowCollisions”1);ylim (20 [-20])

图中包含一个axes对象。axis对象包含3个patch类型的对象。

扩展功能

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

版本历史

在R2020b中引入

Baidu
map