Ceres Solver:从入门到使用

VIPCeres Solver:从入门到使用
Ceres Solver是谷歌开源的C++非线性优化库,能够解决有约束或无约束条件下的非线性最小二乘问题。2010年之后大量的运用在谷歌的产品开发中,尤其在谷歌开源的cartographer中被大量的使用。ceres可以在Linux,Windows,macOS,Andrioid,IOS系统进行安装使用,详情可查看下方的官网链接。Ceres Solver 官网:http://ceres-solver.org/
开通可读全文 ·1.2w 人阅读
最低0.47元/天 解锁文章


Ceres Solver是谷歌开源的C++非线性优化库,能够解决有约束或无约束条件下的非线性最小二乘问题。2010年之后大量的运用在谷歌的产品开发中,尤其在谷歌开源的cartographer中被大量的使用。
ceres可以在Linux,Windows,macOS,Andrioid,IOS系统进行安装使用,详情可查看下方的官网链接。

题外话:ceres被命名是由于高斯使用了最小二乘方法成功的预测了绕行至太阳背后的小行星ceres的位置。

Ceres Solver 官网:http://ceres-solver.org/
github:https://github.com/ceres-solver/ceres-solver

一. 简介

ceres可以解决带有约束条件的非线性最小二乘问题,数学表达如下:
min ⁡ X ∑ i 1 2 ρ i ( ∥ f i ( x i 1 , . . . , x i k ) ∥ 2 ) s . t .   l j ≤ x j ≤ u j \underset{X}{\min}\sum_{i} \frac{1}{2} ρ_i(∥f_i(x_{i_1},...,x_{i_k})∥^2)\\s.t.\ l_j≤x_j≤u_j Xmin​i∑​21​ρi​(∥fi​(xi1​​,...,xik​​)∥2)s.t. lj​≤xj​≤uj​

  • ρ i ( ∥ f i ( x i 1 , . . . , x i k ) ∥ 2 ) ρ_i(∥f_i(x_{i_1},...,x_{i_k})∥^2) ρi​(∥fi​(xi1​​,...,xik​​)∥2):残差块(ResidualBlock)
  • f i ( ⋅ ) f_i(\cdot) fi​(⋅):代价函数(CostFunction),,在slam中称为误差项它的参数块表示为 [ x i 1 , . . . , x i k ] [x_{i_1},...,x_{i_k}] [xi1​​,...,xik​​]
  • l j 和 l j l_j 和 l_j lj​和lj​:分别表示参数块 x j x_j xj​的下界和上界
  • ρ i ρ_i ρi​:损失函数(LossFunction)或称为核函数,它属于标量函数,为了减小异常值对非线性优化的影响。

特殊情况:当损失函数 ρ i = x ρ_i=x ρi​=x,并且 l j = − ∞ l_j=-∞ lj​=−∞, u j = ∞ u_j=\infty uj​=∞。那么得到了一个常见的非线性优化函数:
1 2 ∑ i ( ∥ f i ( x i 1 , . . . , x i k ) ∥ 2 ) \frac{1}{2}\sum_{i} (∥f_i(x_{i_1},...,x_{i_k})∥^2) 21​i∑​(∥fi​(xi1​​,...,xik​​)∥2)
ceres求解的一般步骤:

  1. 定义Cost Function模型,即代价函数。也就是我们要寻找的最优目标,这里我们用到了仿函数或称为拟函数(functor)。做法是写一个类,然后在仿函数中重载()运算符。
  2. 使用定义的代价函数构建待求解的优化问题。即调用AddResidualBlock将误差项,添加到目标函数中。由于优化需要梯度,我们有几种选择:1)使用ceres自动求导(Auto Diff)2)使用数值求导(Numeric Diff)3)自行推导解析形式,提供给ceres。
  3. 配置求解器参数并求解问题。配置项options比较丰富,可以查看options的定义。

二. Hello World

本例来自于:examples/helloworld.cc

为了快速入门,我们现在举一个简单的例子,待优化的函数形式如下:
1 2 ( 10 − x ) 2 \frac{1}{2}(10-x)^2 21​

VIP Ceres-Solver 官网教程翻译与学习 Ceres-Sovler仿函数欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 仿函数 仿函数 参考 ceres当中代价函数(cost function)的构建当中用到了仿函数(functor) 开通可读全文·2.3k 阅读·2 点赞·27 收藏 阅读全文

相关推荐

Ceres Solver从零开始手把手教学使用

笔者已经半年没有更新新的内容了,最近学习视觉SLAM的过程中发现自己之前学习的库基础不够扎实。Ceres作为一个优化库在视觉SLAM中使用非常广泛,笔者会跟随着Ceres Solver的官方教程一直学习下来,并且会在专栏中持续更新,如需转载请声明出处。

主要学习关于图像处理和SLAM领域 3715

Ceres Solver实战:Bundle Adjustment优化从入门到精通

在三维重建和SLAM(同时定位与地图构建)领域,Bundle Adjustment(BA)扮演着核心角色。在三维重建中,它能精确地恢复场景的三维结构和相机的参数;在SLAM里,有助于机器人或设备准确地定位自身并构建周围环境的地图。BA的核心原理是通过优化相机的内参、外参以及三维点的位置,来最小化重投影误差。重投影误差指的是三维空间中的点投影到图像平面上的位置与实际观测到的位置之间的差异。具体来说,我们有一系列的三维点 PiP_iPi​ 和对应的相机位姿 Rj,tjR_j, t_jRj​,tj​ 以及相机内参

GeekDongHuang的博客 1928

