第五周笔记-slam获取点云文件

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_orbslam2ORB_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 PermutationMatrix;
typedef Eigen::PermutationMatrix 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版本问题,暂时未解决。


你可能感兴趣的:(第五周笔记-slam获取点云文件)