自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

AI.PLAY

关注图像处理和机器学习

  • 博客(378)
  • 资源 (1)
  • 收藏
  • 关注

原创 Qt 设置隐式加载dll路径

我们对动态库的调用,是在代码中直接使用LoadLibrary,或其他加载函数,直接对dll或so进行加载,然后解析文件中的函数符号,并调用该函数。这种链接方式,称之为显式链接。从上述描述可以分析,隐式加载是不能从手动指定的位置进行加载的。但除了上述两种方式,还有一种延迟加载,可以融合隐式加载的便捷性和显式加载的位置灵活性。在程序从开始运行时,就会按照系统中一定的搜索路径,寻找动态库,找到就自动加载它,才能成功运行程序,这些步骤,是系统自动完成的。在c++中DLL的加载方式有两种,显式加载和隐式加载。

2024-02-24 12:50:48 251

原创 Cartographer 构建约束优化问题

第二种坐标变换: 再分别计算这2个节点的时间在里程计数据队列中插值得到的2个里程计位姿, 计算这2个里程计位姿间的坐标变换。节点与节点间在global坐标系下的相对坐标变换 与 相邻2个节点在local坐标系下的相对坐标变换的差值作为残差项。节点与gps坐标系原点在global坐标系下的相对坐标变换与通过gps数据进行插值得到的相对坐标变换的差值作为残差项。节点与节点间在global坐标系下的相对坐标变换与通过里程计数据插值出的相对坐标变换 的差值作为残差项。

2024-02-24 11:28:40 326

原创 Cartographer 多分辨率地图和分支定界算法

假设原始栅格地图尺寸为[h, w],经过width的滑动窗口处理后,将采样后地图尺寸变为[h+width-1, w+width-1]。的操作,核B与图形卷积,即计算核B覆盖的区域的像素点的最大值,并把这个最大值赋值给参考点指定的像素。这个图直接让我想起了图像处理中的膨胀操作。滑窗操作会导致地图变大。

2024-02-24 11:25:21 204

原创 Cartographer 位姿推测器

做法是根据位姿队列中最后一个位姿乘以上次添加位姿时的姿态预测到time时刻的姿态变化量,得到预测的最新里程计数据时刻 tracking frame 在 local 坐标系下的姿态,首先是根据加入的pose,单独计算出线速度和角速度linear_velocity_from_poses_,angular_velocity_from_poses_。所谓裁剪,就是丢弃过时的IMU数据,并保持保持imu队列中第二个数据的时间要大于最后一个位姿的时间, imu_date_最少是1个。

2024-02-24 11:20:30 403

原创 Cartographer 栅格地图更新

在本段中,使用了公式进行了栅格概率的更新,无非就是使用上一时刻的空闲概率[0, 1~32768],结合当前的hit概率,得到当前的空闲概率[0, 1~32768],hit的概率是固定值(0.55),那么就可以建立一张表,当上一时刻的空间概率为[0, 1~32768]任意值时,能快速查到到当前空闲概率。这两张表也称概率更新表,概率更新表存储着更新后的值,而对应该行的索引就是更新前的值。当上一状态为已知时,定义上一时刻的栅格空闲概率为M_old[0, 0.1~0.9],栅格的概率更新公式如下。

2024-02-22 21:31:42 509

原创 Cartographer 基于ceres的扫描匹配

如果不调用correlative_scan_matching,target_translation和initial_pose_estimate是一样的correlative_scan_matching 目的是对先验位姿进行校准,先验位姿来自于位姿推测器。问题:如果不使用correlative_scan_matching,那么ceres里面的残差不就为0了?那还怎么优化,其实相当于只使用了地图的残差???

2024-02-22 20:28:40 263 1

原创 Cartographer框架简述

后端主要实现的是位姿图优化。根据global坐标计算初值,然后通过分支丁界算法粗匹配与ceres的精匹配,获取校准后的位姿,最后计算local坐标系下,子图原点指向校准后的节点间的坐标变换。利用pose,以及传入的里程计,imu数据计算出线速度和角速度,不同的情况选择参与运算的传感器不同。图中,三角表示子图,圆圈表示节点,由于传感器的一次扫描数据可能插入到多个不同的子图,所以同一个节点可能和多个子图之间存在一定的匹配关系。关键帧指的是子图关键帧,而子图是由连续的若干个激光关键帧拼接到一起形成的子地图。

2024-02-22 20:20:26 553

原创 ORB-SLAM 相机小孔成像模型

2024-02-18 22:23:15 110

