主要内容

checkCollision

检查两个几何图形是否碰撞

自从R2019b

描述

collisionStatus= checkCollision (geom1geom2返回两个凸几何图形之间的碰撞状态geom1而且geom2.如果两个几何图形在指定的位置发生碰撞,collisionStatus1.如果函数没有找到碰撞,collisionStatus0

例子

collisionStatussepdistwitnesspts= checkCollision(geom1geom2返回最小距离sepdist见证点witnesspts每一个几何的时候函数都没有找到两个几何之间的碰撞。

例子

全部折叠

此示例显示如何检查两个碰撞几何图形的碰撞状态。

创建一个盒子碰撞几何。

bx = collisionBox(1,2,3);

创建一个圆柱体碰撞几何。

cy = collisionCylinder(3,1);

沿着。平移圆柱x-轴乘以2。

T = trvec2tform([2 0 0]);cy.Pose = T;

画出两个几何图形。

显示(cy)显示(bx) xlim (5 [5]) ylim (5 [5]) zlim (5 [5])

图中包含一个轴对象。带有xlabel X, ylabel Y的axes对象包含2个patch类型的对象。

检查碰撞状态。确认状态与地块一致。

[areIntersecting,dist,witnessPoints] = checkCollision(bx,cy)
areIntersecting = 1
dist = NaN
witnessPoints =3×2南啊南啊南啊南

沿着。翻译盒子x- 3轴向下z-轴由4。确认箱体与气缸无碰撞。

T = trvec2tform([0 3 -4]);bx。姿态= T;[areIntersecting,dist,witnessPoints] = checkCollision(bx,cy)
areIntersecting = 0
区域= 2
witnessPoints =3×20.4286 0.4286 2.0000 2.0000 -2.5000 -0.5000

绘制框、圆柱体和表示两个几何图形之间最小距离的线段。

显示(cy)show(bx) wp =目击点;plot3 ([wp (1, 1) wp(1、2)]、[wp (2, 1) wp(2, 2)]、[wp (3,1) wp (3 2)),“bo - - - - - -”xlim([-5 5]) ylim([-5 5]) zlim([-5 5]

图中包含一个轴对象。带有xlabel X, ylabel Y的axes对象包含三个类型为patch, line的对象。

创建两个碰撞胶囊。中心一个在原点,并设置另一个胶囊的姿态3.距离原点几米的地方y设在。展示胶囊。

cc1 = collisionCapsule(1,4);cc2 = collisionCapsule(1,4);cc2。姿态= trvec2tform([0 3 0]);显示(cc1);持有显示(cc2);轴汽车持有

图中包含一个轴对象。带有xlabel X, ylabel Y的axes对象包含2个patch类型的对象。

检查两个碰撞舱之间的碰撞情况。因为它们在视觉上没有碰撞,所以函数应该返回实值分离距离和见证点。显示分离距离和见证点。

[iscollision,separationDist,] = checkCollision(cc1,cc2);disp (“分离距离:”+ num2str (separationDist))
分离距离:1
disp (“1号见证点(X Y Z):”+ num2str (witnessPts (: 1)))
一号舱见证点(X Y Z): 0 1 -2
disp (2号见证点(X Y Z)+ num2str (witnessPts (:, 2)))
2号见证点(X Y Z): 0 2 -2

旋转第二个胶囊90学位z设在。

cc2.Pose(1:3,1:3) = eul2rotm([0 0 pi/2]);显示(cc1);持有显示(cc2);轴汽车

图中包含一个轴对象。带有xlabel X, ylabel Y的axes对象包含2个patch类型的对象。

再次检查太空舱之间是否有碰撞。因为它们发生碰撞,函数返回分离距离和见证点为

[iscollision,separationDist,] = checkCollision(cc1,cc2);disp (“分离距离:”+ num2str (separationDist))
分离距离:NaN
disp (“1号见证点(X Y Z):”+ num2str (witnessPts (: 1)))
1号胶囊见证点(X Y Z): NaN NaN NaN
disp (2号见证点(X Y Z)+ num2str (witnessPts (:, 2)))
2号胶囊见证点(X Y Z):楠楠楠

输入参数

全部折叠

第一个碰撞几何,指定为以下碰撞几何对象之一:

碰撞几何,指定为这些碰撞几何对象之一:

输出参数

全部折叠

碰撞状态,返回为01.如果两个几何图形碰撞,collisionStatus1.否则,值为0

数据类型:

两个碰撞几何图形之间的最小距离,作为实数返回。连接见证点的线段witnesspts确定两个几何图形之间的最小距离。当两个几何图形碰撞时,sepdist

数据类型:

每个几何图形上的见证点,返回为3 × 2矩阵。每一列是见证点在相应几何图形上的位置,geom1geom2.连接两个见证点的线段有长度septdist.当两个几何图形发生碰撞时,的每一个元素witnesspts

数据类型:

限制

  • 当最小距离小于10时,碰撞检测结果不可靠5m。

参考文献

例:吉尔伯特,D.W.约翰逊和S.S. Keerthi。“在三维空间中计算复杂物体之间距离的快速程序。”IEEE机器人与自动化杂志4,没有。2 (April 1988): 193-203。https://doi.org/10.1109/56.2083。

扩展功能

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

版本历史

R2019b引入