- 博客(42)
- 资源 (7)
- 收藏
- 关注
原创 文章翻译——矩阵微积分
文章作者:Sourya Dey发表时间: 01 April 2019.原文:Matrix Calculus目录:文章目录1. 符号2. 基本规则3. 导数类型3.1 标量对标量(求导)3.2 标量对向量(求导)3.3 向量对标量(求导)3.4 向量对向量(求导)3.4.1 特殊的例子——向量化的标量函数3.4.2 特殊的例子——Hessian3.5 标量对矩阵(求导)3.6 矩阵对标量(求导)3.7 向量对矩阵(求导)3.8 矩阵对向量(求导)4. 操作和例子4.1 Commutation4.2 转
2021-11-20 20:09:16 733
原创 pcl有序点云分析
在工作和学习中,只要是与点云打交道,那基本离不开pcl(point cloud library),点云pcd文件是我们最常接触到的文件,它的数据组织形式,可以分为有序(HEIGHT字段不为1)和无序两种(HEIGHT字段为1),对于有序点云,我们可以通过按照行列 cloud.at(column, row) 的方式来访问(注意对于pcd中的有序点云at方式的访问,列也就是宽度在前面,和常用的image访问相反),下面用代码进行验证。pcd文件的数据头示例如下所示:pcd 数据头# .PCD v0.7 -
2021-08-08 19:37:43 3426
原创 论文翻译—ICP算法论文(节选1~4章)
标题:A Method for Registration of 3-D Shapes作者: J. Besl, Neil D. McKay目录:Ⅰ IntroductionⅡ Literature ReviewⅢ Mathematical PreliminariesA. Point to Parametric Entity DistanceB. Point to Implicit Entity DistanceC. Corresponding Point Set Registration
2021-07-18 23:53:20 1993 5
原创 论文翻译—3D NDT算法论文(节选6.1-6.2)
文章目录第6章 正态分布变换6.1 用于表面表达的NDT6.2 NDT 扫描配准6.2.1 2D NDT6.2.2 3D NDT第6章 正态分布变换本章详细描述了正态分布变换以及它是如何被应用到扫描配准中的。6.1 用于表面表达的NDT在第3章讨论的距离传感器都是输出的点云:来自表面的空间采样点的集合。而且,在第5章的工作中提到的许多相关的算法都与点云打交道。但是,使用点云来表达表面有一系列的限制。例如,点云没有包含如方向、平滑度或者洞(holes)等表面属性的明确信息。根据传感器的配置,点云也可能
2021-07-03 00:33:12 1216 1
原创 算法公式推导——PCA
主成分分析(Principle Component Analysis,PCA)算法公式推导:1,算法定义算法输入:一堆点集 X=[x1,x2,...,xm],其中xi∈Rn, i=1,2,...,m\mathbf{X} = [x_1, x_2, ...,x_m],其中x_i \in \mathbb{R}^n, ~~i = 1,2,...,mX=[x1,x2,...,xm],其中xi∈Rn, i=1,2,...,m算法输出: 一堆主向量 z1,z2,.
2021-06-13 00:16:45 992 8
原创 算法公式推导——ICP
前言:点云配准中的迭代最近点(Iterative Closest Points,ICP)算法的推导,网上很多资料都有提到,但是对我来说,看完这些资料还是有写些太明白的地方,前段时间学习的相关课程中讲到了ICP的算法推导,感觉很详细,因此这里详细总结一下,确保任何一个有线性代数基础的小伙伴都能看懂。1,算法输入两堆点集:X={x1,x2,...,xM}\mathbf{X} = \{x_1, x_2, ..., x_M\}X={x1,x2,...,xM} 和 Y={y1,y2,...,yN}\math
2021-05-16 14:26:34 1405
原创 关于ROS订阅和发布中的问题笔记
前言:在学习知乎大佬的定位文章 从零开始做自动驾驶定位(三): 软件框架 。其中提到:gnss_callback {gnss 数据解析,赋给变量 gnss_data}lidar_callback {雷达数据解析,得到lidar_data融合(lidar_data, gnss_data)}问题在于当融合算法处理时间比较长,超出了传感器信息的发送周期的时候,未被接收的数据会被放在每个subscriber对应的缓冲区中,等当前融合步骤处理完之后,下次ros从缓冲区中读取数据的时候,会先把gn
2020-10-14 00:05:54 1049 4
原创 代码分析——基于误差状态卡尔曼滤波器(ESKF)实例分析
imu_gps_localization代码分析最近在学习ESKF相关知识,偶然发现知乎大佬 Dongsheng Yang基于《Quaterniond kinematics for the error-state Kalman filter》实现了IMU+GPS的融合定位。刚刚学完理论知识,正好学习下基于ESKF的代码实战。看完大佬写的代码,更加深入地了解了数据融合的机制,笔记如下,一图胜千言。...
2020-10-08 19:24:37 4991 1
原创 文章翻译—基于误差状态卡尔曼滤波器的四元数运动学—第7章
文章目录基于误差状态卡尔曼滤波器的四元数运动学7 使用全局角度误差的ESKF7.1 持续时间的系统运动学7.1.1 真实和标称状态运动学7.1.2 误差状态运动学7.2 离散时间的系统运动学7.2.1 标称状态7.2.2 误差状态7.2.3 误差状态雅可比和扰动矩阵7.3 与互补的传感数据融合7.3.1 误差状态观测7.3.2 将观测到的误差注入标称状态7.3.3 ESKF重置基于误差状态卡尔曼滤波器的四元数运动学7 使用全局角度误差的ESKF7.1 持续时间的系统运动学7.1.1 真实和标称状态运
2020-10-06 00:22:58 1642 5
原创 文章翻译—基于误差状态卡尔曼滤波器的四元数运动学—第6章
文章目录基于误差状态卡尔曼滤波器的四元数运动学6. 用将IMU与互补的感知数据融合6.1 通过滤波校准的误差状态观测6.1.1 用于滤波器校正的雅可比计算6.2 将观察到的误差注入标称状态6.3 ESKF 重置6.3.1 关于定位误差的复位操作的雅可比基于误差状态卡尔曼滤波器的四元数运动学6. 用将IMU与互补的感知数据融合在除了IMU之外的其他信息(例如GPS或视觉)到达时,我们将进行ESKF校正。在设计良好的系统中,这应使IMU偏差可观察到,并允许ESKF正确估计它们。有无数种可能性,最受欢迎的是
2020-10-06 00:22:10 1940 1
原创 文章翻译—基于误差状态卡尔曼滤波器的四元数运动学—第5章
基于误差状态卡尔曼滤波器的四元数运动学5. 基于IMU驱动系统的误差状态运动学5.1 运动我们希望使用汉密尔顿(Hamilton)四元数表示空间或姿态的方向,编写将加速度计和陀螺仪读数与偏置和噪声相结合的惯性系统运动学的误差方程。加速度计和陀螺仪的读数通常来自惯性测量单元(IMU)。整合IMU读数可以得到随着时间漂移的航位推算定位系统。避免漂移就是将这些信息与GPS或视觉等绝对位置读数融合在一起。误差状态卡尔曼滤波(ESKF)是我们基于这个目的可能使用的其中的一个工具。在卡尔曼滤波范例中,这些是E
2020-10-06 00:21:24 2930 8
原创 文章翻译—基于误差状态卡尔曼滤波器的四元数运动学—第4章
文章目录基于误差状态卡尔曼滤波器的四元数运动学4. 扰动,微分和积分4.1 SO(3)SO(3)中的加法和减法运算符4.2 四个可能的微分定义4.2.1 从向量空间到向量空间的函数4.2.2 从SO(3)到SO(3)的空间4.2.3 从向量空间到SO(3)的函数4.2.4 从SO(3)到向量空间的函数4.3 有用的,且非常有用的,旋转的雅可比4.3.1 关于向量的雅可比4.3.2 关于四元数的雅可比4.3.3 SO(3)的右雅可比4.3.4 关于旋转向量的雅可比4.4 扰动,不确定性,噪声4.4.1 局部扰
2020-10-06 00:20:52 2128 8
原创 文章翻译—基于误差状态卡尔曼滤波器的四元数运动学—第3章
文章目录3. 四元数约定,我的选择3.1 四元数flavors[风味?]3.1.1 四元数分量的顺序3.1.2 四元数代数的规范3.1.3 旋转操作的函数3.1.4 旋转操作的方向3. 四元数约定,我的选择3.1 四元数flavors[风味?]有几种确定四元数的方法。它们基本上与四种二元选择有关:元素的顺序——实部在前还是在后:q=[qwqv] vs. q=[qvqw] .(140)\math
2020-10-06 00:19:54 1479 4
原创 文章翻译—基于误差状态卡尔曼滤波器的四元数运动学—第2章
基于误差状态卡尔曼滤波(ESKF)的四元数运动学文章作者:Joan Sol`a发表时间:October 12, 2017(注:Quaternion kinematics for the error-state Kalman filter 貌似有好几个版本,我这里选择翻译的是2017年10月的版本)原文:Quaternion kinematics for the error-state Kalman filter目录:1 四元数的定义和性质1.1 四元数定义1.1.1 四元数的替代表示
2020-10-06 00:18:53 2392 3
原创 文章翻译—基于误差状态卡尔曼滤波器的四元数运动学—第1章
基于误差状态卡尔曼滤波(ESKF)的四元数运动学作者:Joan Sol`a时间:October 12, 2017(注:Quaternion kinematics for the error-state Kalman filter 貌似有好几个版本,我这里选择翻译的是2017年10月的版本)原文:Quaternion kinematics for the error-state Kalman filter目录:1 四元数的定义和性质1.1 四元数定义1.1.1 四元数的替代表示1.2
2020-10-06 00:17:35 4436 6
原创 文章翻译—基于误差状态卡尔曼滤波器的四元数运动学—前言
基于误差状态卡尔曼滤波(ESKF)的四元数运动学文章作者:Joan Sol`a发表时间:October 12, 2017(注:Quaternion kinematics for the error-state Kalman filter 貌似有好几个版本,我这里选择翻译的是2017年10月的版本)原文:Quaternion kinematics for the error-state Kalman filter目录:1 四元数的定义和性质1.1 四元数定义1.1.1 四元数的替代表示
2020-10-06 00:16:12 3132 1
原创 坐标变换学习笔记—代码篇Matlab
坐标变换学习笔记—代码篇Eigen四元数 →\to→ 旋转矩阵四元数 →\to→ 欧拉角旋转矩阵 →\to→ 四元数旋转矩阵 →\to→ 欧拉角在matlab中,下面两个目录下均有关于四元数,旋转矩阵,欧拉角间变换的函数文件(quat2dcm.m, dcm2quat.m, angle2dcm.m, dcm2angle.m等)。C:\Program Files\Polyspace\R2020a\toolbox\aero\aero\C:\Program Files\Polyspace\R2020a\mcr
2020-08-23 23:57:58 5232 3
原创 坐标变换学习笔记—代码篇Eigen
坐标变换学习笔记—代码篇Eigen旋转向量旋转向量与其它旋转量的转换旋转向量一般常用函数四元数欧拉角旋转矩阵旋转向量旋转向量与其它旋转量的转换Eigen/src/Geometry/AngleAxis.h四元数 →\to→ 旋转向量:Eigen中,通过重载=操作符,实现旋转矩阵,四元数对转旋转向量的直接赋值,但是从下面的函数实现看,它的旋转角θ\thetaθ是通过atan2atan2atan2的方式求出来的,与式(3.1)(3.1)(3.1)稍微有点差别。Eigen/src/Geometry/A
2020-08-23 01:43:55 1691
原创 坐标变换学习笔记—代码篇ROS
坐标变换代码笔记坐标变换-ROS坐标变换-Eigen坐标变换-Matlabtf::Quaternion q;tf::quaternionMsgToTF(imu_msg->orientation, q);tf::Matrix3x3(q).getRPY(roll, pitch, yaw);tf::createQuaternionMsgFromRollPitchYaw(double r, double p, double y)tf::Quaternion q = tf::createIden
2020-08-20 00:10:41 8015
原创 坐标变换学习笔记—理论篇
旋转矩阵(R\mathbf{R}R) <==> 旋转向量(旋转角θ\thetaθ, 旋转轴n\mathbf{n}n)R=cos(θ)I+(1−cos(θ))nnT+sin(θ)n∧\mathbf{R} = cos(\theta) \mathbf{I} + (1-cos(\theta))\mathbf{n}\mathbf{n}^T + sin(\theta) \mathbf{n}^{\wedge} R=cos(θ)I+(1−cos(θ))nnT+sin(θ)n∧tr(R)=cos(θ)tr(I
2020-08-16 22:17:44 1188
原创 hdl_graph_slam 源码阅读笔记
src/hdl_graph_slam/registration.cpp :初始化匹配对象,提供可供选择的点云匹配方法(ICP,GICP,NDT)。apps/prefiltering_nodelet.cpp :接收名为 “velodyne_points” 的点云消息,降采样之后再以 “filtered_points” 的消息发布出去。降采样方法包括: pcl::VoxelGrid,pcl::ApproximateVoxelGrid,NONE(不降采样)三种方式可选。apps/scan_matchin
2020-08-12 16:54:52 249
原创 关于ROS的OccupancyGrid数据对应的地图颜色
最近在搞基于ROS的2D占用栅格地图,这类地图可用于机器人定位,它在机器人导航和避障方面很常用。它的消息类型是nav_msgs/OccupancyGrid,通过命令:rosmsg show nav_msgs/OccupancyGrid 可以看到nav_msgs/OccupancyGrid消息包含如下信息:std_msgs/Header header uint32 seq time stamp string frame_idnav_msgs/MapMetaData info time ma
2020-06-11 00:31:31 4423 1
原创 apollo自动驾驶平台配置笔记
apollo自动驾驶平台配置欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使
2020-06-07 14:54:12 3792 4
原创 论文翻译—2D NDT算法论文
正态分布变换:一个新的方法来匹配激光扫描相关信息:题目:The Normal Distributions Transform: A New Approach to Laser Scan Matching来源:Proceedings 2003 IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS 2003)作者:Biber, Peter, and Wolfgang Straßer摘要摘要—2D范围内的扫
2020-05-18 00:07:53 2405
原创 利用Bresenham算法画圆和直线
利用Bresenham算法,从零开始实现在矩阵中画圆和直线,效果如下:基于matlab的画图代码如下:close all; clear all; clc% create image reactangle:img = ones(100, 200);figure('Name', 'original image')imshow(img)% draw line:help bresen...
2020-04-25 22:07:55 2894
原创 kitti点云地图拼接
文章目录1. 关于kitti数据集以及坐标系2. 关于bin格式点云的存储方式3. 点云拼接前言:这段时间在学习坐标系变换相关的知识,同时尝试了利用kitti公开点云数据集以及对应的真实位姿,拼接出全局地图,如下图所示,我采用了kitti点云数据集的00序列来测试拼接地图。下面大致记录下点云拼接过程以及基于C++和Matlab的拼接代码,备忘。1. 关于kitti数据集以及坐标系kitti数...
2020-04-13 00:25:47 3940 12
原创 相机畸变校准
相机畸变模型前言,关于相机的畸变模型及其推导,很多文章都已经写得很详细了,我这里只总结结论,把重点放在理解以及使用上。这篇文章总结了径向切向畸变,鱼眼畸变,FOV畸变;同时,还根据径向切向畸变的模型,以Euroc数据集为例,提供了畸变矫正的代码示例。1. 针孔模型(pinhole model)针孔相机模型(即直线投影模型,是相机在理想情况下的投影模型)是消费类相机中最常见的相机模型。在此模型...
2020-03-15 22:53:10 3594
原创 C++算法程序整理——递归算法
递归算法递归,定义一个过程或函数时出现调用本过程或本函数的成分,称之为递归。一般来说,能够用递归解决的问题应该满足以下三个条件:1)需要解决的问题可以转化为一个或多个同构(或同样性质的)子问题来求解,而这些子问题的求解方法与原问题完全相同,只是在数量规模上不同。2)递归调用的次数必须是有限的。3)必须有结束递归的条件来终止递归。...
2020-02-08 13:34:52 2704
原创 C++学习笔记-STL中的算法
STL算法简介:100多种算法函数对象(function objects)函数适配器(function adapters)三个头文件:&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;algorithm&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;
2019-09-07 18:24:41 241
原创 利用深度图建立三维点云地图笔记
前言:这几天在独立地研究对RGBD图像序列,建立其三维点云地图。由于我并没有借鉴像RTAB-MAP等SLAM方法,所以本文仅仅能够帮助学习和理解是三维建图的过程,对于实际的三维建图应用,意义并不大。本文的方法非常的简单粗暴,思路是首先求取每一帧深度图像的位姿,其次,将每一帧深度图转换为点云,最后将点云转换到世界坐标系下。对于求取深度图的位姿,可以使用ORB-SLAM2算法得到;对于深度图转点云,...
2019-05-25 16:26:25 9011 4
原创 将轨迹对应到google earth(谷歌地球)上
下面为将机器人的轨迹对应到谷歌地球上的demo,只需要将 <coordinates> 与 </coordinates>之间的经纬度坐标换成自己的经纬度坐标数据,然后将下面的内容保存的到文件中,将扩展名改为.kml,再打开google earth,将该文件拖进去,即可在上面显示对应的坐标轨迹。<?xml version='1.0' encoding='UTF-8'...
2019-05-25 16:22:25 3218 4
原创 C++学习笔记-String对象的操作
String对象初始化string初始化方法解释sting s;创建空的字符串;string s = “value”;用值 value 来初始化字符串 s;string s(“value”);用值 value 来初始化字符串 s;string s(s2);用字符串 s2 来初始化字符串 s;string s(s2, pos);从s2的位置 p...
2018-12-16 13:07:12 520
原创 vector容器的自增长分析
vector是用数组做的,因此具备数组的优(具有下标,操作很快)缺(一旦数组大小定义好了就不允许再改变)点。当vector容器中加入新的元素时,若容器容量不够,则创建新的更大容量的数组,再将原数组中的元素copy进来;#include<iostream>#include<vector>int main(){ std::vector<int> v; ...
2018-12-15 02:19:45 220
原创 STL学习笔记-容器初始化与赋值
顺序容器:vector, list, deque容器适配器:satck, queue, priority_queue每种容器都有自己的迭代器,迭代器的接口都是一样的。常用迭代器操作:++iter; --iter; *iter; iter1 == iter2; iter1 != iter2vector和deque迭代器的额外操作:iter + n; iter - n; >, >=...
2018-12-11 18:07:37 1180
原创 STL学习笔记-不同容器的操作
1,deque类deque与vector类似,是一个动态数组,与vector不同的是它可以在数组的开头和结尾插入和删除数据#include&amp;lt;iostream&amp;gt;#include&amp;lt;deque&amp;gt;#include&amp;lt;algorithm&amp;gt;int main(){ std::deque&amp;lt;int&
2018-12-09 22:39:03 148
原创 基于C和C++将int与字符串类型相互转换
字符串转int型:方法1,Use C standard library#include &lt;iostream&gt;#include &lt;cstdlib&gt;#include &lt;string&gt; int main(){ std::string text = "123"; int n = std::atoi (text.c_str())
2018-12-03 22:24:03 271
原创 ROS 发布和订阅自定义消息数组
今天学习使用ros发布和订阅自定义的消息以及消息数组,记录,备忘! 说明: 以ubuntu14.04,indigo版本为例 ros工作空间位置:~/workspace/catkin_ws 定义的消息数组为: std_msgs/Header header geometry_msgs/Pose[] path 其中Header是由uint32 seq,time stamp,string f...
2018-06-20 19:37:56 13979 3
原创 在ros环境下的amcl配置笔记
这段时间导师让研究一下amcl,在这之前只有一点ros基础,根本不知道amcl是什么东东,于是开始查资料找教程,但是真心没有找到面向小白的配置教程,在这几天的摸索中,终于让amcl正常跑起来了,所以,一定要做一下笔记,免得以后忘光了。 amcl的英文全称是adaptive Monte Carlo localization,即自适应蒙特卡罗定位,它是2D机器人运动的概率定位系统,它实现了自适应(或...
2018-05-17 02:43:38 8582 7
原创 opencv图像的载入:imread()函数
第一章1,通过opencv读取图片并显示: 说明:所有示例代码均在win10+opencv3.2+vs2013环境下运行,关于opencv3.2环境的配置,请参考http://blog.csdn.net/ailunlee/article/details/70254835#include <opencv2/opencv.hpp>using namespace cv;int main(){
2017-11-02 20:11:52 3111
imu_gps_localization代码注释版.zip
2020-10-08
llandxy.zip
2019-05-25
生成map_server可加载的pgm地图
2018-05-23
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人