激光SLAM从理论到实践学习——第三节(传感器数据处理2:激光雷达运动畸变的去除)

2023-05-16

传感器数据处理2:激光雷达运动畸变的去除

激光雷达运动畸变的去除比里程计标定更重要,但也取决于用的雷达型号。我用的思岚A2雷达频率小于10Hz,畸变也是比较明显的。

概念介绍

  • 激光雷达传感器介绍(分类、原理)

    • 分类介绍

      • 三角测距(A2,EAI,一般10m左右的都是),双目摄像头也是用的三角测距法,左右各一个摄像头

        ​ 优点:中近距离精度较高、价格便宜

        ​ 缺点:远距离精度较差、易受干扰、一般在室内使用
        在这里插入图片描述

      • 飞行时间:ToF测距

        优点:测距范围广、测距精度高、抗干扰能力强

        缺点:价格昂贵、室内室外皆可。

        基本思想就是一个激光发射器,在t0时刻发一束光出去,在t1时刻接收到他,那么距离就是C(t1-t0)/2他是由光的飞行时间来决定的。

      在这里插入图片描述

    • 测距原理

      • 三角法测距原理

        A,B点是激光发射头,α和β是激光发射的两个角,L就是两个发射头之间的距离,根据角边角我们就可以确定一个三角形,然后L边的中点到三角形顶点的距离也是可以算出来的,通过和差化积公式计算L,再换成d。d公式中,α和L都是标定好的,β是通过射出去的α计算出来的。双目摄像头也是这样,但是都是有噪声的。

        在这里插入图片描述

      • TOF测距原理

        测距公式就是:光速*时间差/2:C(t1-t0)/2

        光速是30万Km/s,如果我们要测一个1m左右的物体,就是ns级别的。

        在这里插入图片描述

  • 激光雷达数学模型介绍(数学模型)

    • 光束模型

      在这里插入图片描述

    把一条激光看做一个激光束,射到墙上时会有一个期望距离,在这个期望值的附近会形成一个高斯分布,这是正常的情况。ztk * 是期望值

    在这里插入图片描述

    如果有障碍物挡住了的话,也就是d>d1时,这样会形成一个指数分布

    在这里插入图片描述

    基本上是上面的两种情况。那激光雷达的光束模型就是我们给定一个机器人的位置xt,和地图m,来获得这一帧观测值zt的概率。我们默认认为每一个激光束都是线性无关的,是独立的。得到一个累计乘。

    在这里插入图片描述

    用矩阵形式表示就是

    在这里插入图片描述

    等式左边是这束激光的概率(之后都叫得分)反应的是当前这束激光与地图的重合程度,重合程度越好,得分也就越高,如果正好落在期望值的上面,那么就说这个得分就是1

    在这里插入图片描述

    激光发出的一帧激光数据与地图的重合程度这个东西就是我们的光束模型光束模型评估的就是这个。

    • 光束模型的缺点(基本没人用光束模型,因为有缺点)

      机器人在非结构化环境中,位姿发生微小的变化,就会造成期望值发生巨大的变化,从而导致得分突变。

      就是说当前机器人正前方1m有障碍物,障碍物后面3m是一堵墙,激光发出激光束可以正常射到这个障碍物上,但是如果此时机器人的位姿发生微小变化,很有可能这个光束就射到障碍物后面的墙上去了,从而导致这个期望值发生突变。他是病态的,并且是无法进行优化的。所以说在复杂环境中不会使用这种

      在这里插入图片描述

    • 似然场模型

      • 他是将所有的噪声,例如传感器噪声,机器人位姿噪声,等等…,得到一个高斯分布,用这个高斯分布对整个图像进行模糊,对障碍物进行高斯平滑,越白表示得分越高,越黑代表得分越低,他是不需要计算期望值的,我们对图像进行模糊之后,已经存在障碍物和模糊过的图像了,也就是说把之前计算期望值,然后用高斯分布算出一个得分换成查表的形式,查表的话,这个似然场从程序一开始就是在进行离线计算,所以对一帧激光来说,只需要查360次表,查表的计算量可以忽略不计。他是同时适合结构化环境和非结构化环境的。因为就算位姿发生一点改变,他的得分也不会太低。AMCL代码中两种模型都有体现。

        在这里插入图片描述

  • 运动畸变的介绍(原因与效果)

    • 示意图

      在这里插入图片描述

    • 机器人不动,肯定不会产生运动畸变,如果机器人的运动频率很高,假设50Hz也就是2ms,如果认为在这2ms内机器人没动,那么运动畸变可以忽略,但是,在一般现实机器人中,运动频率是在5~10Hz左右,那么这个运动畸变就会很大了。反正就是说在雷达在测量的过程中,机器人如果正在运动,那么就会产生运动畸变。他的根源就是每个激光点都有不同的基准位置,但我们处理的时候都认为所有的激光点还是在同一位置。所以我们今天要求解的就是这每一个激光点的位置。

      在这里插入图片描述

