自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(127)
  • 资源 (6)
  • 收藏
  • 关注

原创 最小二乘法、最大似然估计和卡尔曼滤波

一、最小二乘法和最大似然估计最小二乘法可以从Cost/Loss function角度去想,这是统计(机器)学习里面一个重要概念,一般建立模型就是让loss function最小,而最小二乘法可以认为是 loss function = (y_hat -y )^2的一个特例,类似的想各位说的还可以用各种距离度量来作为loss function而不仅仅是欧氏距离。所以loss function可以说...

2019-06-17 11:42:47 4065 1

转载 C++重写、重载

重载: (静态多态)1、同一作用域2、子类无法重载父类函数,父类同名函数将被隐藏3、重载是在编译期间根据参数类型和个数决定的重写: (动态多态)1、在子类中定义与父类中原型相同的函数2、函数重写只发生在父类与子类之间3、使用virtual关键字申明后能产生多态4、运行期间根据具体对象类型决定调用的函数多态满足的三个条件:1、要有继承 2、要有虚函...

2019-06-15 21:38:04 692

原创 动态规划之背包问题

一、01背包​​​​​​/** * vivo2019提前批笔试第三题: * 小v负责一次活动礼品采购,每一款礼品的受欢迎程度(热度值)各不相同,现给出总金额以及各个礼品的单价 * 和热度值,且每个礼品只购买一个,如何购买可以使得所有礼品的总热度值最高。 * 输入: * 第一行是一个正整数,表示总金额(不大于1000) * 第二行是一个长度为n的正整数数组,表示礼品单价(n不大于...

2019-06-11 22:38:29 211

原创 ROS launch 文件

1、remap 标签<launch> <node pkg="test1" type="test1" name="test1" output="screen"> <!--test1节点发布的topic为/talker--> <!--一个例子:将talker节点发布的话题/talker映射到/re_talker的名...

2019-06-05 10:55:01 374

原创 istringstream,ostringstream和stringstream

1、头文件#include <sstream>2、作用istringstream类用于执行C++风格的字符串流的输入操作。ostringstream类用于执行C++风格的字符串流的输出操作。stringstream类同时可以支持C++风格的串流的输入输出操作。3、代码1)istringstream#include <iostream&gt...

2019-06-03 14:59:30 676 1

原创 linux终端复用 tmux

1、安装sudo apt-get install tmux2、使用鼠标配置touch ~/.tmux.confgedit ~/.tmux.conf.tmux.conf内容set -g mouse on在tmux终端里,ctrl+b,shift+: 之后source ~/.tmux.conf便可在tmux环境下使用鼠标选中和上下滚动。3、tmux 快捷键...

2019-05-31 17:09:01 164

原创 扩展卡尔曼滤波建模及应用

一、公式1、卡尔曼滤波 A:状态向量 F:状态转移矩阵 P:状态协方差矩阵 Q:过程噪声矩阵 Z:测量向量 H:测量矩阵 R:测量噪声矩阵本质上讲,建立卡尔曼滤波数学模型的过程就是建立以上矩阵的过程。Kalman滤波基本的模型假设包括:(1)系统的状态方程是线性的;(2)观测方程...

2019-05-27 22:16:22 4789

原创 算法基础

一、动态规划定义:动态规划一般用来求解最优化问题,其适用的条件是要求待求解的最优化问题具备两个因素:最优子结构和子问题重叠。通过求解一个个最优子问题,将解存入一张表中,当后续子问题的求解需要用到之前子问题的解时直接查表,每次查表的代价为常数时间。一句话理解动态规划就是:枚举所有状态,然后剪枝,寻找最优状态,同时将每一次求解子问题的结果保存在一张“表”中,以后再遇到重叠的子问题时从表内保存的状态...

2019-05-24 21:03:28 246

原创 粒子滤波算法

粒子滤波(PF: Particle Filter)的思想基于蒙特卡洛方法(Monte Carlo methods),它是利用粒子集来表示概率,可以用在任何形式的状态空间模型上。其核心思想是通过从后验概率中抽取的随机状态粒子来表达其分布,是一种顺序重要性采样法(Sequential Importance Sampling)。简单来说,粒子滤波法是指通过寻找一组在状态空间传播的随机样本对概率密度函数进...

2019-05-16 18:14:03 6841

原创 AMCL 激光测量模型

一、似然域模型 likelihood_fieldmodel1、原理 它是一种“特设(ad hoc)”算法,不必计算相对于任何有意义的传感器物理生成模型的条件概率。而且,这种方法在实践中运行效果良好。即使在混乱的空间,得到的后验也更光滑,同时计算更高效。 主要思想是将传感器扫描的终点映射到栅格地图。计算与栅格地图最近障碍之间的距离。 ...

2019-05-15 16:49:38 2517 2

原创 Ubuntu下USB权限问题以及udev规则文件编写

在ubuntu系统下使用传感器的时候,通常会遇到一些权限和串口号不一致问题。解决方法:在udev下的添加用户自定义的设备挂载规则。1)进入/etc/udev/rules.d/目录下。cd /etc/udev/rules.d/2)在该目录下创建对应传感器的规则文件,后缀为.rules,名字自己取。sudo touch serial.rules3) 编辑新建的规则文件...

2019-05-15 13:38:34 1334

原创 利用Kalibr标定Camera-IMU外参

一、参考论文Paul Furgale, Joern Rehder, Roland Siegwart (2013). Unified Temporal and Spatial Calibration for Multi-Sensor Systems. In Proceedings of the IEEE/RSJ International Conference on Intelligent Ro...

2019-04-10 11:46:38 3247

原创 ROS中map、costmap数据格式

1、topic数据格式map与costmap都是以nav_msgs::OccupancyGrid类型发布其topic。 其中整张地图的障碍物信息存放在data数据成员中,data是一个int8类型的vector向量,即一维数组。假设一张pgm的map地图,宽:widt...

2019-04-04 16:45:57 5637 4

原创 map_server

1. 地图格式1.1 图像格式该图像描述了相应像素的颜色中的世界的每个单元的占用状态。标准配置中,白色像素是自由的,黑色像素被占据,两者之间的像素是未知的。接受彩色图像,但颜色值平均为灰度值。 1.2YAML格式YAML格式简单完整的示例:image: testmap.png...

2019-04-03 17:44:15 1107

转载 C++ 类的静态成员及静态成员函数

对象与对象之间的成员变量是相互独立的。要想共用数据,则需要使用静态成员和静态方法。 只要在类中声明静态成员变量,即使不定义对象,也可以为静态成员变量分配空间,进而可以使用静态成员变量。(因为静态成员变量在对象创建之前就已经被分配了内存空间) 静态成员变量虽然在类中,但它并不是随对象的建立而分配空间的,也不是随对象的撤销而释放(一般的成员在对象建立时会分配空间,在对象撤销时会释放)。静态成员变量...

2019-03-05 22:02:06 192

原创 C++11中emplace_back和 push_back 的区别

c++开发中我们会经常用到插入操作对stl的各种容器进行操作,比如vector,map,set等。在引入右值引用,转移构造函数,转移复制运算符之前,通常使用push_back()向容器中加入一个右值元素(临时对象)时,首先会调用构造函数构造这个临时对象,然后需要调用拷贝构造函数将这个临时对象放入容器中。原来的临时变量释放。这样造成的问题就是临时变量申请资源的浪费。引入了右值引用,转移构造函...

2019-03-02 10:52:09 444

原创 make_heap,pop_heap,push_heap

一、概念堆可以看做一个完全二叉树,同时该完全二叉树满足双亲结点大于等于孩子结点(大顶堆),或者双亲结点小于等于孩子结点(小顶堆)。make_heap: 时间复杂度为O(N)push_heap: 时间复杂度为O(logN)pop_heap: 时间复杂度为O(logN)sort_heap: 时间复杂度为O(NlogN)二、代码// range heap example#...

2019-03-01 10:08:19 750

原创 雅可比矩阵与海森矩阵

在向量分析中, 雅可比矩阵是一阶偏导数以一定方式排列成的矩阵。其行列式称为雅可比行列式。一、Jacobian矩阵雅可比矩阵的重要性在于它体现了一个可微方程与给出点的最优线性逼近. 因此, 雅可比矩阵类似于多元函数的导数。                      即:假设F: Rn→Rm是一个从欧式n维空间转换到欧式m维空间的函数。这个函数F由m个实函数组成: ...

2019-02-23 10:30:13 2565

原创 《Trajectory modification considering dynamic constraints of autonomous robots》理解

        eletic band(橡皮筋)的定义:连接起始、目标点,并让这个路径可以变形,变形的条件就是将所有约束当做橡皮筋的外力。关于time eletic band的简述:起始点、目标点状态由用户/全局规划器指定,中间插入N个控制橡皮筋形状的控制点(机器人姿态),当然,为了显示轨迹的运动学信息,我们在点与点之间定义运动时间Time,即为Timed-Elastic-Band算法。一、T...

2019-02-22 16:47:58 6085

原创 teb_local_planner 理解

1、算法流程图 2、代码入口teb_local_planner_ros.cpp bool TebLocalPlannerROS::computeVelocityCommands(geometry_msgs::Twist& cmd_vel)bool success = planner_->plan(t...

2019-02-20 17:27:28 5641 1

转载 2d Laser 和 camera 外参标定

转自原文:https://blog.csdn.net/heyijia0327/article/details/85000943 1、论文Extrinsic Calibration of a Camera and Laser Range Finder (improves camera calibration)2、代码https://github.com/cjn0608/CamLase...

2019-02-18 21:16:31 2445 1

转载 NULL与0的区别、nullptr的来历

某些时候,我们需要将指针赋值为空指针,以防止野指针。有人喜欢使用NULL作为空指针常量使用,例如:int* p = NULL;。也有人直接使用0值作为空指针常量,例如:int* p = 0;。前者可能觉得:NULL作为空指针常量,名字很形象,可读性较强。后者可能觉得:NULL并不是C/C++语言的关键字,而是一个在标准库头文件&lt;stddef.h&gt;中定义的宏,因此要使用N...

2019-01-25 15:45:40 280

原创 ceres 拟合曲线

假设有一条满足以下方程的曲线: 其中a,b,c为曲线的参数,w为高斯噪声。这是一个非线性模型。假设我们有N个关于x,y的观测数据点,想根据这些数据点求出曲线的参数。那么,可以求解下面的最小二乘问题以估计曲线参数: ...

2019-01-15 17:47:54 1181 1

原创 C++ 读写文件 ifstream,ofstream,sstream

ofstream是从内存到硬盘,ifstream是从硬盘到内存,其实所谓的流缓冲就是内存空间;  在C++中,有一个stream这个类,所有的I/O都以这个“流”类为基础的,包括我们要认识的文件I/O,stream这个类有两个重要的运算符:  1、插入器(&lt;&lt;)    向流输出数据。比如说系统有一个默认的标准输出流(cout),一般情况下就是指的显示器,所以,cout&lt;&l...

2019-01-11 15:34:55 926

转载 boost锁 boost::unique_lock/boost::shared_lock

boost锁的概述:boost库中提供了mutex类与lock类,通过组合可以轻易的构建读写锁与互斥锁。举个通俗的例子,如果共享资源是一个自动锁住的房间,互斥体是钥匙,进入房间必须取钥匙,离开房间应该还钥匙。这就对应着互斥体的lock(取钥匙)和unlock(还钥匙)。动态分配内存存在类似的情况。如果忘记delete,会导致内存泄漏。它是如何解决的?在栈上分配对象,要一个特点,那就是离...

2019-01-08 15:13:37 2357

原创 PCL 区域生长算法

算法核心:该算法是基于点法线之间角度的比较,企图将满足平滑约束的相邻点合并在一起,以一簇点集的形式输出。每簇点集被认为是属于相同平面。区域增长算法已经是比较老的平面分割算法参考:http://pointclouds.org/documentation/tutorials/region_growing_segmentation.php#region-growing-segmentation...

2018-11-23 16:24:46 2605 1

原创 相机针孔模型之坐标转换

                                     1、 世界坐标系通过外参矩阵转换到相机坐标系                                                            2、 相机坐标系通过焦距对角矩阵转换到图像物理坐标系                                 由图相似三角形可...

2018-11-12 22:13:20 780

原创 leetcode 解题记录

一、数组1、26.从排序数组中删除重复项给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例1:给定数组 nums = [1,1,2], 函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。 你不需...

2018-10-01 22:29:41 752

原创 二叉树

一、二叉树概念 二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用于实现二叉查找树和二叉堆。  性质1:在二叉树的第i层上至多有个结点。 性质2:深度为k的二叉树至多有个结点。 性质3:对任何一棵二叉树T,如果其终端结点数为n0,度位2的结点数为n2,...

2018-10-01 20:19:24 403

原创 排序算法 C++

1、代码#include <iostream>#include <vector>using namespace std;//冒泡排序void bubble_sort(vector<int> &nums){ for (int i = 0; i < nums.size() - 1; i++) { // times ...

2018-10-01 19:42:38 757

转载 Eigen 简单使用快速参考

1、Eigen 矩阵定义#include &lt;Eigen/Dense&gt; Matrix&lt;double, 3, 3&gt; A; // Fixed rows and cols. Same as Matrix3d.Matrix&lt;double, 3, Dynamic&gt; B; // Fixed rows, dynamic c...

2018-09-10 20:44:33 916 1

原创 操作系统常见面试题

1、如何调试栈溢出 2、计算机内存堆和栈的区别 3、线程同步的方式,互斥锁和信号量的对比 4、进程和线程的区别

2018-09-09 21:27:26 205

原创 数据结构常见面试

1、红黑树结构,查找时间复杂度 2、如何用O(1)复杂度查找到stack里面的最小值 3、八皇后 4、C++自己实现一个队列5、数组和链表的区别6、什么是kd-tree,如何实现...

2018-09-09 21:25:42 493

原创 C++ 常见面试题

1、vector容器capacity和size区别,如何动态增长 vector中这两个属性很容易弄混淆。 size是当前vector容器真实占用的大小,也就是容器当前拥有多少个容器。capacity是指在发生realloc前能允许的最大元素数,即预分配的内存空间。 当然,这两个属性分别对应两个方法:resize()和reserve()。使用resize(),容器内的对象...

2018-09-09 21:08:26 340

原创 C++ const关键词

1、指针使用const(1)指针本身是常量不可变,即指针指向的地址不可变     char* const p;(2)指针所指向的内容是常量不可变     const char* p;(3)两者都不可变     const char* const p;...

2018-09-08 10:21:37 197

转载 stl中auto_ptr,unique_ptr,shared_ptr,weak_ptr四种智能指针使用总结

1. auto_ptrauto_ptr主要是用来解决资源自动释放的问题,比如如下代码:void Function(){Obj*p = new Obj(20);...if (error occor)throw ... 或者 retrun;delete p;}在函数遇到错误之后,一般会抛异常,或者返回,但是这时很可能遗漏之前申请的资源,及时是很有经验的程序员也有可能出现这种错误,...

2018-09-07 21:41:58 320

原创 三维空间的位姿描述和齐次变换

一、三维空间的位姿描述和齐次变换 首先规定一个坐标系,相对于该坐标系,点的位置可以用3维列向量表示;刚体的方位可用3×3的旋转矩阵来表示。而4×4的齐次变换矩阵则可将刚体位置和姿态(位姿)的描述统一起来,它具有以下优点:(1) 它可描述刚体的位姿,描述坐标系的相对位姿(描述)。(2) 它可表示点从一个坐标系的描述转换到另一坐标系的描述(映射)。(3)它可表示刚体运动前、...

2018-09-05 19:27:42 9524 1

转载 A*算法原理

A*简介A算法是启发式算法重要的一种,主要是用于在两点之间选择一个最优路径,而A的实现也是通过一个估值函数F=G+HG表示该点到起始点位所需要的代价 H表示该点到终点的曼哈顿距离。 F就是G和H的总和,而最优路径也就是选择最小的F值,进行下一步移动(后边会做详细介绍)曼哈顿距离 ...

2018-08-31 22:05:48 14326

原创 C++11 STL容器新用法

一、常用1、using用法using Vector = Eigen::Matrix&lt;FloatType, 3, 1&gt;;// 类型别名,等同于typedef Eigen::Matrix&lt;FloatType, 3, 1&gt; Vector;2、std::move() 使用通过std::move,可以避免不必要的拷贝操作。std::move是为性能而生。...

2018-08-31 11:49:20 623

转载 AdaBoost C++实现

    每个弱分类器的分类结果加权相加后,再用sign函数激活,得到最终分类结果。这里的权就是alpha   alpha根据每个弱分类器的分类错误率算出,alpha = 0.5 * ln( (1-errorRate) / errorRate )   本算法中的弱分类器为单决策树,在构建单决策树时,会根据加权错误率来衡量其性能   被分错的样本权重高,权重计算:D[i] = D[i]...

2018-08-29 20:44:19 651 1

Serial_Node.tar.gz

实现机器人底盘与上层ROS通信协议功能,成功接收机器人底盘里程计,IMU, 电压等传感器信息。并实现将里程计和IMU通过发布话题方式发布到ROS中,方便系统其他节点订阅使用。

2017-11-06

urg_node.tar.gz

URG雷达驱动软件,通过ROS工程编译,通过运行roslaunch urg_node urg_lidar.launch,便可发布/scan消息

2017-11-06

Visual-Inertial Monocular SLAM with Map Reuse.pdf

Abstract— In recent years there have been excellent results in Visual-Inertial Odometry techniques, which aim to compute the incremental motion of the sensor with high accuracy and robustness. However these approaches lack the capability to close loops, and trajectory estimation accumulates drift even if the sensor is continually revisiting the same place. In this work we present a novel tightly-coupled Visual-Inertial Simultaneous Localization and Mapping system that is able to close loops and reuse its map to achieve zero-drift localization in already mapped areas. While our approach can be applied to any camera configuration, we address here the most general problem of a monocular camera, with its well-known scale ambiguity. We also propose a novel IMU initialization method, which computes the scale, the gravity direction, the velocity, and gyroscope and accelerometer biases, in a few seconds with high accuracy. We test our system in the 11 sequences of a recent micro-aerial vehicle public dataset achieving a typical scale factor error of 1% and centimeter precision. We compare to the state-of-the-art in visual-inertial odometry in sequences with revisiting, proving the better accuracy of our method due to map reuse and no drift accumulation.

2017-11-06

Robust Visual Inertial Odometry Using a Direct EKF-Based Approach.pdf

Abstract— In this paper, we present a monocular visual-inertial odometry algorithm which, by directly using pixel intensity errors of image patches, achieves accurate tracking performance while exhibiting a very high level of robustness. After detection, the tracking of the multilevel patch features is closely coupled to the underlying extended Kalman filter (EKF) by directly using the intensity errors as innovation term during the update step. We follow a purely robocentric approach where the location of 3D landmarks are always estimated with respect to the current camera pose. Furthermore, we decompose landmark positions into a bearing vector and a distance parametrization whereby we employ a minimal representation of differences on a corresponding σ-Algebra in order to achieve better consistency and to improve the computational performance. Due to the robocentric, inverse- distance landmark parametrization, the framework does not require any initialization procedure, leading to a truly power-up-and-go state estimation system. The presented approach is successfully evaluated in a set of highly dynamic hand-held experiments as well as directly employed in the control loop of a multirotor unmanned aerial vehicle (UAV).

2017-11-06

Keyframe-Based Visual-Inertial Odometry Using Nonlinear Optimization.pdf

Combining visual and inertial measurements has become popular in mobile robotics, since the two sensing modalities offer complementary characteristics that make them the ideal choice for accurate Visual-Inertial Odometry or Simultaneous Localization and Mapping (SLAM). While historically the problem has been addressed with filtering, advancements in visual estimation suggest that non-linear optimization offers superior accuracy, while still tractable in complexity thanks to the sparsity of the underlying problem. Taking inspiration from these findings, we formulate a rigorously probabilistic cost function that combines reprojection errors of landmarks and inertial terms. The problem is kept tractable and thus ensuring real-time operation by limiting the optimization to a bounded window of keyframes through marginalization. Keyframes may be spaced in time by arbitrary intervals, while still related by linearized inertial terms. We present evaluation results on complementary datasets recorded with our custom-built stereo visual-inertial hardware that accurately synchronizes accelerometer and gyroscope measurements with imagery. A comparison of both a stereo and monocular version of our algorithm with and without online extrinsics estimation is shown with respect to ground truth. Furthermore, we compare the performance to an implementation of a state-of-the-art stochasic cloning sliding-window filter. This competititve reference implementation performs tightly-coupled filtering-based visual-inertial odometry. While our approach declaredly demands more computation, we show its superior performance in terms of accuracy.

2017-11-06

Efficient Sparse Pose Adjustment for 2D Mapping.pdf

Pose graphs have become a popular representation for solving the simultaneous localization and mapping (SLAM) problem. A pose graph is a set of robot poses connected by nonlinear constraints obtained from observations of features common to nearby poses. Optimizing large pose graphs has been a bottle

2017-11-06

空空如也

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

TA关注的人

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