1 本周工作
- 配置调试ORBSLAM2_with_pointcloud_map
- 简单修改源码,将得到的点云文件进行保存,可存储为文件格式包括
.pcd
和.ply
点云文件等- 配置Azure_Kinect_SDK,分别从Microsoft官网提供的下载安装方式和源码调试两个方面入手,完成SDK的配置,能够顺利运行k4aviewer,打开Kinect
- 尝试配置Azure_Kinect_ROS,出现了一些bug,原因在OpenCV的版本上,还在进一步排查
2 工作问题及重点记录
首先是ORBSLAM2_with_pointcloud_map的安装调试:
GitHub地址:https://github.com/gaoxiang12/ORBSLAM2_with_pointcloud_map
该开源代码是由高翔修改的ORB_SLAM2源码,使用PCL库,为每个关键帧构造相应的点云,将所有点云拼接起来,形成全局点云地图。
需要注意的是: 该GitHub项目Clone下来之后,会出现modified文件夹以及一个压缩包,经过多次尝试,发现只利用压缩包里面的两个文件即可,分别是g2o_with_orbslam2
和ORB_SLAM2_modified
,前者主要配置所需的g2o库相关内容,后者即为修改的源码。
在编译之前需要对源码进行修改:
g2o_with_ORBSLAM2 文件中的cmakelist.txt,注释以下代码
# shall we build the examples
# SET(G2O_BUILD_EXAMPLES ON CACHE BOOL "Build g2o examples")
# IF (G2O_BUILD_EXAMPLES)
# MESSAGE(STATUS "Compiling g2o examples")
# ENDIF(G2O_BUILD_EXAMPLES)
以及对g2o文件夹下的cmakeList.txt,注释以下代码
# Examples
# IF(G2O_BUILD_EXAMPLES)
# ADD_SUBDIRECTORY(examples)
#ENDIF(G2O_BUILD_EXAMPLES)
进行编译,发现有问题,做如下修改:
- 修改 g2o/types/slam2d/edge_se2_pointxy_bearing.cpp
//t.setRotation(t.rotation().angle()+_measurement);
t.setRotation((Eigen::Rotation2Dd)(t.rotation().angle()+_measurement));
- 修改 g2o_with_orbslam2/g2o/solvers/eigen/linear_solver_eigen.h
//typedef Eigen::PermutationMatrix<Eigen::Dynamic, Eigen::Dynamic, SparseMatrix::Index> PermutationMatrix;
typedef Eigen::PermutationMatrix<Eigen::Dynamic, Eigen::Dynamic, SparseMatrix::StorageIndex> PermutationMatrix;
OpenCV版本错误: 编译时发现某些函数中的cv::Mat 方法未定义,修改CmakeLists.txt中的OpenCV引入:
find_package(OpenCV 3.0 QUIET)
if(NOT OpenCV_FOUND)
find_package(OpenCV 2.4.3 QUIET)
if(NOT OpenCV_FOUND)
message(FATAL_ERROR "OpenCV > 2.4.3 not found.")
endif()
endif()
不出意外,这种引入包的方法适用于很多个版本的OpenCV。
调试完成后,运行数据集,得到pcd文件,使用pcl_viewer查看该点云文件:
在和负责点云构造格网模型的同学沟通之后,发现cgal库所需的输入点云文件主要有:.ply
, .off
和.las
,目前保存的点云文件为pcd文件,经查找pcl官方文档后发现,保存点云文件的函数很多,也支持不同格式,修改源码后,得到ply文件。
主要的保存函数及保存文件的类型:
- save()
- saveCharPNGFile()
- saveIFSFile()
- saveOBJFile()
- savePCDFile()
- savePLYFile()
- savePNGFile()
- savePolygonFile()
- saveRgbPNGFile()
- saveVTKFile()
接下来是调试Azure Kinect ROS
调试Azure Kinect ROS,调试ROS之前需要Azure Kinect SDK源码中的部分文件以及编译后的文件,因此需要先编译SDK。
编译SDK的时候需要安装依赖项,项目在scrips/docker/setup-ubuntu.sh中提供了脚本文件,但是运行可能会有问题,因此我照着脚本文件中的内容一步步手动安装依赖,然后进行编译。
编译过程中会存在extern/libyuv/src文件下载失败,服务器在墙外,因此在该地址:https://github.com/lemenkov/libyuv
下载相关libyuv文件,下载完成后放入相应的文件夹中即可。
编译成功即可使用:sudo ./bin/k4aviewer
打开设备。
未解决的问题:
安装ROS Melodic时,相关依赖完成后,需要对rosdep进行初始化,出现问题(待解决):
已解决:参考连接
调试ROS版本的Azure Kinect DK,在编译时出现OpenCV版本问题,暂时未解决。