畸变去除

  • 纯估计方法(不借助任何设备,纯靠匹配过程中去除)

    • ICP方法介绍(是纯估计方法的变种):简单说就是给定一个点云,求出R和T,然后进行欧式变换就得到了两个点云点的最短距离
      • 迭代最近点算法(ICP)是一种点云匹配算法。其思想是:通过旋转、平移使得两个点集之间的距离最小。
        他重复进行“确定对应关系的点集→计算最优刚体变换”的过程,直到某个表示正确匹配的收敛准则得到满足。
      • 算法流程就是:1、假设待配准的点集为:P={pi→}P={pi→};模板点集为:X={xi→}X={xi→}。
        接下来要从带配准的点集PP中提取出与模板点集XX中的每个点最近的匹配点,度量方式采用欧式距离。
      • ICP方法常用在点云中,是点云匹配的一种较为广泛的方法。他的基本目的就是两个点云进行配种。给定两个点云集合,假设他们对应是匹配的,也就是他们的元素对应在物理空间中是同一个点。ICP的目标函数就是如下图,找到一个R和t,进行欧式变换偶得两个匹配点的距离最小。

        在这里插入图片描述

        基本目的就是:找到一个欧式变换E(R,t),使得两个点云的距离最小化,这样就将畸变去除了

      • 已知对应点的求解方法

        通过闭环的方式求出一个解析解,先求出一个点云的基准位姿,再求另一个

        在这里插入图片描述

        然后把每个点云都移到平均位姿来

        在这里插入图片描述

        然后我们构造一个W,然后进行SVD分解

        在这里插入图片描述

        然后就得到ICP的解(求出R和t),t的话比较简单,他就是同一坐标系下两个点的差,R=UVT,然后进行欧式变换就可以得到最短距离

        在这里插入图片描述
        产生的效果如下,蓝色和红色分别是两个点云点在未处理前,处理后如右图,基本完全重合

        在这里插入图片描述

      • 未知对应点的求解方法

        在这里插入图片描述

        在实际中,不知道对应的匹配点,他不能一步到位计算出R和t。说白了就是我们要求一个变量A,要求这个变量之前,我们必须知道这个隐变量B,那么就先固定A求B,再固定B求A,再固定A求B…如此迭代。

        算法流程就是首先寻找对应点:找与第一个点云距离最近的点

        然后根据找到的对应点,计算R和t

        然后对点云进行转换,计算误差

        然后就不断迭代,直至误差小于某一个值(这个迭代的过程)

        在这里插入图片描述

总结ICP算法与推导过程

