从0开始学SLAM的各种问题

一.关于更改vscode自带终端文字间隔,字体大小

文件 -> 首选项 -> 设置 -> 搜索“终端”->

        找到Terminal>Integrated:Font Family -> 更改为monospace即可

        找到Terminal>Integrated:Font Size -> 即可更改字体大小

二.关于vscode缩进问题 

明明设置了Tab Size为8但每个缩进只有2个空格

解决:文件->首选项->设置->搜索 Tab->找到Editor:Tab Size->点击"Editor: Detect Indentation"后会进行跳转->取消该选项重启即可

三.关于vscode使用的基本插件(C++语言)

1.c/c++

2.Chinese (Simplified)

3.CMake

4.CMake Tools

四.关于json文件的内容及基本概念(代码自动编译及调试)

以下均为个人理解,如有错误或偏差,欢迎评论区指正,万分感激!!

注:我最初一直以为json文件是自动生成的,主要是由于不了解json文件,其实launch.json和tasks.json只是两个文件罢了,可以vscode自动生成,也可以手动编写,当你了解文件的作用时,你便无须顾虑手动编写相对于自动生成的会带来哪些隐患,手动编写和vscode自动生成的都是一样的,同时这两个文件都是在.vscode文件夹下,如果没有出现.vscode文件夹,你也可以手动创建,同样没有区别

1.launch.json文件:这是一个调试的配置文件,能够控制调试过程

        创建launch.json文件:

                1.点击左侧边栏的运行和调试标志(或按ctrl+shift+d) 

                2.点击创建launch.json文件,在跳出的选项中找到C++(GDB/LLDB)并点击

                (注:若没有C++(GDB/LLDB)选项,则在第一步开始前,先打开一个cpp文件,再开始按步骤创建)

                (有些人在第2步做完后还会出现一个选项步骤,但我没有,所以创建的launch.json没有配置息,以下是我创建后的内容)

{
        // 使用 IntelliSense 了解相关属性。 
        // 悬停以查看现有属性的描述。
        // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
        "version": "0.2.0",
        "configurations": []
}

                3.创建完后会你会发现左侧边栏的资源管理器中会出现.vscode文件夹,launch.json文件就在其中

                4.因创建的launch.json无配置信息,所以点击右下角的“添加配置”按钮,选第一个就好,你的launch.json内容应该是如下的(自动生成的)

{
        // 使用 IntelliSense 了解相关属性。 
        // 悬停以查看现有属性的描述。
        // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
        "version": "0.2.0",
        "configurations": [
                {
                        "name": "(gdb) 启动",
                        "type": "cppdbg",
                        "request": "launch",
                        "program": "输入程序名称,例如 ${workspaceFolder}/a.out",
                        "args": [],
                        "stopAtEntry": false,
                        "cwd": "${fileDirname}",
                        "environment": [],
                        "externalConsole": false,
                        "MIMode": "gdb",
                        "setupCommands": [
                            {
                                "description": "为 gdb 启用整齐打印",
                                "text": "-enable-pretty-printing",
                                "ignoreFailures": true
                            },
                            {
                                "description":  "将反汇编风格设置为 Intel",
                                "text": "-gdb-set disassembly-flavor intel",
                                "ignoreFailures": true
                            }
                        ]
                }
        ]
}

                5.你会发现在"configurations"下出现了一个大括号的内容,每个大括号都是一个配置信息, 且对应有名称"name",你在运行和调试栏中会发现有个下拉选项,该下拉栏中会出现每个配置信息的名称,他决定着你调试时使用哪个配置信息

                6.关于配置信息中的每个成员表示什么,你只需将鼠标放在上面便会知晓
                7.在这些配置信息中,我们暂时只需关注"program"成员,即你想调试的可执行程序的完整路径,${workspaceFolder}表示你当前的工程目录,比如我生成的可执行文件为demo,在build文件夹下,那么这一项会被填为:"${workspaceFolder}/build/demo"

22.06.22补充:前面提到的只能运行无参的可执行文件,但当我们需要运行带参数的可执行文件时(例如我需要执行orb_cv可执行文件,该文件的执行需要传入2个参数:img1和img2的路径),我们就需要关注"args"成员

(1).若在终端直接执行时,你需要输入:./orb_cv ../img1.png ../img2.png

