十一、SLAM学习笔记—— Cartographer & Cairo

【cartographer without ros】一、不带Ros的快速安装 使用Cartographer有Ros集成环境和无Ros环境,可以使用ROS集成快速入门,但是在实际开发使用中,可能由于硬件或者其他因素影响,需要脱离Ros环境使用Cartographer。 阅读详情

        在Cartographer_ros中,cartographer较多的用到了cairo库进行二维图像的渲染操作,尤其是将多张子图绘制在大地图的时候。 

Cairo's compositing operatorsicon-default.png?t=M276https://www.cairographics.org/operators/Cairo's compositing operators
Cairo's compositing operatorsicon-default.png?t=M276https://www.cairographics.org/operators/ 

CAIRO_OPERATOR_SOURCE

描述:直接覆盖,灰色部分属于背景。红色是原始图像,蓝色是新绘制的图像。上述的OPERATOR属于直接覆盖操作。

alpha_{dist} = alpah_{new} \\ color_{dist} = color_{new}

CAIRO_OPERATOR_OVER —— Cairo默认操作符

描述:图像按照透明度混合,这个是cairo默认的操作类型。效果如下所示:

数学原理如下所示:

aA + aB·(1−aA)(xaA + xaB·(1−aA))/aR

alpha_{dist} = alpha_{new} + alpha_{origin} * (1 - alpha_{new}) \\ color_{dist} = (color_{new} +color_{origin}*(1-alpha_{new})) / alpha_{dist} \\ 

合并写为像素之间的关系:

color_{dist} = \frac{(color_{new} +color_{origin}*(1-alpha_{new})) } {alpha_{new} + alpha_{origin} * (1 - alpha_{new}) } 

 从上述公式可以得出推论:

 1. 当新绘制的图像透明度为1的时候,alpha_dist  = 1, alpha_new = 1, 从而

color_dist = color_new

     此时,CAIRO_OPERATOR_OVER 退化为CAIRO_OPERATOR_SOURCE

 2. 当原图像透明度为1,新图像透明度为0.5时, alpha_dist = 1, 从而

color_dist = color_new + color_origin * 0.5

别再只盯着代码了!手把手教你读懂Cartographer的PGM和YAML地图文件(附Notepad++查看技巧) 本文深入解析Cartographer的PGM和YAML地图文件,揭示其设计哲学与实战调参技巧。通过Notepad++查看技巧和参数详解,帮助开发者理解地图文件的二进制结构、坐标系转换及阈值调整对导航行为的影响,提升SLAM建图与导航效率。 阅读详情

相关推荐

cartographer安装教程(超详细,保姆级教程)

cartographyer安装

m0_45805756的博客 2万+

【cartographer without ros】二、使用cartographer的思路和大纲

本节分析以下在无Ros的环境,应该怎样使用cartographer。

Cloud_H的博客 882

【cartographer without ros】十丶脱离ros的cartographer简单小结

上一节介绍了cartographer的到arm的交叉编译。这节对脱离ros环境使用cartographer的系列文章和开发思路做一个简单小结。

Cloud_H的博客 734

00 cartographer_ros入门

cartographer的分析

qq_44178391的博客 2604

(02)Cartographer源码无死角解析-(81) ROS栅格地图→服务接收子图、cairo图像绘详解、OccupancyGrid地图发布

疑问1疑问1src/cartographer/cartographer/mapping/2d/probability_grid.cc 文件中的 ProbabilityGrid::DrawToSubmapTexture 函数的 proto::SubmapQuery::Response::SubmapTexture* 示例对象 texture 中texture->mutable_slice_pose() 的含义具体是什么。

江南才尽江南山,年少无知年少狂! 1927

去ros所需的工作总结

1.cartographer去ros Cartographer是谷歌开源的一个slam框架,他各个模块独立性很强, 代码鲁棒性非常高, 很少出现莫名崩掉的情况, 而且编写的架构很好。所以大部分做单线激光slam的公司都会用他的代码进行借鉴和修改。所以我的打算也是在cartographer基础上进行建图和定位的功能开发。 Cartographer其实本身是独立的,不依赖于ros,但是数据的流转等这些功能需要有接口完成这些功能,cartographer_ros 就是cartographer和ros的一个桥梁

