当前位置: 首页 > news >正文

【C++】开源:ceres和g2o非线性优化库配置使用

😏★,°:.☆( ̄▽ ̄)/$:.°★ 😏
这篇文章主要介绍ceres和g2o非线性优化库配置使用。
无专精则不能成,无涉猎则不能通。——梁启超
欢迎来到我的博客,一起学习,共同进步。
喜欢的朋友可以关注一下,下次更新不迷路🥞

文章目录

    • :smirk:1. 项目介绍
    • :blush:2. 环境配置
    • :satisfied:3. 使用说明

😏1. 项目介绍

ceres项目Github地址:https://github.com/ceres-solver/ceres-solver

ceres项目Github地址:https://github.com/RainerKuemmerle/g2o

Ceres Solver和g2o都是用于求解非线性最小二乘问题的C++库,主要用于图优化等领域。它们有一些共同点,但也有一些区别。

Ceres Solver:

  • Ceres Solver是一个功能强大的C++库,专门用于求解大规模稀疏和稠密非线性最小二乘问题。
  • 它支持各种类型的误差函数,如光束法平差、非线性回归、SLAM、视觉定位等。
  • Ceres Solver提供了多种优化算法,包括LM(Levenberg-Marquardt)、GN(Gauss-Newton)等,并且可根据问题特点进行自定义优化策略。
  • 它具有灵活的接口和标准化的问题表示方式,可以轻松地与其他库进行集成。
  • Ceres Solver支持自动求导,可以通过使用用户提供的误差函数的解析梯度或数值微分来计算导数。
  • Ceres Solver是开源的,遵循BSD许可证。

g2o:

  • g2o是一个通用的C++库,用于求解图优化问题,例如视觉SLAM、3D重建、机器人运动估计等。
  • g2o支持稀疏矩阵和滤波器算法,并提供了灵活的接口和模块化设计。
  • 它支持多种顶点和边类型,并允许用户自定义顶点、边类型和优化策略。
  • g2o提供了多种优化算法,如GN(Gauss-Newton)、LM(Levenberg-Marquardt)等。
  • g2o也是开源的,遵循BSD许可证。

Ceres Solver和g2o在SLAM、机器人运动估计等领域得到了广泛应用。

😊2. 环境配置

下面进行环境配置:

ceres:

# 安装依赖
sudo apt install cmake libgoogle-glog-dev libgflags-dev libatlas-base-dev libsuitesparse-dev -y
# ceres-1.14
wget ceres-solver.org/ceres-solver-1.14.0.tar.gz
tar -zxvf ceres-solver-1.14.0.tar.gz
cd ceres-solver-1.14.0
mkdir build && cd build
cmake .. && make
sudo make install

g2o:

# 安装依赖
sudo apt-get install libeigen3-dev libsuitesparse-dev qt5-qmake libqglviewer-dev-qt5
git clone https://github.com/RainerKuemmerle/g2o.git
cd g2o
mkdir build && cd build
cmake .. && make
sudo make install

😆3. 使用说明

下面进行使用分析:

ceres:

构建代价函数Cost_Functor:

// 定义一个实例化时才知道的类型T
template <typename T>// 运算符()的重载,用来得到残差fi
bool operator()(const T* const x, T* residual) const {residual[0] = T(10.0) - x[0];return true;}

构建最小二乘问题problem:

Problem problem;
CostFunction* cost_function = new AutoDiffCostFunction<CostFunctor, 1, 1>(new CostFunctor);
problem.AddResidualBlock(cost_function, NULL, &x);

求解器参数配置Solver:

Solver::Options options;
options.linear_solver_type = ceres::DENSE_QR;
options.minimizer_progress_to_stdout = true;
Solver::Summary summary;
Solve(options, &problem, &summary);
cout << summary.BriefReport() << "\n";//输出优化的简要信息

用Ceres Solver库解决一个简单的非线性最小二乘问题示例:

