自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(62)
  • 收藏
  • 关注

原创 覆盖路径生成算法STC(Spanning Tree Coverage)

一种最基本的基于栅格地图的覆盖路径生成算法。

2023-12-07 14:54:43 1373

原创 python实现全向轮EKF_SLAM

全向EKF-SLAM

2023-11-10 17:02:46 1100

原创 模式识别——高斯分类器

条件概率为多元高斯分布,此时观测为向量XX1X2XnXX1​X2​...Xn​,通过极大后验展开可以得到最优决策函数:ddd就是马氏距离,代表两个高斯分布之间的距离。而α\alphaα则代表了类别的先验。

2023-10-24 03:49:59 734

原创 模式识别——贝叶斯决策理论

我们的目标就是找一个最优的判别函数,,使得对状态的预测损失最小。所有内容在分类问题下讨论。

2023-10-23 16:13:04 137

原创 python优化库scipy.optimize测试(notebook版本)

代码链接。

2023-07-13 18:08:10 376

原创 python实现迭代最近点ICP算法(notebook版本)

直接看,写的应该很清楚了。

2023-07-13 17:54:36 444

原创 python实现正态分布变换NDT算法(notebook版本)

直接看,写的应该很清楚了。

2023-07-13 17:49:42 578

原创 每日浅读SLAM论文——简析LIO-SAM

今天讲一篇经典的LIO(LiDAR-Inertial Odometry)SLAM论文——LIO-SAM。雷达+里程计由于其高鲁棒性、较低成本(二维雷达不贵、三维雷达价格也在降、IMU不太贵),可以说是工业机器人应用最广泛的SLAM解决方案了。对于三维LiDAR+IMU的结局方案,在github上的开源算法并不多,甚至可以说就LIO_SAM和FAST_LIO两种(及它们的前身和衍生物)。

2023-07-07 21:18:30 1902

原创 每日浅读SLAM论文——简析Gmapping

第5行,根据目前移动到的位置,以及在这个位置下激光打到的结果,打个分数(比如激光打到地方在地图上也是障碍物+1分这种),这样可以给每个粒子计算一个权重,乘上之前的权重,权重最高的那个粒子就会被认为是目前的结果。8-11行是在进行重采样,因为随着算法进行,有些粒子权重会非常低,几乎不能表示真是情况,且消耗计算资源,因此我们会将权重高的粒子多复制几份,权重低的可能就丢弃了。我们直接从粒子滤波框架开始讲起(我会讲的很浅显,即便你不会粒子滤波,但是要真正掌握还是要认真看推导,比如去看概率机器人)。

2023-07-05 02:00:28 929

原创 每日浅读SLAM论文——简析Cartographer

它的主要工作在后端,使用分支定界优化了CSM算法,然后构建了位姿和submap之间的约束图,使用SPA(一种利用图稀疏性来加速优化,这可以说是真正将图优化投入实际使用的算法,学习到一定深度了可以再去学习,总之是一种快速进行图优化的算法)进行优化。显然,这种算法复杂度很高。其实我们很容易想到一种简单的算法(我瞎想的,便于理解),假设一开始x搜索范围之[-10,10],步长为1,搜一百次,取分数最高的10次,这10次分数都在[-1,1]之间,那我改步长为0.1搜索新的区间。就是前端,核心就是优化这个函数,

2023-07-05 01:01:38 707

原创 简单理解梯度下降法、牛顿法、高斯牛顿法、列文伯格-马夸尔特法(LM)

梯度下降法,沿着一阶导方向(雅可比矩阵)走。二维搜索问题的话可以形象理解为用平面拟合当前位置,沿着切向肯定移动最快。主要问题收敛速度慢。牛顿法,通过二阶泰勒展开求极值。二维搜索问题的话可以形象理解为用二次曲面,直接往这个曲面的最低点运动最快。主要问题是黑塞矩阵(二阶偏导)计算复杂度高,初值要求高,并且容易到局部最优。高斯牛顿法,牛顿法在最小二乘问题上的应用,通过假设和推导可以利用雅可比矩阵表达黑塞矩阵,计算复杂度降低。主要问题“同样初值要求高,并且容易到局部最优”LM算法,梯度下降法和高斯牛顿法之间

