V-REP学习笔记(三):视觉传感器

视觉传感器和相机功能上差不多,但还是有一些不同,官方的解释是这样的

概括一下,视觉传感器有API函数,相机没有,需要自己写;视觉传感器更占CPU;视觉传感器观测的对象必须把renderable属性勾上。

视觉传感器根据视角分为两类,正交(orthogonal)和透视(perspective),这个图可以很好理解二者的差异

视觉传感器的一些基本属性配置

主属性中其他顾名思义即可,最后一个Packet1 is blank什么意思呢?

视觉传感器得到图像的RGB和深度是通过Packet1来返回,滤波器得到的图像通过Packet2,Packet3……来得到。

Packet1包括15个数据位,依次为灰度,RGB,深度信息,可以通过simReadVisionSensor来获取

Near/far clipping plane用来设置剪切平面,位于最近距离和最远距离之间的图像可以被观测,之外的图像不会被观测。

底下透视角/正交角和分辨率也是顾名思义。

视觉传感器最方便的地方就在于,有许多成熟的滤波器可以直接使用,而且可以多个完美复合

比如你原来看到的视图是这样

我们添加一个边缘检测

再看看效果

可能你会问,上面Packet1提供的只有最大最小和均值,那如果要得到每一个像素点具体的灰度值或者RGB值怎么办呢?

V-REP也提供了对应的API函数,simGetVisionSensorImage

这个函数返回一个一维数组,这个数组的大小=分辨率*3,假设返回值为buffer,那么buffer[1], buffer[2], buffer[3]就代表像素点(1,1)处的R,G,B值,以此类推,之后分别为(1,2)……(1,n),……(m,n)

最后我们写一个简单的脚本来获取视觉传感器的RGB值,这里图像的分辨率为256*256

function sysCall_init()   
    v1=sim.getObjectHandle("Vision_sensor#0")
end

function sysCall_actuation()
    imageBuffer = simGetVisionSensorImage(v1)
    info = string.format("%.2f,%.2f,%.2f,%.2f",imageBuffer[256],imageBuffer[512],imageBuffer[2560],imageBuffer[25600]) 
    simAddStatusbarMessage(info)

end

输出如下

注意的是这里的RGB值也都是经过归一化后的结果,而且函数返回的RGB分量大小与物体颜色的设置有关(漫反射分量(Diffuse component)、高光分量(Specular component)、自发光分量(Emissive component),辅助分量(auxiliary component)等)。这些专业术语我也没太搞懂,第一个漫反射分量应该就是和我们的视觉感受相一致,我一般就只调整第一个来改变颜色。

猜你喜欢

转载自blog.csdn.net/banzhuan133/article/details/85837998