主要内容

检测物体碰撞

您可以使用碰撞检测模型物理约束的对象在现实世界中准确地说,为了避免两个物体在同一时间在同一个地方。您可以使用碰撞检测节点输出:

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

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

  • 驱动模型金宝app®模型。

例如,您可以使用几何传感器机器人建模。使用碰撞检测的例子,请参阅碰撞检测用传感器微分轮式机器人在一个迷宫

建立了碰撞检测

建立碰撞检测,确定碰撞(选择)传感器,检测与目标周围场景物体相撞时。虚拟世界传感器类似于现实世界的传感器,如超声波、激光雷达和触摸传感器。的金宝app仿真软件3 d动画™传感器是基于X3D传感器(也支持VRML)中所描述的金宝appX3D选择组件规范。描述选择传感器的输出属性,您可以访问虚拟现实来源VR水槽块,看到使用碰撞检测的数据模型

  • PointPickSensor点云检测的点是在碰撞几何图形

  • LinePickSensor——雷球迷或其他组线检测碰撞几何图形之间的距离

  • PrimitivePickSensor原始的几何图形(如锥、球或箱),检测碰撞几何图形

添加一个碰撞检测传感器,使用这些一般步骤。为例,反映了此工作流,明白了碰撞检测用传感器

  1. 在3 d世界编辑器中树结构窗格中,选择孩子们节点的变换您想要添加节点选择传感器。

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

  3. 添加一个传感器节点通过选择节点>添加>选择传感器节点

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

  5. 在传感器节点,右键单击pickingTarget财产和选择使用。指定你想要的目标对象的传感器来检测碰撞。

    而不是指定选择几何了使用,您可以定义直接选择几何。然而,直接定义几何是无形的。

  6. 可选地,改变传感器的默认属性值或指定其他值的属性。的审理情况和有关信息。intersectionType,请参阅碰撞传感器与多个对象选择的目标。输出属性的描述,您可以访问虚拟现实来源块,看使用碰撞检测的数据模型

这是一个例子的关键节点定义一个碰撞检测传感器的机器人vrcollisions虚拟世界:

  • Robot_Body节点有Line_Set节点的一个孩子。的Line_Set传感器节点定义了选择几何。

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

碰撞传感器与多个对象选择的目标

选择传感器控制行为碰撞时,选择目标几何包含多个对象,使用intersectionType财产。可能的值是:

  • 几何——个人的传感器与联盟碰撞边界盒中定义的所有对象pickTarget字段。一般来说,这个设置产生更精确的结果。

  • 界限——(默认)传感器碰撞与一个大的边界框解释中定义的所有对象pickTarget字段。

vrcollisions的例子中,LinePickSensorintersectionType字段设置为几何。这种设置意味着传感器在碰撞几何(包括房间的墙壁),不会撞上墙的结合。发生碰撞时只有传感器射线接触任何墙壁。如果intersectionType被设置为界限碰撞检测的传感器只能方法从外面的那个房间吧。整个房间是包成一个大与传感器交互的边界框。

使选择几何透明

你可以选择几何用于选择传感器无形的虚拟世界中。选择几何,在它材料节点,设置透明度财产1。例如,在碰撞检测用传感器虚拟世界,Collision_Sensor选择几何节点(Line_Set),在材料节点,改变透明度财产1

避免即将发生碰撞

为了避免即将碰撞(在碰撞前实际发生),您可以使用pickedRange输出属性LinePickSensor。作为线设置选择几何的一部分,定义一个或多个排长队,以反映你想要的预先通知即将发生碰撞。你可以让那些线透明。然后创建逻辑的基础上pickedRange价值。

使用碰撞检测的数据模型

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

例如,虚拟现实来源块的左上角碰撞检测用传感器金宝app仿真软件模型得到的数据相关联的虚拟世界。

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

LinePickSensorPointPickSensor,PrimitivePickSensor这些输出属性,您可以选择虚拟现实来源布洛克:

  • 启用——允许节点操作。

    请注意

    启用属性是唯一属性,您可以选择VR水槽块。

  • isActive——表明当选择几何相交的对象选择。

  • pickedPoint——显示点底层表面PickGeometry选择(在局部坐标系)。

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

对于一个PointPickSensor,你可以选择启用,isActive,pickedPoint输出。为PrimitivePickSensor,你可以选择启用isActive输出。

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

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

提示

考虑调整块的样品时间额外的碰撞检测的精度。

使用碰撞检测MATLAB

您可以使用碰撞检测在MATLAB你定义的虚拟世界。这个例子是基于vrcollisions虚拟世界。它不使用仿真软件模型。金宝app

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

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

    坳= vrnode (w,“Collision_Sensor”)抢劫= vrnode (w,“机器人”)颜色= vrnode (w,“Robot_color”)
  3. 移动机器人,基于碰撞检测(当isActive属性是真正的)。在默认位置,没有检测到碰撞。

    col.isActive2 = 1:30%移动机器人抢劫。翻译=抢劫。翻译+ (0.05 0 0];vrdrawnow%如果检测到碰撞,改变颜色为红色。如果col.isActive颜色。diffuseColor = (1 0 0);结束结束

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

您可以使用碰撞检测操作虚拟世界对象,独立的或虚拟世界对象在MATLAB仿真软件模型。金宝app

微分轮式机器人在一个迷宫虚拟世界定义了两个绿色IndexedLineSet选择传感器(Sensor1Sensor2紫色的机器人)(机器人节点)。

VRML代码包括路线为每个选择的传感器节点。

路线定义在一个节点使用逻辑脚本节点称为ChangeColor

另请参阅

相关的话题