(2).若需要调试时,只需将参数../img1.png ../img2.png填入"args"成员中,如下

"program": "${workspaceFolder}/build/orb_cv",
"args": [
    "../1.png",
    "../2.png",
],

至此launch.json基本创建完成(后续还将会添加一句),你可以设置一个断点,编译后按F5(vscode默认的开始Debug快捷键)进入调试,看一看能否命中你设置的断点,如果可以,则说明你成功了,如果没有命中,一种可能是你编译过程没有添加调试信息,尝试在你的CMakeLists.txt中添加该句,你的问题大概率会得到解决(该句的意思是在编译时添加调试信息的编译选项):

#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g")


2.tasks.json文件:据我了解这是一个任务脚本(我暂时只了解将其用于launch前的准备任务,以及单独执行其中的某个任务。我想,在浏览下文后,你会有所收获)

        创建tasks.json文件:

                1.点击顶部栏的终端,选择“配置默认生成任务”,如果你像我一样只关注调试,那后面的选项随便选,生成tasks.json文件后删除tasks里的所有内容,此时,你的tasks.json文件应该是如下的:

{
	"version": "2.0.0",
	"tasks": [
        
        ]
}

                (注:你同样可以将鼠标放在成员上了解该成员的作用)

                2.在tasks下创建task任务,每一个大阔花{}都表示一个任务

                3.首先明确我们使用task.json是用来做为调试前的准备工作,在调试之前我不想再在命令行中输入cmake,make等指令,将这些任务都放在task中,委托task.json文件来帮我们执行,因此我们大致需要准备两条task command任务,第一个是执行cmake,第二个是执行make

                4.创建第一个任务:该任务的通俗理解是在build文件夹下执行:cmake ../ 命令

{
    "type": "shell",
	"label": "cmake",
	"options": {"cwd": "${workspaceFolder}/build"},
	"command": "cmake ../",
	"args": [],
},

                (你可以去了解“type”成员,这里不做解读,我尝试去掉type成员最终也成功了)

                label成员你可以理解为该任务的标签或者任务名称(可自定义)

                option这一句的意思是进入${workspaceFolder}/build目录,即在build目录下进行该任务

                command是任务命令

                args是任务命令的参数,你可以将参数"../"移动到args中,也可以直接写到command中

                4.创建第二个任务:该任务的通俗理解是在build文件夹下执行:make 命令

{
	"type": "shell",
	"label": "make",
	"options": {"cwd": "${workspaceFolder}/build"},
	"command": "make",
	"args": [],
},

                5.因为上述两个任务是独立的,因此我们将其整合为一个任务中,重新创建一个任务,该任务依赖上述两个任务,在调用该任务时,将顺次执行上述两个任务

{
	"type": "shell",
	"label": "build",
	"dependsOrder": "sequence",
	"dependsOn":[
		"cmake",
		"make",
	],
},

              可以看到该任务没有command成员,而是加入了dependsOn成员,故我将此理解为一个依赖任务;该任务的通俗理解是在build文件夹下顺次执行(sequence):cmake ../  +  make  命令

                最终我的tasks.json内容为:

{
	"version": "2.0.0",
	"tasks": [
		{
			"type": "shell",
			"label": "cmake",
			"options": {"cwd": "${workspaceFolder}/build"},
			"command": "cmake ../",
			"args": [],
		},

		{
			"type": "shell",
			"label": "make",
			"options": {"cwd": "${workspaceFolder}/build"},
			"command": "make",
			"args": [],
		},

		{
			"type": "shell",
			"label": "build",
			"dependsOrder": "sequence",
			"dependsOn":[
				"cmake",
				"make",
			],
		},
	]
}

(如何只执行其中一个任务:在vscode软件中按下 F1按键进入命令搜索模式,顶部会出来一个输入框,在框中输入tasks,会出来一个:"任务:运行任务"的选项,点击后可以看到你在tasks.json中配置的任务,你可以随便点击一个任务来运行该任务,后续弹出的选择框选择“继续而不扫描任务输出”即可。你也可以在"任务:运行任务"选项的右侧点击齿轮来设置对应的快捷键)

至此两个文件均已构建,那么如何能够让tasks.json在launch调试前发挥作用呢?


