视觉SLAM实践入门——(8)使用Ceres库进行曲线拟合

高翔视觉SLAM十四讲(第二版)各种软件、库安装的以及报错解决方法 前言 自己不小心把Ununtu系统搞崩了,只好重装Ununtu系统,写一篇博客记录一下高翔视觉SLAM十四讲(第二版)各种库安装的以及报错解决方法。本篇博客写于2022年4月7日,安装顺序按照在书中出现的顺序。下面每个库都会介绍在书中出现的地方,以及库的来源。下面安装的依赖项,如果书上有都是来源于书上,如果书上版本低了,则做出了相应的改动;如果书上没有则来自于其他博客。 系统版本 Ununtu18.04 下载高翔视觉SLAM十四讲第二版的源代码 有些小型的库存放在 slambook2/3rdp.. 阅读详情

Ceres是一个最小二乘问题求解库。Ceres求解的最小二乘问题一般形式为

x是优化变量,也称为参数块,f是代价函数,也称为残差块。l和u是某个优化变量的上限和下限

使用Ceres求解的步骤:

1、定义误差类型CURVE_FITTING_COST,其中residual是残差

2、定义待估计变量

3、定义Problem对象,创建残差块并通过AddResidualBlock添加到Problem中,其中AutoDiffCostFunction是自动求导方式

4、定义Options对象,设置配置项

5、定义Summary对象,用于存放优化信息

6、使用Solve函数求解

 

 

 

 

#include <iostream>
#include <ceres/ceres.h>
#include <opencv2/core/core.hpp>
#include <chrono>

using namespace cv;
using namespace std;

class CURVE_FITTING_COST
{
public:
	CURVE_FITTING_COST(double x, double y) : _x(x), _y(y){}

	template<typename T>
	bool operator()(const T * const abc, T *residual) const 
	{
		residual[0] = T(_y) - ceres::exp(abc[0] * T(_x) * T(_x) + abc[1] * T(_x) + abc[2]);	//误差变量
		return true;
	}
	const double _x, _y;
};


int main(void)
{
	double ar = 1.0, br = 2.0, cr = 1.0;
	double ae = 2.0, be = -1.0, ce = 5.0;
	int N = 100;
	double sigma = 1.0;
	double inv_sigma = 1.0 / sigma;
	cv::RNG rng;

	vector<double> x_data, y_data;
	for(int i = 0; i < N; i++)
	{
		double x = 1.0 * i / N;
		x_data.push_back(x);
		y_data.push_back(exp(ar*x*x + br*x + cr) + rng.gaussian(sigma*sigma));
	}

	double abc[3] = {ae, be, ce};	//待估计参数

	ceres::Problem problem;
	for(int i = 0; i < N; i++)
	{
		problem.AddResidualBlock
		(
			//自动求导,模板参数:误差类型,输出维度(待估计参数),输入维度(误差)
			new ceres::AutoDiffCostFunction<CURVE_FITTING_COST, 1, 3>(new CURVE_FITTING_COST(x_data[i], y_data[i])),
			nullptr,	//核函数,没使用
			abc	//待估计参数	
		);
	}

	ceres::Solver::Options opt;	//配置项
	opt.linear_solver_type = ceres::DENSE_NORMAL_CHOLESKY;	//利用cholesky分解,求解增量方程
	opt.minimizer_progress_to_stdout = true;	//优化过程输出到cout

	ceres::Solver::Summary summary;	//优化信息
	chrono::steady_clock::time_point t1 = chrono::steady_clock::now();
	ceres::Solve(opt, &problem, &summary);	//优化
	chrono::steady_clock::time_point t2 = chrono::steady_clock::now();
	chrono::duration<double> time_used = chrono::duration_cast<chrono::duration<double>>(t2 - t1);
	cout << "time_used = " << time_used.count() << "s" << endl;

	cout << summary.BriefReport() << endl;
	cout << "estimated a,b,c = ";
	for(auto a:abc)	cout << a << " ";
	cout << endl;


	return 0;
}

 

《视觉SLAM十四讲》中各库的安装 目录 目录 1. Eigen线性代数库的安装 2. Sophus李代数库的安装 3. OpenCV计算机视觉库的安装 4. PCL点云库的安装 5. Ceres非线性优化库的安装 6. G2O图优化库的安装 1. Eigen线性代数库的安装 Eigen库是一个C++线性代数开源库,官方主页http://eigen.tuxfamily.org/dox-devel/modules.h... 阅读详情

相关推荐

视觉SLAM非线性优化之Ceres solver 和 G2o

“ 如果你受苦了,感谢生活,那是它给你的一份感觉; 如果你受苦了,感谢上帝,说明你还活着。” ——伊索 3月就要结束了~ 最近在看视觉SLAM的一些东西...

I-am-Unique 4009

Ceres的Options详解