2023-07-04 23:37:55 239

原创 从零开始的三维激光雷达SLAM教程第二讲(搭建Gazebo仿真环境,并添加动态障碍物)

我们先在/opt/ros/xxx/share目录下找到turtlebot3的description功能包,为了不修改,我们把urdf文件托到自己功能包下修改,并增加VLP模块。VLP模块也要拖到自己功能包下,仿照velodyne_description中给的例子修改(需要注释掉inertial标签,因为激光的重量会造成机器人的翻倒)。在gazebo中添加地图也可以不显示GUI界面,后台运行,你操作机器人移动可以看激光雷达,在电脑运行不过来GUI的时候可以这么做,对虚拟机友好。

2023-03-30 00:32:17 5406 8

原创 从零开始的三维激光雷达SLAM教程第一讲(搭建运行环境,并跑Kitti数据集)

你也可以不安装opencv,删除src下的Kittihelper,我后面会使用将Kitti转ROSbag的方式制作数据集,然后山调scanRegistration文件中的包含的opencv头文件,因为根本没用到。其实网上直接就有很多rosbag,但是还是将Kitti数据集制作成rosbag,这样在其他SLAM算法中也可以使用对比,总规是要对比算法效果的。先从git上clone代码,使用了我常用的ghproxy代理下载,直接clone可能会有网络问题,当然也有很多其他办法。

2023-03-28 01:03:45 2511 6

原创 SLAM笔记——turtlebot传感器ekf实验实验

imu的误差可以在urdf文件中进行调整,但是gazebo提供的odom却是完美的,因此我们需要手动给其添加误差,这个误差是累积的。gazebo中给的odom是完美的,所以我们需要给它增加噪声,这个噪声是累加的,因此我们需要记录前一次odom数据做差,加上噪声融入到新的odom_noise中去。中,里面robot_pose_ekf是和官网上有点不同的(增加了gps,并且取消了发布odom的tf,因为会冲突)。最基本的包,包含了速度、加速度、角速度、角加速度、位姿的各种表示方法等多种基本的消息类型,

2023-01-19 23:44:48 2211 8

原创 OPENGL学习(五)Modern OpenGL 三角形绘制

和传统opengl相比,主要差别就是需要手写着色器,具体看这篇。底下是我的中文注释版。

2022-07-19 21:22:10 313

原创 OPENGL学习(四)GLUT三维图像绘制

对于三维目标来说,最主要的就是有坐标变换问题,也就是说有视角问题。下面这个程序只是我们看的方向一直在转,不是物体真的在转。透视函数参数图下所示。

2022-07-16 00:24:32 5171

原创 OPENGL学习(三)GLUT二维图像绘制

将图像变成了图中(x,y,z)分别对应范围(0-1,0-1,0-1)区间。手动设置了使用RGB绘制、窗口位置及窗口大小。并且在init函数中加入了。增加了鼠标左键点击事件mouse,点击时会改变图像亮度并输出点击位置。在改变窗口时会调用的函数。默认的reshape函数会直接拉伸图形。就是将颜色设置为红色。然后你在三个不同位置点了三个点。最基础的程序,画了个三角形,请确保理解这个程序,就是保存提交给画面。然后你就得到了结果。我们希望图像不被拉伸,而是保持原有大小。使用定时器的一段动画,图像亮度随时间变化。..

2022-07-15 21:33:12 2675

原创 OPENGL学习(二)OPENGL渲染管线

Vertexprocessor对顶点进行预处理,原始点都是三维的,最终我们看到的点都是二维的。这个映射过程和点的实际位置,和我们从哪个视角去看都有关系。需要通过一系列矩阵调整点的坐标。另外,还需要确定点的颜色,这个和点到镜头的距离和光照情况都有关系。第二部clip删掉视角外的点,并且用小的网格把点都连起来,得到左边的兔子。Cipper我们的视图是有限的,在视图以外的点可以通过算法预先处理掉,不需要进行后续计算。Fragmentprocessor通过纹理和插值算法给每个像素上色。...

