主要内容

addObstacle

二维胶囊添加障碍列表

自从R2020b

描述

例子

addObstacle (capsuleListObj,obstacleStruct)添加一个或多个二维动态障碍胶囊与指定的ID列表,给出状态和几何值obstacleStruct

状态= addObstacle (capsuleListObj,obstacleStruct)另外返回一个指示是否每个指定的障碍了,更新,或复制。

例子

全部折叠

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

创建dynamicCapsuleList对象。提取步骤使用的最大数量随着时间戳你的对象数量的路径。

obsList = dynamicCapsuleList;numSteps = obsList.MaxNumSteps;

增加自我的身体

定义一个自我身体通过指定ID,在结构几何和状态。胶囊几何长度3米,半径1米。国家指定为一个线性路径x= 0 mx= 100

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

图包含一个坐标轴对象。坐标轴对象包含一个类型的对象的补丁。

添加障碍

指定国家自我身体分开的两个障碍5 m在相反的方向y设在. .假设的障碍有相同的几何几何学身体的自我。

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

图包含一个坐标轴对象。坐标轴对象包含3补丁类型的对象。

更新障碍

随着时间的推移改变你的障碍位置和几何尺寸。使用前面生成的结构,修改字段,并使用更新障碍updateObstacleGeometryupdateObstaclePose对象的功能。减少了半径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])包含(“X”(m))ylabel (“Y (m)”)

图包含一个坐标轴对象。坐标轴对象包含X (m), ylabel Y (m)包含3补丁类型的对象。

通过使用编程方式检查碰撞checkCollision对象的功能。函数返回一个向量的逻辑值,表明每个时间步的状态。向量是转置显示的目的。

碰撞= checkCollision (obsList) '
碰撞=1 x31逻辑阵列0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 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])

图包含一个坐标轴对象。坐标轴对象包含3补丁类型的对象。

输入参数

全部折叠

动态胶囊列表,指定为一个dynamicCapsuleList对象。

障碍参数,指定为一个N元结构或一个结构数组,在那里N的数量增加了障碍。每个结构的字段定义ID、几何、和州的障碍:

  • ID——整数来标识每个对象。存储在ObstacleIDs财产的dynamicCapsuleList指定的对象capsuleListObj论点。

  • ——对象的位置和方向3矩阵,每一行的形式(x yθ),是国家的数量在世界坐标系为指定的障碍。假设每个活动的状态是由一个固定的时间间隔。xy位置在米,θ在弧度。

  • 几何——结构领域长度,半径,FixedTransform。这些字段定义的大小capsule-based对象使用指定的圆柱体,半圆半径的长度上限。将胶囊几何从默认的原点,指定FixedTransform字段作为一个固定的变换相对于本地的胶囊。保持默认的胶囊来源、指定变换(3)

胶囊几何图像显示的位置和姿态胶囊尺寸。积极的X是正确的方向在世界坐标系。积极的Y。积极的θ是逆时针旋转从世界坐标系。胶囊几何半径的圆形结束,中间的矩形截面的长度。

输出参数

全部折叠

由于增加了障碍,作为一个返回N,0元列向量的和消极的。N中指定的数量的障碍吗obstacleStruct论点。每一个值指示是否添加了相关的身体(1)、更新(0),或复制(1)。在添加障碍,如果多个结构相同的身体ID在结构数组obstaclesStruct,那么函数将前面的条目标记为复制并忽略它。

扩展功能

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

版本历史

介绍了R2020b