07 2021 档案

摘要:1、退化现象,随着滤波迭代次数的增加,大部分粒子的权重会变得很小,只有很少的粒子具有较大的权重。 2、退化现象会造成:1)后验概率只由少数几个权重较大的粒子表示,大多粒子对后验概率密度贡献接近于0 2)造成计算资源的浪费,使大量的计算浪费在对状态估计贡献甚微的粒子点上。 3、减少退化现象:1)增加粒 阅读全文
posted @ 2021-07-18 20:48 水水滴答 阅读(1588) 评论(0) 推荐(0) 编辑
摘要:fix朝零方向取整,如fix(-1.3)=-1; fix(1.3)=1;floor朝负无穷方向取整,如floor(-1.3)=-2; floor(1.3)=1;ceil朝正无穷方向取整,如ceil(-1.3)=-1; ceil(1.3)=2;round四舍五入到最近的整数,如round(-1.3)= 阅读全文
posted @ 2021-07-18 14:02 水水滴答 阅读(262) 评论(0) 推荐(0) 编辑
摘要:因为去年读过一次AMCL的源码,那时候读的时候,并不能完全理解某些模块,如map,求粒子簇的这块内容,所以再看的时候,是以地图为切入点看的,然后就是pf。这两部分弄差不多了,再重头开始整理下流程。 1、从main函数中的new AmclNode()开始 AmclNode::AmclNode() : 阅读全文
posted @ 2021-07-18 13:35 水水滴答 阅读(787) 评论(0) 推荐(0) 编辑
摘要:fmod取余数 // wrapping angle to [-pi .. pi] angle_increment = fmod(angle_increment + 5*M_PI, 2*M_PI) - M_PI; 函数: double fmod (double numer , double denom 阅读全文
posted @ 2021-07-17 16:21 水水滴答 阅读(120) 评论(0) 推荐(0) 编辑
摘要:在看AMCL过程中,对坐标转移的关系不太清晰,整理下: 1、tf2::Transform map_pose = latest_tf_.inverse() * odom_pose_tf2;表示的是: void AmclNode::savePoseToServer() { // We need to a 阅读全文
posted @ 2021-07-17 15:53 水水滴答 阅读(489) 评论(0) 推荐(0) 编辑
摘要:上一章讲粒子滤波的初始化时,说到初始化kd tree以及插入节点。这一章,单独讲kdtree在这里面的应用。 其实这部分代码之前也看过,但是迷迷糊糊。后来刷了一些二叉排序树的题后,又回头看这部分代码,理解也清晰了很多。 基本上就是一个多维度的二叉排序树。划分的维度由Pose的坐标(x,y,theta 阅读全文
posted @ 2021-07-15 13:26 水水滴答 阅读(477) 评论(0) 推荐(0) 编辑
摘要:在看AMCL源码时,遇到memset函数,记录下用法: 作用:用来对一段内存空间全部设置为某个字符,一般用在定义字符串进行初始化为‘ ’或者‘/0’ memset(node, 0, sizeof(pf_kdtree_node_t)); 将node(指针)指向的空间的kdtree_node节点大小的空 阅读全文
posted @ 2021-07-15 10:28 水水滴答 阅读(108) 评论(0) 推荐(0) 编辑
摘要:AMCL源码中,多次用到calloc函数,用于分配一定大小的内存,如下: self = calloc(1, sizeof(pf_kdtree_t)); 分配1个kdtree结构体所需的空间内存,并返回这块内存的指针给self。 self->nodes = calloc(self->node_max_ 阅读全文
posted @ 2021-07-15 10:19 水水滴答 阅读(228) 评论(0) 推荐(0) 编辑
摘要:从地图数据的处理中,有粒子滤波器的初始化,以及用Pose初始值初始化滤波器,这就不得不开始看滤波器部分了。 上篇文章,讲到初始化函数pf_alloc、pf_init。在开始说明这些函数前,先了解下粒子滤波器的一些数据结构。 1、粒子滤波器的各种数据结构 滤波器的定义:定义了粒子集pf_sample_ 阅读全文
posted @ 2021-07-14 17:05 水水滴答 阅读(630) 评论(0) 推荐(0) 编辑
摘要:之前看AMCL只是关注粒子滤波的流程,对于地图数据怎么转换没仔细看。现在有空就简单理理。 1、处理地图数据的入口是函数:handleMapMessage。ROS地图数据转换、粒子滤波器的初始化、创建传感器对象及其模型参数的初始化,均在处理地图数据的时候进行。 void AmclNode::handl 阅读全文
posted @ 2021-07-14 15:03 水水滴答 阅读(368) 评论(0) 推荐(0) 编辑
摘要:uniformPoseGenerator函数中,按均匀分布在地图上随机生成一个位姿。 unsigned int rand_index = drand48() * free_space_indices.size(); //均匀采样drand48(),随机找到一个像素点的序号 std::pair<int 阅读全文
posted @ 2021-07-14 11:48 水水滴答 阅读(241) 评论(0) 推荐(0) 编辑
摘要:在看AMCL源码中,发现srand函数 srand48(time(NULL)); 表示根据当前系统时间,获取48位运算随机数 需要的头文件 #include <stdlib.h> #include <time.h> [此处内容转自https://blog.csdn.net/cnmilan/artic 阅读全文
posted @ 2021-07-14 11:09 水水滴答 阅读(374) 评论(0) 推荐(0) 编辑
摘要:在看AMCL源码时,有几处用到函数指针的声明,如下 // Function prototype for the initialization model; generates a sample pose from // an appropriate distribution. typedef pf_ 阅读全文
posted @ 2021-07-14 10:54 水水滴答 阅读(148) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示