原创 QObject 的拷贝构造和赋值操作

我们都知道Qt对标准C++增加了一些功能:signals, slots, object properties, events, event filters, string translation, timers,object trees, guarded pointers, dynamic cast.QObject中没有提供一个拷贝构造函数和赋值操作符给外界使用,其实拷贝构造和赋值的操作都是已经声明了的,但是它们被使用了Q_DISABLE_COPY () 宏放在了private区域。

2024-02-16 18:06:16 75

原创 ORB-SLAM PnP求解

输入:世界坐标系下的n个3D点坐标以及与之对应的 2D 像点坐标、相机内参K。输出:恢复影像的位姿R和t。

2024-02-16 17:38:17 203

原创 ORB-SLAM 三角化

特征点三角化(Triangulation)是是双目视觉中一个基础算法,也是VSLAM中一个非常基础的问题,它是根据特征点在多个相机下的投影恢复出特征点的3D坐标。使用SVD求解方程组。

2024-02-16 15:35:08 196

原创 G2O优化构建

一元边只需要设置一个顶点,二元边需要设置两个顶点。这一步设置的顶点,需要跟上一步添加的顶点一一对应起来,边添加完成后,顶点和边会构成一个图。其中linearizeOplus()函数为计算雅各比矩阵的函数,对于非线性优化问题,雅各比矩阵的自动求导可以提高优化的速度。在添加顶点的时候,会设置一个初始估计值,后续的误差计算会拿出顶点的当前估计值参与运算。添加顶点的时候,每个顶点为设置一个ID,在添加边的时候可以使用ID来查找顶点。构建G2O优化是一种图优化,所以需要准备顶点和边。边有一元边,二元边和多元边,

2024-02-15 15:34:09 252

原创 奇异值分解(SVD)

对于一个方阵而言,采用的是特征分解,参考《

2024-02-15 11:22:53 211

原创 矩阵特征值分解(EVD)

关于求解特征值和特征向量参考《

2024-02-14 21:10:29 169

原创 特征值和特征向量

2024-02-14 18:12:53 116

原创 const修饰指针的三种效果,C语言const修饰指针详解

前面讲过,当一个变量用 const 修饰后就不允许改变它的值了。那么如果在定义指针变量的时候用 const 修饰会怎样?同样必须要在定义的时候进行初始化。当用 const 进行修饰时,根据 const 位置的不同有三种效果。原则是:修饰谁,谁的内容就不可变,其他的都可变。这三种情况在面试的时候几乎是必考的,在实际编程中也是经常使用的,所以初学者一定要掌握。

2023-12-16 22:00:17 78

原创 Python 构造函数重载

在Python中,初始化方法的名称固定为__init__,可以通过在方法名称后加数字来区分不同的初始化方法,相当于c++中构造函数的重载。

2023-11-30 21:31:38 214

原创 python 重定向输出到控件

【代码】python 重定向输出到控件。

2023-11-28 21:23:26 144 1

原创 QDebug() 重定向打印文件名和行号

【代码】QDebug() 重定向打印文件名和行号。

2023-11-26 21:12:19 102

原创 QGraphicsItem hover事件不响应的问题

问题在于QGraphicsItem的父控件的mouseMoveEvent事件里面没有加。本来不想记录这个问题,也是很简单的,但也找了两天。长个记性吧,下次注意考虑这里。都设置了,还是不行。将事件下发到子控件。

2023-09-14 22:39:45 280

原创 IMU 互补滤波

这个误差指的是两个向量的不平行程度,和夹角的正弦成正比,叉乘=a*b*sin(角度),二两个向量又归一化了,所以就和sin(角度成正比),进而反应了陀螺仪估计的姿态和加速度计测量的姿态误差。而单位向量的向量叉积在物理意义上在小角度意义就是轴角,轴角本身就刻画了旋转,也就是叉乘的结果可以看成是旋转误差,在这个物理意义下比任何误差表示都要合理和切合实际系统。在使用一个算法之前首先要弄清楚数据数据的单位是什么,在互补滤波算法中,角速度的单位是“弧度每秒”,加速度是数据是归一化后的数据,无单位。

2023-07-02 10:50:35 613

原创 ROS 编码器转Odom

所产生的脉冲数为 total_num = cylinder_num * linesNum * 2。那么小车原地旋转一周的走过的路径为pi * whell_dist,小车的姿态变化为360度。所以对应小车姿态变化一度为total_num / 360。linesNum为一圈的脉冲数=变比*脉冲数。假设 轮子的周长为circumference。Circumference 为轮周长。将移动距离转换到车体坐标系。从车体坐标系转到世界坐标系。轮距为whell_dist。

