自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

qq91752728的博客

请忽略我的名字

  • 博客(41)
  • 资源 (1)
  • 收藏
  • 关注

原创 Primal problems and dual problems

2019-01-28 18:15:04 903

原创 EBand Local Planner基本思想讲解

这里介绍一个local planner,论文是这篇Elastic Bands: Connecting Path Planning and Control 目前我们的一些规划的方法主要思想就是先规划出Path,接着根据Path生成Trajectory,让机器人跟着(tracking)这个Trajectory走就不会有事。 主要介绍了Elastic Bands这种Connecting Path P...

2018-07-24 10:18:08 5748

原创 Udacity X Apollo课程 学习笔记 (20180809更新)

1.Apollo架构总述首先主要提到的就是关于一些对比ROS做出改进的地方1.1单点故障问题在一些通信架构中,单点故障问题是我们不可忽视的,而在ROS中,通信都是经过master节点进行发布和订阅消息。很显然如果master挂掉就会出现这个单点故障的问题。而apollo中每个节点会互相保存其他节点的信息 1.2使用共享内存加快各节点的通信速度1.3用protobuf来序列...

2018-07-07 09:40:12 1445

原创 最小生成树和最短路径

这篇算作是《算法》第四版部分读后感吧我思考这个问题的开始就是纠结最小生成树prim算法和最短路径dijkstra算法的异同1.最小生成树prim算法 直接从例子开始吧,我们考虑一副这样的图 1.将D设为起始点(设置某个点为起始点是随机的),考虑与它相邻节点的权重值,图中黄色节点,也就是D-A,D-B,D-E,D-F 2.选取权重值最小的D-A将其连接,图中蓝色的代表已经加入到...

2018-06-23 09:59:04 2311

原创 Robot Motion Planning(运动规划)

来自《planning_algorithm》一书的笔记1.Configure Space可以理解为机器人的空间大小,称作为”C-space”,在空间中移动的时候将障碍物膨胀一个机器人的半径 如上图所示,中间和右边的图中,存在两个原型机器人,所以我们需要将障碍物膨胀一个半径,这样我们在之后的运动中可以把一个有体积的机器人看做是一个空间点的移动2.forward search a...

2018-06-07 10:01:21 5823

原创 Coverage Path Planning(区域覆盖)

