stm32备份 存储器的分类:存储器首先根据断电后存储的数据是否会丢失,可以分为易失存储器和非易失存储器,易失存储器主要应用于内存,非易失存储器主要用于外存。易失存储器以RAM随机存储器为代表,随机的含义是存储器中的数据读取或写入所花费的时间与位置无关。
C语言学习笔记 指向数组的指针在进行加减运算时,地址移动的大小是该指针所指向数组大小的整数倍,指向数组的指针在第一次解引用时返回的是其所指向的数组的首地址,第二次解引用返回的是数组中元素的值,所以。实参为指针变量,形参是指向指针的指针,指向实参指针变量的地址,malloc返回申请的动态内存地址,形参通过解引用符得到实参的指针变量,使得实参指向动态内存地址,函数调用结束后,销毁指向指针的指针形参。free会释放指针指向的动态内存,但是该指针所指向的地址依然不变,这样的指针被称为野指针,应该将该指针的值设置为。
shell脚本学习笔记 最常用的就是半导体厂商或者开发板厂商的 uboot,所以uboot移植是指通过半导体厂商提供的uboot适配自己的开发板。一个文件的权限包括读取、写入、执行,权限范围包含所有者、所属组、其他人,可以通过数字或者字母描述一个文件的权限:读取权限对应r或4,写入权限对应w或2,执行权限对应x或1。例如7代表读取写入执行权限,6代表读取写入权限,5代表读取执行权限,4代表读取权限,3代表写入执行权限,2代表写入权限,1代表执行权限,0代表无权限。uboot 官方的 uboot 源码是给半导体厂商准备的,半导。
Linux驱动开发笔记 疑问中每个操作函数的形参中inode的作用设备树中compatible属性中厂商和型号如何填写llseekreadwritepool等等,这些操作函数都要需要完成实现。为实现“高内聚,低耦合”的软件设计理念,Linux驱动采用了内核加载的方式,将驱动编译成模块(Linux 下模块扩展名为.ko),在Linux 内核启动以后使用“insmod”命令加载驱动模块,用“rmmod”命令卸载具体驱动模块,相应地需要注册模块加载函数和模块卸载函数。
VINS预积分推导 数学基础可以通过运算(⋅)∧{\left( \cdot \right)^ \wedge }(⋅)∧将三维向量ω∈R3\omega \in {\mathbb{R}^{3}}ω∈R3转换为对角线为零的反对称矩阵 ω∧∈R3×3\ {\omega ^ \wedge } \in {\mathbb{R}^{3 \times 3}} ω∧∈R3×3:ω∧=[ω1ω2ω3]∧=[0−ω3ω2ω30−ω1−ω2ω10](1.1){\omega ^ \wedge } = {\left[ \be
VINS预积分推导2 可以通过运算(⋅)∧{\left( \cdot \right)^ \wedge }(⋅)∧将三维向量ω∈R3\omega \in {\mathbb{R}^{3}}ω∈R3转换为对角线为零的反对称矩阵 ω∧∈R3×3\ {\omega ^ \wedge } \in {\mathbb{R}^{3 \times 3}} ω∧∈R3×3:ω∧=[ω1ω2ω3]∧=[0−ω3ω2ω30−ω1−ω2ω10](1.1){\omega ^ \wedge } = {\left[ \begin{array}{l}{\
六轴IMU估计自身在世界坐标系的位姿 一般的IMU包含三轴的加速度记和三轴的陀螺仪,成为六轴IMU,可以提供IMU坐标系下三轴加速度的测量以及IMU坐标系下三轴角速度的测量,而有的IMU包含三轴的磁力计,可以提高IMU在世界坐标系下的姿态。世界坐标系是指惯性系,即重力方向与Z轴重合。但是六轴IMU由于可以测量出重力方向,可以通过自身线加速度和角速度测量数据,估计自身在世界坐标系下的姿态。...
EPnP: Accurate Non-Iterative O(n) Solution to the PnP Problem EPnP是一种非迭代的求解PnP问题的方法,根据3D地标点和2D特征点之间的匹配求解相机的位姿,本方法的时间复杂度增加是线性的。本方法的核心是根据虚拟的控制点的权重和来表示n个3D点,因此PnP问题转换为估计控制点在相机坐标系下的坐标,需要计算12x12矩阵的特征向量,求解固定数量的四元方程来求解权重。并且闭式解可以通过高斯牛顿法来优化。所谓PnP问题就是相机的内参以及n对3D地标点和2D特征点之间的匹配关系,以及3D地标点在世界坐标系下的坐标, 求解相机位姿的问题。现有的非迭代方法只能选取小部分的点进行
Scan Context 回环检测方法分类LEGO-LOAM使用半径搜索的方式进行回环检测,根据当前关键帧的距离和时间戳信息选择候选帧,找到距离当前关键帧一定半径范围内并且时间相隔较远的关键帧作为候选帧进行ICP匹配。这种方法在累计误差不大的情况下可以完成回环,但是在大场景情况下由于不断积累的误差,可能导致无法通过距离搜索回环帧,导致无法完成回环检测。Scan-context是一种3D点云全局描述子,表示点云的几何信息,因此可以对不同关键帧的SC描述子进行匹配,找到历史关键帧中和当前关键帧相似的点云,从而找到回环帧。它通过各个
Scan Context: Egocentric Spatial Descriptor for Place Recognition within 3D Point Cloud Map 前言Scan-context是基于结构信息的全局定位方法,它不依赖于直方图全集描述子或机器学习方法,直接记录点云的3D结构信息。此外,本文还提出了计算两个Scan-context相似得分的方法以及回环检测的两步搜索方法,使得回环检测不依赖于位置。SLAM中位置识别为回环检测提供候选帧。视觉位置识别容易受到光线变化的影响。激光位置识别存在两大难题,当同一位置下不同航向角的描述子要求旋转不变性,另外,描述子必须处理点云中的噪声。直方图可以解决这两个问题,但是直方图只提供了场景中的随机索引,难以直接表达场景
Targetless Calibration of LiDAR-IMU System Based on Continuous-time Batch Estimation 引言本文提出了一种标定激光雷达和IMU六自由度外参的方法,采用基于B样条的连续时间轨迹描述IMU数据,它相比基于离散时间的方法更适用于高动态以及异步的测量数据,另外本方法采用了点到点元的匹配方法,使得优化问题得到的良好的约束。激光雷达往往和IMU一起配合使用。由于一帧点云中的每一个点都是在不同时刻下采集的,随着点云扫描时激光雷达的运动,点云中不同时刻采集得到的点的位置会随着激光雷达的运动而受到影响,因而产生运动畸变。为了消除点云中的运动畸变,往往使用IMU提供的对与本体运动的高频率测量数据,对运动畸变进
点云配准ICP&NDT NDT简介很多匹配算法需要在两帧数据之间进行特征匹配,例如ICP中会进行点到点、点到线、点到面的特征匹配,特征匹配的效果最终决定了点云配准的效果,而NDT不需要进行特征匹配。NDT是将第一帧点云转换至栅格地图,每个栅格计算其中点的正态分布,因此将第一帧点云转换为一个个栅格表示的分段连续可导的概率密度函数,使用正态分布概率密度函数描述点云的局部性质。然后将第二帧点云投影至栅格地图中,计算出第二帧点云在栅格地图中的概率,通过牛顿法找到最佳匹配位姿,使得第二帧点云投影至栅格地图后概率最大化,最终完成点云配准。
IMU内参标定 IMU内参标定参考文献:A Robust and Easy to Implement Method for IMU Calibration withoutExternal Equipments标定方法首先静止IMU一段时间,作为IMU的初始化,之后改变IMU的位姿并静止一段时间,重复这个步骤一定此时,完成标定数据的采样,最后由标定算法计算出IMU标定参数。IMU误差模型由于安装精度,IMU中无法保证三个线加速度传感器或者角速度传感器之间成两两垂直的几何关系,因此产生错位误差,IMU需要将原始测
实时相关扫描匹配Real-Time Correlative Scan Matching 引言本文提出了一种基于概率是扫描匹配算法,可以提供更高质量以及更鲁棒的匹配效果。扫描匹配算法的挑战是一边减小运算复杂度另一边提高计算结果的质量和健壮性,现有的前端扫描匹配算法为了降低运算复杂度,计算误差往往容易受到初始值的影响,原因是扫描匹配问题通过非线性最小二乘方法计算时,代价函数往往是非凸的,存在许多局部最小值,如果初始值存在一定的误差,那么在非线性优化的过程中计算结果往往陷入局部最小值,无法计算出全局最小值,从而降低了扫描匹配效果。相关扫描匹配算法基于概率框架,在一定的可行区域内搜索所有可能位姿
PCL 自定义点云类型出现未定义的引用 参考PCL官方文档进行自定义点云类型时,在编译调用滤波算法的cpp文件中出现了未定义的引用错误。原因是调用滤波算法的文件中未添加PCL_NO_PRECOMPILE宏定义。
ROS学习之时间 参考:Clock,Time,ROS提供了一组有关时间的API,方便在程序中获取时间信息。时间信息的来源有两种,系统时间和仿真时间,分别被称为Wall Time和ROS Time,可以通过参数use_sim_time来进行选择,当use_sim_time为true时选择使用仿真时间,反之使用系统时间。系统时间直接通过访问本地时钟来获得,而仿真时间则需要订阅/clock话题的消息获得,每当接收到该话题的消息,时间才会更新,在没有接收到该话题的第一个消息时,当前时间为0,/clock是通过仿真时间服务器发布的
ROS学习之主从机配置 参考:NetworkSetup,EnvironmentVariables,MultipleMachines在多机器运行ROS时,只有一个机器可以运行ros master,该主机称为主机,其他机器成为从机。主机地址通过环境变量ROS_MASTER_URI指定,配置网络设置时应当修改所有机器的ROS_MASTER_URI为主机的地址。不同主机上的节点发布的话题是通过主机名:端口号来标识的,主机名是在本机器上运行hostname获得的,因此为了不同主机上的节点可以顺利订阅话题,各个机器的主机名必须可以被所有机
ROS时钟理解 ROS提供了各种有关时间的API,方便在节点中使用时间信息,通常时间信息来自于运行节点的主机时间,即Wall Time,但是当播放bag文件或者仿真时,各个会使用仿真时间而不是主机时间,以方便控制时间的前进和后退,例如在播放bag文件时,/playbag节点会发布clock话题提供仿真时间,而其他所有使用时间信息的节点会订阅该话题获得仿真时间,从而使整个系统使用仿真时间。注意:只有使用ros提供的时间API才会自动在系统时间和仿真时间之间切换。参考连接:Clock,API...