#include <iostream>
#include <ceres/ceres.h>// 代价函数类定义
struct CostFunctor {template <typename T>bool operator()(const T* const x, T* residual) const {// 定义目标函数:f(x) = 10 - xresidual[0] = T(10.0) - x[0];return true;}
};int main(int argc, char** argv) {// 初始化问题ceres::Problem problem;// 添加一个残差块double initial_x = 5.0;  // 初始值ceres::CostFunction* cost_function =new ceres::AutoDiffCostFunction<CostFunctor, 1, 1>(new CostFunctor);problem.AddResidualBlock(cost_function, nullptr, &initial_x);// 配置求解器选项ceres::Solver::Options options;options.linear_solver_type = ceres::DENSE_QR;options.minimizer_progress_to_stdout = true;// 求解问题ceres::Solver::Summary summary;ceres::Solve(options, &problem, &summary);// 打印结果std::cout << summary.BriefReport() << "\n";std::cout << "Final x = " << initial_x << "\n";return 0;
}

在这里插入图片描述

以上。

相关文章:

【C++】开源:ceres和g2o非线性优化库配置使用

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍ceres和g2o非线性优化库配置使用。 无专精则不能成&#xff0c;无涉猎则不能通。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&…...

OCR学习

...

《练习100》56~60

题目56 M 5 a [1, 2, 3, 4, 5] i 1 j M - 1 while i < M:# print(f"第{i1}轮交换前&#xff1a;i {i}, j {j} , a[{i}] {a[i]} , a[{j}] {a[j]}")a[i], a[j] a[j], a[i]# print(f"第{i1}轮交换后&#xff1a;i {i}, j {j} , a[{i}] {a[i]} , a[…...

基于大数据为底层好用准确性高的竞彩足球比分预测进球数分析软件介绍推荐

大数据与贝叶斯理论在足球比赛分析与预测中的应用 随着科技的不断进步&#xff0c;大数据分析在各个领域的应用也越来越广泛&#xff0c;其中包括体育竞技。足球比赛作为全球最受欢迎的运动之一&#xff0c;也借助大数据和贝叶斯理论来进行模型分析和预测。本文将通过结合贝叶…...

Django进阶

1.orm 1.1 基本操作 orm&#xff0c;关系对象映射。 类 --> SQL --> 表 对象 --> SQL --> 数据特点&#xff1a;开发效率高、执行效率低&#xff08; 程序写的垃圾SQL &#xff09;。 编写ORM操作的步骤&#xff1a; settings.py&#xff0c;连…...

Linux系统服务管理

服务命令比较 操作 Linux 6 Linux7 服务开机自动启动 chkconfig --level 35 iptables on systemctl enable firewalld.service 服务器开机不自动启动 chkconfig --level 35 iptables off systemctl disable firewalld.service 加入自定义服务 chkconfig --add aaa s…...

C#之控制台版本得贪吃蛇

贪吃蛇小时候大家都玩过&#xff0c;具体步骤如下: 1.给游戏制造一个有限得空间。 2.生成墙壁&#xff0c;小蛇碰撞到墙壁或者咬到自己的尾巴&#xff0c;游戏结束。 3.生成随机的食物。 4.吃掉食物&#xff0c;增加自身的体长&#xff0c;并生成新的食物。 具体代码如下&…...

ffplay数据结构分析(一)

本文为相关课程的学习记录&#xff0c;相关分析均来源于课程的讲解&#xff0c;主要学习音视频相关的操作&#xff0c;对字幕的处理不做分析 下面我们对ffplay的相关数据结构进行分析&#xff0c;本章主要是对PacketQueue的讲解 struct MyAVPacketList和PacketQueue队列 ffp…...

JavaWeb学习|JSP相关内容

1.什么是JSP Java Server Pages: Java服务器端页面&#xff0c;也和Servlet一样&#xff0c;用于动态Web技术! 最大的特点: 。写JSP就像在写HTML 。区别: 。HTML只给用户提供静态的数据 。JSP页面中可以嵌入JAVA代码&#xff0c;为用户提供动态数据 JSP最终也会被转换成为一…...

Springboot后端通过路径映射获取本机图片资源

项目场景&#xff1a; 项目中对图片的处理与查看是必不可少的&#xff0c;本文将讲解如何通过项目路径来获取到本机电脑的图片资源 如图所示&#xff0c;在我的本机D盘的图片测试文件夹(文件夹名字不要有中文)下有一些图片&#xff0c; 我们要在浏览器上访问到这些图片&#…...

【IDEA + Spark 3.4.1 + sbt 1.9.3 + Spark MLlib 构建鸢尾花决策树分类预测模型】

决策树进行鸢尾花分类的案例 背景说明&#xff1a; 通过IDEA Spark 3.4.1 sbt 1.9.3 Spark MLlib 构建鸢尾花决策树分类预测模型&#xff0c;这是一个分类模型案例&#xff0c;通过该案例&#xff0c;可以快速了解Spark MLlib分类预测模型的使用方法。 依赖 ThisBuild /…...

亚马逊 EC2服务器下部署java环境

1. jdk 1.8 安装 1.1 下载jdk包 官网 Java Downloads | Oracle tar.gz 包 下载下来 1.2 本地连接 服务器 我用的是亚马逊的ec2 系统是 ubuntu 的 ssh工具是 Mobaxterm , 公有dns 创建实例时的秘钥 链接 Mobaxterm 因为使用的 ubuntu 所以登录的 名称 就是 ubuntu 然后 …...

CTF流量题解http1.pcapng

使用Wireshark工具打开流量文件http1.pcapng&#xff0c;如下图所示。 在过滤检索栏输入http&#xff0c;wireshark自动进行过滤。...

若依vue前端有全局用户信息变量吗

"若依"是一个基于SpringBoot和Vue的前后端分离的开源项目。在前端Vue部分&#xff0c;全局用户信息通常保存在Vuex中&#xff0c;Vuex是Vue.js的状态管理模式。它提供了一个集中式存储来管理所有组件的状态&#xff0c;并以相应的规则保证状态以一种可预测的方式发生…...

什么是Milvus

原文出处&#xff1a;https://www.yii666.com/blog/393941.html 什么是Milvus Milvus 是一款云原生向量数据库&#xff0c;它具备高可用、高性能、易拓展的特点&#xff0c;用于海量向量数据的实时召回。 Milvus 基于 FAISS、Annoy、HNSW 等向量搜索库构建&#xff0c;核心是…...

如何快速实现三菱FX3U程序的无线下载?

1.系统概述 三菱PLC FX3u可以使用专用下载线通过计算机串口下载程序&#xff0c;同样也可以使用自制下载线缆&#xff0c;连接无线模块 DTD435M进行远程无线下载程序&#xff0c;计算机端采用RS232或者RS485 将计算机端与无线模块连接&#xff0c;PLC端同样使用RS232转RS485将…...

Flink源码之RPC

Flink是一个典型的Master/Slave分布式实时处理系统&#xff0c;分布式系统组件之间必然涉及通信&#xff0c;也即RPC&#xff0c;以下图展示Flink组件之间的关系&#xff1a; RPCGateWay 一般RPC框架可根据用户业务类生成客户端和服务器端通信底层代码&#xff0c;此时只需定…...

【LeetCode 75】第二十四题(2390)从字符串中移除星号

目录 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 代码运行结果&#xff1a; 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 题目给我们一个字符串&#xff0c;然后字符串中包含星号*&#xff0c;要求每个星号消除一个从星号左边起最近的一个字符&#xf…...

通向架构师的道路之weblogic的集群与配置

一、Weblogic的集群 还记得我们在第五天教程中讲到的关于Tomcat的集群吗? 两个tomcat做node即tomcat1, tomcat2&#xff0c;使用Apache HttpServer做请求派发。 现在看看WebLogic的集群吧&#xff0c;其实也差不多。 区别在于&#xff1a; Tomcat的集群的实现为两个物理上…...

SpringBoot 项目创建与运行

一、Spring Boot 1、什么是Spring Boot&#xff1f;为什么要学 Spring Boot Spring 的诞生是为了简化 Java 程序的开发的&#xff0c;而 Spring Boot 的诞生是为了简化 Spring 程序开发的。 Spring Boot 翻译一下就是 Spring 脚手架 盖房子的这个架子就是脚手架&#xff0c;…...

别再为S7-200smart子程序里的定时器发愁了,试试这个BGN_ITIME的替代方案

S7-200smart子程序定时器难题的工程级解决方案 在工业自动化项目中&#xff0c;S7-200smart PLC因其性价比优势被广泛使用。但许多工程师在开发带参数子程序时&#xff0c;都会遇到一个令人头疼的限制——无法直接使用定时器指令。这个看似简单的功能缺失&#xff0c;往往导致…...

智慧机场三维空间智能中枢系统白皮书——构建“全域感知 × 空间认知 × 智能调度”的下一代机场操作平台

智慧机场三维空间智能中枢系统白皮书——构建“全域感知 空间认知 智能调度”的下一代机场操作平台&#xff08;镜像视界&#xff08;浙江&#xff09;科技有限公司空间计算技术体系支撑&#xff09;一、项目背景&#xff1a;机场正在进入“复杂系统时代”现代机场已从单一交…...

如何快速配置Obsidian个性化首页:从零开始的完整指南

如何快速配置Obsidian个性化首页&#xff1a;从零开始的完整指南 【免费下载链接】obsidian-homepage Obsidian homepage - Minimal and aesthetic template (with my unique features) 项目地址: https://gitcode.com/gh_mirrors/obs/obsidian-homepage 你是否每天打开…...

模板号:每一家创业公司都应该有企业官网

模板号(mobanhao.com)&#xff1a;让每一家创业公司都能轻松拥有专业官网品牌定位&#xff1a;专注WordPress模板建站&#xff0c;服务创业型企业的数字化伙伴模板号(mobanhao.com)是一家专注于WordPress模板网站搭建的专业服务机构&#xff0c;总部位于中国改革开放的前沿阵地…...

BaiduPCS-Web完全指南:彻底告别百度网盘限速的终极解决方案

BaiduPCS-Web完全指南&#xff1a;彻底告别百度网盘限速的终极解决方案 【免费下载链接】baidupcs-web 项目地址: https://gitcode.com/gh_mirrors/ba/baidupcs-web 还在为百度网盘令人绝望的下载速度而烦恼吗&#xff1f;当你急需下载重要文件时&#xff0c;几十KB/s的…...

基于信息流的移动智能终端隐私保护关键技术研究(中期检查报告)

一、基本情况论文题目 基于信息流的移动智能终端隐私保护关键技术研究 √ 课题进展情况 本课题按开题报告所预定的内容及进度顺利进行,课题进展情况正常。目前已经在开题文献阅读的基础上,对Android隐私保护与信息流分析技术进行了深入研究,挖掘出了信息流分析技术应用于…...

HTML5语义化元素完全解析:提升SEO与可访问性的最佳实践

HTML5语义化元素完全解析&#xff1a;提升SEO与可访问性的最佳实践 【免费下载链接】awesome-html5 :memo: A curated list of awesome HTML5 resources 项目地址: https://gitcode.com/gh_mirrors/aw/awesome-html5 HTML5语义化元素是现代Web开发的核心技术&#xff0c…...

开源工具猫抓:破解资源嗅探难题的全面指南

开源工具猫抓&#xff1a;破解资源嗅探难题的全面指南 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 为什么90%的用户都无法充分发挥浏览器资源嗅…...

Jenkins页面加载慢到怀疑人生?别急着重启,先检查这个Dark Theme插件

Jenkins页面加载缓慢的深度排查&#xff1a;从Dark Theme插件到系统优化 最近在虚拟机环境中使用Jenkins时&#xff0c;突然发现页面加载速度从原先的1秒内变成了10秒以上。这种变化并非渐进式的&#xff0c;而是某天突然出现的。页面功能一切正常&#xff0c;但每次跳转都需要…...

e1547:如何构建高效的内容过滤与社区浏览体验

e1547&#xff1a;如何构建高效的内容过滤与社区浏览体验 【免费下载链接】e1547 A sophisticated e621 browser 项目地址: https://gitcode.com/gh_mirrors/e1/e1547 在当今数字内容爆炸的时代&#xff0c;用户面临着信息过载的挑战&#xff0c;尤其是在兴趣社区中&…...