slam十四讲ch1、ch2

ch1-主要内容推导 + 课后习题 [十四讲]

格式有些瑕疵 ; 部分借鉴网上大佬,如有侵权请及时告知
预备知识:介绍本书基本信息; 课后题是一些自测题。

课后题:

1. 有线性方程Ax=b, 若已知A,b, 需要求解x, 则该如何求解? 这对A和b有哪些要求? 提示:从A的维度和秩角度分析

解:
A x = b 1. r a n d ( A ) < r a n d ( A ∣ b ) , 则 无 解 。 2. r a n d ( A ) = r a n d ( A ∣ b ) = n , 则 有 唯 一 解 3. r a n d ( A ) = r a n d ( A ∣ b ) < n , 则 有 无 穷 解 Ax=b \\ 1.rand(A) < rand(A|b) , 则无解。\\ 2.rand(A) = rand(A|b) =n , 则有唯一解 \\ 3.rand(A) = rand(A|b) < n, 则有无穷解 Ax=b1.rand(A)<rand(Ab),2.rand(A)=rand(Ab)=n,3.rand(A)=rand(Ab)<n,


2. 高斯分布?

参考附录A.1

3. C++

课程入门:看的黑马程序员

书籍使用:《C++ Primer》,看完一遍当字典用即可。

IDE推荐:写程序用VScode,ubuntu编译用CLion。

编译风格:建议看下谷歌等大厂代码编译风格要求,养成良好的编程习惯。

4.怎么书写c++程序

这个看下相关入门即可。 如菜鸟c++等一些教程

include:.h文件

src: .cpp 文件, 其中一个含main

5. c++11标准

了解不多,但一些关键点有用的。 c++14 、c++17等。

** 6. 7. 8.Linux **

推荐大家去网上找下 《linux-鸟哥》,比较全面,但我更倾向于遇到再查

Linux目录结构:(关注几个主要的即可)

- /bin - 重要的二进制 (binary) 应用程序
- /boot - 启动 (boot) 配置文件
- /dev - 设备 (device) 文件
- /etc - 配置文件、启动脚本等 (etc)
- **/home - 本地用户主 (home) 目录**
- /lib - 系统库 (libraries) 文件
- /lost+found - 在根 (/) 目录下提供一个遗失+查找(lost+found) 系统
- /media - 挂载可移动介质 (media),诸如 CD、数码相机等
- /mnt - 挂载 (mounted) 文件系统
- /opt - 提供一个供可选的 (optional) 应用程序安装目录
- /proc - 特殊的动态目录,用以维护系统信息和状态,包括当前运行中进程 (processes) 信息。
- /root - root (root) 用户主文件夹,读作“slash-root”
- /sbin - 重要的系统二进制 (system binaries) 文件
- /sys - 系统 (system) 文件
- /tmp - 临时(temporary)文件
- **/usr - 包含绝大部分所有用户(users)都能访问的应用程序和文件**
- /var - 经常变化的(variable)文件,诸如日志或数据库等

Linux安装程序的几种方式:

  • 源码安装【可以随意配置,但注意配置步骤等】
  • rpm包安装 、deb包安装
  • apt-get安装 (debian,ubuntu)【常用】

等等众多,不一一阐述,用到再查也可。

**9. 学习Vim **

vim使用不多,一般用gedit等文本编辑器打开。 不过vim也避免不了使用,熟悉常用的几个指令也可。

i  (进入编辑模式)
esc(退出至命令模式)
wq(保存)


q(退出)
q!(强制退出)

ch2-主要内容推导 + 课后习题 [十四讲]

1.主要内容

初识SLAM:视觉SLAM框架的组成 ; 在Linux下搭建环境并编译运行一个程序 ; 掌握cmake的基本用法。

Cmake书籍推荐: CMake Practice.pdf,系统学习或者当字典都是不错的。

1.1. 经典的视觉SLAM框架,以及每部分作用:

slam十四讲ch1、ch2_第1张图片

  • 传感器信息读取:包含数据的预处理
  • 前端视觉里程计:帧间/相邻图像间运动位姿的估计
  • 后端优化:对不同时刻得到的测量位姿,以及回环检测的信息,进行优化,得到全局轨迹和地图。
  • 回环检测:
  • 建图:

视觉里程计只关系相邻图像的运动,所以误差比较大,容易出现累计漂移问题。解决思路:回环检测-检测是否原先到的过的位姿 ; 后端优化-主要解决SLAM中的噪声问题。 建图-分类以应对不同的需求。

1.2. SLAM的数据表述
运 动 方 程 : x k = f ( x k − 1 , u k , w k ) 观 测 方 程 : z k , j = h ( y j , x k , v k , j ) x : 位 姿 ; u : 传 感 器 的 输 入 ; w , v 分 别 代 表 各 自 过 程 中 的 噪 声 ; z : 观 测 数 据 ( 路 标 点 在 传 感 器 中 的 表 示 , 如 像 素 点 等 ) ; y : 路 标 点 运动方程: x_k = f(x_{k-1}, u_k,w_k) \\ 观测方程:z_{k,j} = h(y_j,x_k,v_{k,j}) \\ x:位姿 ; u:传感器的输入;w,v分别代表各自过程中的噪声;\\ z:观测数据(路标点在传感器中的表示,如像素点等); y:路标点 xk=f(xk1,uk,wk)zk,j=h(yj,xk,vk,j)x:姿uwvz:y
SLAM的过程可以建模为:已知u、z,求解x(运动=定位)、y(路标点=建图)的过程。

1.3. 实践:编程基础

