视觉SLAM():常用库

本文介绍了Eigen库在C++中的线性代数操作,包括矩阵的基本运算、特征值计算和方程求解。同时,讲解了OpenCV库在图像处理中的应用,如图像读取、显示和像素操作。此外,还提及了用于最小二乘问题求解的Ceres库和图优化库G2O。
摘要由CSDN通过智能技术生成

1. 线性代数库:Eigen

1.1. 安装

在Ubuntu的终端输入

sudo apt-get install libeigen3-dev

1.2. 核心:< Core >

1.2.1. 基本操作

包含头文件

#include<Eigen/Core>

using namespace Eigen;

可在C++环境中实现矩阵的各种运算,类似于MATLAB。引用之后就可以如下进行使用了。

Matrix<float,2,3> m23;  //创建float类型2x3的矩阵
Matrix<double,Dynamic,Dynamic> m;  //创建double类型的动态矩阵
Matrix5d m5;			//创建double类型的5x5矩阵
Vector3d v3;			//创建double类型的3x1矩阵
Vector3f v3f;			//创建float类型的3x1矩阵

Matrix3d::Zero();		//3x3全零阵
Matrix3d::Random();		//3x3随机阵
Matrix3d::Identity();	//3x3单位阵
MatrixXd::Random(3,4);		//3x4随机阵


m23 << 1,2,3,4,5,6;		//初始化矩阵成为[1,2,3;4,5,6]
cout << m23(1,2);			//打印m23的第1行第2列的元素,为2
cout << m23;			//打印矩阵m23


m = m23.cast<double>() * v3;			//矩阵相乘,维度和类型必须合理
m = 10 * v3;							//数乘
m23.transpose();						//转置
m23.sum();							//全元素和 
m23.trace();						//迹,对角线元素的和
m3.inverse();						//逆
m23.determinant();						//行列式

1.2.2. 特征值

特征值的求解是通过构建求解对象实现的

SelfAdjointEigenSolver<Matrix5d> es(m5);
cout << es.eigenvalues();
cout << es.eigenvectors();

1.2.3. 解方程Ax=b

当然可以直接求逆解,也可以采用QR分解求解。

Matrix<double,5,5> A;
Vector5d b;
Vector5d x;

x = A.inverse() * b;			//直接求逆
x = A.colPivHouseholderQr().solve(b);			//QR分解求

1.3. 几何:< Geometry >

1.3.1. 基本操作

包含头文件

#include<Eigen/Geometry>

using namespace Eigen;

使用

Vector3d v;

Matrix3d rm;
AngleAxis rv( M_PI/4 , Vector3d(0,0,1) );		//创建旋转向量,即角轴
Quaterniond q = Quaterniond(rv);				//四元数


rv.matrix();		//旋转向量的矩阵形式
rm = rv.toRotationMatrix();		//旋转向量 转换为 旋转矩阵
cout<<q.coeffs().transpose();		//输出四元数,最后一位为实部

v = rm * v;			//旋转
v = rv * v;			//旋转

1.4. 参考内容

  1. 《视觉SLAM十四讲》

2. 图像处理算法库:OpenCV

2.1. 安装

首先安装依赖项

sudo apt-get install build-essential libgtk2.0-dev libvtk5-dev libjpeg-dev libtiff4-dev libjasper-dev libopenexr-dev libtbb-dev

之后从网站https://opencv.org/download.html/ 下载用于Linux的OpenCV,若下载得到的是opencv-4.5.3.zip,则调用以下程序来安装它

sudo make install opencv-4.5.3.zip

2.2. 操作

2.2.1. 基本操作

包含头文件

#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.cpp>

图像读取和操作

cv::Mat image;		//创建图像

cv::Mat image1(10,10,CV_8UC3);			//自定义图像
image = cv::imread("./1.png");			//从某个路径读取图像
cv::imshow("Good Picture",image);		//显示图像
cv::Mat image1(image);					//克隆

image.cols;		//图像宽,单位像素个数
image.rows;		//图像高,单位像素个数
image.channels();		//图像通道数,灰度则为单通道,彩色则为RGB三通道,还可彩色+透明度即RGBA四通道
image.type();			//图像类型,常见CV_ 8\16\32\64 UC 1\2\3 表示1\2\3通道,各通道用unsigned int型的8\16\32\64 表示各通道的数值bit数。例如CV_8UC1表示单通道且为8bit,即0-255表示灰度值
if(image.type() != CV_8UC2)
	return 0;

2.2.2. 像素读取

2.3. 参考内容

  1. 《视觉SLAM十四讲》
  2. OpenCV常用库函数
  3. 【OpenCV】访问Mat图像中每个像素的值

3. 最小二乘问题求解库:Ceres

4. 图优化库:G2O

SLAM地图构建与定位算法,含有卡尔曼滤波和粒子滤波器的程序 SLAM算法的技术文档合集(含37篇文档) slam算法的MATLAB源代码,国外的代码 基于角点检测的单目视觉SLAM程序,开发平台VS2003 本程序包设计了一个利用Visual C++编写的基于EKF的SLAM仿真器 Slam Algorithm with data association Joan Solà编写6自由度扩展卡尔曼滤波slam算法工具包 实时定位与建图(SLAM),用激光传感器采集周围环境信息 概率机器人基于卡尔曼滤波器实现实时定位和地图创建(SLAM)算法 机器人地图创建新算法,DP-SLAM源程序 利用Matlab编写的基于EKF的SLAM仿真器源码 机器人定位的EKF-SLAM算法,实现同时定位和地图构建 基于直线特征的slam机器人定位算法实现和优化 SLAM工具箱,很多有价值的SLAM算法 EKF-SLAM算法对运动机器人和周围环境进行同步定位和环境识别仿真 SLAM using Monocular Vision RT-SLAM机器人摄像头定位,运用多种图像处理的算法 slam(simultaneous localization and mapping)仿真很好的入门 SLAM自定位导航的一个小程序,适合初学者以及入门者使用 slam算法仿真 slam仿真工具箱:含slam的matlab仿真源程序以及slam学习程序 移动机器人栅格地图创建,SLAM方法,可以采用多种地图进行创建 SLAM算法程序,来自悉尼大学的作品,主要功能是实现SLAM算法 对SLAM算法的EKF-SLAM算法进行改进,并实现仿真程序 SLAM的讲解资料,机器人导航热门方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Starry丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值