- 博客(158)
- 资源 (2)
- 收藏
- 关注

原创 【易懂教程】我是如何快速理解卡尔曼滤波Kalman Filter(KF)算法的(1)?
牛逼的算法往往都是来源于一个很简单的思想所演化而来,如果你不了解这个思想和演化过程那就谈不上了解那个牛逼的算法——@Ai酱直观理解首先卡尔曼滤波要解决的问题是什么?我以机器人估计自己离障碍物距离为例答:首先机器人已知“上个时刻机器人离障碍物距离”,“传感器测量的机器人离障碍物的距离(我们称它为观测值,比如雷达直接测量机器人离障碍物距离7m)”和“自己当前时刻的速度”这三个数据。而根据“上...
2019-08-01 14:50:54
3374
7

原创 【易懂教程】我是如何十分钟理解与推导贝叶斯滤波(Bayes Filter)算法?
像卡尔曼滤波(Kalman filters)、粒子滤波(Particle filters),隐含马尔科夫模型(Hidden Markov models),动态贝叶斯网络(Dynamic Bayesian networks)等等算法。这些算法都和贝叶斯滤波算法非常相似.因此学好了贝叶斯滤波再学其他算法那就容易很多了。破解概念上的束缚之贝叶斯滤波算法到底有什么用?学东西最烦的是看了半个月的算法细节...
2019-07-30 20:00:46
21066
34