理解每一步的含义即可。

2.课后习题

1.阅读文献[1],[14]【待续】

2.综述类文献[9,15~18]【待续】

3. g++

借鉴网上。

-o参数:g++ main.cpp -o main
  -o:output(输出)的意思,指将main.cpp输出为main。如果不指名具体的执行文件名(g++ main.cpp),将会在同级目录下生产a.out文件
-E参数:g++ -E main.cpp -o main.i
  -E:prEprocessing(预处理)的意思,该过程完成:宏替换、去注释、头文件展开、添加行号等动作
-S参数:g++ -S main.i -o main.s
  -S:aSsemble(汇编)的意思。该过程将源码变为汇编代码
-c参数:g++ -c main.s -o main.o
  -c:compile(编译)的意思。该过程将一系列的汇编代码,变成机器代码
  
当然我们可以在整个编译链接阶段加入额外的参数进行控制,如:
 -g,产生符号调试工具(GNU的gdb)所必要的符号资讯,要想对源代码进行调试,我们就必须加入这个选项。
 -O,对程序进行优化编译、连接,采用这个选项,整个源代码会在编译、连接过程中进行优化处理,这样产生的可执行文件的执行效率可以提高,但是,编译、连接的速度就相应地要慢一些。
 -O2,比-O更好的优化编译、连接,当然整个编译、连接过程会更慢。
 -Idirname,将dirname所指出的目录加入到程序头文件目录列表中,是在预编译过程中使用的参数。C程序中的头文件包含两种情况∶

更改生成的文件名称

g++ old_name.cpp -o new_name

4. cmake编译过程

5. 加入语法错误

6. 忘了链接库

7. 阅读《cmake实践》

8. 完善Hello小程序

主要考察1.如何生成库 2.如何查找库 3.如何安装库。

明确以上目的,就方便完成任务了。

1.CMakeLists.txt

cmake_minimum_required(VERSION 3.4)
project(hello)
SET(CMAKE_BUILD_TYPE "Release")

# add include
INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/include)

add_subdirectory(lib)


message(STATUS "the share lib is ok")
## 查找共享库
set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake_modules) # 加入cmake_modules的位置: FindHello.cmake
# list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake_modules/) # 作用等同上面那句
find_package(hello123 REQUIRED) # 查找共享库


# add exe cpp
add_executable(sayhello useHello.cpp)
target_link_libraries(sayhello ${HELLO_LIBRARIES})

# sudo make install
# install(TARGETS hello123 LIBRARY DESTINATION /usr/local/lib)
install(FILES ${PROJECT_SOURCE_DIR}/include/hello.h DESTINATION /usr/local/include)


  1. lib/CMakeLists.txt
# 生成共享库 libhello.so
SET(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib) # 设置库输出位置
ADD_LIBRARY(hello123 SHARED ${PROJECT_SOURCE_DIR}/src/hello.cpp)

set_target_properties(hello123 PROPERTIES VERSION 1.2 SOVERSION 1) # 动态库版本号设置 , VERSION指代动态库版本,SOVERSION 指代 API 版本。
message(STATUS {PROJECT_SOURCE_DIR}/src/hello.cpp"--构建库完成")


## sudo make install
#install(TARGETS hello123 LIBRARY DESTINATION /usr/local/lib)
#install(FILES ${PROJECT_SOURCE_DIR}/include/hello.h DESTINATION /usr/local/include)

3.Findhello.cmake

# Try to find Hello library
# # 找到正确的头文件
# find_path(HELLO_INCLUDE_DIR NAMES hello.h PATHs ${PROJECT_SOURCE_DIR}/include
#                                                 ...)

# 找到正确的库文件
find_library(HELLO_LIBRARIES  NAMES hello123 
            PATHS #/home/lxq/slam/深蓝学院/视觉SLAM-11期/第1章作业/PA1/code(复件)/lib
                  # /usr/local/lib
                  ${PROJECT_SOURCE_DIR}/lib
                  ...) 

if(NOT HELLO_LIBRARIES)
message(FATAL_ERROR"hello.so not found!!!")
endif(NOT HELLO_LIBRARIES)

if( HELLO_LIBRARIES)
message(FATAL_ERROR"hello.so  found!!!")
endif( HELLO_LIBRARIES)

迭代版本1

cmake_minimum_required(VERSION 2.8)
project(hello)
SET(CMAKE_BUILD_TYPE "Release")


# add include
INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/include)

# 生成共享库 libhello.so
SET(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib) # 设置库输出位置
ADD_LIBRARY(hello SHARED ${PROJECT_SOURCE_DIR}/src/hello.cpp)

# 加入cmake_modules的位置: FindHello.cmake
set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake_modules) 
# 下面注释的作用等同上面那句
# list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake_modules/)

# 查找共享库
find_package(hello REQUIRED)

# add exe cpp
add_executable(sayhello useHello.cpp)
target_link_libraries(sayhello ${HELLO_LIBRARIES})

# sudo make install
install(TARGETS hello LIBRARY DESTINATION /usr/local/lib)
install(FILES ${PROJECT_SOURCE_DIR}/include/hello.h DESTINATION /usr/local/include)

slam十四讲ch1、ch2_第2张图片

9.阅读其他cmake教材

cmake会在接下来一段时间,一直使用,所以学会基本的操作,遇到啥查啥并总结即可。

10. KDevelop的特性

说实话,CLion比KDevelop用起来舒服多了。

11.略

你可能感兴趣的:(SLAM十四讲讲,+,视觉SLAM课程,c++,计算机视觉,ROS)