主要内容

checkCollision

检查自我体与障碍物之间的碰撞

描述

例子

collisionFound= checkCollision (capsuleListObj检查每个自我身体是否与环境中的障碍物发生碰撞。该函数表示在每个时间步中每个自我体是否发生碰撞。

fullResults距离= checkCollision(capsuleListObj选项检查每个自我身体是否与环境中的障碍物发生碰撞,并使用额外指定的碰撞检测选项返回结果选项

例子

全部折叠

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

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

obsList = dynamicCapsuleList;numSteps = obsList.MaxNumSteps;

添加自我身体

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

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

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

添加障碍

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

obsState1 = states + [0 5 0];obsState2 = state + [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])

图中包含一个轴对象。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)”

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

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

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

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

输入参数

全部折叠

动态胶囊列表,指定为dynamicCapsuleListdynamicCapsuleList3D对象。

冲突检测选项,指定为具有以下字段的结构:

  • FullResults——分别返回每个障碍物的碰撞结果,指定为逻辑0)或1真正的).看到fullResults输出参数。

  • ReturnDistance——返回碰撞检查的距离计算,指定为逻辑0)或1真正的).看到距离输出参数。

数据类型:结构体

输出参数

全部折叠

碰撞检查结果,返回为n——- - - - - -e逻辑值的矩阵。默认情况下,该函数检查任何对象之间的碰撞,返回一个n——- - - - - -e矩阵,n自我主体的最大状态数是指定的吗capsuleListobj对象,e是自我体的数量。

数据类型:逻辑

每个障碍物的完整碰撞检查结果,返回为n——- - - - - -o——- - - - - -e逻辑值数组。n自我主体的最大状态数是指定的吗capsuleListobj参数,o是多少障碍,又是多少e是自我体的数量。

依赖关系

返回fullResults参数,指定选项参数的输入FullResults字段设置为真正的

数据类型:逻辑

距离的障碍,还不如一个n——- - - - - -e数字矩阵或n——- - - - - -o由- - - - - -e数字数组。参数的维数和行为取决于FullResults选项参数的字段

距离 FullResults价值 行为
n——- - - - - -e数字矩阵 返回每个时间步中每个自我体与最近障碍物之间的距离。n中是否指定了自我主体的最大状态数capsuleListObj参数,e是自我体的数量。
n——- - - - - -o由- - - - - -e数字数组 真正的 返回每个时间步骤中每个自我体与每个障碍物之间的距离。o是障碍的数量。

依赖关系

返回距离参数,指定选项参数的输入ReturnDistance字段设置为真正的

数据类型:|

扩展功能

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

版本历史

R2020b中介绍

Baidu
map