参考:https://blog.csdn.net/weixin_35695879/article/details/103125575
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • VICP方法介绍

    • ICP方法在激光匹配中的缺点

      • 没有考虑激光的运动畸变

      • 当前激光数据是错误的

        ICP默认给定的点云数据是正确的,给错数据他也认为是对的

      • 所以提出了VICP

    • VICP是ICP算法的变种,听名字就知道他在ICP的基础上提供了速度估计因为他是考虑了机器人的运动过程和激光的测量过程所产生的运动畸变。

    • 他的速度估计是认为机器人运动过程中是匀速运动的,虽然这也不一定是匀速运动,但总比在ICP算法中认为他没动要好得多。进行匹配的同时估计机器人的速度。

      在这里插入图片描述

    • 详细介绍

      • 在这里插入图片描述

      • 用Xi,Xi-1表示第i帧和第i-1帧数据,使用Ti,Ti-1表示对应X的位姿矩阵,Ti相当于是Xi的位姿,Ti-1相当于是Xi-1的位姿,那么当前机器人的速度(位姿的变化量/时间变化量)就是如图

        在这里插入图片描述

        假设第i帧我们激光的时刻表是ti,那么我两帧激光间的数据的时间差是△t,那么第n个就是ti(最近的),那么第n-1个就是ti-△t,第0个开始就是ti-n△t

        在这里插入图片描述

        如果我们已知Ti的话,那么通过下面这个公式,就可以得到从0到n任意一个点的位姿矩阵

        在这里插入图片描述

        所以校正过程可为:(运动校正),根据每两帧之间的时间差得到激光数据和位姿数据,随后通过计算得到机器人速度,来用每个点的速度来校准激光数据

        在这里插入图片描述

        VICP的基本思路就是:我知道了每一个时刻,认为ti已知了,然后可以反推出来每一个点的位姿是多少,然后再根据每一个点的速度对激光数据进行校正。

        在这里插入图片描述

      • 算法流程

        • 首先我们认为他是匀速运动的,也就是Vi = Vi-1,T△ts代表的是两次位姿的变化量,那么就可以算出每一时刻的位姿,然后进行校正,然后进行ICP匹配
  • 里程计辅助方法(辅助方法的其中一种)

    • 使用里程计辅助去除

      • VICP的缺点

        • 低帧率激光(5Hz),匀速运动假设不成立,不能真实地反应机器人的运动情况
        • 数据预处理和状态估计过程耦合
      • 解决方法

        • 尽可能准确的反应运动情况
        • 实现预处理和状态该估计的解耦
      • 传感器辅助方法(里程计/IMU)

        • 极高的位姿更新频率(200Hz),可以比较准确的反应运动情况。
        • 较高精度的局部位姿估计
        • 跟状态估计完全解耦
      • 惯性测量单元(IMU)与轮式里程计传感器辅助

        在这里插入图片描述