目录1、Ceres简介2、常用通用参数 1、Ceres简介 Ceres是一个非常优秀的非线性优化库(谷歌出品)。能完成很复杂的优化功能,选项也非常的多,本篇博客就来梳理下这些选项。 2、常用通用参数 bool Solver::Options::IsValid(string *error) const 检查options是否合法,不合法的话返回false,并将错误信息存到error里面。 i...

Marvek的博客 2万+

视觉SLAM笔记(28) Ceres

Ceres简介、安装、拟合曲线

氢键H-H 1万+

从零开始学SLAM: Ceres/G2O求解优化问题

http://www.ceres-solver.org/nnls_tutorial.html 从《视觉SLAM十四讲》和ceres的tutorial开始学起,同时复习一下C++中的语法。 struct CURVE_FITTING_COST { CURVE_FITTING_COST ( double x,double y): _x(x),_y(y) {} templa...

mt19930326的博客 2528

datart 二开环境搭建

下载源码, 地址: https://github.com/running-elephant/datart, dev 分支; 解压后使用 idea 打开; 服务端: 3.1 安装依赖, idea会自动安装; 3.2 修改配置文件 /config/application.yml 3.3 创建数据库,并将bin/datart.sql导入到数据库中 3.4 入口: /server/src/main/java/datart/DatartServerApplication.java [外链图片转存失败,源站可能有防.

又是再见? 6131

01、【solidworks】windosws正在配置solidworks问题及注册表未卸载干净问题解决

windosws正在配置solidworks问题及注册表未卸载干净问题解决

qq_740388770的博客 2万+

vs2015 配置 ceres 基本步骤及遇到的坑

vs2015 配置 ceres 基本步骤及遇到的坑

zhangxiaomm的专栏 1944

【STM32Cube HAL】输入捕获(六)——PWM测量

