1 简介

  这篇博文将介绍一个简单易用的3D传感器仿真器,可以用来模拟Lidars,立体视觉,基于时间飞行技术的ToF相机和微软的Kinect实时产生3D点云数据。Glidar仿真器并不是针对特定的某一类3D传感器,它几乎可以用来替代目前任何一种市面上的深度传感器。通过导入的目标的三维模型,实时地产生目标的3D点云数据,并可以将生成的点云数据保存,可视化,或者发布的一个传输控制协议TCP的套接字。如果有对于复杂动力学场景的需求,还可以通过TCP连接实现物理仿真。

      

Fig.1  Glidar 生成点云效果

  Glidar仿真器是基于C++开发的,并利用了PC中的图形渲染管线实时地产生目标模型所对应的点云数据。GL Shading Language的使用保证了点云输出的速度,几乎可以作为任务点云处理算法提供输入数据。图1展示了使用Glidar产生的模拟点云的具体效果图,Glidar使用绿色和蓝色通道来储存深度信息,通过对目标模型可视化表面采样后输出模型点云。

2 实现原理

  Glidar仿真器的设计中舍去了颜色信息,使用红色通道保存图像强度信息,绿色和蓝色通道保存深度信息,其中深度z的方向默认沿着相机视轴的方向。出于MacBook Air上图像架构的标准深度缓存不能轻易用于自定义的原因,放弃了使用深度缓存来保存深度信息。使用颜色缓存来存储深度信息可以直接指定精度的分布。Glidar对OpenGL中标准的管线进行了两处关键改进:1)关闭反锯齿功能,因为反锯齿功能会改变存储在绿色和蓝色通道内的深度信息;2)开启了双缓冲区(在粗略的模拟一个扫描型雷达的时候,该功能也许可以被关闭)。

2.1 可编程的渲染管线

  基本的绘制对象如点,直线和多边形都可以用一系列的顶点进行定义,但是图形硬件必须提供逐像素的输出。渲染被划分成多个通道进行,最不常用的操作(如最原始的分组)被先执行。逐个原始分组的输出被顶点着色器并行处理。顶点着色器输出再被组装成基本单元以便栅格化。最终顶点着色器的输出被插值到使用逐个像素基的片段着色器,在片段着色器里,完成每个像素的颜色,纹理和深度信息的计算。值得注意的是GPU并行地计算每个顶点,然后并行地计算每个片段。

2.2 片段着色器

  一个标准的片段着色器计算每个像素的颜色和透明度。这样的片段着色器将对每个片段输出四个值:R,G,B,alpha所对应的归一化的强度值. 作为对比,Glidar里的片段着色器仅仅输出红色通道值,利用绿色和蓝色通道提供深度z信息(即向量 投影到瞄准线方向的长度),alpha值目前没有分配相关值。

  片段i对应的衰减可以使用标准的OpenGL光照模型计算:

                  

其中,为片段-传感器距离,分别对应光源的常量,线性,和二次方衰减系数。

  片段i的红色强度

是衰减和颜色ci的积,其中

              

上式中为被采样片段的表面法向量,分别表示扩散,环境,镜面反射颜色信息。材料的反射度用s表示,OpenGL里面允许的s 的取值范围为[0, 128].

  Glidar将深度信息分为两部分存储在绿色和蓝色通道里:

                  

  其中,距离比Di定义为

                    

上式中f n分别表示近远平面。

2.3 改善深度信息精度的策略

  在一个标准的OpenGL着色器里,距离相机越近,对应的精度越高。这个机制对于2D渲染和生成点云数据非常有用。提升深度信息的举措主要分为两个方面:

1)使用绿色和蓝色通道存储深度信息;2)调整近平面和远平面使得目标尽可能地填充整个视野。

3 安装测试

  目前Glidar已经在Ubuntu Linux 系统和Mac OSX上完成了测试,需要图形显卡支持GLSL1.2或更高版本。下篇博客将会对Glidar的详细安装过程进行说明。