2023-07-02 10:44:38 376

原创 ROS Python实现ROS节点

3. 在scripts文件下新建python文件 test.py。格式 rosrun pkg_name ***.py。2. 在工作包目录下新建scripts文件夹。1. 在工作空间的src目录下新建工作包。4. 配置CMakeList.txt。

2023-05-10 22:09:40 836 1

原创 一维峰值查找算法find_peaks

支持峰值最小间距过滤。

2023-05-06 23:37:34 313

原创 Python 利用反射创建实例

【代码】Python 利用反射创建实例。

2023-04-24 20:52:39 237

原创 Python 枚举

【代码】Python 枚举。

2023-04-15 19:55:52 66

原创 Python函数参数中的冒号与箭头

函数参数中的冒号与箭头是参数的类型建议符,告诉程序员希望传入和返回的参数类型。类型建议符并非强制,实际与建议不符的话也不会报错。

2023-04-13 22:48:47 319

原创 pyqt 实现属性反射

【代码】pyqt 实现属性反射。

2023-04-13 21:35:12 106

原创 Python 实现虚函数

继承自该抽象基类的子类必须实现所有的抽象方法,否则将无法实例化(实例化时抛出TypeError异常)。import抽象基类模块abc,

2023-04-13 21:11:19 372

原创 ROS:里程计

里程计的消息类型是nav_msgs/Odometry里面主要包含两个内容,一个是pose,一个是twist。

2022-08-30 22:25:51 1385

原创 QT:反射机制

QT 反射机制

2022-08-07 19:59:40 391

原创 C++ 常量表达式

C++ 常量表达式

2022-07-28 21:24:10 743

原创 C++ explict 关键字

C++ explict 关键字

2022-07-28 21:19:35 245

原创 C++ extern关键字

C++ 全局变量

2022-07-23 10:17:34 464

原创 ROS 录制与回放数据

Bag录制录制所有话题Rosbag record -a录制指定话题rosbag record ...指定数据包名称rosbag record -O ...指定数据包保存路径rosbag record -o 查看bag信息rosbag info 回放数据rosbag play

2022-06-16 09:01:16 342

原创 QT:非阻塞延迟

QT:非阻塞延迟

2022-06-04 10:36:02 537

原创 全局平均池化Global Average Pooling

实现假设最终分为n类,那么最后一层卷积层的输出channnel应该为10,全局平均池化对这10个feature map,累加取平均,得到十个数字,将10个数字送入softmax,得到10个概率。优点GAP直接赋予了最后一层feature map实际的类别意义;大大减少了参数量;减少由于全连接层过多的参数造成的过拟合;...

2022-03-09 21:57:56 583

原创 Shufflenet

设计思路分组卷积在MobileNet系列博客里面解释的比较清楚了,针对分组卷积里Group之间信息不关联的问题,MobileNet 采用的是point-wise convolution,使用了较多的1*1的卷积核,计算量较大。ShuffleNet另辟蹊径,采用了channel shuffle(通道洗牌)方法,其含义就是对group convolution之后的特征图进行“重组”,这样可以保证接下了采用的group convolution其输入来自不同的组,因此信息可以在不同组之间流转。Shu

2022-03-09 21:55:39 204

原创 Linux 环境变量

Linux 中有三个环境变量是在编译和运行程序中经常用到的。PATH, LIBRARY_PATH,和LD_LIBRARY_PATHPATH 用于可执行程序的查找路径,一般指向***/bin路径。LIBRARY_PATH和LD_LIBRARY_PATH都是用于查找动态链接库,区别在于LIBRARY_PATH用于在程序编译期间查找动态链接库时指定查找共享库的路径,LD_LIBRARY_PATH用于在程序加载运行期间查找动态链接库时指定除了系统默认路径之外的其他路径查看环境变量echo ...

2022-03-03 20:05:12 183

原创 QT 创建dump崩溃日志

QT工程生成dump文件和pdb文件#include "mainwindow.h"#include <QApplication>#include <Windows.h>#include <DbgHelp.h>#include <QTime>#include <QMessageBox>LONG ApplicationCrashHandler(EXCEPTION_POINTERS *pException){ HAN..

2022-02-09 10:01:01 1018

一种基于VSLAM的室内导航地图制备方法.pdf

关于使用视觉导航制作二维栅格地图,关于使用视觉导航制作二维栅格地图。

2019-08-29

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除