实验内容:使用通用定时器输入捕获测量信号的脉宽(检测按键按下的时间)。 一、原理图 二、 CubeMX配置 Step1.打开 STM32CubeMX,点击“New Project”,选择芯片型号,STM32F103VETx。 Step2.选择时钟源,并配置时钟树。选择Crystal/Ceramic Resonator,并配置系统时钟为72M。 Step3.配置SYS,我们这里选择的是Serial Wire。(正常情况配置不配置不影响,debug可以使用。但是你不可以把这...

HAHAHA 1万+

非线性优化学习笔记

非线性优化(手写高斯牛顿法/ceres/g2o)

luoyihao123456的博客 660

MATLAB 论文复现——面向紧急需求响应的规模化灵活资源负荷管理快速决策方法

其次,对灵活资源参与EDR的功率分配模型进行了建模,并提出了基于分层分布式共识算法的快速决策方法,对功率分配模型进行快速求解,以满足EDR实时性的需求,在保证较高精度的前提下提高了决策速度。[1]孔祥玉,杨至端,孙裕策,等.面向紧急需求响应的规模化灵活资源负荷管理快速决策方法[J/OL].电力系统自动化,1-13[2024-07-29].http://kns.cnki.net/kcms/detail/32.1180.TP.20240709.1843.002.html.关键词: 规模化灵活资源;

sjr1478的博客 373

计量经济学——事件研究法/事件分析法

计量经济学——事件研究法/事件分析法

weixin_46189461的博客 6752

二、ceres学习——ceres在视觉导航中的简单应用

ceres在求解视觉导航方面,就依赖一个数学模型,就是相机的投影模型。在视觉导航中,已知的条件只有特征点在图像中的二维坐标uv,特征点在相机坐标系下的描述应该是一个三维坐标XYZXYZ→uvZ​uv1​​​fx​00​0fy​0​cx​cy​1​​​XYZ​​在世界坐标系下描述这个特征点是XW​YW​ZW​​XYZ​​R​XW​YW​ZW​​​t其中R。

qq_43495930的博客 526

RK3588芯片:ALSA音频通路下HDMI与耳机自动切换的技术探索

摘要:本文详细探讨了基于RK3588芯片的HDMI与耳机自动切换方案。文章首先剖析了ALSA音频架构的核心组件与工作原理,接着介绍了RK3588芯片的硬件特性及音频处理优势。重点阐述了自动切换的实现原理,包括硬件检测机制、ALSA驱动处理逻辑和软件控制流程,并提供了详细的配置步骤。同时针对常见问题如切换异常、音频质量下降等给出了解决方案。该方案通过合理配置设备树和ALSA文件,实现了音频输出的智能切换,提升了用户体验,展现了RK3588在音频处理领域的强大性能。未来随着AI音频技术的发展,该方案在智能家居、

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 266

【视觉SLAM十四讲】各种库的安装及代码实践

在学习高博的《视觉SLAM十四讲》的过程中,遇到了各种问题。虽说在网上都能找到对应的解决方案,但没有一篇是详细列尽遇到的问题的文章。于是,打算自己写一篇记录学习过程中遇到的一系列问题。希望能为后续的学习提供一点帮助!(自己也是新手小白,还是有很多不懂的地方。

2302_80099075的博客 6054

【水文学法总结】河道内生态流量计算方法(含MATLAB实现代码)

简介水文学法实现河道内生态流量计算

WW、forever的博客 5014

AI智能体面试实战与真题解析: 312+道面试题完整答案 (下篇)

本文覆盖220道基础八股文+92道项目面试题,涵盖Agent架构、RAG、工具调用、记忆系统、多智能体、大模型基础、工程化实践、Prompt工程9大模块,含完整代码实现和模拟面试剧本。

program哲学 296

SLAM算法与工程实践——SLAM基本库的安装与使用(5):Ceres优化库

Ceres

YangtseJin的博客 2055

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

【SLAM】Ceres优化库超详细解析

Ceres是由Google开发的开源C++通用非线性优化库,与g2o并列为目前视觉SLAM中应用最广泛的优化算法库。 对于任何一个优化问题,我们首先需要对问题进行建模,之后采用合适的优化方法,进行求解。在求解的过程中,往往需要进行梯度下降求取最优,这里涉及了导数计算。所以在代码中使用Ceres进行优化时,需要包含基本内容:建模、优化、求导方法。 Ceres库简介 Ceres库主要用于求解无约束或者有界约束的最小二乘问题。其数学形式如下:

Yngz_Miao的博客 3万+

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

SLAM知识点——Ceres库学习

SLAM知识点——Ceres库学习

qq_46515446的博客 5453

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

【视觉SLAM14讲】【汇总】

第一讲东西少,就没记录【slam十四讲第二版】【课本例题代码向】【第二讲初识SLAM】【SLAM基础知识】【linux下C++编译】【cmake基础使用】【slam十四讲第二版】【课本例题代码向】【第三~四讲刚体运动、李群和李代数】【eigen3.3.4和pangolin安装,Sophus及fim的安装使用】【绘制轨迹】【计算轨迹误差】【slam十四讲第二版】【课本例题代码向】【第五讲~相机与图像】【OpenCV、图像去畸变、双目和RGB-D、遍历图像像素14种】【slam十四讲第二版】【课本例题代码向】【

qq_45954434的博客 1万+

使用C++实现最小二乘曲线拟合(使用Ceres实现)

高斯牛顿法实现时,需要根据目标函数计算雅可比矩阵,进一步计算海森矩阵,当目标函数比较简单时,雅可比矩阵和海森矩阵的计算比较容易,但是当当待估计的参数较多,并且目标函数比较复杂时,雅可比矩阵的计算非常复杂,因此引入谷歌的Ceres库,在使用Ceres进行曲线拟合之前

weixin_43283119的博客 1599

Ceres 曲线拟合

Ceres 是一个广泛使用的最小二乘问题求解库。在 Ceres 中,我们作为用户,只需按照一定步骤定义待解的优化问题,然后交给求解器计算。min⁡x12∑iρi(∥fi(xi1,…xin)∥2)s.t.lj≤xj≤ujminx​s.t.​21​∑i​ρi​(∥fi​(xi1​​,…xin​​)∥2)lj​≤xj​≤uj​​在这个问题中,x。

泠山的博客 1644

视觉SLAM理论到实践系列(五)——非线性优化(3)

非线性优化

YangtseJin的博客 1192

Ceres库与位姿图优化

主要是ceres库的初步使用方法介绍

weixin_46190814的博客 2082

视觉SLAM⑥---非线性优化

主要目标: 1.理解最小二乘法的含义和处理方式。 2.理解高斯牛顿法(Gauss-Newton's method)、列文伯格—马夸尔特方法(Levenburg- -Marquadt's method)等下降策略。 3.学习Ceres库和g2o库的基本使用方法。

qq_41694024的博客 4310

SLAM疑难篇一:ceres安装和编译报错——实践高翔SLAM十四讲

要点总结 安装ceres如果遇到报错,那么绝大多数的原因是和ceres依赖的eigen、cmake的版本有关系 这里参考官网的说明文档:链接 第一次失败 下载的高翔的SLAM十四讲源码,直接解压3rdparty/ceres-solver.tar.gz,然后进入文件夹mkdir一个build文件夹,内部cmake,就出错了 查阅了一些资料发现,高翔的SLAM源码里的ceres的版本有点陈旧,应该在官网下载最新的稳定版本,并且依赖项也需要更换成匹配的版本,ceres官网链接写的很清楚(TIPS:链接在上方,不熟

shuttworth的博客 7939
上一篇: 为WSL的ubuntu子系统安装图形化界面
下一篇: 视觉SLAM实践入门——(9)曲线拟合之g2o库
floatinglong
博客等级 码龄9年 90粉丝 143原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值