在launch.json文件的"configurations"的最后添加一个成员:"preLaunchTask",并指定要执行的任务为build标签对应的任务(也就是我们创建的最后一个任务的名称)。最后的launch.json文件如下:

{
        // 使用 IntelliSense 了解相关属性。 
        // 悬停以查看现有属性的描述。
        // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
        "version": "0.2.0",
        "configurations": [
                {
                        "name": "(gdb) 启动",
                        "type": "cppdbg",
                        "request": "launch",
                        "program": "${workspaceFolder}/build/demo",
                        "args": [],
                        "stopAtEntry": false,
                        "cwd": "${fileDirname}",
                        "environment": [],
                        "externalConsole": false,
                        "MIMode": "gdb",
                        "setupCommands": [
                            {
                                "description": "为 gdb 启用整齐打印",
                                "text": "-enable-pretty-printing",
                                "ignoreFailures": true
                            },
                            {
                                "description":  "将反汇编风格设置为 Intel",
                                "text": "-gdb-set disassembly-flavor intel",
                                "ignoreFailures": true
                            }
                        ],
                        "preLaunchTask": "build",
                }
        ]
}

至此,所有的json文件已完成,你可以尝试修改代码后直接按F5,将会自动执行cmake、编译并进入调试

F5是vscode的默认“Debug:开始调试”的快捷键

【22.6.10新发现】:在编写代码后,在没有task和launch两个json文件的情况下,直接按f5选择:

g++生成和调试活动文件 prelaunchTask:c/c++:g++生成活动文件

将会自动创建task.json文件并执行代码 

五.关于Eigen库的安装

(版本暂无限制 -- 我装的版本:3.3.4)

eigen是c++的线性代数库,是用纯粹的头文件搭建起来的库,因此只存在头文件,不存在库文件,故无需进行库的链接,只需包含头文件即可

1.下载:终端输入如下命令即可

sudo apt-get install libeigen3-dev

 一般下载到了/usr/include/eigen3

你也可以在终端输入如下命令查找

sudo updatedb    #updatedb 命令用来创建或更新 slocate/locate 命令所必需的数据库文件locate eigen3

或者你也可以在CMakeLists.txt中加上如下内容进行路径显示

find_package(Eigen3)
if(Eigen3_FOUND)
        #找到库后 EIGEN3_INCLUDE_DIR 才会有值
        message("ok" ${EIGEN3_INCLUDE_DIR} )
endif(Eigen3_FOUND)

 在编程中我没有添加eigen的头文件是可以的,只要将include写为:

#include ,而非#include 即可

我在尝试添加eigen头文件并将include写为:#include 时,编译是没问题的,但vscode会在#include 下出现下划线,应该是BUG

六.关于Pangolin的安装

(版本有限制 -- 我最初装的0.8版本,后续重装了0.5版本)

        1.去github下载相应版本的库到你选择的文件夹下

https://github.com/stevenlovegrove/Pangolin

        2.进入你选择的文件目录,做如下操作

//安装Pangolin所需依赖项
sudo apt-get install libglew-dev
sudo apt-get install libboost-dev libboost-thread-dev libboost-filesystem-dev
//安装Pangolin
mkdir build        //创建build文件夹
cd build           //进入build文件夹
cmake ../          //cmake
make               //make 编译
sudo make install  //安装

        最后一步很关键,我在安装时找了许多资料,很多都没有最后一步,导致在编程时,

#include 

        该句会报错(出现下划线)  (但似乎能够正常make)

        在进行最后一步操作后问题解决,下划线消失,且在输入Pangolin时有代码补充

        在后续的学习中发现最后一句是必要的,查了一下该句的意思是将库安装到指定地址;这个安装地址和安装的库是在顶层CMakeLists.txt文件中指定的,你打开该文件可以看到如下内容:

install(
    TARGETS ${component_list}
    EXPORT ${PROJECT_NAME}Targets
    LIBRARY DESTINATION lib
    ARCHIVE DESTINATION lib
    RUNTIME DESTINATION bin
    INCLUDES DESTINATION include
)

install(
    FILES "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake"
          "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake"
    DESTINATION ${CMAKECONFIG_INSTALL_DIR}
)
install(
    EXPORT ${PROJECT_NAME}Targets DESTINATION ${CMAKECONFIG_INSTALL_DIR}
)

