hector源码理解
参考网址:大佬的分析,包含代码注释解析与源码重写,论文翻译
Hector_slam源码框架分析_翎风的博客-CSDN博客
Hector SLAM解读(1)原文翻译 - cyberniklee - 博客园 (cnblogs.com)
HectorSLAM论文解析・代码重写(2) - scomup - 博客园 (cnblogs.com)
zhangwenxiao/HectorSlamWithoutROS: 脱离ROS的hector slam算法 (github.com)
代码框架该开源系统的主要代码在hector_mapping文件夹中,文件夹里有src文件夹和include文件夹,包含了算法所有的核心代码。通过对源码的梳理,整理出了如下流程图:
大佬的图非常清晰的可以看到,整个代码分为地图匹配与地图更新
地图匹配主要采用非线性优化—-高斯牛顿法,实际上就是通过激光数据与现有地图的差距(双线性插补),通过最小二乘法,计算概率,从而更新位移增量,计算出机器人最可能存在位置
双线性插值计算栅格概率一篇文章为你讲透双线性插值 - 知乎 (zhihu.com)
通过双线性插补得到一个位置,然后通 ...
map_server
参考网址:(60条消息) map server 功能和作用_天才樱木-CSDN博客_map_server
保存1rosrun map_server map_saver -f mymap
我们会得到两个文件,mymap.pgm,mymap.yaml
mymap.pgm为0到1的灰度图
mymap.yaml为配置文件
123456789101112# 文件名image: testmap.png# 分辨率resolution: 0.1# 初始点origin: [0.0, 0.0, 0.0]# 占用阈值occupied_thresh: 0.65# 为自由阈值free_thresh: 0.196# 是否应该颠倒白/黑 自由/被占用的语义(阈值的解释不受影响)negate: 0
发布节点1rosrun map_server map_server mymap.yaml
主题map_metadata (nav_msgs/MapMetaData)
123456789101112# 这包含了关于占领网格特征的基本信息# 地图加载的时间time map_load_time# 地图的分辨率 [m/cel ...
梯度下降法
参考网址:(60条消息) 高斯牛顿法详解_我只是一只自动小青蛙的博客-CSDN博客
信赖域狗腿(dogleg)方法_LSEC小陆的博客-CSDN博客
高斯牛顿(Gauss Newton)、列文伯格-马夸尔特(Levenberg-Marquardt)最优化算法与VSLAM_weixin_30463341的博客-CSDN博客
LM算法——列文伯格-马夸尔特算法(最速下降法,牛顿法,高斯牛顿法)(完美解释负梯度方向)_三眼二郎-CSDN博客_lm算法
从上倒下为梯度下降法的前世今生已经未来的演化:最速下降法(一阶梯度法)牛顿法(二阶梯度法)高斯牛顿法列文伯格法马夸尔特法
梯度下降主要用于slam中的非线性优化,实际上就是对一个最小二乘问题的求解,这也是上述几种方法的用途.
问题
最速下降(一阶梯度法)最速下降法(一阶梯度法)就是保留泰勒展开的一阶项用来近似非线性函数**F ( x )**,即:$$F(xk+Δxk)≈F(xk)+J(xk)TΔxk$$
$$Δxk=−J(xk)$$
**缺点:**由于仅保留一阶的雅可比矩阵,该方法过于贪心,容易走出锯齿线,反而增加迭代次数。
牛顿法和 ...
Jupyter Notebooks
安装Jupyter1conda install jupyter # 或 pip install jupyter
Ubuntu下使用jupyterUbuntu 下 Jupyter 的使用_yaoyz105-CSDN博客
Vscode使用jupyter在VS Code中编写Jupyter Notebook_云水木石-CSDN博客
win10Jupyter Notebooks的安装和使用介绍_LarsCheng’s Blog-CSDN博客
罗技遥控
参考网址:罗技F310与F710游戏手柄驱动(附C++源码)_冬瓜-CSDN博客
代码12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061// Logitech_controller.h/* define ----------------------------------------------------------------*/#ifndef Logitech_DRIVER#define Logitech_DRIVER/* Includes ---------------------------------------------------------------*/#include <stdlib.h>#include <iostream>#include <unistd.h>#include <fcntl.h>#include <errno.h&g ...
树莓派入门
树莓派入门1、树莓派安装12345678教程网站:https://blog.csdn.net/bhniunan/article/details/104783321 https://blog.csdn.net/W17330937835/article/details/105351273?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161603417716780255273810%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=161603417716780255273810&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_click~default-3-105351273.pc_search_result_no_baidu_js&utm_term=%E6%A0%91%E8%8E%93%E ...
hexo模板
参考网址:
ros_rosbag
参考网址:(59条消息) Rosbag详细操作_Sun的博客-CSDN博客
rosbag –clock_newbeixue的博客-CSDN博客
Rosbag基础使用保存12345678# 保存所有topicrosbag record -a# 只记录某些感兴趣的 topicrosbag record /topic_name1 /topic_name2 /topic_name3# 指定生成数据包的名字,则用-O /-o 参数rosbag record -O filename.bag /topic_name1# launch 文件中使用 rosbag record 命令<node pkg="rosbag" type="record" name="bag_record" args="/topic1 /topic2"/>
显示信息123456789101112131415161718192021rosbag info filename.bagrosbag info -y filename.bag# 示 ...
三维空间内旋转
参考网址:旋转矩阵_ahelloyou的博客-CSDN博客_旋转矩阵
机器人运动学基础——旋转矩阵_太初有泪的博客-CSDN博客
三维重建学习(1):基础知识:旋转矩阵与旋转向量_hongbin_xu的博客-CSDN博客_旋转向量
简记
RTOS多任务访问同一个UART的操作方法
参考网址:RTOS多任务访问同一个UART的操作方法
在RTOS多任务编程的时候,同一个硬件(比如UART、I2C等)被多个任务访问的情况比较多,如果不合理处理,就会导致“混乱”的局面。
处理“混乱”局面的方法比较多,下面基于FreeRTOS,以UART为例讲讲常见的互斥、队列这两种方法。
互斥访问方法123456789101112131415161718//创建互斥量资源SemaphoreHandle_t xSemaphore = NULL;xSemaphore = xSemaphoreCreateMutex();void TaskA(void *pvParameters){ for(;;) { //占用资源 if(xSemaphoreTake(xSemaphore, 10 ) == pdTRUE) { //使用资源(发送数据) USART_SendNByte(); //释放资源 xSemaphoreGive(xSemaphore); } }}
信号量与 ...