Studying…… 1047

cairo学习

cairo学习1. 合成运算符1.1 Example images1.1.1 The Destination1.1.2 Setting the compositing operator1.2 Operaters1.2.1 CAIRO_OPERATOR_CLEAR1.2.2 CAIRO_OPERATOR_SOURCE1.2.3 CAIRO_OPERATOR_OVER1.2.4 CAIRO_OPERA...

xiaoma_bk的博客 1330

【ROS2】cartographer_ros源码分析03:occupancy_grid_node

绘制地图map比较耗时,没有在 cartographer::Node 中,而是单独放在 occupancy_grid_node 中;map源码位置。

郭老二 47

Cairo图形指南(7)

合成合成 (Compositing) 可以将一些单独的源 (source)所生成可视元素组合成到单幅图像中去,主要用于创建所有的可视元素作为同一场景的一部分这样一种假象。合成在电影工业中被广为使用,用于创建人群、不寻常的世界等画面,因为这样的画面在现实中的制作代价非常昂贵甚至难以实现。Cairo 图形库提供了 14 种不同的合成操作。#include #includ

shenbin1430的专栏 2018

cartographer去ros

保持cartographer_ros原封不动,对ros进行改造,使原来的ros变成一个"fake ros",首先把ros"多余"的部分清空,变成空循环,优化程序执行效率,然后再把ros的数据接口、定时器、rosbag等所有重要原始.c文件都打包起来把他们放在一起编译,最后把数据像原来ros的方式"喂"给cartographer_ros并加入ros_bridge,这样既不会丢失输入、输出原始ros的格式,也可以实现所有cartographer_ros的功能。我认为的去ros需要做的工作。

Studying…… 407

从TL431光耦到集成隔离器:3种反激电源反馈方案全对比,你的项目到底该选哪个?

本文深入对比了反激电源设计中TL431光耦、集成隔离器和原边反馈三种主流反馈方案的优缺点,帮助开发者在电源设计中选择最适合的方案。从精度、成本、隔离等级等多维度分析,为反激式(Flyback)拓扑的应用提供实用选型指南。

weixin_30536513的博客 399

识别环境退化

作个记录,后面会有用: cartographer识别退化环境 - 知乎

z15f34的博客 352

CSP-J 复试考点

可以用来训练思维,对于学习时间短的同学,动态规划可以帮助你迅速进入编程状态,也有助于帮你发现题目背后可能隐藏的更简便的算法。动态规划、贪心都是和子问题相关的,动态规划的基本思想是将一个大的问题划分成子问题,接着分别求解,而且能够将一些重复的计算记忆化,大大提高效率。难度加大,会涉及到二分、动态规划之类的算法,容易遗漏考虑点,不易得全分,考试的时候要注意全面性。一般是压轴题,算法不明显,剪枝的搜索、动态规划、状压 DP、树形 DP 、树、图等。枚举算法是指,列举出所有可能的取值,从中找出最优解。

GuanHeTian的博客 2214

Cartographer源码阅读2D&3D-PGM生成及地图发布

