01
相关API函数
相关的API函数如下图所示:
视觉传感器相关参数:
02
视觉传感器的类型和操作方式
视觉传感器有两种不同的类型,可以调整为不同的目的:
Orthographic projection-type正投影式:正投影式视觉传感器的视场为矩形。它们非常适合于近距离红外传感器,或激光测距仪。
Perspective projection-type透视投影式:透视投影式视觉传感器的视场为梯形。它们非常适合相机型传感器。
视觉传感器是可视对象,可以像相机对象一样被透视 [Popup menu --> View --> Associate view with selected vision sensor]。更多细节请参见页面和视图部分。
视觉传感器的功能非常强大,因为它们可以以各种灵活的方式使用。例如,它们可以用来在外部应用程序或插件显示静态或移动的图像。插件还可以提供定制的图像处理算法(例如过滤器)以及评估算法(例如触发条件)。有几个内置过滤器可以应用于视觉传感器的图像。有关更多细节,请参阅过滤器组合部分。
视觉传感器只能渲染(和检测)可渲染实体。视觉传感器的计算结果可以通过图形对象记录下来。有关如何记录视觉传感器数据的更多信息,请参考图形和图形数据流类型(后续出)。
03
视觉传感器的滤镜组成
视觉传感器通常在每次模拟过程中产生两幅图像:一幅彩色图像和一幅深度图。通过适当的API函数调用检索这两个图像,然后迭代每个单独的像素或深度映射值,可以通过编程方式检查这两个图像。虽然这种方法允许最大的灵活性,但它是麻烦的和不切实际的。相反,使用内置的过滤和触发功能要方便得多(而且快!)事实上,每个视觉传感器都有一个相关的过滤器,它可以通过组合几个组件以非常灵活的方式组合。下图演示了一个简单的滤镜,反转颜色:
一个组件可以执行4种基本操作:
- 将数据从一个缓冲区传送到另一个缓冲区(例如,将输入图像传送到工作图像)
- 在一个或多个缓冲区上执行操作(例如反转工作映像)
- 激活一个触发器(例如,如果平均图像强度> 0.3那么激活触发器)
- 通过API调用访问返回的特定值(例如返回二进制图像质心的位置)
下图说明了组件可以访问的各种类型的缓冲区:
虽然输入图像和输入深度图像在波动缓冲区(即通常在每一个仿真通过时,新数据自动覆盖),工作图像、buffer1映像和buffer2形象持久缓冲区(即其内容并不修改,除非一个组件操作,例如持久缓冲区可以用来比较视觉传感器数据从一个模拟下模拟传球)。
如果视觉传感器的滤波器的至少一个组件激活触发器,则触发视觉传感器。API函数sim.handleVisionSensor(或sim.eadvisionsensor)返回传感器的触发状态和一系列值或数据包。根据视觉传感器的设置,第一数据包可能包含不同的数据:
- 15 auxiliary values15个辅助值(默认值):在所有图像像素上计算值,分别表示强度的最小值、红色、绿色、蓝色、深度值、强度的最大值、红色、绿色、蓝色、深度值和强度、红色、绿色、蓝色、深度值的平均值。对于更高分辨率的图像,计算可能会降低视觉传感器的速度,如果不使用这些值,它们的计算可以在视觉传感器属性中关闭(Packet1是空白(更快))
- 15 blank values15个空白值:这些值不代表任何东西。当打开视觉传感器propreties中的选项Packet1为空白(faster)时,就会发生这种情况,以便加速视觉传感器的操作。
- n values n值:当视觉传感器的渲染模式是视觉传感器属性中的对象句柄时,这些值表示所看到对象的对象句柄。在这种模式下,对象句柄被编码/解码为RGB值,以便识别所有可见对象的对象句柄。返回的数据包中的值应该四舍五入。(RGB是工业界的一种颜色标准,通过红绿蓝RGB三个颜色通道的变化以及他们之间的相互叠加来得到各式各样的颜色。)
如果其他过滤器组件有返回值,那么它们将作为数据包附加到第一个数据包。更多细节请参见API函数描述。
V-REP有30多个可以根据需要组合的内置过滤器组件。此外,可以通过插件开发新的过滤器组件。当一个插件的滤镜组件被使用时,你应该总是用插件来分配创建的场景,或者你应该确保插件是否和 API命令sim.getModuleName 一起在子脚本中出现。
04
视觉传感器的性质
视觉传感器属性是场景对象属性对话框的一部分,该对话框位于 [Menu bar --> Tools --> Scene object properties]。你也可以通过双击场景层级中的一个对象图标来打开对话框,或者点击它的工具栏按钮:
在场景对象属性对话框中,点击视觉传感器按钮,显示视觉传感器对话框(视觉传感器按钮只有在最后选择为视觉传感器时才会出现)。对话框显示最后选择的视觉传感器的设置和参数。如果选择了多个视觉传感器,则一些参数可以从上次选择的视觉传感器复制到其他选择的视觉传感器(适用于选择按钮):
Enable all vision sensors 开启所有视觉传感器:开启和关闭所有视觉传感器的视觉传感器功能。
Explicit handling 显式处理:指示传感器是否应显式处理。如果选中此选项,则在调用sim. handleVisionSensor (sim.handle_all_except_explicit)时传感器将不会被处理,但只有在调用sim.handleVisionSensor (sim.handle_all)或sim. handleVisionSensor (visionSensorHandle)时才会处理。如果用户希望处理传感器在子脚本而不是在主脚本(如果不是检查传感器处理两次,当sim.handleVisionSensor (sim.handle_all_except_explicit)在主脚本,当sim.handleVisionSensor (visionSensorHandle)在子脚本)。还请参阅显式和非显式调用一节。
External input 外部输入:当选择时,视觉传感器的正常操作将发生改变,从而可以对外部图像(如视频图像)进行处理和过滤。
External input 透视模式:允许在perspective projection type透视投影类型和orthogonal projection type正交投影类型视觉传感器之间选择。
Ignore RGB info (faster) 忽略RGB信息(更快):如果选择,传感器的RGB信息(即颜色)将被忽略,使其运行更快。如果只依赖传感器的深度信息,请使用此选项。
Ignore depth info (faster) 忽略深度信息(更快):如果选择,传感器的深度信息将被忽略,使其运行更快。如果您不打算使用传感器的深度信息,请使用此选项。
Packet1 is blank (faster)Packet1是空的(更快):如果选中,那么V-REP将不会自动从所获得的图像中提取特定信息,因此它可以更快地运行。如果不打算使用API函数 sim.readVisionSensorsim.handleVisionSensor返回的第一个辅助值包,请使用此选项。
Use local lights 使用局部灯光:如果启用,那么当显示该视觉传感器的图像内容时,只有与该视觉传感器(即构建在该视觉传感器之上)关联的局部灯光将被激活。灯光可以在灯光属性中本地化。
Show fog if enabled 启用时显示雾:禁用时,如果启用雾,视觉传感器将看不到任何雾。也请参考环境对话框。
Render mode 渲染模式:目前有三种模式可用:
- OpenGL(默认):渲染对象的可见颜色通道。
- OpenGL, auxiliary channels 辅助通道:渲染对象的辅助颜色通道。辅助通道红色、绿色和蓝色意味着以以下方式使用:红色是温度通道(0.5是环境温度),绿色是用户定义的通道,蓝色是主动光发射器通道。
- OpenGL, color coded handles 用颜色编码的句柄:通过将对象的句柄编码成颜色来呈现对象。通过sim.readVisionSensor或者sim.handleVisionSensor函数传回的第一个数据包。
- POV-Ray:使用POV-Ray插件渲染图像,允许阴影(也是软阴影)和材质效果(慢得多)。
- External renderer外部渲染器:使用一个通过插件实现的外部渲染器。
- External renderer, windowed 外部渲染器,windowed:使用一个通过插件实现的外部渲染器,并在外部窗口中显示图像(仅在模拟期间)。
- OpenGL3 OpenGL3:使用了由Stephen James提供的OpenGL3渲染器插件。这个插件提供了阴影投射,这在V-REP中是不可能的。可以通过对象的扩展字符串调整每个光的光投影和阴影,例如openGL3 {lightProjection{近平面{0.1}farPlane {10} orthoSize {8} bias {0.001} normalBias {0.005} shadowTextureSize {2048}}
- OpenGL3, windowed :和上面一样,但是windowed。
Near / far clipping plane近/远剪切面:传感器能够探测到的最小/最大距离。
Perspective angle透视角度:传感器在透视模式下检测体积的最大打开角度。
Orthographic size正投影尺寸:当传感器不在透视模式时,探测体积的最大尺寸(沿x或y方向)。
Resolution X / Y 分辨率X / Y:视觉传感器捕获图像所需的X / Y分辨率。根据应用程序仔细选择分辨率(高分辨率会导致操作变慢)。对于旧的显卡模型,实际的分辨率可能与这里所示的不同(旧的显卡模型只支持分辨率为2^n,其中n为0、1、2,等等)。
Entity to detect 要检测的实体:允许指定应该呈现的实体。
Adjust default image color调整默认图像颜色:允许指定在没有渲染的区域使用的颜色。默认情况下,使用环境雾颜色。
Object size X / Y / Z 物体尺寸X / Y / Z:视觉传感器身体部分的尺寸。这没有功能上的影响。
Show volume when not detecting未检测时显示体积:选择后显示传感器未触发时的检测体积。
Show volume when detecting 检测时显示体积:如果选择,传感器触发时显示检测体积。
Object colors 物体颜色:允许调整视觉传感器的各种颜色。
Show filter dialog 显示筛选对话框:切换视觉传感器筛选对话框。该对话框允许指定过滤器应用于捕获的图像。
05
可渲染对象
可渲染对象是指可以被视觉传感器看到或检测到的对象。它们包括:
- 形状
- 路径(但是必须启用路径塑造功能)
- 图形(只渲染非静态的3D曲线)
- 八叉树
- 点云
集合也是可呈现的,因为它们可能包含可呈现的对象。
你可以让一个可渲染的对象只被一个特定的视觉传感器看到。可渲染对象也可以单独启用或禁用其可渲染属性(默认启用,纯形状除外)。这可以在对象的公共属性或通过sim.setObjectSpecialProperty API函数设置。
此外,可渲染对象可以根据它们的相关模型属性(如果它们是模型的一部分)重写它们的可渲染属性。