利用g2o实现简单BA-视觉SLAM十四讲学习笔记_g2o lambda chi-程序员宅基地

技术标签: g2o  

参考高博博客,见此网址:
https://www.cnblogs.com/gaoxiang12/p/5304272.html
实验中选取的结点和边如下:
结点1:相机位姿结点:g2o::VertexSE3Expmap,来自<g2o/types/sba/types_six_dof_expmap.h>;
结点2:特征点空间坐标结点:g2o::VertexSBAPointXYZ,来自<g2o/types/sba/types_sba.h>;
边:重投影误差:g2o::EdgeProjectXYZ2UV,来自<g2o/types/sba/types_six_dof_expmap.h>;

查看g2o中节点与边的定义,方便理解与加深印象。程序的源码如下:

/**
 * BA Example 
 * Author: Xiang Gao
 * Date: 2016.3
 * Email: [email protected]
 * 
 * 在这个程序中,我们读取两张图像,进行特征匹配。然后根据匹配得到的特征,计算相机运动以及特征点的位置。这是一个典型的Bundle Adjustment,我们用g2o进行优化。
 */

// for std
#include <iostream>
// for opencv 
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/features2d/features2d.hpp>
#include <boost/concept_check.hpp>
// for g2o
#include <g2o/core/sparse_optimizer.h>
#include <g2o/core/block_solver.h>
#include <g2o/core/robust_kernel.h>
#include <g2o/core/robust_kernel_impl.h>
#include <g2o/core/optimization_algorithm_levenberg.h>
#include <g2o/solvers/cholmod/linear_solver_cholmod.h>
#include <g2o/types/slam3d/se3quat.h>
#include <g2o/types/sba/types_six_dof_expmap.h>


using namespace std;

// 寻找两个图像中的对应点,像素坐标系
// 输入:img1, img2 两张图像
// 输出:points1, points2, 两组对应的2D点
int     findCorrespondingPoints( const cv::Mat& img1, const cv::Mat& img2, vector<cv::Point2f>& points1, vector<cv::Point2f>& points2 );

// 相机内参
double cx = 325.5;
double cy = 253.5;
double fx = 518.0;
double fy = 519.0;

