主要内容

检测物体碰撞

您可以使用碰撞检测准确地模拟现实世界中对象的物理约束,以避免同时在同一位置具有两个对象。您可以使用碰撞检测节点输出来:

  • 改变其他虚拟世界节点的状态。

  • 应用MATLAB®碰撞数据的算法。

  • 驱动Simu金宝applink.®楷模。

例如,您可以使用几何传感器进行机器人建模。有关使用碰撞检测的示例,请参阅vrcolliassvrmaze

设置碰撞检测

要设置碰撞检测,定义碰撞(挑),当他们有针对性的环境场景中的物体碰撞时检测传感器。虚拟世界传感器类似于现实世界的传感器,例如超声波,激光雷达和触摸传感器。这金宝appSimulink 3D Animation™传感器基于X3D传感器(VRML也支持),如金宝appX3D拣选组件规范.有关您可以使用的拾取传感器输出属性的描述虚拟现实来源VR水槽块,看到在模型中使用碰撞检测数据

  • pointpicksensor.- 点云,检测到碰撞几何形状中的哪个点

  • LinePickSensor.-探测到碰撞几何体的距离的射线风扇或其他线集

  • 原始专用传感器- 原始几何形状(如锥形,球体或盒子),检测碰撞几何形状

要添加碰撞检测传感器,请使用这些一般步骤。有关反映此工作流程的示例,请参阅vrcolliass

  1. 在“3D世界编辑器”树结构窗格中,选择孩子们节点变换要向其添加拾取传感器的节点。

  2. 要创建与传感器一起使用的拾取几何图形,添加几何学节点。选择节点>添加>几何并选择适合于拾取传感器类型的几何体(例如,点集)。

  3. 通过选择添加拾取传感器节点节点>添加>选择传感器节点

  4. 在传感器节点中,右键单击pickingGeometry财产和选择使用.指定几何学为传感器创建的节点。

  5. 同样在传感器节点中,右键单击pickingTarget财产和选择使用.指定要为其检测冲突的目标对象。

    而不是指定挑选几何与使用,您可以直接定义拣配几何。但是,直接定义的几何形状是不可见的。

  6. 可选地,更改默认属性值或为传感器属性指定其他值。查阅有关intersectionType, 看传感器与多目标碰撞选择目标.控件可访问的输出属性的描述虚拟现实来源块,看看在模型中使用碰撞检测数据

这里是用于为机器人定义碰撞检测传感器的关键节点的示例vrcolliass虚拟世界:

  • robot_body.节点有Line_SetNode作为它的子节点之一。这Line_Set节点定义传感器的拣选几何体。

  • Collision_Sensor定义机器人的碰撞检测传感器。传感器节点pickingGeometry指定使用Line_Set节点作为拾取几何和Walls_Obstacles节点作为碰撞检测的目标。

传感器与多目标碰撞选择目标

要控制拾取传感器在与由多个对象组成的拾取目标几何碰撞时的行为,请使用intersectionType财产。可能的值是:

  • 几何学属性中定义的所有对象的单个边界框的联合与传感器碰撞挑选字段。通常,这种设置会产生更精确的结果。

  • 界限- (默认)传感器与一个大边界框碰撞,围绕定义的所有对象围绕挑选字段。

vrcolliass的例子中,LinePickSensor.intersectionType字段设置为几何学.这一设置意味着位于碰撞几何体(由房间墙壁组成)内的传感器不会与墙壁的结合发生碰撞。只有当传感器射线接触到墙壁时才会发生碰撞。如果intersectionType被设置为界限在美国,碰撞检测只适用于从外部接近房间的传感器。整个房间被包裹在一个与传感器交互的大包围盒中。

制作拾取几何透明

你可以让拾取传感器使用的拾取几何图形在虚拟世界中不可见。对于拾取几何,在其材料节点,设置透明度财产1.例如,在vrcolliass虚拟世界,为之Collision_Sensor选取几何节点(Line_Set),在材料节点,更改透明度财产1

避免即将发生碰撞

要避免即将发生的冲突(在冲突实际发生之前),可以使用pickedRange输出属性LinePickSensor..作为线路设置拾取几何的一部分,定义一个或多个长线,反映您所需的预先通用通告的即将发生的碰撞。您可以使这些行透明。然后根据“创建逻辑”pickedRange价值。

在模型中使用碰撞检测数据

isActive传感器的输出属性变为真正的发生碰撞时。要将模型与虚拟现实场景相关联,可以使用a虚拟现实来源块读取传感器isActive属性和定义传感器的物体的当前位置。你可以使用一个VR水槽块定义虚拟世界对象的行为,例如其位置,旋转或颜色。

例如,虚拟现实来源块在左上角vrcolliass金宝appSimulink模型从相关的虚拟世界获取数据。

在模型中,选择虚拟现实来源块,然后在金宝app仿真软件3 d动画查看器中,选择模拟>块参数.此图像显示了一些关键所选属性。

为了LinePickSensor.pointpicksensor.,原始专用传感器,您可以选择这些输出属性虚拟现实来源堵塞:

  • 启用- 启用节点操作。

    笔记

    属性中可以选择的唯一属性是启用的属性VR水槽堵塞。

  • isActive-表示相交对象何时被拾取几何体拾取。

  • pickedPoint-显示底层表面上的点PickGeometry被选中(在本地坐标系中)。

  • pickedRange—表示从拾取的范围读数。有关详细信息,请参见避免即将发生碰撞

为一个pointpicksensor.,您可以选择启用isActive,pickedPoint输出。为了原始专用传感器,您可以选择启用isActive输出。

机器人控制子系统模块包括改变机器人颜色和位置的逻辑。

基于机器人控制子系统的输出,VR水槽阻止更新虚拟世界以反映机器人的颜色和位置。

提示

考虑调整块的采样时间以获得额外的碰撞检测精度。

使用碰撞检测MATLAB

你可以在MATLAB中定义的虚拟世界中使用碰撞检测。这个例子是基于vrcolliass虚拟世界。它不使用Simulink模型。金宝app

  1. 打开并查看vrcolliass虚拟世界。

    w = vrworld ('vrcollisions');开放(w);图=视图(W,“内部”);
  2. 获取虚拟世界的碰撞传感器和机器人节点。

    col = vrnode(w,'collision_sensor') rob = vrnode(w,“机器人”) = vrnode(w,“Robot_color”
  3. 移动机器人,基于碰撞检测(当isActive属性是真正的)。在默认位置,不检测到碰撞。

    col.isActive为了2 = 1:30%移动机器人Rob.Translation = Rob.Translation + [0.05 0 0];vrdrawnow.%如果检测到碰撞,则将颜色更改为红色。如果col.isActive颜色。diffuseccolor = [1 0 0];结尾结尾

在虚拟世界中使用碰撞检测数据

您可以使用碰撞检测来操作虚拟世界对象,独立于Matlab中的Simulink模型或虚拟世界对象操作。金宝app

vrmaze虚拟世界定义了两个绿色IndexedLineSet选择传感器(传感器1.传感器2.)为紫色机器人(机器人节点)。

VRML代码包括路线每个拾取传感器的节点。

路线节点使用逻辑定义脚本节点调用换颜色

也可以看看

相关的话题