2022-07-15 20:07:10 281

原创 OPENGL学习(一)认识OPENGL和各种库

认识OPENGL各种库

2022-07-13 19:43:38 3394

原创 现代控制理论入门+理解

现代控制理论入门+理解

2022-06-28 13:03:13 832

原创 自动控制原理快速入门+理解

快速入门+理解自动控制原理

2022-06-27 21:12:48 2141

原创 Python手写Bresenham画线算法(线段+射线)

#画线算法def draw_line(ori_canvas,x1,y1,x2,y2,color): canvas=copy.deepcopy(ori_canvas) delta_x=x2-x1 delta_y=y2-y1 if(delta_x==0): for i in range(min(y1,y2),max(y1,y2)+1): canvas[x1][i]=color return canvas if(d.

2022-03-01 00:32:02 1709 3

原创 SLAM笔记——获取gazebo真实位姿

调用gazebo/get_model_state服务,通过机器人的名字直接获得真实位姿信息,并以pose发布/* * @Author: Jimazeyu * @Date: 2022-02-18 03:19:20 * @LastEditors: OBKoro1 * @LastEditTime: 2022-02-18 04:38:48 * @FilePath: /catkin_ws/src/map_tutorials/src/pose_publisher.cpp */#include"ros/r

2022-02-18 20:41:30 1650 4

原创 不安装conda,python2和python3同时使用jupyter

我是想用python2运行jupyter,先尝试直接用pip2安装jupyter失败了。然后使用pip3安装jupyter,成功了。之后为python2安装ipykernel,就可以更换内核了。但是import python2的包却失败了,一看使用的还是python3在执行这时候输入这行命令就好了python2 -m ipykernel install --user...

2022-02-17 22:50:15 579

原创 SLAM学习笔记——从零搭建完整的gazebo多机仿真SLAM(四)

引言到了本次教程的最后一章,之前我们使用了单机器人SLAM,多机器人地图融合SLAM,以及多个机器人在地图中的导航。最后一章(后面可能会有新的章节,第一系列到此为止),我们将使用explore_lite功能包,使机器人在建图的过程中,自主已经建立地图中最适合拓展的前沿,并自动边导航,边构建地图,直到整张地图构建完成。...

2022-02-12 19:00:51 2175 5

原创 SLAM学习笔记——从零搭建完整的gazebo多机仿真SLAM(三)

引言我们已经可以使用多台机器人一起进行SLAM,并把地图进行融合。这次,我们在已经构建好的地图中,让多台机器人定位并进行运动规划。环境搭建我们直接看launch文件,除了启动仿真环境放入机器人外,我们还加入了acml和move_base节点,acml可以使得机器人可以通过雷达扫描数据判断自身在地图中的位置,move_base可以进行路劲规划。网上有很多教程,但是我这里的核心难度在于存在多个机器人,所以需要存在很多命名空间冲突的问题,需要搞清楚acml和move_base分别订阅了什么topic,才能

2022-02-12 19:00:41 1875 2

原创 SLAM学习笔记——从零搭建完整的gazebo多机仿真SLAM(二)

文章目录引言引言接着上一课讲的内容,我们使用上一课slam构建的地图,进行机器人的定位与导航。

2022-02-12 19:00:29 2200 1

原创 SLAM学习笔记——从零搭建完整的gazebo多机仿真SLAM(一)

文章目录引言第一部分 搭建gazebo仿真环境使用gazebo的building_editor搭建地图使用launch文件加载world文件第二部分 放入你的机器人引言这是一段比较完整的教程。将分为四篇文章四部分内容:搭建gazebo仿真环境,并且在虚拟环境中运行slam算法,保存环境地图。使用map_server打开保存的地图,并且使acml定位和move_base进行自主导航使用explore_lite功能包实现机器人边自主导航,边构建地图使用多个命名空间搭建多机器人SLAM系统PS:文

2022-02-12 19:00:16 9987 29

原创 SLAM学习笔记——贝叶斯滤波(非参数滤波篇)