总结轮式里程计去除运动畸变

  • 已知数据:1.已知当前 帧激光的起始时间 𝑡𝑠,𝑡𝑒

    2.两个激光束间 的时Δ𝑡

    3.里程 计数据按照时间顺序存储在一个队列 中

    4.最早的里程计数据时间戳 <𝑡𝑠

    5.最早的里程计数据时间戳 >𝑡𝑒。

  • 他要做的就是1.求解当前帧激光数据中每一个点对应的机器人位姿,即求解{ 𝑡𝑠,𝑡𝑠+Δ𝑡,⋯,𝑡𝑒}时刻的机器人位姿。2.根据求解的位姿把所有的激光点转换到同一坐标系下。3.重新封装成一帧激光数据,发布出去。

  • 过程:

    • 1.求解ts,te时刻的位姿ps,pe

      • 里程计队列中正好和激光数据同步,假设第 i和第 j跟数据是时刻分别为 𝑡𝑠,𝑡𝑒:

        𝑝𝑠=𝑂𝑑𝑜𝑚𝐿𝑖𝑠𝑡[𝑖]
        𝑝𝑒=𝑂𝑑𝑜𝑚𝐿𝑖𝑠𝑡[𝑗]

      • 在𝑡𝑠时刻没有对应的里程计位姿,则进行线性插值设在 l,k时刻有位姿,且 l<s<k,则:

        𝑝𝑙=𝑂𝑑𝑜𝑚𝐿𝑖𝑠𝑡[𝑙]
        𝑝𝑘=𝑂𝑑𝑜𝑚𝐿𝑖𝑠𝑡[𝑘]
        𝑝𝑠=𝐿inar𝐼𝑛𝑡𝑒𝑟𝑝(𝑝𝑙,𝑝𝑘,𝑠−𝑙𝑘−𝑙)

    • 2.进行二次插值

      • 在一帧激光数据之间,认为机器人做匀加速运动。
      • 机器人的位姿是关于时间 t的二次函数。
      • 设𝑡𝑚=(𝑡𝑠+𝑡𝑒)/2,且 l<m<k 则:
        𝑝𝑚=𝐿inar𝐼𝑛𝑡𝑒𝑟𝑝(𝑝𝑙,𝑝𝑘,𝑚−𝑙 / 𝑘−𝑙)
      • 已知 𝑝𝑠,𝑝𝑚,𝑝𝑒,可以插值一条二次曲线:
        𝑃𝑡=𝐴𝑡2+𝐵𝑡+𝐶
        𝑡𝑠≤𝑡≤𝑡𝑒
    • 3.二次曲线的近似

      • 用分段线性函数对二次曲进行近似
      • 分段数大于 3时,近似误差可以忽略不计
      • 在𝑡𝑠和𝑡𝑒时间段内,一共取 k个位姿 𝑝𝑠,𝑝𝑠+1,⋯,𝑝𝑠+𝑘−2,𝑝𝑒
      • 位姿通过线性插值获取,在这 K个位姿之间,进行线性插值:
        设𝑝𝑠和𝑝𝑠+1之间有 N个位姿 {𝑝𝑠,𝑝𝑠1,⋯,𝑝𝑠(𝑛−2),𝑝𝑠+1}
        则:
        𝑝𝑠𝑖=𝐿inar𝐼𝑛𝑡𝑒𝑟𝑝(𝑝𝑙,𝑝𝑘,𝑠𝑖−𝑠 / Δ𝑡)
    • 4.坐标系统和激光数据的发布

      • 一帧激光数据 n个激光点,每对应的位姿 𝑝1,𝑝2,⋯,𝑝𝑛通过上述介绍的方法插 值得到

      • 𝑥𝑖为转化之前的坐标, 𝑥𝑖′为转换之后的坐标,则:

        𝑥𝑖′=𝑝𝑖𝑇𝑥𝑖

      • 把转换之后的坐标为激光数据发布出去:

        𝑥𝑖′=(𝑝𝑥,𝑝𝑦)

        𝑟𝑎𝑛𝑔𝑒=sqrt(𝑝𝑥∗𝑝𝑥+𝑝𝑦∗𝑝𝑦)

        𝑎𝑛𝑔𝑙𝑒=𝑎𝑡𝑎𝑛2(𝑝𝑦,𝑝𝑥)

  • 在单片机上处理,直接用单片机接雷达,直接在单片机上消除运动畸变(因为单片机测量的里程计数据和雷达数据是一起上发的,所以他两时间同步,就不会产生运动畸变),无需考虑时间同步的问题

  • 在处理器上处理,用USB接单片机和激光雷达,但他两的数据需要进行时间同步才能消除运动畸变。
    在这里插入图片描述
    在这里插入图片描述

    • 轮式里程计去除运动畸变也就是求解ts,te时刻的位姿 ps,pe然后根据所求位姿把所以激光点转换到同意坐标系下,重新封装一帧激光数据并发布

      在这里插入图片描述

      • 二次插值

      在这里插入图片描述

    • 二次曲线的近似

      在这里插入图片描述

    • 激光数据发布

      在这里插入图片描述

    • 作业

      在这里插入图片描述

本节思维导图

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

