【读书笔记】《视觉SLAM十四讲(高翔著)》 第5讲

【读书笔记】《视觉SLAM十四讲(高翔著)》 第5讲_第1张图片

文章目录

    • PART1 读书笔记
    • PART2 实践部分

PART1 读书笔记



PART2 实践部分

  • 5.3 实践:图像的存取与访问 书p95
    5.3.1安装OpenCV
    按照书上流程安装即可。
    5.3.2 操作OpenCV图像
    此处按照书p96页大致讲述例程代码:
    2行:计时程序相关;
    5 6行:OpenCV相关;
    10-18行:读取图像并判断是否正确读取;
    21行:输出图像的宽 高 通道数信息;
    22行:显示图像;
    23行:程序暂停,对着已打开的图像按下(任意)键盘按键,程序才会执行下一步;
    25-30行:判断图像类型是否符合;
    32-52行:遍历图像像素,并输出所花费的时间;
    54-60行:图片的复制(错误的方法),直接把原图赋值给新图的话,若改变新图,则原图也会跟着改变;60行同23行;
    62-67行:正确的图片复制方法,改变复制后的新图,原图保持不变。67行同60行;
    70行:关闭所以已打开的图片窗口;
  • 5.4实践:拼接点云
    一、Ubuntu下的PCL库安装
    安装记录(20190611YC):
    ①先按照书P99下方的三行代码安装,结果出现错误:E: 无法定位软件包 libpcl-all
    ②之后按照网页https://blog.csdn.net/dantengc/article/details/78446600中的方法3安装,也即“源代码安装”,安装时间很长,大概3-4个小时,且并未安装好,PCL安装的不完整不能正常使用。采用源代码安装的PCL在调用的时候出现错误:fatal error: pcl/visualization/pcl_visualizer.h: No such file or directory,原因是在编译和安装时没有在urs/include/plcX.X目录下生成pcl_visualizer.h。按照网页https://blog.csdn.net/unlimitedai/article/details/86481912的方法去解决该问题,并未成功。至此,源代码安装方法失败。
    ③最终将PCL安装成功,是采用网页https://blog.csdn.net/fanjiule/article/details/80913894的方法,具体如下:
    电脑退出校园网,连上手机热点网络;
    使用命令:
    sudo add-apt-repository ppa:v-launchpad-jochen-sprickerhof-de/pcl
    sudo apt-get update
    sudo apt-get install libpcl-dev
    注意,第3行命令和书P99下方的命令不同。
    如此即可成功安装PCL:
    【读书笔记】《视觉SLAM十四讲(高翔著)》 第5讲_第2张图片
    【读书笔记】《视觉SLAM十四讲(高翔著)》 第5讲_第3张图片

④PCL安装好之后,调试程序若仍出问题,可仔细检查CMakeLists.txt文件中的语句,或弃用其中的find_package函数,而直接输入PCL在本电脑的安装路径。当前CMakeLists.txt已调试通过,可供后续参考:

cmake_minimum_required(VERSION 2.6)
project(show_sample)#改1处

find_package( PCL REQUIRED COMPONENTS common io visualization )#20190611YC:若无这一行,则出现报错:对‘pcl::visualization::CloudViewer::CloudViewer(std::__cxx11::basic_string<

find_package( PCL 1.7 REQUIRED COMPONENT common io )
include_directories( “/usr/include/pcl-1.7/” )
link_directories("/usr/lib/libpcl_common.so" “/usr/lib/libpcl_io.so”)
list (REMOVE_ITEM PCL_LIBRARIES “vtkproj4”)

add_executable(show_sample show_sample.cpp)#改2处

target_link_libraries (show_sample ${PCL_LIBRARIES})#改1处

install(TARGETS show_sample RUNTIME DESTINATION bin)#改1处

二、程序说明
【注意!】该例程在编译的时候,不要再mkdir build; cd build,而是直接在当前目录下cmake.,不然运行会出错!
根据书P100页,大致分析本例程:
14行:定义变量,分别用于存储彩色图和深度图;
15:定义变量,用于存储相机位姿;
17-22:检查位姿数据(pose.txt)是否在当前目录下,要求该文件在当前目录下,不然就会有报错提示。
26-28:5张图片的色彩图像和深度图像的读取,并存储在变量中;
30-37:5张图片对应的5个位姿信息从pose.txt转化为变换矩阵T,并存储在变量中;
39-45:相机内参赋值;
47-50:定义类型:点和点云文件;
53:新建一个点云;
54-80:依次对5张图片执行以下操作:利用上述变量中的色彩、深度、位姿信息,计算出每张图片的每个像素点在世界坐标系下的坐标,结合像素点自身的颜色,作为点云文件中的一个点。最终得出5张图片所有像素点在世界坐标系下的坐标和颜色都求了出来,形成彩色点云。
57:赋值:每张图片的色彩信息;
58:赋值:每张图片的深度信息;
59:赋值:每张图片的位姿信息;
60-61:对于每张图片,遍历本图片的所有像素点;
63:赋值:每个像素点的深度信息;
64:如果深度信息不是0;
65:定义变量,表示一个三位点坐标;
66-68:根据像素坐标和相机内参,反算出点在相机坐标系下的坐标;
69:根据本图片的位姿信息,将相机坐标系下的坐标转化为世界坐标系下的坐标;
71:定义一个点p,点p即为点云数据中的1个点;
72、73、74:将上述计算出的世界坐标系的三维坐标值赋值给点p;
75、76、77:将rgb色彩信息赋值给点p;
78:将点p收录入53行所新建的点云变量;
82:is_dense (bool):判断points中的数据是否是有限的(有限为true)或者说是判断点云中的点是否包含 Inf/NaN这种值(包含为false)。这方面的内容若想了解更多可参考网页:
https://blog.csdn.net/Linear_Luo/article/details/52647790
84:将53行新建的、经78行赋值的点云变量pointCloud保存为点云文件map.pcd

你可能感兴趣的:(SLAM学习笔记)