Octomap是一种基于八叉树的高效概率3D建图框架,目前大多用于储存地图,涉及机器人、传感器、地图等领域。特点是,内存小,可动态调整分辨率。
我使用是因为他和点云有相关之处,也有一些早期的神经网络做过将点云体素化再使用的工作,虽然都效果不理想,在Charles Qi提出PointNet和PointNet++后更是几乎没人在这么做,但做为一种可能性和新的工具,我还是简单探索了一下。
octomap官方网址:OctoMap - 3D occupancy mapping
octomap代码网址:https://github.com/OctoMap/
octomapAPI网址:octomap: OctoMap
octomap源码下载:
git clone https://github.com/OctoMap/octomap.git
Windows里面他的octovis工具是有问题的,即使是按官网提供的方法也可能出现问题,但octomap可以正常使用。基本是跟着官网教程做的,在此进行记录。
octomap和octovis可以分开编译,也可以一起编译,我在windows上只成功做完了Octomap,Octovis没复现出来。
cd .\octomap
mkdir build
cd .\build
cmake ..
?编译可以用Visual studio,在cmake的时候可能需要选一下vs的版本。
在build文件夹内打开octomap.sln,构建其中的ALL_BUILD即可,构建完成会弹出无法访问某个文件夹的报错,不用理。
贴一下官方文档的教程(https://github.com/OctoMap/octomap/tree/devel/octovis),但两种方式在尝试后都出现了问题。其实思路是和上面octomap是一样的,只是多了个QT库,我严重怀疑是什么神奇的版本问题。
MinGW:成功生成.dll和.a文件,但在mingw32-make时报错:no target makefile found,所以我认为这个cmake多多少少有点问题
VS:在执行qmake -t vclib QGLViewer.pro后,开始build QGLViewer.vcxproj时,报错ALL_BUILD文件拒绝访问,切无法通过修改权限解决,只能生成.dll文件,无.lib文件
Linux使用octomap简单方便。
先装依赖
sudo apt-get install cmake doxygen libqt4-dev libqt4-opengl-dev libqglviewer-dev-qt4
然后直接编译链接即可?
mkdir build
cd build
cmake ..
make
在cpp文件同级目录下创建CMakeLists.txt,内容如下
cmake_minimum_required(VERSION 2.8 FATAL_ERROR)
project(porject name)
find_package(OCTOMAP REQUIRED)
include_directories(${OCTOMAP_INCLUDE_DIRS})
link_directories(${OCTOMAP_LIBRARY_DIRS})
link_libraries( ${OCTOMAP_LIBRARIES})
add_executable (exe_name your_cpp.cpp)
target_link_libraries (exe_name ${OCTOMAP_LIBRARIES})
随后
mkdir ./build
cd ./build
cmake ..
make
建议通过属性表来配置,这样要用就拉过来。
属性表管理器(Property Manager)在visual studio中的view->other windows->property manager下来配置。
选择合适的平台,Release和Debug只是涉及静态链接库的版本,Release无报错提示,Debug有,.lib文件最后一个字母是d的就是debug版本的,正常来讲,没差,都能用,但不排除某些库不能混着用,是所以最好分开。
配置主要是有两件事,第一是头文件的目录,第二是静态链接库的目录和文件。
头文件目录在VC++ Directories中的Include Directories中配置,要写全,octomap有三个:
D:\lib\octomap-1.9.1\octovis\include
D:\lib\octomap-1.9.1\dynamicEDT3D\include
D:\lib\octomap-1.9.1\octomap\include
静态链接库要配置两个地方,一是指明静态链接库所在的文件夹,二是指明你需要用哪些景天链接库文件
D:\lib\octomap-1.9.1\lib
dynamicedt3d.lib;octomap.lib;octomath.lib