激光SLAM从理论到实践学习——第三节(传感器数据处理2:激光雷达运动畸变的去除) 的相关文章

  • CMake 引用第三方库

    一 cmake简介 cmake 是gnu工具链中构建项目重要的一环 xff0c 而且在windows linux OS X中都可以使用 xff0c 特别是linux C C 43 43 程序员必备基本功 二 基本命令 xff1a 命名变量
  • C/C++:struct和class区别

    C和C 43 43 中的Struct区别 CC 43 43 不能将函数放在结构体声明能将函数放在结构体声明在C结构体声明中不能使用C 43 43 访问修饰符 public protected private 在C 43 43 中可以使用 在
  • 四旋翼无人机学习之准备篇(一)

    最近我哥要给我邮递个四旋翼无人机 xff0c 再加上本人对蓝天从小就很感兴趣 所以在学习完四驱小车后打算上手下无人机 刚开始学习根本不知道要看哪些 xff0c 在几天漫无头绪的学习 xff0c 终于有点气色了 xff0c 就把学习经验分享给
  • 更改Ubuntu默认python版本的方法

    可以按照以下方法使用 ls 命令来查看你的系统中都有那些 Python 的二进制文件可供使用 1 2 ls usr bin python usr bin python usr bin python2 usr bin python2 7 us
  • c++求素数

    C 43 43 练习第一课 C 43 43 输入一个n 求n以内的素数 xff1a C 43 43 输入一个n 求n以内的素数 xff1a include span class token operator lt span iostream
  • 贪吃蛇

    C尝试写的贪吃蛇项目 xff08 数组实现 xff09 以后会更新用链表实现贪吃蛇 span class token macro property span class token directive keyword define span
  • Android公司面试题

    Android 面试题及面试经验 我的第一次面试经验 今天来到成都面试 xff0c 面试的是Android xff0c 说实话 xff0c Android并不是我的强项 xff0c 只是在大学期间接触过 第一关人事还可以 xff0c 第二关
  • linux---tcp通信流程以及代码实现

    TCP通信特性 xff1a xff08 在网络版块详细讲解 xff09 面向连接 可靠 面向字节流 TCP通信过程 c 43 43 封装TCP通信 1 include lt iostream gt 2 include lt arpa ine
  • 物联网学习及理解

    物联网学习及理解 xff08 来自一个物联网专业学生的心得 xff09 什么是物联网物联网能做什么一 物联网运用领域二 物联网发展趋势 物联网怎么实现一 局域网内的物联网二 广域网内的物联网 总结 在开始写这篇博客之前 xff0c 我不得不
  • vscode代码格式化快捷键

    Windows xff1a Shift 43 Alt 43 F Linux Ctrl 43 Shift 43 I MacOS Shift 43 Option 43 F
  • 多线程和网络编程(多线程)

    一 多线程 1 进程和线程 进程 xff1a 是正在运行的程序 是系统进行资源分配和调用的独立单位 每一个进程都有它自己的内存空间和系统资源 线程 xff1a 是进程中的单个顺序控制流 xff0c 是一条执行路径 单线程 xff1a 一个进
  • Java八种基本数据类型(图文详解)

    Java八种基本数据类型 Java八种数据类型Java八种数据类型的分类 xff08 图 xff09 基本数据类型分为三大类 数值型 字符型 布尔型 数值型整数类型 xff08 byte short int long xff09 浮点型 f
  • numpy基础用法-学习笔记-task10

    大作业 本次练习使用 鸢尾属植物数据集 iris data xff0c 在这个数据集中 xff0c 包括了三类不同的鸢尾属植物 xff1a Iris Setosa xff0c Iris Versicolour xff0c Iris Virg
  • STM32F103驱动LD3320语音识别模块

    STM32F103驱动LD3320语音识别模块 LD3320语音识别模块简介模块引脚定义STM32F103ZET6开发板与模块接线测试代码实验结果 LD3320语音识别模块简介 基于 LD3320 xff0c 可以在任何的电子产品中 xff
  • Arduino UNO驱动土壤湿度传感器检测

    Arduino UNO驱动土壤湿度传感器检测 简介运行要求Arduino UNO与传感器接线程序展示实践效果总结 简介 本次使用到是这个新款土壤湿度传感器 xff01 这款电容式土壤湿度传感器区别于市面上绝大部分的电阻式传感器 xff0c
  • ESP32使用TCP HTTP访问API接口JSON解析获取数据

    ESP32使用TCP HTTP访问API接口JSON解析获取数据 API接口代码解析获取时间代码烧录效果总结 API接口 单片机常用的API接口基本都是返回的一串JSON格式的数据 xff0c 这里以ESP32联网获取时间信息作为获取API
  • 电池保护板 - 问题归纳

    电池保护板 问题归纳 简介充电锂电池磷酸铁锂电池 放电总结 最近更新日期 xff1a 2023 03 07 简介 电池充放电过程中 xff0c 如果电压 电流或温度等参数不稳定或超出电池的安全范围 xff0c 就会对电池造成损害 xff0c
  • Arduino驱动DS1302显示时钟

    Arduino驱动DS1302显示时钟 前言电气参数经典应用电路接线程序实验结果 前言 目前有许多流行的串行时钟电路 xff0c 例如 DS1302 xff0c DS3231 xff0c DS1307 xff0c PCF8485 等 它们由
  • 计算机网络---应用层以及HTTP协议

    网络层是程序员接触最多的一个层级 xff0c 应用层是层级体系中的最上层的一级 xff0c 是我们做逻辑处理最多的 应用层的功能什么是urlhttp协议 应用层的功能 是程序员写的一个一个解决的实际的问题都是在应用层 xff0c 是做逻辑运
  • 51驱动NRF24L01通信,NRF24L01与TTL转NRF24L01模块通信

    51驱动NRF24L01通信 xff0c NRF24L01与TTL转NRF24L01模块通信 NRF24L01一 简介二 引脚功能描述 程序设计一 对 24L01 的程序编程的基本思路如下 xff1a 二 Tx 与 Rx 的配置过程1 Tx