为什么要安装库呢,你可以把安装理解为将库文件拷贝到本地,因为你在make时,生成的库文件只存在于你的build文件夹中,若想让其他代码找到这些库,最好将其都安装到本地(也就是拷贝到本地) 

        3.在你项目的CMakeLists.txt中添加两行内容(out为你生成的可执行文件)

find_package( Pangolin )
target_link_libraries( out ${Pangolin_LIBRARIES} ) #链接库

        4.如果有报错建议补充执行:

sudo ldconfig

     我在执行生成的可执行代码时,如果没有该句命令会出现如下报错:

        error while loading shared libraries: libpango_core.so: cannot open shared object file: No such file or directory

        原因:安装完成某个工程后生成许多动态库,为了让这些动态链接库为系统所共享,还需运行动态链接库的管理命令–ldconfig

补充:

问题:在执行slam14讲中的trajectory代码时,偶然出现了如下错误

解决:重启系统便恢复正常

启发:在遇到突发的BUG时,第一解决策略就是重启

X11 Error: BadValue (integer parameter out of range for operation)
X11 Error: BadValue (integer parameter out of range for operation)
terminate called after throwing an instance of 'std::runtime_error'
  what():  Pangolin X11: Failed to create an OpenGL context
已放弃 (核心已转储)

七.关于Sophus

(Sophus:版本暂无限制)

(fmt:版本暂无限制 -- 我装的版本:8.8.1)

关于fmt编译报错解决方案的一篇博客:视觉SLAM十四讲 报错ch13 问题汇总 /usr/bin/ld: /usr/local/lib/libfmt.a(format.cc.o)_CSSDCC的博客-CSDN博客

该博文中建议在编译fmt之前在fmt的CMakeLists中添加 

add_compile_options(-fPIC)

以防止后续出现该类报错 

安装步骤:

进入到你需要下载的目录
git clone https://github.com/strasdat/Sophus.git
cd Sophus
mkdir build
cd build
cmake ../

 依照上述步骤进行,会出现如下报错:

By not providing "Findfmt.cmake" in CMAKE_MODULE_PATH this project has
  asked CMake to find a package configuration file provided by "fmt", but
  CMake did not find one.

因为Sophus需要依赖fmt库,因此优先安装fmt:

在进行如下安装步骤:

进入到你需要下载fmt的目录
git clone  https://github.com/fmtlib/fmt.git
cd fmt
mkdir build
cd build
cmake ../
make
sudo make install
进入到你需要下载Sophus的目录
git clone https://github.com/strasdat/Sophus.git
cd Sophus
mkdir build
cd build
cmake ../
make
sudo make install(书上说只需编译即可,无需安装,但我将下载的包删除后发现依然无法找到Sophus库,所以我还是把他install到系统中了)

最后的make之后又出现了一大堆报错,例如:

/usr/local/include/fmt/core.h:3264:44:   in constexpr expansion of ‘fmt::v8::make_format_args<>((* & args#0))’
/usr/local/include/fmt/core.h:1724:3: error: static assertion failed: Cannot format an argument. To make type T formattable provide a formatter specialization: https://fmt.dev/latest/api.html#udt
   static_assert(
   ^~~~~~~~~~~~~

看到这篇博主写的后(fmt/core.h:1711:3: error: static assertion failed: Cannot format an argument.解决方案_荡神咩的博客-CSDN博客),我又重新下了一个8.1.1版本(之前下的为:fmt (GNU coreutils) 8.28),这次直接在官网上搜索该版本下载(之前的版本没删),重新安装后问题解决

完成安装后,发现虽然Sophus可以用,但在包含头文件#include 时会有红色下划线

解决:将鼠标放在下划线处,会弹出报错框:

无法打开源文件 "Eigen/Dense" (dependency of "sophus/so3.hpp")

点击下面的快速修复,选择:

添加到"includePath":/usr/include/eigen3

你会在左侧工程栏中的.vscode中发现一个c_cpp_properties.json文件,里面包含了"/usr/include/eigen3",至此,红色下划线消失

之前有尝试在CMakeLists.txt中直接添加eigen3的头文件路径,但无法解决下划线问题

八.关于opencv的安装

(版本暂无限制 -- 我装的版本:3.4.16)

1.安装依赖项
sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg-dev libswscale-dev libtiff5-dev libtbb-dev
2.下载opencv(我下载的版本是3.4.16)
3.进入解压后的文件夹,进行安装
mkdir build
cd build
cmake ../
make -j4
sudo make install

九.关于查看vscode使用的c/c++是什么标准的问题

打开vscode的设置  ->  搜索cpp standard  ->  找到C_Cpp>Default: Cpp Standard  ->  可以选择你想要的标准

十.编译报错(SLAM第5讲RGBD实验)

对‘fmt::v8::detail::assert_fail(char const*, int, char const*)’未定义的引用

原因:未链接fmt的库,在CMAKE中找到库并链接便可解决 

十一.关于Ceres的安装

(版本暂无限制 -- 我装的版本:2.1.0)

1.安装依赖项
sudo apt-get install liblapack-dev libsuitesparse-dev libcxsparse3 libgflags-dev libgoogle-glog-dev libgtest-dev
2.下载ceres
git clone https://github.com/ceres-solver/ceres-solver
3.安装ceres
mkdir build
cd build
cmake ../
make -j4

然后....make时就疯狂报错,比如:

error: ‘exclusive_scan’ is not a member of ‘std’

 然后看到这篇文章后:SLAM疑难篇一:ceres安装和编译报错——实践高翔SLAM十四讲_j_shuttworth的博客-CSDN博客_ceres

我直接去ceres官网上重新下载

1.进入ceres官网

1.进入ceres官网
http://ceres-solver.org/installation.html#linux
2.点击“latest stable release”(最新的稳定版本),开始下载tar.gz压缩包
3.解压后进入文件夹
by the way:官网往下翻会有ceres库的指导安装过程,包括其依赖项等
4.安装:
mkdir build
cd build
cmake ../
make -j16 (成功无报错)
sudo make install

最后在CMakeLists.txt中添加然后执行cmake命令,会显示ceres found!,即成功安装

find_package(Ceres REQUIRED)
if(Ceres_FOUND)
        message(STATUS "ceres found ! " )
endif()

后续发现在cmake工程时会出现以下两条信息:

-- Did not find Intel TBB library, assuming SuiteSparseQR was not compiled with TBB.

-- Could NOT find METIS (missing: METIS_INCLUDE_DIR METIS_LIBRARY)

第一个暂未解决!暂未发现有影响! 

第二个输入以下一句便可解决

sudo apt-get install libmetis-dev

22.06.16第一次使用Ceres:

在包含ceres头文件后进行编译,会产生报错:

/usr/local/include/ceres/internal/fixed_array.h:33:10: fatal error: Eigen/Core: 没有那个文件或目录
 #include // For Eigen::aligned_allocator 

按照这篇文章的办法使问题得到解决:ceres-solver&eigen fatal error: Eigen/Core: No such file or directory #include <Eigen/Core> // For_me,too的博客-CSDN博客 

十二.关于g2o的安装

(版本暂无限制)

1.安装依赖项
sudo apt-get install qt5-qmake qt5-default libqglviewer-dev-qt5 libsuitesparse-dev libcxsparse3 libcholmod3
2.下载g2o库
git clone https://github.com/RainerKuemmerle/g2o
3.进入g2o文件夹
4.安装
mkdir build
cd build
cmake ../

cmake时产生报错:

CMake Error at CMakeLists.txt:1 (cmake_minimum_required):
  CMake 3.14 or higher is required.  You are running version 3.10.2

vscode自带的cmake版本低了,因此我下一个新版的cmake(后续的操作中又重新换回了之前的版本(3.10.2),因为最新版本的会有一些新规则)

先删除老版本:

sudo apt remove cmake
如果是下载的源码安装的,则在下载的文件中使用:
sudo make uninstall
进行删除

进入官网Download | CMake下载最近发行版本(Latest Release),我下载的版本是3.23.1

进入解压后的cmake文件夹进行安装:
这次安装直接输入:

./bootstrap

然后有报错:

Could not find OpenSSL.  Install an OpenSSL development package or...

 缺依赖项,那就直接安装

sudo apt-get install libssl-dev
./bootstrap(无报错)
make
sudo make install(可以看到默认安装地址为/usr/local/share)

最后cmake --version 可以看到刚才安装的版本号

------------回到g2o的安装

接着执行:
cmake ../
make -j16
sudo make install

安装完成,无报错!

后续发现在cmake工程时会出现Warming:

CMake Warning (dev) at /usr/local/share/cmake-3.23/Modules/FindOpenGL.cmake:315 (message):
  Policy CMP0072 is not set: FindOpenGL prefers GLVND by default when
  available.  Run "cmake --help-policy CMP0072" for policy details.  Use the
  cmake_policy command to set the policy and suppress this warning.

依据CMP0072 — CMake 3.23.1 Documentation

 在CMakeLists.txt中添加以下一行解决问题

cmake_policy(SET CMP0072 NEW)

22.06.16首次编译g2o代码发现问题:

首先是各种函数找不到  -----原因是没有把g2o的库链接到可执行文件,且find_package(G2O REQUIRED)中g2o应当是大写

在CMakeLists.txt中添加相关库链接时,发现链接的内容如:${G2O_CORE_LIBRARY},${G2O_STUFF_LIBRARY}

后续发现在安装时有个小细节丢le:

在安装完g2o后,不要急着删掉解压的安装包,把里面的cmake_modules文件夹复制出来,放在你的工程文件下,然后在CMakeLists.txt中添加如下内容,此后库文件就不是空的了

list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/[dir])

其中${PROJECT_SOURCE_DIR}/[dir]为你cmake_modules的路径

十三.关于DBoW的安装

1.git clone https://github.com/dorian3d/DBoW2
2.进入下载目录
3.安装:
mkdir build
cd build
cmake ..
make 
sudo make install

22.06.20:

重新安装了DBoW3

1.git clone https://github.com/rmsalinas/DBow3
2.进入下载目录
3.安装:
mkdir build
cd build
cmake ..
make (会有一些警告,直接忽略)
sudo make install

十四.安装PCL

直接用sudo apt-get install libpcl-dev pcl-tools安装会出现Ensenso,DSSDK,RSSDK无法找到的情况,暂未解决,故删了后按照该博文进行手动下载安装

Ubuntu18.04安装PCL(详细教程)_一盆柠檬的博客-CSDN博客_ubuntu安装pcl

但是在cmake阶段,出现了一些问题:

1.Could NOT find ClangFormat (missing: ClangFormat_EXECUTABLE ClangFormat_VERSION) (Required is at least version "10")

解决方法:sudo apt-get install clang-format-10

2.Checking for module 'metslib'--   No package 'metslib' found

解决办法:参考Ubuntu18.04安装PCL遇到的问题_yunluoxiaobin的博客-CSDN博客

(1)https://www.coin-or.org/download/source/metslib/metslib-0.5.3.tgz

(2)执行:
sh ./configure
make
sudo make install

3.The CUDA compiler identification is unknown

解决办法:参考报错 The CUDA compiler identification is unknown;No CMAKE_CUDA_COMPILER could be found._wangxinRS的博客-CSDN博客

4.The imported target "vtkRenderingPythonTkWidgets" references the file
   "/usr/lib/x86_64-linux-gnu/libvtkRenderingPythonTkWidgets.so"
but this file does not exist

解决办法:sudo ln -s /usr/lib/python2.7/dist-packages/vtk/libvtkRenderingPythonTkWidgets.x86_64-linux-gnu.so /usr/lib/x86_64-linux-gnu/libvtkRenderingPythonTkWidgets.so

5.The imported target "vtk" references the file
   "/usr/bin/vtk"
but this file does not exist

解决办法:sudo ln -s /usr/bin/vtk7 /usr/bin/vtk

6.Could NOT find Pcap (missing: PCAP_LIBRARIES PCAP_INCLUDE_DIRS)

解决办法:参考Could NOT find PCAP (missing: PCAP_LIBRARIES PCAP_INCLUDE_DIRS)_HeyMountain的博客-CSDN博客

 在make阶段,出现了一些问题:

1.没有规则可制作目标“/usr/lib/libOpenNI2.so

原因:libOpenNI2.so.0文件进而缺失libOpenNI2.so与其的链接

解决办法:参考make: *** 没有规则可以创建“/usr/lib/x86_64-linux-gnu/libGL.so”需要的目标“XXX”。 停止_抢地生蔓的博客-CSDN博客

(1)删除sudo apt-get remove libopenni2-dev libopenni2-0

(2)重新下载sudo apt-get install libopenni2-dev

在安装ROS系统后,pcl编译出现了一些问题,所以直接将软件包安装的pcl又给卸载了(直接删除相关文件),之后的编译出现了以下问题:

(1)没有规则可制作目标“/usr/lib/x86_64-linux-gnu/libpcl_common.so”

原因:参考前面的原因,是因为.so的软链接文件丢失

解决办法:用sudo apt-get remove 卸载pcl然后重装也无法还原软链接,后来直接在其他电脑拷贝相关软链接文件后解决问题

(2)

-- Could NOT find ensenso (missing: ENSENSO_LIBRARY ENSENSO_INCLUDE_DIR) 
** WARNING ** io features related to ensenso will be disabled
-- Could NOT find DAVIDSDK (missing: DAVIDSDK_LIBRARY DAVIDSDK_INCLUDE_DIR) 
** WARNING ** io features related to davidSDK will be disabled
-- Could NOT find DSSDK (missing: _DSSDK_LIBRARIES) 
** WARNING ** io features related to dssdk will be disabled
** WARNING ** io features related to pcap will be disabled
** WARNING ** io features related to png will be disabled
** WARNING ** io features related to libusb-1.0 will be disabled
-- Could NOT find ensenso (missing: ENSENSO_LIBRARY ENSENSO_INCLUDE_DIR) 
** WARNING ** visualization features related to ensenso will be disabled
-- Could NOT find DAVIDSDK (missing: DAVIDSDK_LIBRARY DAVIDSDK_INCLUDE_DIR) 
** WARNING ** visualization features related to davidSDK will be disabled
-- Could NOT find DSSDK (missing: _DSSDK_LIBRARIES) 
** WARNING ** visualization features related to dssdk will be disabled
-- Could NOT find RSSDK (missing: _RSSDK_LIBRARIES) 
** WARNING ** visualization features related to rssdk will be disabled

解决办法:由于暂无影响,且不影响编译,故暂不理会

十五.gtest编译问题(编译13讲代码首次接触gtest时出现)

Could NOT find GTest (missing: GTEST_LIBRARY GTEST_MAIN_LIBRARY) 

记录 Could NOT find GTest (missing: GTEST_LIBRARY GTEST_MAIN_LIBRARY) 解决方法_Numberors的博客-CSDN博客

关于在学习SLAM过程中遇到的坎以及跨过办法

 1.本质矩阵 - 奇异值

【学长小课堂】什么是奇异值分解SVD--SVD如何分解时空矩阵_哔哩哔哩_bilibili

矩阵的【奇异值分解】(SVD),图像压缩_哔哩哔哩_bilibili

[SLAM] -- 证明本质矩阵E的内在性质_z轴的博客-CSDN博客_本质矩阵的内在性质

从本质矩阵恢复相机矩阵_kokerf的博客-CSDN博客_本质矩阵分解

立体视觉入门指南(2):关键矩阵(本质矩阵,基础矩阵,单应矩阵) - 知乎

为什么尺度等价性要减少一个自由度(本质矩阵举例)_CSSDCC的博客-CSDN博客_尺度等价性

【 图像梯度 | L-K基础知识】如何理解L-K光流计算中的图像梯度? - 哔哩哔哩

2.关于LK光流的讲解

http://www.cs.cmu.edu/~16385/s15/lectures/Lecture21.pdf
经典光流算法Lucas-Kanade(有图助理解)_木盏的博客-CSDN博客_lucaskanade光流法流程图

Lucas-Kanade稀疏光流法 - 简书

3.关于范数

向量的【范数】:模长的推广,柯西不等式_哔哩哔哩_bilibili

4.关于一阶梯度和二阶梯度法(牛顿法)

《迭 代》 | 牛顿迭代法与最速下降法 | 机器学习 最优化 数值计算_哔哩哔哩_bilibili

第4.3讲-牛顿法(上)_哔哩哔哩_bilibili

“随机梯度下降、牛顿法、动量法、Nesterov、AdaGrad、RMSprop、Adam”,打包理解对梯度下降法的优化_哔哩哔哩_bilibili

视觉SLAM笔记--第4篇: 高斯牛顿法(GN)和列文伯格-马夸特算法(LM)的算法流程,优劣分析_w风的季节的博客-CSDN博客_马夸特算法

5.关于病态矩阵,矩阵条件数

9 矩阵的条件数_哔哩哔哩_bilibili

6.关于双线性差值法

图像处理-双线性插值_哔哩哔哩_bilibili

7.中心差分法求导

数值微分|中心差分法(Central Finite Difference Approximations) - 云+社区 - 腾讯云

8.关于对极几何的尺度等价性

本质矩阵的几何意义及其性质和分解 - 知乎

8.超定方程组的最小二乘解

超定方程的求解、最小二乘解、Ax=0、Ax=b的解,求解齐次方程组,求解非齐次方程组(推导十分详细)_一点儿也不萌的萌萌的博客-CSDN博客_超定方程求解

9.关于位姿图

SLAM14讲学习笔记(七)后端(BA与图优化,Pose Graph优化的理论与公式详解、因子图优化)_zkk9527的博客-CSDN博客_因子图优化

10.关于14讲回环检测中的一点补充

k-mean聚类针对的是特征点的描述子,即依据描述子(一个m维向量)进行分类,故应在向量空间中进行实现。在向量空间中,每个特征点的描述子均可看成一个点分布于m维向量空间,因此在k-mean算法的第一步:随机选取k个中心点时,应当是在向量空间中进行随机选点,即这些随机点是一些m维向量

验证方法:在获取词袋后,打印一个单词的尺寸,这个结果将与你的描述子尺寸是一致的

11.关于多线程

c++11并发于多线程_2章_8节_哔哩哔哩_bilibili

C++ std::thread join()的理解 - 代萌 - 博客园

12.关于slam14讲第13讲代码注释

slam14讲之设计slam系统(第二版ch13)代码注释一(前端)_MIKingZCC的博客-CSDN博客

13.关于代码中的三角化公式来源

三角测量(Triangulation 三角化)与 SVD 求解_村口电器铺老世的博客-CSDN博客_三角化测量

14.安装参考

Ubuntu18.04安装Ros(最新最详细亲测)_向日葵骑士Faraday的博客-CSDN博客_ubuntu18.04安装ros

15.vins-mono,gvins运行参考 

VINS-Mono笔记01_VINS-Mono的编译运行_ncepu_Chen的博客-CSDN博客_vinsmono运行

跑通GVINS——港科大新作_小海盗haner的博客-CSDN博客_gvins运行

16.关于RTK的解释
GPS、RTK、PPK三种定位技术的原理及应用_外来务工人员徐某的博客-CSDN博客_rtk定位原理

17.关于左右扰动的理解

四元数及error-state kalman | HyperPlane

18.关于马氏距离

马氏距离通俗解读_大写的ZDQ的博客-CSDN博客

19.关于 VIO中残差雅可比推导

VIO 中残差雅可比的推导

移动机器人位姿不同的表示方法

20.关于多元高斯分布的推导过程和理解(已检验-删除多余链接)

多元高斯密度函数完全看不懂怎么办? - 知乎

多元线性回归(高斯分布--->最小二乘法) - 知乎

21.关于vins-mono

VINS-Mono论文学习与代码解读——目录与参考_Manii的博客-CSDN博客_vinsmono代码解读

VINS论文解读与代码详解(集百家之精华)_月夕花晨KaCa的博客-CSDN博客_vins 论文

【SLAM】VINS-MONO解析——综述_iwander。的博客-CSDN博客_vins解析

22.imu

毕业设计总结(惯性导航)_ctoast001的博客-CSDN博客

互补滤波:为什么用向量叉积PI滤波补偿?_不会写代码的美年达的博客-CSDN博客

23.随机游走

马尔可夫模型_Fitz1318的博客-CSDN博客_马尔科夫模型

馬可夫過程 - 中文维基百科【维基百科中文版网站】

二阶和三阶马尔可夫特征是什么?_百度知道

24.imu与相机融合

SLAM_相机与imu的融合基础知识_惊鸿一博的博客-CSDN博客_imu与相机融合

25.gvins学习(已检验)

 GVINS 原理推导+源码阅读(1) - 知乎

四、GNSS测量误差来源及其影响_竺元枫的博客-CSDN博客_gnss误差来源及分类

“GPS定位”学习笔记 - 知乎

你可能感兴趣的:(slam学习,vscode,ide,编辑器)