目录
安装问题
报错
slam视觉
salm工程的大致过程:
位姿
- 相机的位姿:
- PnP问题
后端优化:
- 滤波与非线性优化
- 图优化
https://blog.csdn.net/qq_33266987/article/details/51878975
统文件在最前面,然后是第三方库文件,最后是自己的头文件
解决方法:在源文件中加上“ #include
opencv编程解决warning C4003: “max”宏的实参不足 - lala8 - 博客园 (cnblogs.com)
1、-- Downloading https://github.com/boostorg/bind/archive/boost-1.79.0.tar.gz -> boostorg-bind-boost-1.79.0.tar.gz...
[DEBUG] To include the environment variables in debug output, pass --debug-env
[DEBUG] Feature flag 'binarycaching' unset
[DEBUG] Downloading https://github.com/boostorg/bind/archive/boost-1.79.0.tar.gz
[DEBUG] Download failed -- retrying after 1000 ms.
Error: Failed to download from mirror set:
https://github.com/boostorg/bind/archive/boost-1.79.0.tar.gz: WinHttpSendRequest() failed: 12030
[DEBUG] D:\a\_work\1\s\src\vcpkg\base\downloads.cpp(788):
[DEBUG] Exiting after 47.67 s (47663496 us)
CMake Error at scripts/cmake/vcpkg_download_distfile.cmake:24 (message):
Failed to download file with error: 1
If you use a proxy, please check your proxy setting. Possible causes are:
1. You are actually using an HTTP proxy, but setting HTTPS_PROXY variable
to `https://address:port`.
2. You are using Fiddler.
3. Your proxy's remote server is out of service.
error: building boost-bind:x64-windows failed with: BUILD_FAILED
解决:一般都是由于网的问题,可以选择科学上网,或者换个wifi什么的,要是下载链接能直接打开的话,就选择下载到本地,再改成指定名字名放到vcpkg-master\downloads路径下。METIS安装包这里下载:https://github.com/agiorla/METIS
2、Error: database corrupted. Package boost-container-hash:x64-windows is installed but dependency boost-detail:x64-windows is not.
解决:是由于各项依赖先后安装顺序问题。
因此可以 1.先删除container-hash相关安装文件 2.运行命令 vcpkg remove boost-container-hash:x64-windows --recurse option 3.运行命令 vcpkg install boost-detail:x64-windows 4. 再从垃圾站把container-hash相关安装文件还原回来
3、boost的依赖包实在太多了,一会就会报第一个错误,所以用爬虫把相关的boost-1.79.0包都给下载下来,再放到vcpkg-master\downloads路径下:(第一次用爬虫,这个示例非常简单,但特好用,参考:(62条消息) VCPKG 安装 BOOST OpenCV等库下载失败的问题_yulinxx的博客-CSDN博客_vcpkg安装boost失败)
import requests
from bs4 import BeautifulSoup
url = 'http://106.15.181.5/'
res = requests.get(url)
soup = BeautifulSoup(res.text, 'html.parser')
listTr = soup.find_all('tr')
urlList = []
for i in listTr:
url1 = i.find('a')['href']
if url1.startswith('/boostorg') and url1.endswith('1.79.0.tar.gz'):#我需要boost-1.79版本,所以指定后缀1.79.0.
urlList.append(url1)
for j in urlList:
data = requests.get(url + j).content
with open(j[1:], 'wb') as f:
f.write(data)
print(f'{j[1:]} 下载成功')
print('\n任务完成')
首先通过传感器(这里利用的是相机)获取环境中的数据信息,也就是一帧一帧的图像,在前端视觉里程计中通过这些图像信息计算出相机的位置(准确来说是位姿,后面会细说)。
同时进行闭环检测,判断机器人是否到达先前经过的地方。然后利用后端非线性优化,对前端得出的相机位姿进行优化,得到全局最优的状态。
最后根据每一时刻的相机位姿和空间中目标的信息,根据需求建立相应的地图。
其实就是指相机在世界坐标系下的位置坐标和旋转姿态,位姿估计就是根据两帧之间匹配点的关系计算当前时刻相机的位姿。然后再利用相机的位姿,估计特征点的空间位置。
卡尔曼滤波器与非线性优化算法的比较:
一般分解为两个任务:
1、构建图。机器人位姿作为顶点,位姿间关系作为边。
2、优化图。调整机器人的位姿(顶点)来尽量满足边的约束,使得误差最小。
g2o 图优化 6步:
typedef g2o::BlockSolver< g2o::BlockSolverTraits<3,1> > Block; // 每个误差项优化变量维度为3,误差值维度为1
// 第1步:创建一个线性求解器LinearSolver
Block::LinearSolverType* linearSolver = new g2o::LinearSolverDense();
// 第2步:创建BlockSolver。并用上面定义的线性求解器初始化
Block* solver_ptr = new Block( linearSolver );
// 第3步:创建总求解器solver。并从GN, LM, DogLeg 中选一个,再用上述块求解器BlockSolver初始化
g2o::OptimizationAlgorithmLevenberg* solver = new g2o::OptimizationAlgorithmLevenberg( solver_ptr );
// 第4步:创建终极大boss 稀疏优化器(SparseOptimizer)
g2o::SparseOptimizer optimizer; // 图模型
optimizer.setAlgorithm( solver ); // 设置求解器
optimizer.setVerbose( true ); // 打开调试输出
// 第5步:定义图的顶点和边。并添加到SparseOptimizer中
CurveFittingVertex* v = new CurveFittingVertex(); //往图中增加顶点。维度及类型:g2o::BaseVertex<3,Eigen::Vector3d
v->setEstimate( Eigen::Vector3d(0,0,0) ); // 设定初始值
v->setId(0); // 定义节点编号,(决定了在H矩阵中的位置)
optimizer.addVertex( v ); // 把节点添加到图中
for ( int i=0; i
edge->setId(i); // 定义边的编号,(决定了在H矩阵中的位置)
edge->setVertex( 0, v ); // 设置连接的顶点
edge->setMeasurement( y_data[i] ); // 观测数值
edge->setInformation( Eigen::Matrix::Identity()*1/(w_sigma*w_sigma) ); //setInformation() 信息矩阵:协方差矩阵之逆
optimizer.addEdge( edge );
}
// 第6步:设置优化参数,开始执行优化
optimizer.initializeOptimization();
optimizer.optimize(100);