Ceres Solver 非线性优化入门:从理论到实践

本文介绍了使用Ceres Solver进行非线性优化的基础知识和实践方法。主要内容包括:1) 非线性最小二乘问题的数学定义,采用Levenberg-Marquardt算法结合梯度下降和高斯-牛顿法的优势;2) Ceres的核心概念如参数块、残差块和自动求导机制;3) 详细编程步骤和位姿图优化实例代码。实例程序展示了如何定义SE3位姿误差项、设置局部参数化处理流形约束,以及构建和求解优化问题。通过固定第一个位姿作为参考系,避免了gauge freedom问题,实现了多帧位姿的联合优化。

行知SLAM 1295

Autodesk软件网络授权破解

Autodesk 全系列产品网络授权破解 此网络许可授权破解文件及方法适用Autodesk 绝大部分的产品, 安装网络许可证管理器Autodesk网络许可证管理器x64位官方下载地址( https://knowledge.autodesk.com/sites/default/files/file_downloads/nlm11.14.1.3_ipv4_ipv6_win64.msi ) Autod...

weixin_33919950的博客 8230

Linux服务器上后台运行jupyter notebook/Lab

1 安装配置教程2 后台运行jupyter3 更改运行环境kernel4 SSH端口转发 1 安装配置教程 可以参考:https://www.cnblogs.com/thousfeet/p/10647102.html 2 后台运行jupyter screen -S jupyter # 新建一个名为jupyter的后台screen # 在base环境下,先 cd 到指定文件目录 jupyter notebook # or jupyter lab 3 更改运行环境kernel 需要手动为每个环境添加内.

strivequeen的博客 1829

AIDC供电系统与算电协同

AIDC供电系统的技术革新为算电协同提供了基础保障,而算电协同则是解决AIDC高能耗问题、推动数字经济可持续发展的关键路径

数据中心全生命周期价值管理 2554

基于PWM的汽车仪表步进电机微步驱动优化实践

本文深入探讨了基于PWM的微步驱动技术,用于优化汽车仪表步进电机的运行性能。通过将传统的分步驱动升级为PWM微步细分驱动,利用正弦/余弦查表法合成旋转磁场,有效消除了指针抖动与噪声,实现了指针的平滑、精准运动。文章以STM32和VID2905电机为例,提供了详细的硬件连接、代码实现及高级优化技巧,为提升汽车仪表体验提供了实用方案。

weixin_29169505的博客 507

ATS Request中的PASID的作用是什么

摘要: PASID(进程地址空间标识符)是PCIe ATS(地址转换服务)中的关键组件,用于标识不同进程或虚拟机的地址空间。其主要作用包括:1)支持多进程共享设备时隔离地址空间;2)实现共享虚拟地址(SVA),允许用户态程序直接访问设备;3)提升虚拟化性能(如SIOV),通过PASID区分虚拟机请求;4)增强安全性,基于PASID限制设备内存访问权限。PASID通过20位标识符在TLP前缀中传递,与IOMMU协作完成地址转换与缓存,适用于高性能计算、AI及虚拟化场景,但依赖硬件支持和软件适配。

元直的博客 1551

利用Gretna软件计算脑网络的全局属性和局部属性指标

使用Gretna,你可以计算脑网络的全局属性指标(如网络特征、小世界性和模块度),以及局部属性指标(如节点度和聚类系数)。通过Gretna,你可以计算脑网络的稀疏度,并进一步探索网络的特征和特性。Gretna是一款基于MATLAB平台的脑网络分析工具,它提供了丰富的函数和工具箱,用于计算和分析脑网络的结构和功能。在脑网络中,较高的稀疏度可能意味着神经系统的高效性和信息处理能力,因为较少的连接可以降低信息传递的成本。连接矩阵是一个N*N的矩阵,其中N表示节点的数量,矩阵的每个元素表示节点之间的连接强度。

code_program481的博客 1803

嵌入式工程师成长之路(1)——元件基础(试读版)

上拉电阻阻值选错导致MCU反复重启?0欧电阻竟然能“背锅”信号干扰?高精密采样电阻的温漂毁了整个控制系统?——这些问题,都是基础不牢!CSDN硬件领域头部博主十年经验汇总,涵盖电阻分类、封装、实战选型、避坑指南,附带职业进阶路径,助你从小白进阶为“电路医生”!

云轩阁 34万+

基于LLaMA-action模型的文档摘要任务微调

文档摘要是指从长文档中提取关键信息,生成简短而准确的总结。抽取式摘要:从原文中直接抽取关键句子或短语组成摘要。生成式摘要:通过生成新的句子来表达原文的核心内容。混合式摘要:结合抽取式和生成式方法,既保留原文的关键句子,又生成新的内容。新闻网站:自动生成新闻摘要,帮助用户快速了解新闻要点。社交媒体:为用户提供新闻摘要,便于分享和传播。学术搜索引擎:为用户提供学术文献的摘要,帮助用户快速筛选相关文献。学术写作辅助:帮助研究人员快速生成文献综述部分。企业内部文档管理:自动生成文档摘要,便于员工快速了解文档内容。

加入“Super Entity”,与全能开发团队共探AI智能体与数字人项目,开启前沿技术之旅。 1425

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

上一篇: cartographer:论文阅读(Real-Time Loop Closure in 2D LIDAR SLAM)
下一篇: cartorapher_ros:理解cartographer_ros之源码解读

双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —
非晚非晚
博客等级 码龄10年 4万+粉丝 222原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

非晚非晚

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

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

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

打赏作者

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

抵扣说明:

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

余额充值