非参数滤波可以模拟非线性情况,主要介绍两种滤波,直方图滤波和粒子滤波,后者被广泛应用于机器人学中。离散贝叶斯滤波可以对比一下连续贝叶斯滤波,我在连续贝叶斯滤波中就是按照离散来讲的,离散应该更好理解。直方图滤波将先验概率用直方图分段,利用积分求出每个分段平均值和概率代表一个离散的状态,利用离散贝叶斯滤波和转移方程,求出后验概率。动态分解与静态分解动态分解就是概率越高,分的越密粒子滤波用无数粒子表示状态,概率越密集,采样越密集直接看伪代码输入分别是上一时刻的粒子群,控制数据,观测数

2022-02-01 00:25:49 3045

原创 SLAM学习笔记——贝叶斯滤波(高斯滤波篇)

文章目录贝叶斯滤波高斯滤波卡尔曼滤波(KF)拓展卡尔曼滤波(EKF)密度滤波器(AKF)无迹卡尔曼滤波(UKF)信息滤波&拓展信息滤波参考概率机器人,只有如何使用先明确几个定义:Z代表观测状态,比如雷达、GPS告诉我们机器人在哪里u代表控制数据,比如向前十米、向后十米,这个数据可以由里程计、IMU提供x代表真实的状态执行控制后的后验概率结合观测后的后验概率贝叶斯滤波我们把积分当成求和理解更清晰,比如上一次预测出来我们的位置在x1,x2,他们的概率分别为0.1,0.9,经

2022-01-31 01:04:25 1163 4

原创 SLAM学习笔记——李群李代数简单理解

