课程视频地址【第二版】:https://www.bilibili.com/video/BV1D54y1G7f6
课程视频链接【第一版】:https://www.bilibili.com/video/BV16t411g7FR
课程github地址:https://github.com/gaoxiang12 【第一版、第二版的代码】
电子书下载见《学习笔记(一)》1.2节
【提示】无论使用哪个版本的纸质书,先去github上对照作者给的勘误文件,纠正一下书中的错误。
《视觉SLAM十四讲》学习笔记(二)——ch3 三维空间刚体运动
《视觉SLAM十四讲》学习笔记(三)——ch4 李群与李代数
《视觉SLAM十四讲》学习笔记(四)【敬请期待】
《视觉SLAM十四讲》学习笔记(五)【敬请期待】
…
Cmake官方文档:https://cmake.org/documentation/【选择自己安装的对应版本】
Eigen深入学习:https://eigen.tuxfamily.org/index.php?title=Main_Page
…
三本电子书链接: https://pan.baidu.com/s/1JDbQxbHHse5MXHqvrDrZ7w 提取码: tuid
自主定位两大基本问题:
准确定位组要精确地图,精确地图来自准确定位
传感器是机器人感知外界的手段
相机:以一定速率采集图像、形成视频
分类:
特点:
状态估计问题:
编辑器:gcc -v
, g++ -v
, clang
, cmake
【非课程内容,补充】
vim有命令模式,插入模式和退出模式三种。简单命令
命令 | 作用 | 命令 | 作用 |
---|---|---|---|
vim file_name |
浏览模式 | 文件存在时打开文件 | 文件不存在时创建文件 |
插入模式 | 插入模式 | 插入模式 | 插入模式 |
i |
在光标所在位置插入字符 | I |
光标所在行的行首插入字符 |
o |
光标所在行的下一行新行插入字符 | O |
光标所在行的上以行新行插入 |
s |
删除光标所在字符并插入字符 | S |
删除光标所在行并插入字符 |
a |
光标所在字符的下一个字符插入 | A |
光标所在行的行尾插入字符 |
退出模式 | 退出模式 | 退出模式 | 退出模式 |
:w |
保存但不退出 | :q |
退出 |
:wq |
保存并退出 | :q! |
强制退出,不保存 |
:e! |
放弃所有修改,从上次保存文件开始再编辑命令历史 | ESC |
切换模式 |
命令模式下不能编辑文本,通过i
进入插入模式进行编辑,编辑完成后通过ESC
键进入命令模式。
最简单的C++程序
#include
using namespace std;
int main(int argc,char** argv){
cout<<"hello slam!"<<endl;
return 0;
}
touch main.cpp
vim main.cpp #写入上方代码
cat main.cpp #显示整个文件
#include
using namespace std;
int main(int argc,char** argv){
cout<<"hello slam!"<<endl;
return 0;
}
g++ main.cpp #并不会在终端显示,会生成一个a.out文件
./a.out #运行该文件
hello slam!#终端输出结果
【非课程内容,补充】
参见大佬「荒野孤舟」的细致讲解,《源文件、函数、头文件、库文件、可执行文件、及CMake在其中的作用》
如add_executable( )
和ADD_EXECUTABLE( )
相同。
【文件】
include
头文件src
源文件(可执行程序 / 所需库的源文件)library
库文件CMakeLists.txt
经 cmake 编译后生成makefile
文件【指令】
cmake_minimum_required(VERSION xx.xx)
指定cmake的最低版本project(projectname [CXX/JAVA])
定义工程名称,并指定工程支持的语言(可选)set(var [value] cache type docstring[force]])
显式定义变量include_directories([after/before] [systemm] dir1 dir2 ...)
向工程添加特定头文件搜索路径add_library(libname [shared/static/module] [exclude_from_all] source1 source2 ... )
生成库文件add_executable( exename source1 source2 ... )
生成工程目标文件(可执行文件)add_compile_options(
添加编译参数add_subdirectory()
添加存放源文件的子目录find_package()
添加依赖,有Module模式(basic signature)和Config模式(full signature),可设置路径、连接路径、库。link_libraiies
添加需要链接的库文件路径,绝对路径link_directories( dir1 dir2 ...)
添加需要链接的库文件路径target_link_libraiies
为target设置要链接的库文件名称aux_source_directory(dir [variable])
查找指定目录下的所有源文件,并将列表存储在指定变量中【变量】
CMAKE_C_FLAGS
gcc 编译选项CMAKE_CXX_FLAGS
g++ 编译选项CMAKE_BUILD——TYPE
编译类型(Debug,Release)CMAKE_BINARY_DIR
, PROJECT_BINARY_DIR
, _BINARY_DIR
,PROJECT_BINARY_DIR是CMake生成一系列文件的目录,包括MakeFile等文件。如果是in source build ,指的是工程顶层目录;如果是out of source,指的是工程编译所发生的目录。CMAKE_SOURCE_DIR
, PROJECT_SOURCE_DIR
, _SOURCE_DIR
无论采取何种编译方式,都是工程顶层目录,即顶层的CMakeLists.txt所在的目录。CMAKE_C_COMPILER
指定C编译器CMAKE_CXX_COMPILER
指定C++编译器EXECUTABLE_OUTPUT_PATH
可执行文件输出存放路径LIBRARY_OUTPUT_PATH
库文件输出存放路径注:没有安装cmake需要先安装
touch CMakeLists.txt #新建CMakeLists.txt文档
vim CMakeLists.txt #写CMakeLists.txt文档
project(helloSLAM)
add_executable(sayhello main.cpp)
#写CMakeLists.txt文档,保存退出
cmake . #编译CMakeLists.txt,编译完成产生CMakeCache.txt、CMakeFiles、cmake_install.cmake、Makefile中间文件
make #从Makefile中读取相应指令,编译。产生“sayhello”文件【在CMakeFiles定义】
./sayhello #运行文件
hello slam! #运行结果
【非课程内容,补充】
参见大佬「Silent_Summer」的讲解,《关于cmake、make、make install》
mkdir build #新建build文件夹
cd build #进入build文件夹
cmake .. #编译上一层的cmakelist文件,自动生成Makefile
make #批处理.c或.cpp文件,从Makefile中读取相应指令后编译。
make install#将 make 生成的文件安装到系统的对应目录中。
【用build管理生成的中间文件,条理清晰】
Pipeline
源文件 --> cmakelist --> cmake --> makefile --> make --> 可执行文件
编写程序的主要步骤:
Edit: 使用编辑器编写源代码,如.c,.cc,.cpp等文件。
Compile: 使用编译器编译源代码生成目标文件,如.o,.a(Linux下静态库),.so(Linux下共享库)等文件。
Link: 使用连接器链接目标代码生成可执行文件,如.exe(Window),.out(Unix)等文件。
一般来说,库的头文件在 /usr/local/include/dependency_name/ 目录下,库文件则存在 /usr/local/lib/目录下。
mkdir include src #创建源文件
touch include/Hello.h src/Hello.c #创建Hello.h头文件
vim include/Hello.h #编写Hello.h——头文件
vim src/Hello.cpp #编写函数定义——实现文件
vim main.cpp #编写main函数——调用库以实现功能
vim CMakeLists.txt #编写CMakeLists.txt
include/Hello.h文件
#pragma once
void sayHello();
src/Hello.cpp文件
#include "Hello.h" //包含头文件
#include
using namespace std;
void sayHello(){
cout<<"Hello SLAM!"<<endl;
}
main.cpp文件
#include "Hello.h"
using namespace std;
int main(int argc,char** argv){
sayHello();
return 0;
}
CMakeLists.txt文件
cmake_minimum_required(VERSION 3.5) //声明要求的 cmake 最低版本,否则会提示error
project(helloSLAM) // 声明一个 cmake 工程
include_directories("include") //声明头文件在include文件夹下
#only source files
add_library(libHello src/Hello.cpp) //添加hello库,源码是Hello.cpp,编译后是libHello
add_executable(sayHello main.cpp) //添加可执行程序调用hello库中函数
target_link_libraries(sayHello libHello) //将库文件链接到可执行程序上
【编写CMakeLists.txt文件
的注意事项】
1.声明要求的 cmake 最低版本。如无该声明,cmake ..
后会提示:
CMake Warning (dev) in CMakeLists.txt:
No cmake_minimum_required command is present. A line of code such as
cmake_minimum_required(VERSION 3.5)
should be added at the top of the file. The version specified may be lower
if you wish to support older CMake versions for this project. For more
information run “cmake --help-policy CMP0000”.
查看cmake的版本:cmake --version
。我是3.5.1,添上去就好了。
2.库文件链接到可执行文件。如果忘记链接,会提示
CMakeFiles/sayHello.dir/main.cpp.o: In function main': main.cpp:(.text+0x10): undefined reference to
sayHello()’
collect2: error: ld returned 1 exit status
CMakeFiles/sayHello.dir/build.make:94: recipe for target ‘sayHello’ failed
make[2]: *** [sayHello] Error 1
CMakeFiles/Makefile2:67: recipe for target ‘CMakeFiles/sayHello.dir/all’ failed
make[1]: *** [CMakeFiles/sayHello.dir/all] Error 2
Makefile:83: recipe for target ‘all’ failed
make: *** [all] Error 2
即该函数只提供了声明,没提供实现。
免费,第一版视频以此为例。
sudo apt-get install kdevelop
kdevelop
JetBrains的,学生(edu邮箱)可申请1年教育免费(我激活了Clion和Pycharm,很香哈哈哈,感谢!——见3.4.3节)。
第二版视频以此为例。
官网下载地址:https://www.jetbrains.com/clion/download/,可以选择win/Mac/Linux系统。It’s a long time. Let’s have a cup of tea~
sudo snap install clion --classic
clion
这是官网推荐的Linux下的安装方式,简直不要太简单,不需要任何压缩包解压编译等等的操作!我安装的版本是Version: 2021.1.1
。
填写账户密码就行了。
铛铛铛铛~有了!
打开3.3节的helloSLAM工程。debugger选择GDB方式(Linux),LLDB是Mac的。
打开后界面如下,可以直观看到相关文件。可以断点调试、规范格式、颜色高亮等功能。debug模式。
点击build——build project
,自动build好。
设置debug模式:在CMakeLists.txt文件中添加
set( CMAKE_BUILD_TYPE "Debug" )
,方便调试。
教育优惠 (免费)申请地址:https://www.jetbrains.com/shop/eform/students
产品 | 功能 | 产品 | 功能 | 产品 | 功能 |
---|---|---|---|---|---|
IntelliJ IDEA |
Java IDE | PhpStorm |
PHP IDE | GoLand |
go语言 IDE |
PyCharm |
Python IDE | Clion |
C++ IDE | WebStorm |
JavaScript IED |
DataGrip |
跨平台数据库工具 | RubyMine |
Ruby / Rails IDE | Rider |
.NET IDE |
AppCode |
iOS/OS X IDE |
下个笔记见咯~
《视觉SLAM十四讲》学习笔记(二)——ch3 三维空间刚体运动
《视觉SLAM十四讲》学习笔记(三)——ch4 李群与李代数
《视觉SLAM十四讲》学习笔记(四)【敬请期待】
《视觉SLAM十四讲》学习笔记(五)【敬请期待】
…