论文阅读A Multi-State Constraint Kalman Filter for Vision-aided Inertial Navigation
[MSCKF] A Multi-State Constraint Kalman Filter for Vision-aided Inertial Navigation
这篇06年的文章提出了一种新的建立几何约束的方式,将3D feature的位置信息从卡尔曼滤波中的观测模型中去除,从而减少计算复杂度。
Related works
the main limitation of SLAM is its high computational complexity; properly treating these correlations is computationally costly, and thus performing vision-based SLAM in environments with thousands of features remains a challenging problem.
该文章也采用了图像之间对极约束的方法[1][2],不同的是 MSCKF 可以在多个相机 pose 之间计算约束。
one fundamental difference is ...
C++工厂模式
C++工厂模式
本文代码demo开源:https://github.com/Ericsii/factory_pattern
最近设计RoboMaster机器人的通讯协议中,为了模块化协议开发模块打算使用工厂模式自动匹配处理不同数据帧的代码。
工厂模式
工厂模式个人理解,一个工厂对象(通常为单例)用于生成一系列不同的对象,这些生成的对象往往实现不同的业务。对应到我们的通讯协议的实现中,不同的帧解析对象去解析不同的数据帧。每新增一个自定义解析直接新增一个类而不需要对已有代码有侵入性修改;而且对于上层的使用者而言是感知不到不同的对象是如何被创建的。
具体实现
以下代码来自与即将开源的机器人算法框架
帧处理类设计
根据我们的需求,消息帧处理基类可以写成:
1234567891011121314151617181920// process_interface.hppclass ProcessInterface{public: using Packet = std::variant<rmoss_base::FixedPacket16, rmoss_base::Fi ...
[图像处理]图片的伸缩变换
[图像处理]图片的伸缩变换
要求
编写程序,从标准输入读取图片的四个坐标和 bmp 格式图片,将这四个坐标框出的四边形拉伸成 224*224 的正方形,显示,并以 bmp 格式输出到标准输出。
思路
给定图像的四个坐标 {xi,yi},(i=1,2,3,4)\{x_i,y_i\} ,(i=1,2,3,4){xi,yi},(i=1,2,3,4) 并且已知每个源坐标经变换后的对应坐标 {xi′,yi′},(i=1,2,3,4)\{ x'_i,y'_i \} ,(i=1,2,3,4){xi′,yi′},(i=1,2,3,4)
普通线性变换
想到的第一个方法,对源坐标进行线性变换
[a11a12a21a22][xy]=[x′y′]\begin{bmatrix} a_{11} & a_{12} \\ a_{21} & a_{22} \end{bmatrix}
\begin{bmatrix} x \\ y \end{bmatrix} =
\begin{bmatrix} x'\\ y' \end{bmatrix}[a11a ...
SLAM环境搭建
SLAM环境搭建
Ubuntu18.04 系统下,SLAM必要环境搭建
OpenCV,Eigen3,Sophus,PCL,Ceres,g2o
OpenCV 安装
安装依赖:
12sudo apt-get install build-essentialsudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
可选依赖项
1sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
编译安装OpenCV
下载OpenCV源码
方法1:
OpenCV官网下载对应版本OpenCV的源代码,博主使用的是3.4.8
可在Github上选择对应release版本下载。并下载对应版本的opencv_contrib,方法和之前一样。
方法2:
直接使用 ...
[机器学习] 感知机(Perceptron)&支持向量机(SVM)
感知机(Perceptron)
在特征空间中找到一个超平面w^Tx+b=0,使用该超平面将样本空间分割成两个部分,样本中属于这两个部分的点分别属于不同的正负两个类别。其中最为关键的部分应该为超平面的确定和优化。但是感知机对于线性不可分的样本并不能找到较好的决策面来分割样本,同时感知机所生成的超平面不一定是样本的最优分割。
决策面为:Wx+b=0Wx+b=0Wx+b=0
样本到决策面的距离:ri=WTxi+b∣∣w∣∣r_i=\frac{W^Tx_i+b}{\left|\left|w\right|\right|}ri=∣∣w∣∣WTxi+b
计算:略
支持向量机(SVM)
普通的SVM只对线性可分的数据集有比较好的结果,对于线性不可分的数据和普通的感知机一样也没有特别好的表现。同时经典的SVM只是一种二分类的方法,而实际环境中往往需要进行多分类,这时可以通过多个SVM组合来完成多分类,使用SVM决策树来解决问题。
SVM的original problem:
minw,b12∥w∥s.t. 1−yi(wxi + b) ≤ 0, i = 1,2...N\min\limits ...
[深度学习]pytorch实现简单线性回归
PS:本文中代码在jupyter中实现
前置工作
必要包含库
12345import torchfrom IPython import displayfrom matplotlib import pyplot as pltimport numpy as npimport random
生成随机数据集
12345678num_inputs = 2 # 样本维数num_examples = 1000 # 样本大小true_w = [2, -3.4] # 样本实际参数true_b = 4.2features = torch.tensor(np.random.normal(0, 1, (num_examples, num_inputs)), dtype=torch.float) # 生成特征值labels = true_w[0] * features[:, 0] + true_w[1] * features[:, 1] + true_b # 生成标签labels += torch.tensor(np.random.normal(0, 0.01, size=labels.size()), ...
[数值分析] python代码模板
数值分析课,作业中算法代码模板。已结课,之后随缘更新
仅供个人使用,转载请注明源地址。
更新日志:
2020.05.05 添加椭圆坐标生成函数、非线性方程求解方法
2020.06.15 添加A = LU分解和PA = LU分解方法
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164 ...
随机化算法
随机化算法在OI中的应用
好像之前有个论文就是这个标题不过无所谓了
又重新回来学了几天OI把之前看的模拟退火看了一下(可惜去年NOIP),又看了看网上dalao们的博客学习了一点遗传算法想来写一些东西。于是干脆把学过的两个随机算法都写一写
ps:模拟退火的笔记是以前写的
模拟退火
个人觉得模拟退火更适合在OI赛场上用(因为它短啊!!)
退火算法其实是一种随机化算法,拥有一个很稳定(玄学)的时间复杂度,取决于你所定的初温和降温次数(这两个之后会讲)
我们可以想象一桶水,我们把他从200°C逐渐降低到-100°C,这桶水中的水分子会渐渐从无序状态趋于稳定,等到整个桶结冰之后整个系统的状态就会稳定下来。模拟退火算法也是这样,对于程序我们每次会有一个初温,伴随着整个温度的降低每次取到的近似最优解也会趋于稳定,多次从高温降到低温后取得的近似最优解也就是最优解
实际上就是是运用了物理上的热力学的部分知识来解计算机中的问题
在热力学中的退火过程大致是变温物体缓慢降温而达到分子之间能量最低的状态。设热力学系统 SSS 中有有限个且离散的 nnn 个状态,状态 iii 的能量为 EiE_{i ...
[noip模拟赛] 礼物gift
[noip模拟赛] 礼物gift
Description
夏川的生日就要到了。作为夏川形式上的男朋友,季堂打算给夏川买一些生日礼物。
商店里一共有种礼物。夏川每得到一种礼物,就会获得相应喜悦值Wi(每种礼物的喜悦值不能重复获得)。
每次,店员会按照一定的概率Pi(或者不拿出礼物),将第i种礼物拿出来。
季堂每次都会将店员拿出来的礼物买下来。没有拿出来视为什么都没有买到,也算一次购买。
众所周知,白毛切开都是黑的。所以季堂希望最后夏川的喜悦值尽可能地高。
求夏川最后最大的喜悦值是多少,并求出使夏川得到这个喜悦值,季堂的期望购买次数。
Input
第一行,一个整数N,表示有N种礼物。
接下来N行,每行一个实数Pi和正整数Wi,表示第i种礼物被拿出来的概率和可以获得喜悦值。
Output
第一行,一个整数表示可以获得的最大喜悦值。
第二行,一个实数表示获得这个喜悦值的期望购买次数,保留3位小数。
Sample Input
3
0.1 2
0.2 5
0.3 7
Sample Output
14
12.167
HINT
对于10%的数据,N=1N=1N=1
对于30%的数据,N≤ ...
[BZOJ4872] [Shoi2017]分手是祝愿
[BZOJ4872] [Shoi2017]分手是祝愿
Description
Zeit und Raum trennen dich und mich.
时空将你我分开。B 君在玩一个游戏,这个游戏由 n 个灯和 n 个开关组成,给定这 n 个灯的初始状态,下标为从 1 到 n 的正整数。每个灯有两个状态亮和灭,我们用 1 来表示这个灯是亮的,用 0 表示这个灯是灭的,游戏的目标是使所有灯都灭掉。但是当操作第 i 个开关时,所有编号为 i 的约数(包括 1 和 i)的灯的状态都会被改变,即从亮变成灭,或者是从灭变成亮。
B 君发现这个游戏很难,于是想到了这样的一个策略,每次等概率随机操作一个开关,直到所有灯都灭掉。这个策略需要的操作次数很多, B 君想到这样的一个优化。如果当前局面,可以通过操作小于等于 k 个开关使所有灯都灭掉,那么他将不再随机,直接选择操作次数最小的操作方法(这个策略显然小于等于 k 步)操作这些开关。B 君想知道按照这个策略(也就是先随机操作,最后小于等于 k 步,使用操作次数最小的操作方法)的操作次数的期望。这个期望可能很大,但是 B 君发现这个期望乘以 ...