原创 易懂如何理解单个神经元+随机梯度下降学习逻辑与规则编程实践
易懂的神经网络Python实战:单个神经元+随机梯度下降学习逻辑与规则目录逻辑与(AND)破除神经元的认知障碍实践:用程序表示一个手工设置权重weight和偏置bias的神经元那么怎么让计算机自己确定神经元的参数?梯度下降1。直观理解梯度下降2。梯度下降怎么做的?4。梯度下降有啥用?实践:动手实现随机梯度下降(根据上面的那个伪代码)AI韬鸽的笔记专栏中《...
2019-04-26 16:30:31
12741
1
原创 什么是大端(Big Endian)?什么是小端?为何需要这样设计?
存储的单元是字节,网络传输的单元也是字节。大小端是针对字节流中某个字节内存储的顺序而制造的一个概念。比如:在内存中存储是酱紫的:0x01 0x02 0x03 0x04(X86是4字节),从高字节开始存放(大端)。然后它向网络发送数据是从左到右发结果字节流就变成了0x04 0x03 0x02 0x01 (0x01是最先发送出去的,看起来网络字节流就变成了小端,小字节在前)然后接收端接收到的字...
2020-03-09 12:03:18
1206
1
原创 [易懂]如何真正理解SLAM中的BA中的扰动法求导泰勒展开
∂(Rp)∂ξ=limΔξ→0exp(Δξ^)exp(ξ^)p−exp(ξ^p)Δξ≈limΔξ→0(1+Δξ^)exp(ξ^)p−exp(ξ^p)Δξ=limΔξ→0exp(ξ^p)+Δξ^exp(ξ^)p−exp(ξ^p)Δξ=limΔξ→0Δξ^exp(ξ^)pΔξ=limΔξ→0Δξ^RpΔξ=limΔξ→0−(Rp)^ΔξΔξ=−(Rp)^>利用叉乘的性质交换\fra...
2020-02-19 16:40:53
886
2
原创 如何理解PnP问题的DLT解法以及Python编程实践
PnP问题的DLT解法欢迎关注知乎@司南牧已知:上一帧相机坐标系下的点的三维齐次坐标QQQ,和,那nnn个点在当前帧中的二维齐次坐标qqq, 和相机内参矩阵KKK。待求解变量 :当前帧相对上一帧的位姿变换矩阵[R∣t][R|t][R∣t] 。约束方程:K[R∣t]Q=λqK[R|t]Q = \lambda qK[R∣t]Q=λq我们记[R∣t]=[a11a12a13a14a21a...
2020-02-19 16:37:59
4010
2
原创 如何理解SLAM三维重建中的DLT算法求解单应矩阵Python实践代码
# -*- coding: utf-8 -*-"""Created on Thu Dec 5 20:22:04 2019@author: 知乎@司南牧"""import numpy as nppoints1 = np.array([ [1,1], [2,3], [4,8], ...
2019-12-05 21:26:44
1449
原创 cpp语法特性中数字开头数字后面紧跟字母如1ms是什么?cpp自定义字面量cpp自定义后缀
cout<<123ms<<endl;这是c++11出现的新语法叫做c++自定义字面量。就是自定义后缀的意思。举个例子就懂了#include <iostream> std::string operator "" ms(long double x){ return std::string("hello");}int main(int argc,c...
2019-12-02 20:46:06
525
原创 [简洁]点云库PCL绘制立方体代码
绘制立方体代码如下所示#include <thread>#include <pcl/common/common_headers.h>#include <pcl/features/normal_3d.h>#include <pcl/visualization/pcl_visualizer.h>using namespace std::chr...
2019-12-02 20:02:40
2652
2
原创 [有效]如何解决Cmake编译PCL项目报错:cannot find -lvtkproj4这个问题的解决方案
Cmake编译PCL项目报错:cannot find -lvtkproj4只需要在CmakeLists.txt里面中PCL依赖项后面加上这句话即可list(REMOVE_ITEM PCL_LIBRARIES "vtkproj4") 。即为:find_package(PCL) include_directories(${PCL_INCLUDE_DIRS})link_directories...
2019-12-02 19:22:15
901
原创 cmake下使用PCL如何写CmakeLists.txt的内容
cmake_minimum_required(VERSION 2.6 FATAL_ERROR)project(YourProjectName)find_package(PCL)include_directories(${PCL_INCLUDE_DIRS})link_directories(${PCL_LIBRARY_DIRS})add_definitions(${PCL_DEFIN...
2019-12-02 19:07:49
1292
原创 cmake下使用boost,以shared_ptr和make_shared举例
Cmake文件配置首先需要在CmakeLists.txt文件中加入下面这段记得“YourExeName和 YourSourceCodeName”这两个部分需要替换成自己的源文件名字和自己想生成的目标文件名字find_package(Boost)if(Boost_FOUND) include_directories(${Boost_INCLUDE_DIRS}) add_exe...
2019-12-02 16:24:39
820
原创 支持Python和c++的Open3D三维重建与点云操作库入门使用
Open3D是一个开放源代码库,支持快速开发处理3D数据的软件。Open3D前端在C ++和Python中公开了一组精心选择的数据结构和算法。后端经过高度优化,并设置为并行化。Open3D是从一开始就开发出来的,带有很少的,经过仔细考虑的依赖项。它可以在不同的平台上设置,并且可以从源代码进行最小的编译。代码干净,样式一致,并通过清晰的代码审查机制进行维护。而且文档也不错Open3D的文档。它...
2019-12-02 10:56:04
5724
6
原创 如何高效的统计最长回文子串的长度? Manacher马拉车算法通俗讲解与实践教程
待解决问题描述给定一个字符串abcbddacaddx要求输出这个字符串的最长回文子串的长度。解释:子串是指从这个字符串任意地方截取一段任意长度的字符串。回文子串指的是前面所提到的截取出的子串中是对称的那种子串。比如“bcb”就是对称。如果我们是要求出最长回文子串那么有一个简单的方式就是将原字符串逆序,然后匹配原字符串与逆序后的字符串之间最长公共子串。但是现在我们只需要统计最长回文子串的长...
2019-11-25 10:03:16
210
原创 c++易错点总结(1): cpp中的explicit的作用,为何尽量使用explicit关键字
在c++种explicit关键字只能用来修饰构造函数。禁止它自动调用拷贝初始化。什么是拷贝初始化?举个例子:现在我们不使用explicit关键字看看会发生什么?我们发现下面这个代码明明我们给函数f()传递的参数是一个整数,但是编译器却自动调用了类A的构造函数,这种就叫做拷贝初始化。这是超出预期的。如果你不希望这样那么请在构造函数前面加上explicit关键词禁止编译器这种自动调用拷贝初始化的行...
2019-11-17 19:13:03
1432
原创 [最新有效]高翔RGB-D SLAM中最新版本g2o报错解决方案
报错一共有两个原因:初始化g2o的接口已经发生变动需要修改解决方案:以下是最新的初始化g2o的代码(2019年11月15日14:17:40)// 初始化g2o typedef g2o::BlockSolver< g2o::BlockSolverTraits<6,3> > Block; // pose维度为 6, landmark 维度为 3 std::un...
2019-11-15 14:18:56
558
原创 如何理解视觉SLAM视觉里程计VO:如何从图片中还原计算出相机的三维位姿算法教程Python代码实践
视觉里程计是什么?视觉里程计有什么用?需要我们求解什么?视觉里程计(Visual Odometry,VO) 算法是什么?视觉SLAM中的视觉里程计算法就是指的是通过某个算法根据前后两张图片求出当前时刻内相机位置和姿态相对上个时刻相机位置和姿态的变化的那种算法。这个就和出租车的里程计一样记录每个时刻的车轮速度及其滚动距离类似。只不过视觉里程计算法是求相机在各个时刻的位置姿态,所以才叫做视觉里程计算...
2019-11-08 19:36:37
1784
原创 如何通俗理解相机标定公式推导与Python编程实践教程
今日疯言疯语:学习一个算法重要的就是弄清楚这个算法要解决怎样的问题,它的已知量(输入)是什么,待求解的未知量(输出)是什么。如果这三个问题没找到答案,就去学算法细节只会浪费大量时间。——知乎@司南牧相机标定(Calibration)做了什么事?为何很多地方都需要相机标定?相机标定主要是为了通过对某个特殊形状的物体拍照从而找到照片中的像素点坐标与现实世界中的三维坐标之间的变换关系。这个变换关...
2019-11-03 15:33:01
616
原创 编译orb slam遇到的一些bug和错误解决方案
error usleep not in this scope解决方案:在你报错的那些文件里面加上#include<unistd>collect2: error: ld returned 1 exit statusCMakeFiles/Makefile2:141: recipe for target 'CMakeFiles/mono_tum.dir/all' failedm...
2019-11-02 19:25:43
1587
原创 ubuntu cmake Fatal error: iostream: No such file or directory
报错描述:ubuntu cmake Fatal error: iostream: No such file or directory报错原因:造成这个报错的原因是因为iostream并不是c语言里面的写法。而你的文件名是xx.c,cmake看你文件是.c结尾所以它认为这是c语言程序,事实上你写的是cpp代码。解决方案:将xxx.c文件名改为xxx.cpp报错就会消失。...
2019-11-01 20:14:58
7720
1
原创 cv2 drawKeypoints 使用自定义数组来绘制关键点
def draw_features(img, features): """Draw features""" # Convert to OpenCV KeyPoints cv_kps = [] for f in features: cv_kps.append(cv2.KeyPoint(f.pt[0], f.pt[1], f.size)) # ...
2019-10-22 18:52:21
1757
1
原创 报错信息ax = axes if axes else plt.gca() ValueError: The truth value of an array with more than one ele
ax = axes if axes else plt.gca()ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()这个报错信息是因为ax是一个数组,而我们期待的是ax[i]。注意i是指第i个元素。将ax传递成a[i]即可。...
2019-10-19 01:15:57
1752
原创 如何理解二值图连通域快速标记算法快速连通物体检测Fast-Connected-Component教程附带python代码实现
如何快速在一张二值化了的图片检测那些像素是属于一个物体块?注意快速连通物体检测算法只能识别二值化了的图片中哪些像素是相互连接的一个整体。换句话说就是这个算法可以检测到哪些像素是相互连通的。它其实就是可以看作是计算机算法中的连通子图问题。连通物体检测算法有哪些用?1. OCR文字识别中可以用连通物体检测算法识别哪些像素是属于一个汉字。然后对这个汉字识别 2. 物体检测。直接看下图就懂了我对...
2019-10-15 00:15:09
975
1
原创 如何理解图像处理中的Otsu's 二值化算法(大津算法)Python编程实践
Otsu’s 二值化(大津算法)二值化是什么?有什么用?PDF扫描成电子版,文字识别,车牌识别等等图像处理场合均需要使用“二值化”操作。我们知道图像是一个矩阵组成,矩阵的元素是一个数字,这个数字是当前像素点对应的颜色(即像素值)。而图片的二值化操作就是将所有像素值变成要么是0要么是1.一般二值化怎么做的呢?答:“设置一个数字d,只要像素值大于这个阈值d那就设置为1,小于这个阈值d那就设置为0。...
2019-10-12 21:28:18
2333
原创 通俗易懂最小二乘法与牛顿法总结:线性与非线性,文末有Python和c++代码编程实践教程
今日疯言疯语:很多算法看不懂大概率是这些算法做出的一些假设你不知道——@Ai酱线性最小二乘法||Ax-y||可以直接求解问题:已知A和y,需要求x。并且需要最小化||Ax-y||。下面是求解x的方法:Ax=yATAx=ATyx=(ATA)−1ATyAx=y \\A^TAx = A^Ty\\x = (A^TA)^{-1}A^TyAx=yATAx=ATyx=(ATA)−1ATy之所...
2019-09-28 20:50:07
1091
1
原创 史上最易懂的最小二乘法实践:线性最小二乘法推导与Python求解编程教程
最小二乘法有什么用?一般用它做什么事?我们最早接触最小二乘法是在高中的时候学的。最小二乘法一般被用来拟合数据。什么叫做拟合数据?就是给定你一堆数据,然后你假设这些数据是满足某种函数的,比如你假设这些数据是一条直线。现在问题来了到底这些数据所对应的那条直线斜率是多少截距是多少?这就得用最小二乘法来求解。总结:最小二乘法拟合数据的步骤有两步。1.首先,假设这些数据符合某种函数。而这种函数往往有几...
2019-09-26 19:16:59
1182
原创 2D二维旋转变换,坐标旋转变换矩阵是如何推导而来?三维旋转变换矩阵与二维旋转变换有什么联系?
我们在做几何变换的时候经常需要把某个坐标系上的所有点都进行一个旋转,这个操作就叫做坐标系旋转。下图是一个典型的二维坐标系旋转。我们把蓝色的坐标系旋转了θ\thetaθ度,新坐标系就是红色的坐标系。假设我们现在已知一个点相对红色那个坐标系的坐标,然后我们想求得该点相对于蓝色那个坐标系的坐标。这个其实很简单我们利用高中学的三角几何就可以轻松解决。上面那个坐标系旋转可以转换为下面这个线段旋转。旋转前...
2019-09-25 22:10:38
1549
1
原创 python cv2 opencv手写一个棋盘格
有时候我们需要用棋盘格测试我们写的代码或者用于校准相机。虽然opencv里面有自带的代码。但是了解下如何写一个棋盘格也是有必要的。下图是一个简单的实现。import cv2import numpy as npchecker_img = np.zeros((320,320))block_width = 320//8black_block = np.full((block_width,blo...
2019-09-24 20:14:26
1961
原创 适合初学者的SLAM实践教程(1):相机模型-如何从照片中重建出像素点的三维坐标?
三维重建到底是怎么回事?已知什么数据?待求解哪些变量?看下面这张图,一图解释如何根据照片进行三维重建。首先,三维重建就是根据把照片的像素点对应现实世界中某个点在相机坐标系下的三维坐标计算出来。一般我们可以通过深度相机或者双目视觉等方式获取目标物体离相机坐标系原点的距离ZrealZ_{real}Zreal,这里的相机坐标系的原点就是相机的焦点。所以现在我们已经知道了的数据有:“像素点A在照片坐...
2019-09-24 19:21:21
1165
原创 一文看懂强化学习中的那些概念及各算法之间本质上的联系易懂梳理简单举例与python实践
强化学习它的思路基本是想要遍历穷举计算各种状态的价值,然后尽可能的达到高价值的那些状态。那么什么是状态?什么是状态的价值?不同问题的里面含有的“状态”的内容和数量都不一样。下面我举个例子。比如玩井字棋(三个相同色在一条线就赢)。看下面这张图**,每张图对应的棋子放置的位置就是一个状态**。(在本例子中我们编程化那就一个状态就只需要用一个3×3的数组来保存棋谱即可)。# 用3×3的二维数组保存状...
2019-09-22 15:17:28
393
原创 在colab训练与使用运行PVNet进行估计物体的位置和姿态
为了能让colab操作google driver中的文件需要执行下面代码。!apt-get install -y -qq software-properties-common python-software-properties module-init-tools!add-apt-repository -y ppa:alessandro-strada/ppa 2>&1 > ...
2019-09-14 22:09:51
585
1
原创 Unity脚本使用总结
执行逻辑和执行顺序Update是每一帧都调用,相邻两帧间隔的时间为Time.deltaTime。FixedUpdate是与帧无关,到一定时间就调用,不会因为卡帧就出问题。在Update和FixedUpdate都调用完后就会调用LateUpdate,一般这步可以让摄像机看看更改的了地方.Update和LateUpdate是每帧调用一次。FixedUpdate是解决卡帧问题用的。...
2019-09-07 10:04:47
463
原创 HoloLens Unity编程(2): 在Unity中如何设置HoloLens的相机属性
在上一篇文章介绍了Unity编辑器界面各个模块的功能。如果看完上篇文章你已经安装好了Unity并且了解Unity界面各个模块的作用。由于HoloLens原理就是把Unity中虚拟摄像头看到的场景投影到眼镜上,虚拟摄像头看到的场景就是我们人眼看到的场景。为了让这个虚拟摄像头能够和HoloLens投影模式匹配我们需要设置下Unity虚拟摄像头的属性。首先需要选中“Main Camera”,然后可以看...
2019-09-06 15:26:33
1081
原创 Unity游戏编程教程(1): 认识Unity可视化编辑器界面
使用Unity我们可以可视化的制作游戏。如何下载与安装Unity?点击这个链接进入到下载页面Unit下载。然后点击"Download Unity Hub"。你会发现马上下好了。它是一个Unity管理器,它会在线的帮你下载Unity。Unity可视化界面各个模块的功能Unity如何创建一个项目我们一开始打开Unity是它的项目管理器。你需要点击右上角的"New"来创建一个Unity项目。...
2019-09-06 14:48:47
3856
原创 一文看懂机器人与自动驾驶与机器人的“眼睛”[即时定位与地图重建SLAM]到底是什么?有哪几个关键环节?他们之间的联系是什么?
即时定位与地图重建(SLAM)到底是什么?为什么需要它?在哪需要它?如何使用它?SLAM技术是什么?它就是通过摄像头和雷达等传感器来对周围环境进行实时地图重建并且还能计算出传感器位于所重建的地图的哪个地方。SLAM技术有什么用?在哪需要它?如何使用它?自动驾驶需用用SLAM技术来建图和定位自己在哪。通过建图后才能决策到底前面有没有车,以及前面是否有路口,到底改怎么转。机器人需要对周围环境进行建...
2019-09-02 15:16:48
403
原创 pandas dataframe常见使用场景大总结
import pandas as pddata = pd.DataFrame([1,2,3,4],columns=['a', 'b', 'c','d'])
2019-08-30 15:45:55
984
原创 python读取matlab保存的点mat文件
Python下读取.mat文件import scipy.io as siodata= sio.loadmat('./nidewenjianming.mat') # 返回一个字典(dict)类型的数据
2019-08-30 15:32:33
324
原创 如何直观理解粒子滤波并进行Python编程实践
疯言疯语:如果你对一个算法有什么用都一无所知,那么学这个算法的难度那就增加了100倍。——知乎@Ai酱首先我们看看粒子滤波怎么用的。我以粒子滤波可以用来机器人自主定位为例。现在已知机器人脑子里面有某个商场的地图,然后它想知道自己到底在哪。注意:现在机器人已知商场地图,并且能看到周围长啥样,需要求机器人位于地图哪个位置(就像我们人自己在商场都经常迷路不知道自己在哪)。那么根据粒子滤波算法机器...
2019-08-28 17:17:20
3928
1
原创 分类交叉熵与二元交叉熵区别?Categorical Cross-Entropy Loss, Binary Cross-Entropy Loss
有时候你用交叉熵发现损失值很低但是识别效果就是不好这可能是因为你有多个分类但是却用二元交叉熵的原因。
2019-08-27 19:34:01
3532
1
原创 [易懂实例讲解]离散型贝叶斯滤波python编程代码实践
本文是从例子的角度来讲解贝叶斯滤波。如果你想看贝叶斯滤波的理论推导的话可以看这篇文章《我是如何十分钟理解与推导贝叶斯滤波(Bayes Filter)算法?》。不懂贝叶斯滤波理论也凭直觉可以看懂本文的例子和Python代码实践。例子的背景介绍假设有一个机器人它在困在一个管子里面了,只能前进或后退。管子的长度是20cm。机器人收到"前进"命令后有三种可能“有25%概率不执行,有50%概率前进1cm...
2019-08-27 16:25:53
4872
4
驯服烂代码
2017-04-15
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人