int main( int argc, char** argv )
{
    // 调用格式:命令 [第一个图] [第二个图]
    if (argc != 3)
    {
        cout<<"Usage: ba_example img1, img2"<<endl;
        exit(1);
    }
    
    // 读取图像
    cv::Mat img1 = cv::imread( argv[1] ); 
    cv::Mat img2 = cv::imread( argv[2] ); 
    
    // 找到对应点
    vector<cv::Point2f> pts1, pts2;
    if ( findCorrespondingPoints( img1, img2, pts1, pts2 ) == false )
    {
        cout<<"匹配点不够!"<<endl;
        return 0;
    }
    cout<<"找到了"<<pts1.size()<<"组对应特征点。"<<endl;
    // 构造g2o中的图
    // 先构造求解器
    g2o::SparseOptimizer    optimizer;
    // 使用Ch
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44095441/article/details/85719261

智能推荐

如何查看cudnn当前版本_Linux上查看已安装的CUDA和cuDNN版本号-程序员宅基地

文章浏览阅读3.9k次,点赞3次,收藏7次。做AI开发时,经常需要用到github上的各种代码,但是这些代码可能需要不同版本的AI开发框架和不同版本的CUDA、cuDNN才能跑通,于是我们的机器上可能要安装多个版本的CUDA和cuDNN,那么如何查看当前机器上已安装的CUDA和cuDNN呢?1. 查看CUDA版本cuda默认安装在/usr/local目录,可以使用ls -l /usr/local | grep cuda查看该目录下有哪些cu..._linux cudnn查看版本 csdn

python实现ElGamal算法_实现elgamal签名算法,并测试签名算法和验证算法的时间开销python代码-程序员宅基地

文章浏览阅读504次,点赞14次,收藏5次。ElGamal公钥密码算法是在密码协议中有着重要应用的一类公钥密码算法,基于公钥密码体制和椭圆曲线加密体系,其安全性是基于有限域上离散对数学问题的难解性。至今仍是一个安全性良好的公钥密码算法。Alice和Bob生成各自的密钥,并交换彼此的公钥(p,g,y),Alice和Bob之间约定签署的消息m(20240301),Alice签署消息m,将三元组(m,r,s)发给Bob,Bob验证签名。这种数据或变换允许数据单元的接收者用以确认数据单元的来源和数据单元的完整性并保护数据,防止被人(例如接收者)进行伪造。_实现elgamal签名算法,并测试签名算法和验证算法的时间开销python代码

【解决】React setState延迟delay导致数据更新不及时,代码无法正确执行-程序员宅基地

文章浏览阅读7.2k次。之前React setState后在另一个函数调用state的值没有更新: // init state.type = 'new';activeMenu(type) { // type = top if (type == this.state.type) return; this.loadList(type);}loadList(type) { ..._react delay

常见的SQL优化面试题-程序员宅基地

文章浏览阅读6.4k次,点赞16次,收藏82次。1.在表中建立索引,优先考虑 where group by 使用到的字段2.查询时尽量避免使用select * ,只查询需要用到的字段3.避免在where子句中使用关键字两边都是%的模糊查询,尽量在关键字后使用模糊查询4.尽量避免在where子句中使用IN 和NOT IN优化:能使用between就不用in在子查询中使用exists 子句5.尽量避免使用or,优化:可以用union代替..._sql优化面试题

使用idea工具原型创建java项目以及web项目(Maven)_idea2023创建新项目有个原型是什么意思-程序员宅基地

文章浏览阅读813次。我们这个工程一定要进行Maven的配置具体的过程在下面的这篇文章中,只需要看前半部分就可以http://t.csdn.cn/ADnVy首先来看创建java 项目(哪里亮了点哪里)第一步:第二步:第三步: 记得勾选Create...然后选择我们选中的这个模板,点击next第四步:选择好文件的路径以及命名第五步:选择好Maven版本,已经仓库,这个我们在文章一开始的连接中有介绍,完成后点击Finish第六步:就会出......_idea2023创建新项目有个原型是什么意思

架构师聊的四层代理和七层代理,都在聊什么?_ttl七层代理-程序员宅基地

文章浏览阅读2.8k次,点赞3次,收藏13次。日常与大佬沟通或看文章,时不时总会遇到两个概念“四层代理负载均衡”和“七层代理负载均衡”,那么,所谓的四层代理和七层代理分别指的是什么?又在什么场景下用到呢?这篇文章就带大家聊聊这方面的知识点。OSI七层模型要聊几层代理,需要先看一下网络分层,在之前的文章中也提到,标准的七层网络分层,也就是OSI七层模型。TCP/IP五层模型和TCP/IP四层模型是从OSI七层优化而来。这里所谈的四层代理和七层代理,便是基于OSI七层模型来划分的。从下往上看,第四层为传输层、第七层为应用层。再来看看每层对应的常见_ttl七层代理

随便推点

latex 参考文献显示问号_LaTeX入门(1)-程序员宅基地

文章浏览阅读1.4k次。又是一年的论文季,作为数学系的秃鹫,只会用word排版论文是远远不够的,接下来我将这几天的学习收获分享给大家,也是对自己实战能力的一种考验,这篇文章基本不会告诉你们LaTeX和word相比的各种优势,大家可以参考网上的其他说法,我只会告诉你们,用LaTeX就完事了!LaTeX抛弃了word中传统的“所见即所得”的思想,它不注重文章的排版,样式,而是让作者更加专注于自己所写文章的内容、层次结构,而且..._latex插入参考文献后为问好

【毕业设计】基于SSM的OA办公管理系统的设计与实现 -java web_基于xx技术的某公司oa人事管理系统设计和实现-程序员宅基地

文章浏览阅读945次。Hi,同学们好呀,学长今天带大家复盘一个学长帮往届同学做的一个毕业作品基于Java web的OA系统的设计与实现办公自动化简称为OA(Office Automation)是集计算机科学、通讯技术、系统科学、行为科学为一体的综合性技术。现代的办公自动化系统采用的是Internet/Intranet技术,基于工作流的概念,使得企业内部的员工能够方便快捷地共享信息,高效地协同工作;改变传统复杂、低效的手工办公方式,以实现迅速、全方位的信息采集和信息处理,为企业的管理和决策提供科学的依据。_基于xx技术的某公司oa人事管理系统设计和实现

deepin/UOS自带浏览器安装插件_uos浏览器插件-程序员宅基地

文章浏览阅读2k次。deepin/UOS自带浏览器安装插件_uos浏览器插件

128.Django应用Celery_django celery-程序员宅基地

文章浏览阅读1.2k次。在Django中使用处理异步任务框架Celery_django celery

Win11策略服务被禁用怎么办?Win11策略服务被禁用的解决方法_根据策略禁用了文件传输-程序员宅基地

文章浏览阅读1.6k次。​相信很多小伙伴都喜欢到组策略服务器上去对电脑进行各种高级设置,不过最近一些使用Win11系统的小伙伴反馈说自己在的策略服务出现了被禁用情况,那么遇到这种问题应该怎么办呢?下面就和小编一起来看看策略服务被禁用的解决方法吧。还有详细的一键重装系统方法  1、首先使用键盘快捷键“Win+R”打开运行。  2、打开后输入“gpedit.msc”回车打开组策略。  3、打开后,进入左边“管理模板”下的“系统”。  4、再打开右边“系统还原”。  5、随后双击打开“关闭系统还原”。  6、最后将他设置为“已禁用”并确_根据策略禁用了文件传输

树莓派ROS stm32 slam Freertos VFH+A*避障路径规划-智能平衡计划(五)_rtos “slam”-程序员宅基地

文章浏览阅读1.2k次。基于树莓派ROSstm32搭载Freertos智能平衡车Day5前言1.引入库2.读入数据总结前言用超声波先避个障,日后改成激光雷达。# 一、GPIO配置需要配置一个定时器,一个外部中断(上升沿和下降沿都可以触发)给脉冲触发引脚(trig)输入一个长为20us的高电平方波输入方波后,模块会自动发射8个40KHz的声波,与此同时回波引脚(echo)端的电平会由0变为1;(此时应该启动定时器计时)3.当超声波返回被模块接收到时,回波引 脚端的电平会由1变为0;(此时应该停止定时器计数),_rtos “slam”

推荐文章

热门文章

相关标签