一.关于更改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)
四.关于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 <eigen3/Eigen/Core>,而非#include <Eigen/Core>即可
我在尝试添加eigen头文件并将include写为:#include <Eigen/Core>时,编译是没问题的,但vscode会在#include <Eigen/Core>下出现下划线,应该是BUG
六.关于Pangolin的安装
(版本有限制 -- 我最初装的0.8版本,后续重装了0.5版本)
1.去github下载相应版本的库到你选择的文件夹下
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 <pangolin/pangolin.h>
该句会报错(出现下划线) (但似乎能够正常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
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<T> 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 <sophus/so3.hpp>时会有红色下划线
解决:将鼠标放在下划线处,会弹出报错框:
无法打开源文件 "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 <Eigen/Core> // 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
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光流法流程图
3.关于范数
向量的【范数】:模长的推广,柯西不等式_哔哩哔哩_bilibili
4.关于一阶梯度和二阶梯度法(牛顿法)
《迭 代》 | 牛顿迭代法与最速下降法 | 机器学习 最优化 数值计算_哔哩哔哩_bilibili
“随机梯度下降、牛顿法、动量法、Nesterov、AdaGrad、RMSprop、Adam”,打包理解对梯度下降法的优化_哔哩哔哩_bilibili
视觉SLAM笔记--第4篇: 高斯牛顿法(GN)和列文伯格-马夸特算法(LM)的算法流程,优劣分析_w风的季节的博客-CSDN博客_马夸特算法
5.关于病态矩阵,矩阵条件数
6.关于双线性差值法
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.关于马氏距离
19.关于 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学习(已检验)
四、GNSS测量误差来源及其影响_竺元枫的博客-CSDN博客_gnss误差来源及分类
激光SLAM的学习过程
1.LOAM:【论文阅读】LOAM: Lidar Odometry and Mapping in Real-time_林北不要忍了的博客-CSDN博客_loam 论文SLAM算法工程师之路:A-LOAM论文研读与框架算法学习 - 知乎
LOAM论文和程序代码的解读_robinvista的博客-CSDN博客
(1条消息) 激光IMU融合——LIO-Mapping / LIOM / LINS / LIO-SAM算法解析_Leo-Peng的博客-CSDN博客
----------------------------------------------------------研究生阶段--------------------------------------------------------
一.安装ubuntu系统
1.制作U盘启动盘和分配硬盘空间
2.安装ubuntu系统
参考博客:Ubuntu18.04安装教程_寥廓长空的博客-CSDN博客_ubuntu安装教程
问题:
1.启动项问题 - 安装后不弹出启动向选择,这个不同电脑设置不同,我是因为没找到正确的设置
2.安装ubuntu后没法联网 - 折腾了好久,后来发现是电脑的网卡驱动太新,仅支持ubuntu20版本及以上的,因此后续重装了20.04版的,安装过程和18.04基本一致,关于你的网卡驱动支持什么系统可以先查看你的电脑是什么网卡,然后再在官网上查
3.重装过程 - 这个很简单,只需要在win系统下把给ubuntu预留的磁盘空间删除即可,无法删除的要使用 diskgenius 软件进行删除
4.我的ubuntu系统分区(预留Ubuntu系统内存为200G)
1.efi 分200M 主分区
2.swap 分16G和电脑运行内存一样 主分区
3./ 分80G 逻辑分区
4./home 剩余内存全给它 逻辑分区
二.配置深度学习环境(WIN11)
参考:(1条消息) 深度学习环境搭建_urnotY的博客-CSDN博客_深度学习环境搭建
三.Ubuntu20.04 SLAM环境配置
3.1 安装cmake:
下载:sudo apt install cmake
查看版本:cmake --version
查找文件安装路径:locate cmake
3.2 安装Eigen:
下载:sudo apt-get install libeigen3-dev
查看版本:pkg-config --modversion eigen3
查找文件安装路径:locate eigen3
3.3 安装Pangolin:
安装Pangolin所需依赖项:
sudo apt-get install libglew-dev libboost-dev libboost-thread-dev libboost-filesystem-dev
安装Pangolin
在github上下载Pangolin 0.5版本:mirrors / stevenlovegrove / pangolin · GitCode
mkdir build
cd build
cmake ../
make
sudo make install
sudo ldconfig
检验是否安装成功:
cd Pangolin/examples/HelloPangolin (进入到下载的Pangolin里面的HelloPangolin文件夹)
cmake .
make
./HelloPangolin
3.4 安装fmt和Sophus
安装fmt
在官网下载8.1.1版本
mkdir build
cd build
cmake ../
make
sudo make install
sudo ldconfig
查看版本:fmt --version
安装Sophus
下载:https://github.com/strasdat/Sophus.git
安装步骤同上
3.5 安装opencv
安装依赖项:
sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg-dev libswscale-dev libtiff5-dev libtbb-dev
下载(版本:3.4.16)(安装步骤同上):
GitHub - opencv/opencv: Open Source Computer Vision Library
(补充:由于在运行GVINS时出现进程被杀的情况,因此后续将原3.4.16版本删除重装了4.2.0版本问题得到解决;但在CMake时仍然会报链接冲突的警告 - 未解决)
3.6 安装Ceres
安装依赖项:
sudo apt-get install liblapack-dev libsuitesparse-dev libcxsparse3 libgflags-dev libgoogle-glog-dev libgtest-dev
下载:版本:1.14.0(装2.1.0版本时运行Vins-mono会报错)
3.7 安装g2o
安装依赖项
sudo apt-get install qt5-qmake qt5-default libqglviewer-dev-qt5 libsuitesparse-dev libcxsparse3 libcholmod3
下载(安装同上):GitHub - RainerKuemmerle/g2o: g2o: A General Framework for Graph Optimization
3.8 安装DBoW(同时安装了2和3)
下载(安装同上):
https://github.com/dorian3d/DBoW2
3.9 安装ROS
参考:详细介绍如何在ubuntu20.04中安装ROS系统,以及安装过程中出现的常见错误的解决方法,填坑!!!_慕羽★的博客-CSDN博客_ubuntu20.04安装ros
详细介绍如何在ubuntu20.04中安装ROS系统,超快完成安装(最新版教程)_慕羽★的博客-CSDN博客_ubuntu20.04安装ros
在rosdep update这一步最好使用科学上网工具,或者用手机USB网络,不然会一直失败
3.10 运行VINS-mono
运行参考:安装并运行VINS-Mono_W_Tortoise的博客-CSDN博客_vins
报错参考:
源码安装vins-mono算法问题整理(ROS Melodic + opencv 4.1.1) - 创客智造社区
VIO框架:港科大VINS算法环境配置与调试总结【已调通,手把手最完整版】_来知晓的博客-CSDN博客_港科大vins
3.11 运行ORB-SLAM3
参照代码文件内的README.md
问题参考:(提醒:出现报错让他编译完,从最后一个问题开始解决)‘slots_reference’ was not declared in this scope 1180 | cow_copy_type<list_type, Lockable>_是娜个二叉树!的博客-CSDN博客
安装orbslam3时报错:error: no match for ‘operator/’_威少少熬夜的博客-CSDN博客
DBoW库冲突:Debug报错:libORB_SLAM3.so: undefined symbol: _ZN5DBoW24FORB1LE_RuiH.AI的博客-CSDN博客
3.12 用ROS运行ORB3
注意将CMakeLists中的DBoW库名称进行更改
(DBoW库冲突:Debug报错:libORB_SLAM3.so: undefined symbol: _ZN5DBoW24FORB1LE_RuiH.AI的博客-CSDN博客)
报错:
CMake Error at CMakeLists.txt:37 (message):
OpenCV > 2.4.3 not found.
解决:进入相应CMakeLists文件,修改版本即可,注意对应的CMakeLists文件
报错:
error: ‘slots_reference’ was not declared in this scope
原因:需要在对应的cmakelist中更改编译器版本,从c++11->c++14
解决:进入对应CMakeists文件夹执行:
sed -i 's/++11/++14/g' CMakeLists.txt
报错:ORB-SLAM3 v1.0 编译问题解决(搬运自github issue)_orb-slam cv::mat 报错_Hickey源兔兔的博客-CSDN博客
关于重定义的问题,直接删除第三方库中的sophus
最终编译通过
后续又出现问题了,比较麻烦,所以直接重新解压ORB3然后卸载掉原来的DBoW2库
2023.07.25:重装ubuntu20.04后按照上述步骤装完后运行orb会出现GTK的警告
Using GTK+ 2.x and GTK+ 3 in the same process is not supported
解决办法是按照终端报错补充相应库,然后重新安装opencv库(记得删除原build文件重新编译)
3.13 运行LOAM
参照:LOAM学习-安装与运行_yanghq13的博客-CSDN博客_loam运行
最终运行出现如下错误,在ubuntu18.04上运行也会出现该问题,但发现运行A-LOAM不会有问题,故最终放弃LOAM
3.14 运行A-LOAM
在运行LOAM时补装了PCL1.8.1(未卸载原ROS自带的PCL版本,且为进行任何操作,仅补装)
问题参考:Ubuntu20.04安装PCL1.8.0编译错误(全网最全~)_小方只会百度的博客-CSDN博客
A-LOAM运行时只显示绿色轨迹线,解决参考:A-LOAM运行和常见问题及解决方法_可见一班的博客-CSDN博客_aloam运行
2023.03.13成功运行A-LOAM
3.15 运行LeGO-LOAM
参考:LeGO-LOAM初探:原理,安装和测试_W_Tortoise的博客-CSDN博客_lego_loam原理
或者参考LeGO-LOAM的README.md
问题参考:
ubuntu20.04安装gtsam_码一个河豚的博客-CSDN博客_ubuntu 安装gtsam
Ubuntu 20.04 下编译 Lego Loam 踩过的一些坑
存在process has died问题 - 未解决
2023.03.13成功运行LeGO-LOAM,但未发现原来的问题
3.16 运行LIO-SAM
2023.3.13成功运行
LIO-SAM学习与运行测试数据集_lio-sam数据集_biter0088的博客-CSDN博客
https://juejin.cn/post/7151216289824915463
2023.3.3
安装evo评估工具
参考:https://blog.csdn.net/qq_39607707/article/details/124097013
下载EVO源码
git clone https://github.com/MichaelGrupp/evo.git
安装evo
sudo pip install evo --upgrade --no-binary evo
或者使用镜像
sudo pip install evo --upgrade --no-binary evo -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
2023.07.25 docker上部署ubuntu20.04容器
2023.08.07 编译小觅相机SDK时的PCL报错
In file included from /usr/include/pcl-1.10/pcl/pcl_macros.h:77,
from /usr/include/pcl-1.10/pcl/PCLHeader.h:10,
from /usr/include/pcl-1.10/pcl/point_cloud.h:47,
from /home/wwj/wwj/MYNT-EYE-D/MYNT-EYE-D-SDK/samples/src/util/pc_utils.h:20,
from /home/wwj/wwj/MYNT-EYE-D/MYNT-EYE-D-SDK/samples/src/points/get_points_with_filter.cc:23:
/usr/include/pcl-1.10/pcl/pcl_config.h:7:4: error: #error PCL requires C++14 or above
解决:在SDK包对应的CMakeists中添加该句:set(CMAKE_CXX_STANDARD 14)
2023.10.06
安装ceres时 cmake报错
Can't find Google Log (glog).
解决:sudo apt-get install libgoogle-glog-dev