Skip to content

point cloud roamming using osg3.4.1 and it's xyz trajectory

License

Notifications You must be signed in to change notification settings

whu-lyh/PointCloudRoam

Repository files navigation

编译

  1. 依赖库(以下版本均经过测试)

osg3.4.1,osg3.6.4,作为主要的渲染引擎;
qt5.13.0,qt5.7.1,作为嵌入的显示界面;
opencv3.4.0,opencv3.4.7,
glog, 记录程序运行中的日志;
liblas1.8.1,用于las点云文件的读写;
pcl1.8.1,基本点云库,点云读写以及基本点云数据格式及其他操作;
boost1.67.0,用于基本的文件操作。

  1. 开发平台
    VS2015,VS2017建立工程,将文件添加到工程中,编译即可。可以尝试以下操作
  • 可以直接用文本编辑器打开.vcxproj文件,修改 <VCProjectVersion>14.0</VCProjectVersion> 14.0对应vs2015,或其他合适版本
  • 工具集版本为ToolsVersion="14.0" 14.0对应vs2015
  • 修改平台为 <PlatformToolset>v140</PlatformToolset> v140对应vs2015
  • <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> Windows版本修改

运行

强烈建议Release下运行。在PointCloudRoamInQt文件夹下,找到Configuration.yaml样例文件,将待漫游的点云路径和轨迹文件配置好,命令行运行编译生成的exe,参数为.yaml文件路径。

  1. 轨迹文件格式
3 
366351.445104 3451455.032898 17.689400
366342.848100 3451626.105997 16.927400
366333.584099 3451805.588922 17.924399

  第一行为轨迹点个数,后续每行记录分别为漫游轨迹点的xyz,z值可修改以改变漫游视点高低。
2. yaml文件
在冒号后有一个空格,切记。

点云漫游时候小知识点总结

1、一开始的代码版本是直接基于OSG和VS2015的,后面将代码迁移到了VS2017和Qt上。
2、将代码和多线程显示结合到了一起。
3、和P2M中的点云漫游代码进行了对比,发现其核心计算旋转角度的部分是一样的,然而在漫游的中途总是会出现视角转换了角度。
4、搞了好久一直没有搞清楚为什么中途会发生变化,以为是四元数计算的时候出现了问题,但是后面发现是因为轨迹文件中最后一样出现了 空行,没有xyz,但是会被自动读取进去。导致两个节点之间的旋转角度计算出现归零错误,后面将这行删掉之后就可以了。
5、代码的注释已经写了大部分。
6、采用yaml进行参数配置已经完成,后面本项目可能会考虑要对点云读取进行加速的操作吧。

四元数资料

其中涉及到的四元数是根据https://github.com/Krasjet/quaternion
提供的资料学习的,感觉讲的挺好的,公式推导挺详细的,参数写的也比较仔细

TODO

  • 点云读取加速,maybe内存映射的方式。
  • Debug下还有一个错误,估计是哪个指针或者dll的问题。
  • 做小角开个小框显示当前漫游位置轨迹。