slam:拼接点云遇到的问题

在完成slam第5章节的实例时,遇到问题如下:

(1)opencv的安装;

(2)cmake时的找不到opencv的路径问题;

第一个问题,我安装了2个版本的opencv一个是3.1.0一个实3.4.3,实际后来对程序编译时用的是后面的版本,3.1.0一直出现找不到一些文件的错误。在安装opencv时,我参考了https://blog.csdn.net/danmeng8068/article/details/770176

在cmak时,一直找不到路径。在cmake文件里加了第9、10,但也不行。第21行是为了解决

[ 50%] Linking CXX executable joinMap
/usr/bin/ld: cannot find -lvtkproj4
collect2: error: ld returned 1 exit status
CMakeFiles/joinMap.dir/build.make:349: recipe for target 'joinMap' failed
make[2]: *** [joinMap] Error 1
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/joinMap.dir/all' failed
make[1]: *** [CMakeFiles/joinMap.dir/all] Error 2
Makefile:83: recipe for target 'all' failed
make: *** [all] Error 2
*** Failure: Exit code 2 ***
--------------------- 
这个问题加的。

  1 cmake_minimum_required( VERSION 2.8 )                                       
  2 project( joinMap )
  3 
  4 set( CMAKE_BUILD_TYPE Release )
  5 set( CMAKE_CXX_FLAGS "-std=c++11 -O3" )
  6 
  7 # opencv 
  8 find_package( OpenCV REQUIRED)
  9 set(OpenCV_DIR /home/XXXX/opencv-3.1.0/release)
 10 set(OpenCV_FOUND 1)
 11 include_directories( ${OpenCV_INCLUDE_DIRS} )
 12 
 13 # eigen 
 14 include_directories( "/usr/include/eigen3/" )
 15 
 16 # pcl 
 17 find_package( PCL REQUIRED COMPONENT common io )
 18 include_directories( ${PCL_INCLUDE_DIRS} )
 19 add_definitions( ${PCL_DEFINITIONS} )
 20 
 21 list(REMOVE_ITEM PCL_LIBRARIES "vtkproj4")
 22 add_executable( joinMap joinMap.cpp )
 23 target_link_libraries( joinMap ${OpenCV_LIBS} ${PCL_LIBRARIES} )

最后还是使用了cmake-gui完成的cmake,

至此,cmake完成,然后在build文件夹里make一下,会有一个0:15:0的warning,在cmakelist加第21行代码,可以解决。

### 关于视觉SLAM中点拼接的技术实现 #### 点云拼接的核心概念 点云拼接是将来自不同视角的深度图像转换为三维空间中的点云,并通过估计相机位姿将其合并到统一的世界坐标系下[^1]。这一过程通常依赖于RGB-D传感器获取的数据,其中包括彩色图像和深度图像。 #### RGB-D SLAM框架下的点云拼接流程 在RGB-D SLAM系统中,点云拼接主要分为以下几个部分: 1. **相机运动估计** 使用PnP算法或其他几何方法来计算相邻帧之间的相对变换矩阵(旋转和平移)。这一步的关键在于提取特征点并匹配它们的位置关系。例如,在两帧之间调用`estimateMotion`函数完成姿态估计[^2]: ```cpp RESULT_OF_PNP estimateMotion(FRAME& frame1, FRAME& frame2, CAMERA_INTRINSIC_PARAMETERS& camera); ``` 2. **二维点转三维点** 根据相机内参模型,将像素坐标(u,v,d)映射回世界坐标系中的三维点(x,y,z)[^3]。具体公式如下所示: \[ x = d \cdot (u - c_x) / f_x,\quad y = d \cdot (v - c_y) / f_y,\quad z=d \] 3. **点云配准与融合** 配准是指利用已知的姿态信息对齐两个独立采集的点云集;而融合则是指去除重复区域并将所有有效数据组合起来形成最终的大规模场景表示形式。这里需要用到诸如ICP(iterative closest point)之类的优化策略以及降噪处理手段以提高重建质量[^4]。 #### 开发环境配置建议 为了顺利开展基于C++语言的实际开发工作,推荐按照以下方式设置项目构建工具链(CMake): ```cmake # 声明要求的 cmake 最低版本 cmake_minimum_required(VERSION 2.8) # 声明一个 cmake 工程 project(joinMap) # 定义编译的模式 set(CMAKE_BUILD_TYPE Release) # 添加c++ 11标准支持 set(CMAKE_CXX_FLAGS "-std=c++11 -O3") # 寻找OpenCV库 find_package(OpenCV REQUIRED) # 添加头文件 include_directories(${OpenCV_INCLUDE_DIRS}) # 添加Eigen头文件 include_directories("/usr/include/eigen3/") # 寻找PCL库 find_package(PCL REQUIRED COMPONENTS common io) # 添加头文件 include_directories(${PCL_INCLUDE_DIRS}) # 添加编译选项 add_definitions(${PCL_DEFINITIONS}) # 添加一个可执行程序 add_executable(joinMap joinMap.cpp) # 将库文件链接到可执行程序上 target_link_libraries(joinMap ${OpenCV_LIBS} ${PCL_LIBRARIES}) ``` 上述脚本确保了必要的第三方库被正确引入,从而简化后续编码过程中涉及的各种操作逻辑。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值