点云仿真软件Blensor介绍

点云仿真软件Blensor介绍
梧桐树丰子恺  Blensor是⼀款开源的点云仿真软件,是国外的研究⼈员在三维动画软件Blender基础上进⾏开发的,整个安装包很⼩,只有80M左右,能够模拟Lidar(Velodyne 32/64线等)、TOF相机、Kinect等,⽽且可以根据⾃⼰的需求调整传感器参数,也可以加⼊噪声模拟实际点云,总之是⼀款很优秀的点云仿真软件,但是⽬前国内对这款软件的介绍寥寥⽆⼏,⼏乎不到相关的学习资料,所以在初步学习这款软件后,决定写⼀下简单的教程,帮助需要的伙伴快速⼊⼿(⽬前本⼈也在学习中,对其中的部分功能都还不熟悉,因此下⾯的教程只适⽤于对Blender软件零基础、只需快速上⼿拿到仿真点云数据的伙伴,欢迎⼤家⼀起交流)
  ⼀、软件下载
  安装好后打开是下⾯的界⾯
  ⼆、跑通官⽅demo
三星q208  安装好以后,我们先尝试跑通官⽅demo,对这个点云的数据采集过程有个直观感受。
(2)打开table_tutorial_color.blend⽂件,⾥⾯主要包含了两类:⼀台TOF相机和含有桌⼦杯⼦等的模型场景。
中国商业地产联盟⾸先右键点击相机,保证相机处于使⽤状态中(相机实三⾓形为黄⾊,且出现坐标轴)
然后再点击single scan按钮进⾏点云数据采集。
⾄此,数据采集过程完成。上述只是简单的⾛了⼀遍流程,在实际应⽤过程中,需要⽤python编写脚本程序⾃动采集(不嫌⿇烦的也可以⼿动采集),下⾯就以我个⼈的使⽤需求进⾏详细介绍。
  三、实际使⽤
新建场景后,删除⾃带的模型和相机,导⼊⾃⼰的模型,Blensor⽀持包括.3ds、.ply、.obj、.stl等主流三维模型格式,导⼊后点击左下⾓的view/properties可以修改模型的尺⼨、位置、姿态等,如下图所⽰。
然后加⼊相机,如下图。在右侧下⽅可以选择相机的类型,包括velodyne 32线、velodyne  64线、TOF、Kinect等,后⾯的参数也都可以直接进⾏调整以满⾜⾃⼰的需求。
在调整好所有参数之后,下⾯介绍如何⽤python进⾏数据收集。(其实上述基本所有的操作都可以⽤python实现,⽐如卫星模型⽐例、位置这些,看个⼈习惯了)
点击左下⾓按钮,会出现很多功能,这⾥我们介绍两个,Text Editor和Python Console
(1)Text Editor主要是⽤来编写脚本程序,当然⽬前⽀持的也就是Python,⾥⾯可以设置显⽰⾏数和代码⾼亮等,虽然⽐不上VS Code、PyCharm等编辑器好⽤,但是也算很良⼼了,毕竟⼏⼗兆的软件……另外提醒⼀下,这个是Python3.0的语法。⼀般我们的程序就是写在这⾥,写完后点击“Run Script”就能运⾏了,这⾥不⽀持断点调试,同时因为会⽤到Blensor⾃⼰的库函数,所以外⽤编辑器也不太⾏,这个是个硬伤,但是好在这个软件有个控制台,简单的语法错误导致编译失败的可以⽤这个解决,如果是内在逻辑错误,就慢慢检查代码吧,good luck……(这个⾃带的系统控制台叫“Toggle System Console”,在界⾯左上⽅“Window”下拉菜单⾥⾯)
(2)Python Console其实很多⼈应该不陌⽣,就是个最基本的程序控制台,通过该控制台能输⼊⼀些基本的指令看到相关属性数据啥的。具体可以在“Outliner”和“Properties”中查看,包括点云数据、类型等。
重点:Blensor中所有的指令数据都给了⾮常具体的函数接⼝,这⼀点是我个⼈觉得最赞的,省去了⼤量阅读开发⽂档的时间,每个想要调⽤的数据或者按钮,直接⿏标放在相应的位置即可。
另外关于数据导出的问题:
Blensor官⽅说法是可以提供pcd的点云格式数据,但是!这个格式不知道为啥,完全不对,数据帧头和数据包是两个⽂件,⽽且数据包的⽂件有问题,没法直接读取,可能是我个⼈的理解偏差,总之官
⽅给的数据我没法⽤。
没有pcd格式点云数据就得⾃⼰想办法,好在官⽅还有原始数据可供读取,因此可以采⽤⼀帧⼀帧的数据访问,然后保存下来使⽤。
具体⽅法:在每⼀次扫描后,清除上⼀帧的扫描结果(不然直接读取数据会包含之前的,导致出错),通过这个函数进⾏数据访问:shes[“  ”].[]
此外,关于清除上⼀帧的点云数据问题,在Single scan按钮后⾯,有⼀个Delete scans,这个按钮只是清除3D 视图中的扫描痕迹,完全不会清除扫描数据,因此我们需要⽤bpy.ve()函数,这样清除后的数据再进⾏扫描,就能拿到当前帧下的扫描结果。
下⾯附⼀下我⾃⼰的代码,可以帮助⼤家进⼀步理解
import bpy
import math
from numpy import arange
from bpy import data as D
from bpy import context as C
from mathutils import *
from math import *
import blensor
"""set the parameters of tof """
scanner = bpy.data.objects["Camera"];
scanner.location = (0,-6,0);
scanner.scan_type = "tof";
"""clear all scanning datas  """
for item in bpy.data.objects:
球面投影
pe == 'MESH' and item.name.startswith('Scan'):
bpy.ve(item)
"""set the position and attitude of satellite"""
satellite=bpy.data.objects["Satellite"];
satellite.location=(0,0,0);
"""clear the scanning in view windows and start newly scan"""
bpy.ops.blensor.delete_scans();
bpy.ops.blensor.scan();
f=open("C:/Users/Justice/Desktop/TOF spacecraft position&attitude estimation by ","w")
for z_angle in arange(0,360,5):
#clear all scanning datas
pdifor item in bpy.data.objects:
pe == 'MESH' and item.name.startswith('Scan'):
bpy.ve(item)
bpy.ops.blensor.delete_scans();
bpy.ops.blensor.scan();
for item in bpy.data.objects:
pe == 'MESH' and item.name.startswith('Scan'):
#s_angle="data%" %(z_angle/2+1))
氢致开裂f.write("999\t999\t999\n")
for sp in item.data.vertices:
#print('X=%+#5.3f\tY=%+#5.3f\tZ=%+#5.3f' % (sp.co[0], sp.co[1],sp.co[2]));                str='%#5.3f\t%#5.3f\t%#5.3f \n' % (sp.co[0], sp.co[1],sp.co[2]);
f.write(str);

本文发布于:2024-09-21 22:53:45,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/85874.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:数据   软件   扫描   采集
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议