检测物体碰撞
您可以使用碰撞检测模型物理约束的对象在现实世界中准确地说,为了避免两个物体在同一时间在同一个地方。您可以使用碰撞检测节点输出:
其他虚拟世界节点状态的变化。
应用MATLAB®算法的碰撞数据。
驱动模型金宝app®模型。
例如,您可以使用几何传感器机器人建模。使用碰撞检测的例子,请参阅碰撞检测用传感器和微分轮式机器人在一个迷宫。
建立了碰撞检测
建立碰撞检测,确定碰撞(选择)传感器,检测与目标周围场景物体相撞时。虚拟世界传感器类似于现实世界的传感器,如超声波、激光雷达和触摸传感器。的金宝app仿真软件3 d动画™传感器是基于X3D传感器(也支持VRML)中所描述的金宝appX3D选择组件规范。描述选择传感器的输出属性,您可以访问虚拟现实来源和VR水槽块,看到使用碰撞检测的数据模型。
PointPickSensor
点云检测的点是在碰撞几何图形LinePickSensor
——雷球迷或其他组线检测碰撞几何图形之间的距离PrimitivePickSensor
原始的几何图形(如锥、球或箱),检测碰撞几何图形
添加一个碰撞检测传感器,使用这些一般步骤。为例,反映了此工作流,明白了碰撞检测用传感器。
在3 d世界编辑器中树结构窗格中,选择
孩子们
节点的变换
您想要添加节点选择传感器。创建选择几何与传感器使用,添加一个
几何
节点。选择节点>添加>几何并选择一个几何图形适合选择传感器的类型(例如,点集)。添加一个传感器节点通过选择节点>添加>选择传感器节点。
在传感器节点,右键单击
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水槽块定义虚拟世界对象的行为,比如它的位置,旋转,或颜色。
例如,虚拟现实来源块的左上角碰撞检测用传感器金宝app仿真软件模型得到的数据相关联的虚拟世界。
在模型中,选择虚拟现实来源块,然后在金宝app仿真软件3 d动画查看器中,选择模拟>块的参数。这张图片显示了一些关键的选择属性。
为LinePickSensor
PointPickSensor
,PrimitivePickSensor
这些输出属性,您可以选择虚拟现实来源布洛克:
启用
——允许节点操作。请注意
启用属性是唯一属性,您可以选择VR水槽块。
isActive
——表明当选择几何相交的对象选择。pickedPoint
——显示点底层表面PickGeometry
选择(在局部坐标系)。pickedRange
——显示读数的选择范围。有关详细信息,请参见避免即将发生碰撞。
对于一个PointPickSensor
,你可以选择启用
,isActive
,pickedPoint
输出。为PrimitivePickSensor
,你可以选择启用
和isActive
输出。
的机器人控制
子系统块包括逻辑改变机器人的颜色和位置。
基于机器人控制
子系统的输出,VR水槽块更新虚拟世界来反映机器人的颜色和位置。
提示
考虑调整块的样品时间额外的碰撞检测的精度。
使用碰撞检测MATLAB
您可以使用碰撞检测在MATLAB你定义的虚拟世界。这个例子是基于vrcollisions
虚拟世界。它不使用仿真软件模型。金宝app
打开并查看
vrcollisions
虚拟世界。w = vrworld (“vrcollisions”);开放(w);无花果=视图(w,“内部”);
碰撞传感器和机器人节点的虚拟世界。
坳= vrnode (w,“Collision_Sensor”)抢劫= vrnode (w,“机器人”)颜色= vrnode (w,“Robot_color”)
移动机器人,基于碰撞检测(当
isActive
属性是真正的
)。在默认位置,没有检测到碰撞。col.isActive为2 = 1:30%移动机器人抢劫。翻译=抢劫。翻译+ (0.05 0 0];vrdrawnow%如果检测到碰撞,改变颜色为红色。如果col.isActive颜色。diffuseColor = (1 0 0);结束结束
在虚拟世界中使用碰撞检测数据
您可以使用碰撞检测操作虚拟世界对象,独立的或虚拟世界对象在MATLAB仿真软件模型。金宝app
的微分轮式机器人在一个迷宫虚拟世界定义了两个绿色IndexedLineSet
选择传感器(Sensor1
和Sensor2
紫色的机器人)(机器人
节点)。
VRML代码包括路线
为每个选择的传感器节点。
的路线
定义在一个节点使用逻辑脚本
节点称为ChangeColor
。