Cartographer源码阅读2D&3D-PGM生成及地图发布 pgm生成 cartographer提供了pbstream转pgm的service,当然,也可以改写相关函数,直接从cartographer的后端取出数据生成pgm,但是需要修改相关代码。将pbstream转为pgm的节点在pbstream_to_ros_map_main.cc文件里实现。主要函数为: void Run(const std::string& pbstream_filename, const std::strin

yeluohanchan的博客 2664

华为OD新系统机试真题 - 获取大写字母瓷砖拼出独特图案数量

华为OD机试新系统真题【获取大写字母瓷砖拼出独特图案数量】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD新系统四月二十九号机试真题【获取大写字母瓷砖拼出独特图案数量】

qq_45776114的博客 1218

dToF直方图之美_deadtime死区时间

IMX459的死区时间可以在6ns,这个时间是什么级别,车载激光雷达激光器的光脉宽一般都在4ns以上,也就是这个时间贴近去SPAD的死区时间,这就导致了pile up会非常弱,不会有太多数量的光子计数堆积,加上某些SPAD设计,对TDC有一些更深入的考量,所以不需要去校正pile up算法。Sensor层面决定了pile up的复杂程度,如果一个dToF的SPAD一致性非常好,那么pile up校正可以简单到极致,也就是一句代码的事,比如IMX611,优秀到不需要后端去考虑校正pile up。

致力于lidar应用开发 2147

Cairo2D图形库

Cairo 是一个支持多输出的 2D 图形库 设备。当前支持的输出目标包括 X 窗口系统(通过 Xlib 和 XCB)、Quartz、Win32、图像缓冲区、 PostScript、PDF 和 SVG 文件输出。Cairo 旨在在所有输出介质上产生一致的输出同时利用显示硬件加速(如果可用) (例如,通过 X 渲染扩展)。cairo API 提供与绘图类似的操作 PostScript 和 PDF 的运算符。在开罗的业务包括 抚摸和填充立方贝塞尔样条曲线,变换和 合成半透明图像和抗锯齿文本渲染。

weixin_57242378的博客 2970

RK3568 上C图像camera图像采集应用实例(二)

本文探索rk3568上实现C语言的 通过C v4l2 接口 采集图像 ,刷屏控制 drm的显示camera图像中 实现camera preview 预览 的实践和探索。

luoshanxuli2010的专栏 758

PyGobject(九十三)Cairo系列——简介&简单示例

Cairo 安装 Cairo在PyGobject中的使用 简单示例 Cairo Cario是一个2D图形库,支持多种输出设备。 目前支持的输出目标包括X Window,Quartz,Win32,image.buffers,PostScript,PDF和SVG文件输出。 后续支持OpenGL,XCB,BeOS,OS/2操作系统和DirectFB。 Cario的目的是同一输出在不同

Yu的专栏 4555

16、Arduino MEGA 2560 固件与电路详解

本文详细介绍了Arduino MEGA 2560的固件编程与电路设计,涵盖ATmega16U2和ATmega2560的熔丝配置、stk500v2引导加载程序的备份与恢复方法、使用Microchip Studio通过ICSP烧录固件的步骤,以及debugWIRE和JTAG调试接口的选择与配置。同时提供了电路块图解析、组件位置参考及常见问题解决方案,帮助用户深入理解硬件结构并进行高效开发与调试。

swift5iosmith的博客 193

elevation mapping算法3之使用D435i相机离线或在线订阅点云和tf关系生成高程图

本文主要学习使用D435i相机发出的点云作为高程图的点云输入,如何离线输入点云生成高程图,进一步学习如何在线订阅点云生成高程图。

重点记录机器人和自动驾驶相关领域的技术,尤其是计算机视觉,视觉SLAM等,不仅有前言文献或必备算法的学习,也会有实际应用的点滴经验 3488

python gtk页面布局_如何制作gtk布局透明膜

别害怕那个大班——我写这本书很有意思,这样它就可以普遍适用了。它可以是透明元素的父类,而不是父类。所以,麻烦。它可以使主gtk.窗口,的gtk.事件框如下例所示,以及其他gtk.widgets工具,但不适用于gtk布局,请帮帮我。我想我写的已经足够了。对不起,我的英语:)#!/usr/bin/env python# -*- coding: utf-8 -*-import gtkimport cai...

weixin_42364855的博客 154

DeepSmote:一种深度SMOTE方法

DeepSmote 一种全新的将深度学习与Smote相结合的过采样方法! 目前在许多领域已经被使用,值得大家关注学习!

走在深度学习前沿的小宋 1445

c++ operator(重载操作符)

operator是C++的关键字,它和运算符一起使用,表示一个运算符函数,理解时应将operator整体上视为一个函数名。      这是C++扩展运算符功能的方法,虽然样子古怪,但也可以理解:一方面要使运算符的使用方法与其原来一致,另一方面扩展其功能只能通过函数的方式(c++中,“功能”都是由函数实现的)。    一、为什么使用操作符重载? 对于系统的所有操作符,一般情况下,只支持基本

tutb12345的专栏 2728

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

cario库

cario

师从小白 1237

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Cartographer总结

SLAM、Cartographer

Naive_Code的博客 512

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

上一篇: 十一、SLAM学习笔记—— Cartographer & OccupancyGrid
下一篇: Python库使用笔记—Numpy
log_zhan
博客等级 码龄14年 90粉丝 27原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值