在知道了旋转矩阵、欧式变换的概念之后,我们学习李群李代数。李群李代数是什么我也讲不清楚。但是在SLAM中,我们只用到两种李群和李代数李群:SO3 SE3李代数:so3 se3SO3代表旋转矩阵,SE3代表欧式变换矩阵,so3代表一个三维的表示旋转的向量,se3代表一个六维的表示欧式变换的向量(这并不恰当,但是如果只是想用理解到这里就可以了)SO3、SE3和so3、se3一一对应(限定旋转在360度内),运算也存在映射,李群中就是乘法运算,李代数中就比较复杂了(使用sophus库吧)。矩阵形式(李

2022-01-30 23:52:39 2607

原创 SLAM学习笔记——结合pangolin和eigen可视化

pangolin是一个基于opengl开发的图形库,可以在linux上运行。可以使用eigen和pangolin自己写一个程序展示运行轨迹和坐标变换,比起rviz+tf的拓展性更高。下面是注释的很详细的代码,main里面生成了一个椭圆的轨迹code:#include"ros/ros.h"#include"Eigen/Core"#include"Eigen/Geometry"#include"Eigen/Dense"#include"pangolin/pangolin.h"#include &l

2022-01-30 18:58:47 2111

原创 SLAM学习笔记——坐标变换与eigen库

文章目录Eigen库的编译内积与外积只涉及最基本的含义,以及如何使用Eigen库的编译内积与外积参考这篇博客内积就是投影,外积大小为absinθabsin\thetaabsinθ,方向垂直于两个向量,几何意义我也不是很明确。具体性质啥的还挺多的,但是我也用不到,了解基本的计算法则就好。...

2022-01-30 00:47:36 745

原创 SLAM学习笔记——基础知识补充(牛顿法与ceres)

文章目录牛顿法雅可比矩阵与黑塞矩阵与梯度泰勒展开梯度下降牛顿法和LM修正拟牛顿法牛顿法非线性最小二乘高斯牛顿法比较ceres库简单应用补充一些最优化的基础知识,现代的人工智能、控制理论一类基本都是基于优化理论的。想学好这门课需要扎实的线性代数基础。牛顿法是SLAM中使用最多的优化方法,利用ceres库可以进行求解。牛顿法雅可比矩阵与黑塞矩阵与梯度先问一个问题,什么是方向导数?什么是梯度?方向导数是一个数字,就是在某个方向下的变化速度,而梯度是什么,是一个方向,在这个方向下,方向导数是最大的。雅可

2022-01-27 16:01:15 2663 1

原创 通信原理基础知识

文章目录通信原理基础知识第一章 概论第二章 信号确定信号与随机信号能量信号与功率信号确定信号的性质频域性质时域性质随机信号的性质常见分布数学特征随机过程基本概念(P33)自相关函数和功率谱密度白噪声与带限白噪声高斯过程(P41)窄带随机过程正弦波+窄带高斯过程线性系统/冲激响应/传输函数输出随机过程的概率分布第三章 模拟调制系统模拟调制的类型线性调制(幅度调制AM)振幅调制AM非线性调制(P60)基本原理已调信号的频谱特征(P62)通信原理基础知识按照老师划的重点整理的,缺少一些内容,但是有很多个人理解

2021-12-28 19:21:09 7136 3

原创 贝叶斯系列——贝叶斯定理、贝叶斯决策、朴素贝叶斯、贝叶斯网络、贝叶斯滤波器

贝叶斯定理、贝叶斯网络、贝叶斯滤波器、朴素贝叶斯、贝叶斯决策、极大似然、最大期望

2021-12-25 23:22:05 1714

原创 人工智能的一些感悟——随记

我现在觉得所谓的人工智能说到底,其实就是找一个可以描述世界的模型(分布),然后使用收集到的数据去拟合这个世界。我们现在使用的数学模型,其实都是早几百年前就已经存在于世的,实际上我们获得的飞速提升,都是近五十年来,计算机运算速度的提升和联网后信息交互的加速所提供的。这种增长速度之前是指数式的,但是并不会无穷增长,摩尔定律已经撑不住了。这个过程更像是Softmax函数,慢慢会区域平缓。当然我觉得就目前来说其实不会超过一半,也就是说我们还能保持指数式的爆炸,但是向前推进的手段更大程度要靠WEB而非硬件提升。当然

2021-12-24 19:40:31 1399

原创 FIR滤波器设计(Matlab代码)

之前已经提过了,IIR级数低,元器件少,成本低,但起不到线性相位的作用。而FIR滤波器由于没有反馈,比较不稳定,消耗资源比较多,但是却可以产生线性相位。线性相位有什么用,然后我简单说一下FIR滤波器原理(图说搬来的),原理很简单,我们设计一个低通滤波器,就是用一个窗函数去截频谱,频域上就是信号和一个抽样函数卷积。抽样函数是无限长的,但是离y轴越远衰减越厉害,我们计算机只能先对它进行截断。截断完傅里叶回去,窗函数就不是理想窗函数了。但是我们不能直接使用截断的抽样函数进行卷积,我们对窗函数还是有要求

2021-12-21 22:16:32 5911

原创 相移、群延迟、线性相位

相移很简单,就是经过系统后,信号中特定的频率分量,相位会落后多少。线性相位很简单,就是θ=ω∗k\theta=\omega *kθ=ω∗k。信号中相位滞后(只考虑因果信号,不可能先于输入)和频率成正比。群延迟delay=dθdωdelay=\frac{d\theta}{d\omega}delay=dωdθ​,显然线性相位群延迟就等于k,是一个常数,这个常数代表,系统中任何频率分量的延迟时间都是常数。你去查线性相位很多都会告诉到你这里,但是这是为什么呢?其实很简单,因为这段频率相角转动θ\thetaθ

2021-12-21 22:15:02 2669

原创 FFT频谱分析(matlab代码)

实验要求在Matlab软件平台,利用函数wavrecord函数录制一段语音,采样频率fs=10000Hz,长度为5s。用sound函数播放声音。用wavread对语音信号进行采样,记住采样频率和采样点数。  或者在Python环境下,利用Pyaudio语音处理包实现录音。语音信号的频谱分析首先画出语音信号的时域波形;然后对语音号进行快速傅里叶变换,得到语音信号的频谱特性 。加入单频噪声原始的语音信号加上一个高频余弦噪声,频率为4kHz。画出加噪后的语音信号时域和频谱图,与原始信号对比,

2021-12-21 20:08:04 11882 3

空空如也

空空如也

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

TA关注的人

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