随机推荐

  • 51单片机驱动K型热电偶 OLED0.96显示

    51单片机驱动K型热电偶 OLED0 96显示 一 基本参数二 接线三 部分代码引脚定义时序对用代码 四 实验现象五 注意事项 一 基本参数 二 接线 K型热电偶 MAX6675 模块引脚说明GNDGND接地 单独供电需要与MCU共地VCC
  • 基于ESP32做低功耗墨水屏时钟

    基于ESP32做低功耗墨水屏时钟 电子墨水屏概述 ESP32实验低功耗电子时钟功能描述接线开发实验结果 电子墨水屏 概述 电子墨水是一种革新信息显示的新方法和技术 和传统纸差异是电子墨水在通电时改变颜色 xff0c 并且可以显示变化的图象
  • STC89C52制作可程控低频信号发生器

    STC89C52制作可程控低频信号发生器 准备工作操作流程关于PCF8591实现构思 相关代码定时器相关代码串口控制频率和LCD显示函数 相关功能现象总结 准备工作 由于51单片机本身并不自带DAC的功能 xff0c 因此需要借助外置模块实
  • Arduino UNO驱动 Si3531A三通道时钟信号发生器

    Arduino UNO驱动 Si3531A三通道时钟信号发生器 Si3531A模块简介模块引脚定义Arduino UNO与模块接线测试代码实验结果 Si3531A模块简介 Si3531A是一个IIC接口可编程时钟信号频率发生器 xff0c
  • Arduino驱动HC-SR04超声波测距

    Arduino驱动HC SR04超声波测距 前言电气参数基本工作原理时序图接线程序实验结果总结 前言 HC SR04超声波测距模块可提供2cm 400cm的非接触式距离感测功能 xff0c 测距精度可达3mm xff0c 包括发射器 接收器
  • stm32f103c8t6新建环境+点灯

    stm32f103c8t6新建环境 43 点灯 简介步骤一 新建文件二 建立启动 43 用户端本身文件三 mdk内部设置四 实现基础工作效果五 点灯 总结 简介 STM32F103C8T6是一款由意法半导体公司 xff08 ST xff09
  • ESP32驱动1.28寸GC9A01播放视频(一、视频分辨率的调整和视频格式的转换)

    ESP32驱动1 28寸GC9A01播放视频 xff08 一 视频分辨率的调整和视频格式的转换 xff09 播放前准备转换视频分辨率用FFmpeg将 MP4转换为 mjpeg格式FFmpeg的win10环境搭建FFmpeg的下载环境变量的搭
  • Arduino UNO驱动micro SD卡读写模块

    目录 一 简介二 使用前准备三 测试方法四 实验现象 一 简介 Micro SD卡模块TF卡读写卡器板载电平转换电路 xff0c 即接口电平可为5V或3 3V xff0c 支持支持Micro SD卡 2G Micro SDHC高速卡 32G
  • ESP32驱动1.28寸GC9A01播放视频(二、程序说明和效果展示)

    ESP32驱动1 28寸GC9A01播放视频 xff08 二 程序下载和效果展示 xff09 1 28寸GC9A01屏幕屏幕引脚定义 程序说明程序更改1 Arduino DataBus bus和Arduino GC9A01 gfx要改成ES
  • 计算机网络---传输层的udp协议

    首先我们认识要在应用层对数据封装之后需要传输到传输层进行封装 xff0c 但是在应用层只是对数据进行了处理 xff0c 所以在传输层上需要对传输到那个进程进行设置 xff0c 所以在传输层需要对port进行设置 所以port是标志一个进程
  • c++中 ->,c++中::

    gt gt 用于指针 gt 用于指向结构体的指针 gt 用于指向结构体的指针 xff0c 表示结构体内的元素 include lt stdio h gt struct role 定义一个结构体 char name 8 姓名 int leve
  • U8W/U8W-Mini使用与常见问题解决

    U8W U8W Mini使用与常见问题解决 U8WU8W U8W mini简介准备工作U8W U8W mini在线联机下载U8W U8W mini脱机下载第一步 xff0c 把程序下载到U8W U8W mini烧录器中 xff1a 第二步
  • Arduino 驱动GP2Y1014AU检测PM2.5

    Arduino 驱动GP2Y1014AU检测PM2 5 一 基本参数二 接线三 部分代码引脚定义对应代码 四 实验现象五 注意事项 一 基本参数 二 接线 三 部分代码 引脚定义 define measurePin span class t
  • STM32F103ZET6驱动TOF250激光测距传感器

    STM32驱动TOF250激光测距传感器 TOF250介绍I2C通讯协议I2C寄存器地址 TOF250引脚说明和STM32的接线和STM32的接线 程序实验结果总结 TOF250介绍 TOF250是一款基于TOF原理的单点测距雷达 xff0
  • STM32驱动SG90舵机

    STM32驱动SG90舵机 关于SG90舵机SG90转动角度与占空比的关系驱动SG90舵机代码 确定控制引脚 写代码 SG90舵机正常驱动现象总结 关于SG90舵机 SG90是一种小型伺服电机 xff0c 通常用于模型制作和小型机械应用中
  • Arduino驱动L298N控制直流电机的正反转和调速

    Arduino驱动L298N控制直流电机的正反转和调速 一 前言二 产品参数三 驱动直流电机三 接线图四 程序五 实验结果总结 一 前言 本模块使用ST公司的L298N作为主驱动芯片 xff0c 具有驱动能力强 xff0c 发热量低 xff
  • Livox MID-70连接及使用

    ROS下载安装 本文选用ros xff0c 未使用ros2 在Ubuntu18 04下配置ros 下载安装参考 xff1a Ubuntu18 04安装 ROS桌面完整版 其中注意在第8部分 span class token function
  • 微信小程序 宠物论坛1

    微信小程序宠物论坛1 一个简单的论坛包括以下几个方面 xff1a 登录模块发帖模块首页模块帖子详情模块搜索模块个人主页模块 下面将从这6个方面介绍如何用微信小程序开发一个简单的论坛 登录模块 先看界面图 打开小程序首先看到这个界面 xff0
  • 微信小程序宠物论坛6

    微信小程序宠物论坛6 个人主页页面 JS部分 const db 61 wx cloud database Page data openid 34 34 nickname 34 34 heads 34 34 onLoad function o
  • 激光SLAM从理论到实践学习——第三节(传感器数据处理2:激光雷达运动畸变的去除)

    传感器数据处理2 xff1a 激光雷达运动畸变的去除 激光雷达运动畸变的去除比里程计标定更重要 xff0c 但也取决于用的雷达型号 我用的思岚A2雷达频率小于10Hz xff0c 畸变也是比较明显的 概念介绍 激光雷达传感器介绍 xff08