Glidar: 一个基于OpenGL的开源实时3D传感器仿真器的更多相关文章

  1. 一个基于 Vue3 的开源项目,3个月时间 star 终于破千!

    本文主要是对如何做开源项目的一些思考. 前文回顾: <Vue3 来了,Vue3 开源商城项目重构计划正式启动!> <一个基于 Vue 3 + Vant 3 的开源商城项目> 关 ...

  2. 一个基于DDD的开源项目,各种技术!

    基于asp.net mvc + DDD 构架的开源.net cms系统. 运行截图: 特性: 跨平台 支持Windows.Linux.MacOX运行.linux运行案例:http://blog.ops ...

  3. 一个基于Orchard的开源CRM --coevery简介

    Coevery是开源的.NET Web平台项目,力争打造一个开放而鲁棒的CRM系统,采用Orchard架构,并使用AngularJS改善页面体验.作为一个后发优势的CRM 产品,Coevery 具有一 ...

  4. 新做的一个基于OPENGL的gui库

    #include <BGE/All> ,text);     button->setName(name);     button->setSize(Vector2f(,)); ...

  5. 基于C/S架构的3D对战网络游戏C++框架 _01服务器端与客户端需求分析

    本系列博客主要是以对战游戏为背景介绍3D对战网络游戏常用的开发技术以及C++高级编程技巧,有了这些知识,就可以开发出中小型游戏项目或3D工业仿真项目. 笔者将分为以下三个部分向大家介绍(每日更新): ...

  6. [转] X-RIME: 基于Hadoop的开源大规模社交网络分析工具

    转自http://www.dataguru.cn/forum.php?mod=viewthread&tid=286174 随着互联网的快速发展,涌现出了一大批以Facebook,Twitter ...

  7. 转: Orz是一个基于Ogre思想的游戏开发架构

    Orz是一个基于Ogre思想的游戏开发架构,好的结构可以带来更多的功能.Orz和其他的商业以及非商业游戏开发架构不同.Orz更专著于开发者的感受,简化开发者工作.Orz可以用于集成其他Ogre3D之外 ...

  8. GPUImage ==> 一个基于GPU图像和视频处理的开源iOS框架

    Logo 项目介绍: GPUImage是Brad Larson在github托管的开源项目. GPUImage是一个基于GPU图像和视频处理的开源iOS框架,提供各种各样的图像处理滤镜,并且支持照相机 ...

  9. 一个技术汪的开源梦 —— 基于 .Net Core 的公共组件之 Http 请求客户端

    一个技术汪的开源梦 —— 目录 想必大家在项目开发的时候应该都在程序中调用过自己内部的接口或者使用过第三方提供的接口,咱今天不讨论 REST ,最常用的请求应该就是 GET 和 POST 了,那下面开 ...

随机推荐

  1. 【转】SQL语句删除和添加外键、主键

    --删除外键 语法:alter table 表名 drop constraint 外键约束名 如: alter table Stu_PkFk_Sc drop constraint FK_s alter ...

  2. Golden Gate 相关组件介绍:

    OGG组件: Manager: 启动其它进程 Collector Extract Data Pump:可选进程,建议使用 Replicat Trails: 可以压缩,加密 Checkpoint OGG ...

  3. Windows2003 安装MVC4 环境的步骤

    一.作为部署服务器的安装步骤 1.服务器上安装SP2 和 IIS6 2.安装.Net Framework3.5 SP1(完整安装包,包含2.0 2.0SP1,237MB那个安装包) 3.安装.Net ...

  4. linux进程的有效用户ID

    进程的有效用户ID用于文件访问时的权限检查.通常,有效用户ID等于实际用户ID(也就是你登录是的用户ID),有效组ID等于实际组ID. 我们知道每个文件针对不同的user有不同的读.写.执行权限.当执 ...

  5. Python笔记25-----------创建二维列表【浅copy】和转置

    一.创建二维列表 1.二维列表创建第二维的时候,如果采用*2这种方式,这是一种浅复制的方式,同时引用到同一个list,如上图的C. 这种形式,不方便修改C[ i ][ j ]的数据,如果改C[ 0 ] ...

  6. eclipse集成ijkplayer项目

    1.ijkplayer是什么 ijkplayer是b站开源的一个视频插件,基于ffmpeg, 支持 Android 和 iOS,可以代替android自带的videview,有不错的体验,支持的视频文 ...

  7. systemctl 控制单元

    [root@web01 ~]# systemctl status sshd.service ● sshd.service - OpenSSH server daemon Loaded: loaded ...

  8. echarts如何更改表格主题颜色

    vue项目中,需要使用echarts时,需要根据UI设计图进行图标颜色修改 方法一: 1.在script中引入echarts以及主题样式: import echarts from 'echarts'; ...

  9. keil5下载程序时出现“internal command error”解决方法

    今天下载的时候,插入下载器,查看Debug可用看到“internal command error”,一直找不到原因,后来查看上一个工程才发现,上一个程序禁用了Seral Wire 引脚,导致的. 解决 ...

  10. Vue父子组件之间的通讯(学习笔记)

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...