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