huogh_transform
参考网址: 霍夫线变换原理_哔哩哔哩_bilibili
mars_mapping/occ_line_detector.cpp at master · Forrest-Z/mars_mapping (github.com)
(164条消息) 霍夫变换直线检测(Line Detection)原理及示例_leonardohaig的博客-CSDN博客_霍夫变换直线检测原理
原理12通过霍夫变换,得到霍夫空间下的(p, theta),对不同角度进行累加,若得到相近的p,则认为处于同一直线==> 霍夫变换: p = x*cos(theta) + y*sin(theta), 细分theta与p(这里一般指地图分辨率)
代码实现12345678910111213141516171819202122232425262728293031#pragma omp parallel forfor(int i = 0;i < height;i++) // 遍历地图{ for(int j = 0;j < width;j++) { int index ...
滤波与优化思路梳理
重新思考关于滤波,关于优化1231. 优化与滤波本质上都是对数据的一种处理方式 - 优化考虑的是批量数据, 批量处理, 对总体数据有约束作用 - 滤波考虑的是k-1时刻的数据,实时处理
简单例子1234567对于这样一组数求它的均值: 12.5 12.4 12.5 12.6 12.8 12.7 12.3 12.4 12.5 12.2滤波做法: u = M(k-1)*(1-1/k) + Mk*(1/k)优化做法: u = (M1 + M2 + ... + Mk)/k => 这里实际上可以加入权重的概念,也就变成了 u = (w1*M1 + w2*M2 + ... + wk*Mk)/k
lio_sam安装使用
参考网址:(161条消息) LIO-sam:安装 - 运行 - 论文介绍 - 源码阅读_非晚非晚的博客-CSDN博客_lio-sam
安装运行1234567891011121314151617181920212223242526# 安装gtsamwget -O ~/Downloads/gtsam.zip https://github.com/borglab/gtsam/archive/4.0.2.zipcd ~/Downloads/ && unzip gtsam.zip -d ~/Downloads/cd ~/Downloads/gtsam-4.0.2/mkdir build && cd buildcmake -DGTSAM_BUILD_WITH_MARCH_NATIVE=OFF ..sudo make install -j6 //根据自己的cpu核数定,越多越快,本人是6核的,注意不能超出自己电脑的核数# 配置环境nano ~/.bashrcexport LD_LIBRARY_PATH=/usr/local/lib/:$LD_LIBRARY_PATH ...
协方差矩阵与椭圆
参考网址程序员的数学2(概率统计2020):协方差矩阵与椭圆的关系.mp4_哔哩哔哩_bilibili
线性代数视频教程
路径规划 | 随机采样算法:Informed-RRT* - 知乎 (zhihu.com)
椭圆求解
椭圆采样12345# 根据长轴,短轴采样,(x, y)(x^2 / a^2) + (y^2 / b^2) < 1# 根据转移向量与旋转矩阵变换坐标X1 = R * X0 + T# 求解旋转矩阵,theata = atan(y/x)
c++那些事
参考网址:C++11 - cppreference.com
示例123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188auto and dec ...
lite_slam - 文章索引
文章索引从零开始构建2d激光slam-0.整体框架简介
从零开始构建2d激光slam-1.概率地图
从零开始构建2d激光slam-2.激光里程计
从零开始构建2d激光slam-3.回环检测
从零开始构建2d激光slam-4.图优化
lite_slam - 搭建测试环境
环境123- Ubuntu18- Eigen- opencv(仅用于显示)
安装环境12345678910111213141516# g++ / gcc sudo apt install g++# cmake sudo apt install cmake# Eigen #1.安装: sudo apt-get install libeigen3-dev # 2 调整,默认安装路径是:/usr/include/eigen3 cd /usr/include/eigen3 ls # $ Eigen signature_of_eigen3_matrix_library unsupported # 3.需要执行复制命令,将Eigen文件夹放在/usr/include 下面 sudo cp Eigen/ .. -R# opencv sudo apt-get install libcv-dev sudo apt-get install libopencv-dev
安装测试数据使用测试data12345671. 百度云下载:链接:https: ...
lite_slam - grid_map模块
参考网址:peitianyu/lite_slam (github.com)
GridMap框架1231. GridMapBase作为基类派生GridMapDownSamlple,GridMapUtils2. GridManage用于读取,显示,保存GridMap3. GridSubMap实现子图功能
GridMapBase参考网址如何理解概率栅格地图(Probability Grid Map)& 概率更新公式 - 知乎 (zhihu.com)
配置文件123456789// 关于配置参数struct Params{ float resolution = 0.05; // meter / pixel Eigen::Vector2i size = Eigen::Vector2i(2000, 2000); //地图尺寸 Eigen::Vector2f origin = Eigen::Vector2f(-60.0f, -60.0f); // 右上角为(0, 0)的建图原点 float log_odds_p_occ = 0.6f; // 更新地图格式为 ...
lite_slam - 整体框架简介
参考网址:peitianyu/lite_slam (github.com)
环境123- Ubuntu18- Eigen- opencv(仅用于显示)
框架建图框架1234567891011- grid_map作为概率地图 - map_manage用于显示,保存,读取grid_map - down_sample_map用于降采样概率图- scantomap作为匹配 - 为加快速度,采用多层地图,即down_sample_map - 为加快速度,采用scan_points体素滤波 - 为加快速度,当迭代到一定程度时会提前退出迭代- scan_context作为回环检测模块 - 通过开源nanoflann库进行kdtree搜索得到先验pose - 然后通过scantomap进行精确定位得到回环pose- graph_optimize图优化模块,图优化完后,更新关键帧与地图
代码实现1234567891011121314151617void Run(const Pose2d& prior_pose = Pose2d()) override{ static uint ...
lite_slam - ScanMatch
参考网址:peitianyu/lite_slam (github.com)
Hector SLAM解读(1)原文翻译 - cyberniklee - 博客园 (cnblogs.com)
ScanMatch12345678910目的主要是输出激光里程计,这里使用的是scantomap采用的数据集是r2000数据包,因此对于数据预处理比较简单,且定位精度足够为加快速度: - 多层地图(避免局部最优) - 多种分辨率滤波后的激光 - 迭代残差足够小退出迭代整体流程: 输入: pose, scan_points, grid_map(来源: 1, 建图 2, 加载) 迭代直到更新距离足够小或者超出最大迭代次数 输出: estimate_pose
迭代一次流程123456789101112131415161718bool ScanToMap::EstimateTransformationOnce(const std::vector<Eigen::Vector2f> &scan_points, std::shared_ptr<GridMapUtils> map_ut ...