检测物体碰撞
您可以使用碰撞检测来精确地模拟现实世界中对象的物理约束,以避免同时在同一位置有两个对象。您可以使用碰撞检测节点输出到:
更改其他虚拟世界节点的状态。
应用MATLAB®碰撞数据的算法。
驱动模型万博1manbetx®模型。
例如,可以使用几何传感器进行机器人建模。有关使用碰撞检测的示例,请参见使用线传感器的碰撞检测而且迷宫中的差动轮式机器人.
设置碰撞检测
要设置碰撞检测,定义碰撞(拾取)传感器,当它们与目标周围场景物体碰撞时进行检测。虚拟世界的传感器类似于真实世界的传感器,如超声波、激光雷达和触摸传感器。的万博1manbetxSimulink 3D动画传感器基于X3D传感器(也支持VRML),如中所述万博1manbetxX3D拾取组件规范.有关可访问的拾取传感器输出属性的描述虚拟现实来源而且VR水槽块,看到在模型中使用碰撞检测数据.
PointPickSensor
-点云,检测哪些点在碰撞几何图形内LinePickSensor
-射线风扇或其他检测碰撞几何距离的线集PrimitivePickSensor
-检测碰撞几何图形的原始几何图形(如圆锥、球体或盒子)
要添加碰撞检测传感器,请使用以下常规步骤。有关反映此工作流的示例,请参见使用线传感器的碰撞检测.
在“3D World Editor”树结构窗格中,选择
孩子们
节点变换
要向其添加拾取传感器的节点。若要创建与传感器一起使用的拾取几何图形,请添加
几何
节点。选择节点>添加>几何并选择适合pick传感器类型的几何形状(例如,点集).通过选择添加拾取传感器节点节点>添加>传感器节点.
在传感器节点中,右键单击
pickingGeometry
属性并选择使用.指定几何
为传感器创建的节点。同样在传感器节点中,右键单击
pickingTarget
属性并选择使用.指定希望传感器检测碰撞的目标对象。而不是指定拾取几何与使用,可以直接定义拾取几何。然而,直接定义的几何是不可见的。
可选地,更改默认属性值或为传感器属性指定其他值。有关
intersectionType
,请参阅传感器碰撞与多个对象选择目标.控件访问的输出属性的描述虚拟现实来源块,看在模型中使用碰撞检测数据.
中为机器人定义碰撞检测传感器的关键节点示例vrcollisions
虚拟世界:
的
Robot_Body
节点具有Line_Set
节点作为其子节点之一。的Line_Set
节点定义传感器的拾取几何形状。的
Collision_Sensor
定义机器人的碰撞检测传感器。传感器节点pickingGeometry
指定使用Line_Set
节点作为拾取几何图形Walls_Obstacles
节点作为碰撞检测的目标。
传感器碰撞与多个对象选择目标
若要控制拾取传感器在与由多个对象组成的拾取目标几何结构碰撞时的行为,请使用intersectionType
财产。可能取值为:
几何
中定义的所有对象的单独包围框的联合与传感器碰撞pickTarget
字段。通常,这种设置会产生更精确的结果。界限
中定义的所有对象周围的一个大边界框与传感器碰撞(默认值)pickTarget
字段。
在vrcollisions
的例子中,LinePickSensor
有intersectionType
字段设置为几何
.这一设置意味着位于碰撞几何结构(由房间墙壁组成)内部的传感器不会与墙壁的联合发生碰撞。只有当传感器射线接触到任何墙壁时,才会发生碰撞。如果intersectionType
设置为界限
在美国,碰撞检测仅适用于从外部接近房间的传感器。整个房间被包裹在一个与传感器相互作用的大包围盒中。
透明几何体
您可以在虚拟世界中使用于拾取传感器的拾取几何图形不可见。对于拾取几何,在其材料
节点,设置透明度
财产1
.例如,在使用线传感器的碰撞检测虚拟世界,为之Collision_Sensor
选取几何节点(Line_Set
),在材料
节点,更改透明度
财产1
.
避免即将发生的碰撞
为了避免即将发生的碰撞(在碰撞实际发生之前),您可以使用pickedRange
属性的输出。LinePickSensor
.作为线集选取几何图形的一部分,定义一条或多条长线,以反映您对即将发生的碰撞的预期提前通知量。你可以让这些线透明。的基础上创建逻辑pickedRange
价值。
在模型中使用碰撞检测数据
的isActive
传感器的输出属性变为真正的
当碰撞发生时。要将模型与虚拟现实场景相关联,可以使用虚拟现实来源块读取传感器isActive
属性和为其定义传感器的对象的当前位置。你可以使用VR水槽块来定义虚拟世界对象的行为,例如它的位置、旋转或颜色。
例如,虚拟现实来源块的左上方使用线传感器的碰撞检测万博1manbetxSimulink模型从相关的虚拟世界获取数据。
在模型中,选择虚拟现实来源块,然后在万博1manbetxSimulink 3D动画查看器中,选择模拟>块的参数.此图像显示了一些关键的选定属性。
为LinePickSensor
PointPickSensor
,PrimitivePickSensor
的输出属性虚拟现实来源布洛克:
启用
—启用节点操作。请注意
属性可以选择的唯一属性是enabled属性VR水槽块。
isActive
-指示相交对象何时被拾取几何图形拾取。pickedPoint
-显示底层表面上的点PickGeometry
在局部坐标系中被选中。pickedRange
-指示从拾取开始的范围读数。详细信息请参见避免即将发生的碰撞.
对于一个PointPickSensor
,您可以选择启用
,isActive
,pickedPoint
输出。为PrimitivePickSensor
,您可以选择启用
而且isActive
输出。
的机器人控制
子系统块包括改变机器人颜色和位置的逻辑。
基于机器人控制
子系统输出,VR水槽Block更新虚拟世界,以反映机器人的颜色和位置。
提示
考虑调整块的采样时间,以提高碰撞检测的精度。
使用碰撞检测MATLAB
您可以在MATLAB中定义的虚拟世界中使用碰撞检测。本例基于vrcollisions
虚拟世界。它不使用Simulink模型。万博1manbetx
打开并查看
vrcollisions
虚拟世界。W = vrworld(“vrcollisions”);开放(w);FIG = view(w,“内部”);
获取虚拟世界的碰撞传感器和机器人节点。
Col = vrnode(w,“Collision_Sensor”) rob = vrnode(w,“机器人”) color = vrnode(w,“Robot_color”)
移动机器人,基于碰撞检测(当
isActive
属性是真正的
).在默认位置,没有检测到碰撞。col.isActive为Ii = 1:30移动机器人抢劫翻译=抢劫。翻译+ [0.05 0 0];vrdrawnow%如果检测到碰撞,将颜色更改为红色。如果col.isActive颜色。diffuseColor = [1 0 0];结束结束
在虚拟世界中使用碰撞检测数据
您可以使用碰撞检测来操作虚拟世界对象,独立于Simulink模型或MATLAB中的虚拟世界对象。万博1manbetx
的迷宫中的差动轮式机器人虚拟世界定义二绿IndexedLineSet
拾取传感器(Sensor1
而且Sensor2
)为紫色机器人(机器人
节点)。
VRML代码包括路线
每个拾取传感器的节点。
的路线
类中定义的逻辑脚本
节点称为ChangeColor
.