扫地机区域覆盖的问题下面这个图是一种很常见的策略,也就是让它走S型进行覆盖 如果遇到边界的墙就进行左转或者右转然后往回走,那么接下来我们考虑障碍的情况上面这幅图。是我手画的。。应该意思表达清楚,有点丑就别在意了。 小车从左上角走到右下角,遇到障碍就转弯,很显然中间上方的区域并没有覆盖到这篇论文(Research on Complete Coverage Path P...

2018-06-06 12:38:39 7965 7

原创 矩阵的零空间和列空间

零空间 满足Ax = 0的所有x的集合为矩阵A的零空间 也就是齐次方程Ax = 0的全体解的集合m * n矩阵A的零空间是Rn的一个子空间 我们考虑一个3 * 4 的矩阵 如果要是它有定义,我们需要的一个向量必须有四个数(类似线性方程组,x1,x2,x3,x4),所以NulA 是 R4 的一个子空间列空间 与零空间不同,列空间是可以由向量的线性组合显式定义 零空间是由矩...

2018-05-26 09:50:29 8674

原创 右值引用和移动语义

什么是右值什么是左值,已经很多类似的文章介绍了。我这里直接说重点,为什么我们需要转移语义class Foo{public: Foo():a(0){ } Foo(int a_):a(a_){ printf("constructor\n"); } Foo(const Foo& rhs){ printf("con...

2018-05-14 16:13:17 178

原创 typename的双重定义

如果问上图中的class和typename有什么不同,答案就是这两者在这种情况是没有什么不同的下面我们考虑上图中这种情况,C中有一个叫const_iterator的东西,如果我们现在不知道C的类型,那么const_iterator可能只是命名空间C里面的一个变量名而已,所以typename关键词就是来对这种情况进行限定的,typename指涉一个嵌套从属类型名称...

2018-05-08 12:02:28 232

原创 路径规划之Backward search and forward search

应该翻译成正向搜索和反向搜索?反正意思就是backward指从目标节点到起始节点的搜索,forward指从起始节点到目标节点的搜索常见的比如A* 就是forward search,D* 是backward search。那么问题来了,两种方法肯定是有优劣的。我们简单的用下面这个例子描述问题如果正向搜索显然会因为很多分支导致效率下降,但是如果反向搜索会得到如下结果,访问的节点数会...

2018-05-03 10:26:32 2064

原创 c++和数据结构基础

记录平时不怎么注意的基础概念,陆陆续续会记笔记1.堆和树 如果一棵二叉树的每一个节点都带着一个值,且父亲的值总是比儿子的值要大,我们称这棵树为大顶二叉堆,如果是父亲比儿子都要小,那就是小顶二叉堆,统称为二叉堆。(其实一般都把二叉两个字省略掉,毕竟通常说的堆都是二叉堆,然而堆不止二叉堆)。这一个良好的性质注定了堆可以用来当作优先队列使用。堆是特殊的树,注意与二叉排序树(左子树的节点值一...

2018-04-24 14:45:06 1188

原创 ROS gmapping,hector和amcl的坐标系理解

首先我们明确几个重要的坐标系 1.base_link 移动机器人的当前坐标系 2.odom 里程计坐标系,一般由里程计运动模型来计算,不过不同的地方可能会有不同的计算方法,比如有的可能是编码器计算。 这个坐标系的特点就是,会有累计误差,并不能做为一个长期的参考坐标系,但是优点则是连续,无跳变 3.map 地图坐标系,可以作为一个长期的参考坐标系,但是不连续。原因是,在定位模块中会根据...

2018-04-20 17:50:35 4441 3

原创 ROS中的路径规划算法dijkstra和A*

ROS Navigation包里面的GlobalPlanner自带是提供了两种全局路径规划的方法,dijkstra和A* dijkstra 大家都知道了,A*在之前的一篇博客里面有介绍 A* 评估函数 为 f(n) = g(n) + h(n) g(n) 为起点到已经搜寻过的节点的代价值 h(n) 为当前节点到目标节点(终点)的值 在这里我们可以看到A* 考虑了已经遍历过的点和未遍历过...

2018-04-19 09:51:24 23832

原创 C语言malloc和指针传递陷阱

最近写二叉树的基本操作的时候发现了这个问题,所以写了个简单的例子,做个笔记 下列初始化数组过程#include <iostream>void init_array(int* arr,int size){ arr = (int*)malloc(sizeof(int) * size); for (int i = 0; i < size; ++i) { ...

2018-04-18 13:20:50 1911

原创 递归创建二叉树的指针传递和退出条件

一想到二叉树的创建,很自然的我们会写出这样的代码int create_tree(binary_node** b){ char c; scanf("%c",&c); if (c == '#'){ *b = NULL; }else{ //这里注意,如果传入进来的只是*b 那么走到这里重新分配内存空间之后就不是在操作实参了。...

2018-04-18 12:25:41 1041

原创 安卓自定义View之可缩放平移的GLSurfaceView

因为之前用到了对图用opengl进行渲染,所以用到了GLSurfaceView,但是由于原生不支持缩放和平移,一时半会儿也没有找到合适的轮子,所以自己撸了一个。可以直接在layout文件中使用,下面是链接https://github.com/pengjiawei/opengl_demo...

2018-04-17 11:13:59 2091

原创 扩展卡尔曼滤波分步骤详细理解

如果我写的这篇文章有幸被你看到,虽然手稿看起来比较蛋疼,但是我还是希望你可以看一下。至少我按照这个思路来理解是理解通了

2018-04-17 11:02:02 4359 1

原创 线性高斯系统

我们平时熟知的卡尔曼滤波就是高斯滤波的一种,因为它是基于高斯分布的。用高斯函数来表示后验具有很好的影响,因为它的是单峰,有单一的极大值。高斯滤波中的参数的均值和方差称为矩参数,分别为一阶矩和二阶矩(PS:这一点的理解上非常重要)。卡尔曼滤波就是在线性高斯假设的基础上建立起来的 1。状态转移概率p(x_t | u_t,x_t-1) 是带有随机高斯噪声的参数的线性函数 xt 为状态向量,u...

2018-04-16 10:11:24 7319

原创 sofa-pbrpc 和 protobuf 组合使用

根据 sofa-pbrpc 的文档,实现了整合使用,下面是项目地址 c++ 客户端和服务端 https://github.com/pengjiawei/protobuf_sofa_rpc_demo java 客户端请求 https://github.com/pengjiawei/protobuf_sofa_rpc_demo我把这个完全过了一遍,觉得主要注意的有几个地方如果不想用...

2018-04-14 16:35:48 786

原创 如何写好的注释

1.解释你想做什么(what),和为什么做(why),而不是怎么做的(how)int a = 0;//把a一直加到10for (int i = 0; i < 10 ; ++i){ ++a;}比如上面这个代码(。。。其实太简单了,像这种情况你不写注释别人也看得懂)。 解释你想做什么,那么你可能会写出 把a加1一直加到10 类似这样的注释 为什么做,那么你可能会写出 把...

2018-04-14 16:26:18 1464

原创 关于Java HttpURLConnection的疑惑点connection.setRequestMethod("GET")和outputStream.write

HttpURLConnection connection = null; InputStream inputStream = null; Proxy proxy = new Proxy(java.net.Proxy.Type.HTTP,new InetSocketAddress("127.0.0.1", 8888)); try { ...

2018-04-14 15:54:40 6454 5

原创 信息滤波

对待事物,从对比和更高层次先去理解会透彻很多像卡尔曼滤波,高斯是用它的矩参数来描述的,也就是均值(一阶矩),方差(二阶矩)就可以描述一个滤波。还有一种和卡尔曼滤波对偶的滤波叫做信息滤波(information filter),就是用它的正则参数来表述,用一个信息矩阵和一个信息向量来描述信息矩阵为协方差矩阵的逆 信息向量 当然,信息滤波这个东西存在肯定是有它的应用意义的,例如...

2018-04-10 10:42:50 2683

原创 ROS Navigation包的理解

分三大块来理解,costmap,globalplanner,baselocalplanner1.costMap在costmap这一模块上面,首先就提出了分层 如果是一整张图,那么我们对图的任何修改都会在它上面完成。实际上当信息量太多的时候,很有可能我们并不想总是一次性更新所有的图。具体论文Lu, Hershberger, Smart - 2014 - Layered costmaps f...

2018-04-09 11:25:12 3447

原创 四元数和欧拉角

1.欧拉角 我们这里谈论欧拉角只讨论在笛卡尔坐标系下,不考虑飞机坐标系(我不确定正规是不是叫这个名字)那种。 也就是右手定则确定的笛卡尔坐标系。 可以把x和y放在水平面,z轴朝上,这样想象一下。 然后,很显然存在三种旋转方式,也就是分别绕x,绕y和绕z旋转。我们分别把三种旋转称为Roll(绕x轴旋转),Pitch(绕y轴旋转),Yaw(绕z轴旋转)。 但是这个存在一个万向锁的问题,在...

2018-04-09 10:03:17 323

原创 线性优化方法,一阶二阶梯度法,高斯牛顿法,列文伯特-马夸尔特法

1.一阶二阶梯度法 求解的最直观方法就是将目标函数(线性优化最常见的那种目标函数,下面式子中左边那个)在x附近进行泰勒展开 其中J就是目标函数||f(x)||^2关于x的导数(雅克比矩阵),H则是二阶导数(海森Hessian矩阵).。 如果这个式子只保留一阶梯度,然后对右边的式子对Δx求导得导数等于J(x),这意味着当Δx = J(x)的时候,这个函数最大。那么如果我们想要这个函数最小的...

2018-04-04 10:55:53 6720

原创 稀疏扩展信息滤波

稀疏扩展信息滤波(Sparse Extended Information Filter,SEIF)首先对比一下EKF-SLAM和Graph-SLAM, EKF-SLAM算法是主动的,它需要获取每一时刻的信息,把信息分解为概率分布,但是因此计算代价也昂贵。 Graph-SLAM只是简单的将信息累积,之后为了将信息变成地图才进行处理过程,可以看做是一种离线方法。总结了上述两种方法之后,那么...

2018-04-03 16:00:54 1443

原创 机器人的定位

在之前的一篇文章里面,有写到了马尔可夫定位和卡尔曼滤波定位。 我们可以这样理解一下: 马尔可夫定位可以看做是贝叶斯滤波在定位上的一个应用 卡尔曼滤波定位也就是卡尔曼滤波在定位上的应用 很显然这两种都是高斯滤波在定位上的应用,也就是说,这两种都是参数滤波,依赖于一些参数的,而且都是单峰高斯分布。下面提到的这两种定位方式,栅格定位和蒙特卡洛定位,不同于之前两种方式的一个显著特点就是,这...

2018-04-02 17:48:34 725

原创 卡尔曼滤波的理解

首先了解一下滤波滤波:filtering is weighting(滤波即加权)。 滤波的作用就是给不同的信号分量不同的权重。最简单的loss pass filter, 就是直接把低频的信号给0权重,而给高频部分1权重。常见的贝叶斯滤波和卡尔曼滤波 贝叶斯滤波我觉得关键在于对先验概率和后验概率的理解上,就是随着事件的发生,对后验概率一个不断修正的过程(个人理解)。图中的P(x|y...

2018-04-02 12:45:07 2390

原创 矩阵行列式

主要记录几个矩阵行列式容易忽略的性质1.矩阵转置的行列式和原矩阵的行列式相等 2.交换矩阵的任意两行或者两列,行列式符号变反 3.矩阵若有两行或者两列相等,那么该矩阵行列式为0 4.矩阵的任一行或者列乘以k之后的行列式等于原矩阵的行列式乘以k 5.上三角矩阵和下三角矩阵的行列式等于对角线元素的乘积 PS:矩阵是用word手写的...

2018-04-02 11:15:36 2274

原创 平衡二叉树的LR旋转的两种情况

关于平衡二叉树的旋转很多文章都有介绍,我最近也在复习,所以看了很多。但是我在自己写的过程中发现了这个值得注意的点对于LR旋转,我理解的方法就是,先左旋再右旋 但是以上两种情况值得注意的地方就是,不平衡的最后的叶子结点是父节点的左子树还是右子树...

2018-03-28 08:49:07 3414

原创 gmapping论文阅读笔记

下面是看论文的一些心得 论文原文地址risetti07troSection One 首先指出了Rao-Blackwellized particle filters存在的问题 1. 大量的粒子滤波会使得计算过程相当复杂,主要挑战在减少粒子数量 2. 重采样的步骤可能会消灭正确的粒子(This effect is also known as the particle depletio...

2018-03-17 10:31:30 8350 2

原创 使用clion配置和运行ros项目

ros answer上面有很多关于ros developer到底该用哪个IDE的答案。目测使用clion的人并不多,但是我想着ROS是用cmake的,clion也是用cmake的。应该配置起来还不错的。所以我想着来记录一下配置成功的过程 ,途中也遇到了很多问题,但是目前来讲,我是成功运行了ROS项目。1.上jetbrain官网下载clion,切记是linux版,按照官网安装 2.进入ros...

2018-03-16 10:24:16 3273 2

原创 开源项目photoview获取图片大小以及偏移量并还原

因为需要一个支持手势缩放和平移的控件,所以上github找到了这个直接拿来用了photoview我是需要定时网络请求图片然后再放到photoview,需要记录下图片的偏移量以及大小不然每次请求之后图片都会还原成原大小,搜索了一下没找到后来看了看源码找到了办法在photoviewAttacher里面可以看到有这么一段,显然就知道了我们只需要获取到suppmatrix,然后再还原即可...

2018-03-16 10:23:25 1353

原创 启发式算法和A*

启发式算法 一种定义为,一个基于直观和经验的构造的算法,对优化问题的实例能给出可接受的计算成本(计算时间,占用空间等) 内,给出一个近似最优解,该近似解于真实最优解的偏离程度不一定可以事先预计 另一种定义为,启发式算法是一种技术,这种技术使得在可接受的计算成本内去搜寻最好的解,但不一定能保证所得的可行解和最优解,甚至在多数情况下,无法阐述所得解同最优解的近似程度之前做移动机器人路径规划时候...

2018-03-16 10:21:55 1926

原创 马尔可夫模型和隐式马尔可夫模型

马尔可夫模型(Markov Model)是通过寻找事物状态的规律对未来事物状态进行预测的概率模型,在马尔可夫模型中假设当前事物的状态只与之前的n个状态有关我们平时研究较多的则是一阶马尔可夫模型,主要有两个特点1、当前状态只与上一个状态有关 2、某个时刻的观测值只与当前的状态有关我觉得主要关注点在当前状态以及它的转移矩阵(当前状态是今天为雨天的概率为0.5,转移矩阵为今天为雨天且明天为...

2018-03-16 10:16:56 1774

转载 机器人的定位问题

下面的大部分概念来源于《自主移动机器人导论》这本书信任度表示 机器人必须有一个在地图上有关它位置信任度的方法。机器人是否辨识一个单独的特定位置作为它的当前位置,或它是否根据一组可能的位置描述它的位置?如果以单个信任度完全表达多个可能位置,那如何将这多个位置排序?这就是信任度表示方法的设计问题信任度 一般来说机器人并不能直接测量它的真实状态,只能根据传感器数据,最佳估计它的状态。所以机器...

2018-03-16 10:01:20 3791

原创 双目测距相似三角形原理

左边中轴到点P在左相机的成像点也就是xl的距离为 xl右边中轴到点P在右相机的成像点也就是xr的距离为 -xr相似三角形得 T-(xl+(-xr)) / Z-f = T / Z

2018-03-16 09:57:14 3211

原创 ros gazebo基础教程

本人用的ros版本是kinetic,因为比较穷。。所以就一直在找可以仿真的办法,gazebo虽然对机的性能要求比较高。。但是由于它实在好用也是选择这个试一试1.首先安装turtlebot-gazebo,在gazebo环境下进行turtlebot的仿真 apt-get install ros-kinetic-turtlebot-gazebo 2.启动gazebo roslaunch tu...

2018-03-16 09:56:19 8823 2

原创 齐次坐标系

首先是区分向量和点对于一个向量v以及基ov1v2v3,可以找到一组坐标(a,b,c),使得v = a v1 + b v2 + c v3 而对于一个点p,则可以找到一组坐标(p1,p2,p3),使得 p – o = p1 v1 + p2 v2 + p3 v3 齐次坐标是用来描述透视坐标上的问题的齐次坐标就是用N+1维来代表N维坐标例...

2018-03-16 09:54:35 420

原创 线性回归和最小二乘

关于线性回归一直都知道是那么回事,方差最小啥的。但是涉及到计算方法或者代码啥的,也是不太了解,最近就做了个全面的总结,数学公式比较麻烦,所以直接上祖传手稿***首先是因为我某天遇到个这样的问题,想知道最大似然估计和最小二乘的区别,下面的例子其实是来源知乎的一个答案,但有助理解,就写下来了***这幅图是最小二乘的矩阵解法的公式推算,这种解法是最小二乘的**逆矩阵解法**,还有一种解法是**梯度下降*...

2018-03-16 09:50:31 671

dijkstra A*和D*等算法介绍

很详细的路径规划算法,dijkstra,A*和D*,还有很多D*的变种算法,有详细的例子分步讲解

2018-04-19

空空如也

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

TA关注的人

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