<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
    <channel>
            <title>坚持努力，冲~</title>
            <link>https://zhengyu.tech</link>
        <generator>Halo 1.6.0</generator>
        <lastBuildDate>Sun, 13 Apr 2025 12:31:41 CST</lastBuildDate>
                <item>
                    <title>
                        <![CDATA[Jetson 安装 Pytorch 深度学习框架]]>
                    </title>
                    <link>https://zhengyu.tech/archives/jetson安装pytorch深度学习框架</link>
                    <description>
                            <![CDATA[<p>NVIDIA Jetson是非常高性能的深度学习平台，可以高效地运行许多 PyTorch 深度学习模型，并且 NVIDIA 为其开发了高级的 Jetson Inference API。</p><h4 id="%E8%AE%BE%E7%BD%AE-jetson" tabindex="-1">设置 Jetson</h4><pre><code class="language-">sudo pip3 install jetson-statssudo jtop</code></pre><p>可以看到Jetson平台的相关资源，还可以查看已安装的 CUDA 版本：</p><p><img src="/upload/2025/04/2025-04-13%2013-16-47%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE.png" alt="2025-04-13 13-16-47屏幕截图" /><br /><img src="/upload/2025/04/2025-04-13%2013-17-31%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE.png" alt="2025-04-13 13-17-31屏幕截图" /></p><h4 id="%E5%AE%89%E8%A3%85pytorch" tabindex="-1">安装pytorch</h4><p>一般推荐在conda环境中安装：</p><pre><code class="language-">conda create -n torch python=3.8conda activate torch</code></pre><p>在 <a href="https://forums.developer.nvidia.com/t/pytorch-for-jetson/72048" target="_blank">官网</a> 根据 Jtop 的 Jetpack 和 pytorch 版本选择下载安装：</p><pre><code class="language-">pip install torch-2.0.0-cp39-cp39-linux_aarch64.whl</code></pre><p>在根据 pytorch 的版本安装 torchvision 的版本：</p><pre><code class="language-">pip install --no-deps torchvision==0.15.0</code></pre>]]>
                    </description>
                    <pubDate>Sun, 13 Apr 2025 12:19:34 CST</pubDate>
                </item>
                <item>
                    <title>
                        <![CDATA[个人或小型工作室服务器级别的存储解决办法]]>
                    </title>
                    <link>https://zhengyu.tech/archives/ge-ren-huo-xiao-xing-gong-zuo-shi-fu-wu-qi-ji-bie-de-cun-chu-jie-jue-ban-fa</link>
                    <description>
                            <![CDATA[<p>服务器级别的存储涉及管理和保存大量数据的存储系统，以支持高性能、高可靠性和高可用性的数据存取。以下是服务器级别存储的一些关键概念：</p><h2 id="%E5%9F%BA%E7%A1%80%E6%A6%82%E5%BF%B5" tabindex="-1">基础概念</h2><h3 id="%E5%AD%98%E5%82%A8%E7%B1%BB%E5%9E%8B" tabindex="-1">存储类型</h3><p><img src="/upload/2024/11/20241114171243.png" alt="" /></p><ul><li>DAS（直接附加存储，Direct-Attached Storage）：存储直接连接到单个服务器，通常通过 SATA、SAS 或 NVMe 接口。适合低延迟和高带宽需求的应用，但扩展性有限。这类设备通常可以看作是一个大号U盘，直接通过USB与主机连接。</li><li>NAS（网络附加存储，Network-Attached Storage）：独立的存储设备，通过网络（如以太网）提供文件级存储服务，允许多个服务器共享文件。适合文件共享和备份，但性能受网络速度影响。能够兼顾文件共享、备份、归档，还能够在局域网与广域网中数据传输。</li><li>SAN（存储区域网络，Storage Area Network）：是一种专门的高速网络架构，提供块级存储访问，使用光纤通道或 iSCSI 连接服务器和存储。具有较高的扩展性和性能，适合数据库和虚拟化等高负载应用。对于超大型企业的超大数据管理的解决方案。</li></ul><h3 id="raid%EF%BC%88%E7%8B%AC%E7%AB%8B%E7%A3%81%E7%9B%98%E5%86%97%E4%BD%99%E9%98%B5%E5%88%97%EF%BC%8Credundant-array-of-independent-disks%EF%BC%89" tabindex="-1">RAID（独立磁盘冗余阵列，Redundant Array of Independent Disks）</h3><p>RAID 是一种将多个物理硬盘组合成一个逻辑卷的技术，用于提升性能、提供冗余和数据保护。常见的 RAID 级别有：</p><ul><li>RAID 0：数据分条（Striping），不提供冗余，但提高了速度。</li><li>RAID 1：镜像（Mirroring），实现数据冗余和故障恢复。</li><li>RAID 5/6：提供分布式奇偶校验，能够在 1-2 块磁盘损坏时保护数据。</li><li>RAID 10：结合了分条和镜像，提供较高的性能和冗余。</li></ul><p>而实现 RAID 的方法可以分为硬件与软件层面的解决方法。</p><ul><li>硬RAID：硬件 RAID 使用专用 RAID 控制器提供性能优势，各大通信厂商都有类似产品。</li><li>软RAID：软件 RAID 则由操作系统管理，成本较低但占用 CPU 资源，类似于 Unraid 与 Freenas 等。</li></ul><h3 id="%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F" tabindex="-1">文件系统</h3><ul><li>EXT4、NTFS、HFS+ 等：常用于消费级和中小型服务器。</li><li>ZFS：企业级文件系统，具有快照、数据完整性检查、自修复等功能，适合对数据可靠性要求较高的环境。</li><li>XFS：支持大容量和高性能的文件系统，适合大数据应用和视频存储。</li><li>Btrfs：支持快照、压缩和多设备管理，适合虚拟化和云环境。</li></ul><h3 id="%E5%AD%98%E5%82%A8%E7%A1%AC%E7%9B%98" tabindex="-1">存储硬盘</h3><p>硬盘的规格主要可以从 接口类型、物理尺寸 和 存储技术 等方面进行分类，不同的规格决定了硬盘的速度和应用场景。以下是常见的硬盘规格及其典型速度：</p><table><thead><tr><th>接口类型</th><th>物理尺寸</th><th>存储技术</th><th>典型速度</th><th>应用场景</th></tr></thead><tbody><tr><td>SATA</td><td>2.5&quot; / 3.5&quot;</td><td>HDD</td><td>80-200 MB/s</td><td>台式机、笔记本、大容量存储</td></tr><tr><td>SATA</td><td>2.5&quot;</td><td>SSD</td><td>500-550 MB/s</td><td>台式机、笔记本、消费级应用</td></tr><tr><td>SAS</td><td>2.5&quot; / 3.5&quot;</td><td>HDD / SSD</td><td>1500 MB/s+</td><td>数据中心、企业级应用</td></tr><tr><td>PCIe 3.0 NVMe</td><td>M.2 / U.2</td><td>SSD</td><td>2000-3500 MB/s</td><td>高性能计算、游戏、数据分析</td></tr><tr><td>PCIe 4.0 NVMe</td><td>M.2 / U.2</td><td>SSD</td><td>5000-7000 MB/s</td><td>高频读写、实时数据处理</td></tr><tr><td>PCIe 5.0 NVMe</td><td>M.2 / U.2</td><td>SSD</td><td>10000 MB/s+</td><td>下一代高性能应用场景</td></tr><tr><td>Optane</td><td>M.2 / U.2</td><td>SSD</td><td>2500-3000 MB/s</td><td>数据库、延迟敏感的应用</td></tr></tbody></table><p>不同硬盘规格和类型适合不同应用需求。对于高性能需求的应用（如数据中心、实时分析、游戏），NVMe SSD 是最佳选择；而对于大容量的存储需求（如备份、档案存储），HDD 仍然是高性价比的方案。</p><h2 id="%E7%A1%AC%E4%BB%B6%E8%AE%BE%E5%A4%87" tabindex="-1">硬件设备</h2><p>对于需要服务器级别的存储，自然硬盘数量会其他大于10盘以上，这就不是一般个人PC能够安装与处理的了。这时候就需要折腾机架式数据服务器了。</p><p><img src="/upload/2024/11/20241114173557.png" alt="" /></p><p>以上是一个机架式数据服务器的抽象组成，其中包括了，内存、CPU、主板、扩展卡以及硬盘背板。其中与个人PC区别最大的就是扩展卡以及硬盘背板。</p><h3 id="%E6%89%A9%E5%B1%95%E5%8D%A1" tabindex="-1">扩展卡</h3><p>对于机架式数据服务器，一般都是 SAS（Serial Attached SCSI）硬盘扩展卡，并且能够兼容 SATA 格式。根据不同的功能、配置和应用需求，SAS 硬盘扩展卡可以分为以下几种主要类别：</p><h4 id="hba%EF%BC%88host-bus-adapter%EF%BC%8C%E4%B8%BB%E6%9C%BA%E6%80%BB%E7%BA%BF%E9%80%82%E9%85%8D%E5%99%A8%EF%BC%89" tabindex="-1">HBA（Host Bus Adapter，主机总线适配器）</h4><ul><li>功能：HBA 提供直通模式（IT 模式），直接将硬盘连接到主机系统，操作系统可以直接访问硬盘。</li><li>支持协议：SAS 和 SATA，支持双通道 SAS。</li><li>带宽：SAS 3.0 可以支持高达 12Gbps，SAS 4.0 支持高达 24Gbps。</li><li>特点：HBA 不提供 RAID 功能，适用于需要通过软件控制和管理存储的场景，例如 ZFS 文件系统或软件定义存储。</li><li>应用场景：常用于需要直接访问硬盘的系统，如 NAS、SAN 和 SDS（软件定义存储）系统。</li></ul><h4 id="raid-%E7%A1%AC%E4%BB%B6%E5%8D%A1" tabindex="-1">RAID 硬件卡</h4><ul><li>功能：RAID 控制卡支持多种 RAID 配置（RAID 0、1、5、6、10 等），通过硬件实现数据冗余和性能提升。</li><li>缓存和电池支持：许多 RAID 控制卡自带缓存，并支持电池或闪存模块（BBU 或 Flash Backup），可在断电时保护未完成的数据写入。</li><li>支持协议：SAS 和 SATA，通常支持 12Gbps 或 24Gbps。</li><li>特点：RAID 控制卡具备独立的处理器和内存，不依赖主机的 CPU 进行数据处理，适合需要硬件级数据保护的应用。</li><li>应用场景：适用于对数据可靠性要求高的环境，如数据库服务器、虚拟化服务器和企业级存储系统。</li></ul><h4 id="%E6%B7%B7%E5%90%88-raid%2Fhba-%E5%8D%A1" tabindex="-1">混合 RAID/HBA 卡</h4><ul><li>功能：混合 RAID/HBA 卡支持两种模式，既可以作为直通模式的 HBA，也可以配置 RAID 阵列。</li><li>切换模式：这些卡通常可以通过固件或驱动程序来切换模式，例如 LSI 的 IT 模式和 IR 模式。</li><li>特点：混合模式卡灵活性强，可以在不同应用需求之间切换，非常适合需要灵活配置的环境。</li><li>应用场景：适合需要部分存储设备使用 RAID，而其他设备直通管理的环境，如一些文件服务器或虚拟化环境。</li></ul><h4 id="%E8%A7%84%E6%A0%BC%E5%92%8C%E7%89%A9%E7%90%86%E6%8E%A5%E5%8F%A3%E7%B1%BB%E5%9E%8B" tabindex="-1">规格和物理接口类型</h4><p>SAS（Serial Attached SCSI）接口有多种规格和物理接口类型，以满足不同的存储需求和应用场景。以下是常见的 SAS 接口规格：</p><table><thead><tr><th>接口规范</th><th>速度</th><th>应用场景</th></tr></thead><tbody><tr><td>SAS 1.0</td><td>3Gbps</td><td>早期的服务器和存储系统</td></tr><tr><td>SAS 2.0</td><td>6Gbps</td><td>中等性能需求的服务器和存储系统</td></tr><tr><td>SAS 3.0</td><td>12Gbps</td><td>数据中心和企业存储，高性能 RAID 阵列</td></tr><tr><td>SAS 4.0</td><td>24Gbps</td><td>高性能计算、AI 和数据分析等高带宽需求场景</td></tr></tbody></table><table><thead><tr><th>接口类型</th><th>说明</th><th>应用场景</th></tr></thead><tbody><tr><td>SFF-8482</td><td>SAS/SATA 29 针，单硬盘连接</td><td>基础硬盘连接</td></tr><tr><td>SFF-8087</td><td>内部 Mini-SAS 4i</td><td>服务器背板与 RAID 控制器连接</td></tr><tr><td>SFF-8088</td><td>外部 Mini-SAS 4x</td><td>外部存储设备连接</td></tr><tr><td>SFF-8643</td><td>内部 Mini-SAS HD</td><td>高密度存储系统</td></tr><tr><td>SFF-8644</td><td>外部 Mini-SAS HD</td><td>高性能外部存储设备连接</td></tr><tr><td>SFF-8654</td><td>HD Mini-SAS 8i/8x</td><td>超高密度和高速数据传输</td></tr><tr><td>U.2 (SFF-8639)</td><td>支持 SAS、SATA 和 NVMe</td><td>高性能、混合存储系统</td></tr></tbody></table><p>不同的 SAS 接口规格和类型提供了多样的连接方式，以满足从基础存储扩展到高性能存储系统的各种需求。选择合适的 SAS 接口规格可以帮助优化存储性能和系统的扩展性。</p><h3 id="%E7%A1%AC%E7%9B%98%E8%83%8C%E6%9D%BF" tabindex="-1">硬盘背板</h3><p>硬盘背板（Backplane）是服务器或存储设备中用于连接多个硬盘的电路板组件。它简化了硬盘与主板或控制卡之间的连接，并提供了热插拔功能，使得硬盘更换和维护更加便捷。根据接口类型、功能和应用需求，硬盘背板具有不同的特性和区别。以下是硬盘背板的一些主要类别和特性：</p><h4 id="%E7%A1%AC%E7%9B%98%E6%8E%A5%E5%8F%A3%E7%B1%BB%E5%9E%8B" tabindex="-1">硬盘接口类型</h4><ul><li><p>SATA 背板<br />-  接口：专用于 SATA 硬盘，通过 SATA 接口与硬盘和主板或 RAID 控制卡连接。<br />-  特点：传输速率通常为 6Gbps（SATA 3.0），适合连接 SATA HDD 和 SATA SSD。<br />-  应用场景：常用于家用 NAS 和小型服务器，适合对性能要求不高的存储应用。</p></li><li><p>SAS 背板<br />-  接口：用于连接 SAS 硬盘，通常支持双通道 SAS 或 SATA 设备。<br />-  特点：SAS 背板通常支持 6Gbps、12Gbps 或 24Gbps 的 SAS 传输速率，具备更高的可靠性和数据传输速度。<br />-  应用场景：广泛应用于企业级存储和数据中心，适合需要高性能和高可靠性的应用。</p></li><li><p>NVMe 背板<br />- 接口：支持 NVMe SSD，通过 PCIe 通道连接，提供极高的带宽和低延迟。<br />- 特点：支持热插拔，传输速率可达 32Gbps 或更高，适合高性能 NVMe 存储。<br />- 应用场景：适用于高性能存储需求的数据中心和高频读写应用场景。</p></li></ul><p>以及一些相互混合背板的，可以根据需求选择不同的硬盘，既支持高容量存储（SAS/SATA）也支持高性能存储（NVMe）。</p><h4 id="%E6%89%A9%E5%B1%95%E6%8E%A5%E5%8F%A3" tabindex="-1">扩展接口</h4><p>带有 SAS 扩展器的背板：</p><ul><li>内置 SAS 扩展器的背板可以通过一个或几个 SAS 通道连接多个硬盘，简化了物理连接结构。</li><li>适合高密度存储环境，如需要连接大量硬盘的服务器和数据中心，便于管理和扩展存储容量。</li></ul><p>例如，一些机箱产品描述为：12Gb 背板，2 个 SFF-8643 口，内置 EX 芯片，通过一条线连接 24 个硬盘</p><ul><li>12Gb：表示每个 SAS 通道的带宽是 12Gbps，提供更高的传输速率。</li><li>2 个 8643 口：SFF-8643 是 Mini-SAS HD 接口，属于更高密度的连接方式，可以支持更高的速度和更多硬盘连接。</li><li>内置 EX 芯片：同样有 SAS 扩展芯片，允许通过背板内部扩展，连接更多硬盘。</li><li>一条线连接 24 个硬盘：和第二种配置类似，虽然只有 2 个 8643 端口，但内置 EX 芯片允许一个接口覆盖更多硬盘，因此只需一条线即可连接 24 个硬盘。</li></ul>]]>
                    </description>
                    <pubDate>Thu, 14 Nov 2024 16:47:35 CST</pubDate>
                </item>
                <item>
                    <title>
                        <![CDATA[光口通信的基础知识与设备]]>
                    </title>
                    <link>https://zhengyu.tech/archives/guang-kou-tong-xin-de-ji-chu-zhi-shi-yu-she-bei</link>
                    <description>
                            <![CDATA[<p>光口通信（光纤通信）是利用光纤传输信息的通信方式，广泛应用于数据通信、互联网、局域网和广域网等场景。光纤通信具有高带宽、低损耗、抗干扰等优点，是现代高速通信网络的基础。</p><h3 id="%E5%85%89%E7%BA%A4%E9%80%9A%E4%BF%A1%E7%9A%84%E5%9F%BA%E6%9C%AC%E5%8E%9F%E7%90%86" tabindex="-1">光纤通信的基本原理</h3><p>光纤通信通过光纤介质传输光信号，光信号以脉冲的形式代表“1”和“0”来传递数字信息。其基本流程如下：</p><p><img src="/upload/2024/11/20241113112818.png" alt="" /></p><ul><li>光电转换：信息以电信号的形式进入发射端，在光源（如激光二极管）中被转换为光信号。</li><li>光信号传输：光信号在光纤中传播，光纤的芯径和包层设计确保光在内核中发生全内反射，从而有效传输信号。</li><li>接收与解码：接收端的光电探测器（如光电二极管）将接收到的光信号转换为电信号，再进行解码还原成数字信息。</li></ul><h4 id="%E5%85%89%E7%BA%A4%E9%80%9A%E4%BF%A1%E7%9A%84%E5%85%B3%E9%94%AE%E6%8A%80%E6%9C%AF" tabindex="-1">光纤通信的关键技术</h4><ul><li>调制技术：将电信号调制为光信号的过程，常见调制技术包括幅移键控（ASK）、频移键控（FSK）、相移键控（PSK）等。</li><li>多路复用技术：通过波分复用（WDM）、时分复用（TDM）等技术在一根光纤上传输多个信号，从而增加传输效率。</li><li>相干光通信：利用相干光进行高速传输，适合 100 Gbps 及以上的超高速通信，常用于骨干网络。</li></ul><h4 id="%E5%85%89%E7%BA%A4%E9%80%9A%E4%BF%A1%E7%9A%84%E8%AE%BE%E5%A4%87%E4%B8%8E%E6%8A%80%E6%9C%AF" tabindex="-1">光纤通信的设备与技术</h4><ul><li>光端机：用于光信号的发送和接收，实现电信号到光信号的转换，常见于数据中心和通信基站。</li><li>光模块：小型化的光端机，安装在交换机、路由器等网络设备上，用于设备之间的光纤互连。常见的光模块接口标准包括 SFP、SFP+、QSFP+ 等。</li><li>光纤：光信号在光纤中传播，光纤主要由芯、包层和保护层组成。</li><li>光放大器：如掺铒光纤放大器（EDFA），用于长距离光信号的放大，延长传输距离。</li><li>波分复用（WDM）技术：将不同波长的光信号复用到一根光纤中，从而提高传输容量。WDM 可分为粗波分复用（CWDM）和密集波分复用（DWDM）。</li></ul><h3 id="%E5%85%89%E7%BA%A4%E9%80%9A%E4%BF%A1%E7%9A%84%E8%A7%84%E6%A0%BC%E5%92%8C%E6%A0%87%E5%87%86" tabindex="-1">光纤通信的规格和标准</h3><h4 id="%E5%85%89%E7%BA%A4%E7%B1%BB%E5%9E%8B%E8%A7%84%E6%A0%BC" tabindex="-1">光纤类型规格</h4><ul><li>单模光纤（SMF）：芯径较小（约 8-10 微米），适用于长距离传输，主要用于电信和数据中心骨干网络。单模光纤通常使用激光作为光源，可支持几十至上百公里的传输距离。</li><li>多模光纤（MMF）：芯径较大（通常为 50 或 62.5 微米），适合短距离应用，主要用于局域网和数据中心内部。多模光纤通常使用 LED 作为光源，适合 100 米到几百米的传输距离。</li></ul><p><img src="/upload/2024/11/20241113113558.png" alt="" /></p><h4 id="%E5%85%89%E7%BA%A4%E8%BF%9E%E6%8E%A5%E5%99%A8%E8%A7%84%E6%A0%BC" tabindex="-1">光纤连接器规格</h4><p>光纤连接器用于将光纤与设备连接，不同的连接器接口适应不同的应用场景。常见连接器包括：</p><ul><li>LC（Lucent Connector）：是采用操作方便的模块化插孔(RJ)闩锁机理制成的连接器，常用于高密度应用中。</li><li>SC（Subscriber Connector）：卡接式标准方型接头,紧固方式是采用插拔销闩式,不需旋转的推拉式连接器，应用广泛于电信和数据中心。</li><li>ST（Straight Tip）：采用2.5mm的环形塑料或金属外壳,紧固方式为螺丝扣连接器，常用于建筑布线和网络设施。</li><li>FC（Ferrule Connector）：FC是采用金属套,紧固方式为螺丝扣。结构简单,操作方便,制作容易,耐用,可用于高振动环境。</li><li>MTP/MPO：一种特殊类型的多光纤连接器。MPO连接器的结构比较复杂,它将12或24根光纤连接在一个矩形光纤插芯中。通常用于高密度连接场景,如数据中心等。</li></ul><p><img src="/upload/2024/11/20241113114151.png" alt="" /></p><h4 id="%E5%85%89%E7%BA%A4%E6%A8%A1%E5%9D%97%E8%A7%84%E6%A0%BC" tabindex="-1">光纤模块规格</h4><p>光纤模块用于数据传输设备之间的光纤互连，支持不同速率和距离的传输需求：</p><ul><li>SFP（Small Form-factor Pluggable）：速率支持 1 Gbps，多用于千兆以太网和光纤通道。</li><li>SFP+：支持 10 Gbps 的速率，常用于 10G 以太网和光纤通道。</li><li>QSFP（Quad Small Form-factor Pluggable）：支持 40 Gbps，适合数据中心的高密度 40G 连接。</li><li>QSFP+：扩展版本的 QSFP，支持 40 Gbps 和更高的速率。</li><li>QSFP28：支持 100 Gbps 传输速率，常用于 100G 以太网。</li><li>CFP、CFP2、CFP4：支持 100 Gbps 和 400 Gbps 的传输速率，适合长距离传输和高带宽需求的应用场景。</li></ul><p><img src="/upload/2024/11/20241113114551.png" alt="" /></p><p>光模块通常在型号中包含对光纤类型的标识，以下是一些常见的标识方式：</p><ul><li>单模光纤（Single Mode Fiber, SMF）：通常用 “LX”、“LR”、“ER”、“ZR” 等后缀表示。例如：<br />-  10GBASE-LR：表示 10G 的单模光模块，适合长距离传输（10 公里）。<br />- 100GBASE-LR4：表示 100G 的单模光模块，适合长距离传输（10 公里）。</li><li>多模光纤（Multi Mode Fiber, MMF）：通常用 “SX”、“SR”、“SR4” 等后缀表示。例如：<br />- 10GBASE-SR：表示 10G 的多模光模块，适合短距离传输（300 米）。<br />- 40GBASE-SR4：表示 40G 的多模光模块，适合数据中心的短距离传输（100 米到 400 米）。</li></ul><p>单模和多模光纤适用的波长不同，通过模块的波长参数也可以判断支持的光纤类型：</p><ul><li>多模光纤：多模光模块一般使用 850nm 波长，这是多模光纤的主要工作波长。</li><li>单模光纤：单模光模块一般使用 1310nm 或 1550nm 波长，这些波长适合长距离传输。</li></ul><p>光模块上通常有标签或技术规格，产品手册和规格表也明确标注了支持的光纤类型：</p><ul><li>SM（Single Mode）：表示单模光纤。</li><li>MM（Multi Mode）：表示多模光纤。</li></ul><h4 id="%E5%85%89%E7%BA%A4%E4%BC%A0%E8%BE%93%E8%B7%9D%E7%A6%BB%E8%A7%84%E6%A0%BC" tabindex="-1">光纤传输距离规格</h4><p>光纤的传输距离因光纤类型、传输速率、光源和放大器的使用而异。常见传输距离规格有：</p><ul><li>短距离（SR，Short Range）：一般指 300 米内的多模光纤传输，常见于数据中心内部。</li><li>长距离（LR，Long Range）：支持长达 10 公里的传输，通常为单模光纤，适合城域网和数据中心间的互连。</li><li>超长距离（ER，Extended Range）：支持 40 公里或更长的传输，适合需要跨越多个城市的通信。</li><li>超远距离（ZR，Zepto Range）：支持 80 公里以上的传输，适用于跨省乃至跨国家的骨干网络。</li></ul>]]>
                    </description>
                    <pubDate>Wed, 13 Nov 2024 12:35:37 CST</pubDate>
                </item>
                <item>
                    <title>
                        <![CDATA[WebODM 简介与使用]]>
                    </title>
                    <link>https://zhengyu.tech/archives/webodm-jian-jie-yu-shi-yong</link>
                    <description>
                            <![CDATA[<p><a href="https://www.opendronemap.org/webodm/" target="_blank">官网</a>  || <a href="https://github.com/OpenDroneMap/WebODM?tab=readme-ov-file" target="_blank">Github</a>  || <a href="https://docs.opendronemap.org/#" target="_blank">文档</a></p><p>WebODM（Web OpenDroneMap）是一款开源的软件平台，专门用于无人机图像的处理和3D建模。它基于 OpenDroneMap（ODM）构建，通过提供一个易于使用的网页界面来简化和自动化无人机图像的处理过程。WebODM 可以将无人机拍摄的影像转换为正射影像、数字地形模型（DTM）、数字表面模型（DSM）、3D模型和点云等地理信息数据，广泛应用于农业、测绘、建筑、环境监测等领域。以下是 WebODM 的主要功能和特点：</p><h3 id="%E4%B8%BB%E8%A6%81%E5%8A%9F%E8%83%BD" tabindex="-1">主要功能</h3><ol><li><p><strong>正射影像（Orthophoto）生成</strong>：</p><ul><li>WebODM 可以将无人机拍摄的多张图像拼接并矫正为正射影像，这种影像消除了视角和地形的变形，适用于测绘、地理信息系统（GIS）分析等。<br /><img src="/upload/2024/10/20241022163458.png" alt="20241022163458" /></li></ul></li><li><p><strong>数字地形模型（DTM）和数字表面模型（DSM）</strong>：</p><ul><li>生成高精度的DTM和DSM，用于分析地形变化、估算体积或进行环境建模。这些模型可以反映地面的高度信息，去除或保留地面上的物体（如建筑物和植被）。<br /><img src="/upload/2024/10/20241022163552.png" alt="20241022163552" /></li></ul></li><li><p><strong>点云和3D建模</strong>：</p><ul><li>WebODM 可以生成密集的点云数据，并通过这些点云生成3D模型，适用于测量建筑物或地形特征，以及进行体积计算、视觉效果呈现等。</li></ul></li></ol><p><img src="/upload/2024/10/20241022163643.png" alt="20241022163643" /></p><ol start="4"><li><p><strong>植被指数（如NDVI）分析</strong>：</p><ul><li>WebODM 支持对多光谱图像进行分析，生成植被指数（如NDVI）。这对于农业监测、健康评估和环境分析非常有用。</li></ul></li><li><p><strong>自动化和批处理</strong>：</p><ul><li>WebODM 支持批量处理多个任务，可以自动化无人机数据的处理过程。用户可以通过其API实现自动化操作。</li></ul></li><li><p><strong>插件和扩展性</strong>：</p><ul><li>WebODM 提供插件系统，用户可以根据需求安装不同的插件（如体积计算、热成像处理等），来扩展其功能。</li></ul></li></ol><h3 id="%E7%BB%84%E6%88%90%E4%B8%8E%E7%BB%93%E6%9E%84%E5%8C%96" tabindex="-1">组成与结构化</h3><p>WebODM 是一个用于无人机图像处理和地理信息生成的开源平台，其架构由多个模块和组件组成，每个模块都有特定的功能。这些模块协同工作，以完成从图像上传、处理到结果展示的全过程。以下是 WebODM 的主要组成部分和模块：</p><ul><li>WebODM增加了更多的功能，如用户认证、地图显示、3D显示、更高级别的API和编排多个处理节点（并行运行作业）的能力。处理节点就是运行NodeODM的服务器。</li><li>NodeODM是直接构建在ODM之上的轻量级接口和API（应用程序接口）。不熟悉命令行的用户可以使用这个接口来处理航拍图像，开发人员可以使用API来构建应用程序。不提供用户身份验证、地图显示等功能。</li><li>ODM是一个处理航空图像的命令行工具包。熟悉命令行的用户可能可以单独使用该组件。</li></ul><h3 id="plant-health%EF%BC%88%E6%A4%8D%E8%A2%AB%E5%81%A5%E5%BA%B7%EF%BC%89%E6%8C%87%E6%95%B0" tabindex="-1">Plant Health（植被健康）指数</h3><p>WebODM 在只输入 RGB 图像的情况下也可以生成 “Plant Health”（植被健康）指数，虽然这种指数并不完全等同于基于多光谱数据生成的 NDVI 或其他植被指数，但它可以作为一种替代或近似的方法。这背后的原因和技术如下：</p><ul><li>WebODM 通过使用 RGB 图像中红、绿、蓝通道的组合，近似计算出植被健康指数。这种方法通常被称为 <strong>Visible Atmospherically Resistant Index (VARI)</strong> 或 <strong>Green Leaf Index</strong>，它们并不像 NDVI 那样依赖于红外波段，而是基于 RGB 数据来估算植被的相对健康状态。</li><li>这些近似植被指数的计算公式如下：<ul><li><strong>VARI</strong> = (G - R) / (G + R - B)<ul><li>G、R、B 分别表示绿色、红色和蓝色通道的值。</li><li>这种指数利用了 RGB 图像中的绿色和红色通道的差异来估算植被的健康程度。</li></ul></li></ul></li><li>这些方法虽然不像 NDVI 那样准确（因为 NDVI 依赖于红外光谱的反射特性），但它们仍然能够在一定程度上显示植物的相对健康状态，尤其是在绿色植被明显的区域。</li></ul>]]>
                    </description>
                    <pubDate>Tue, 22 Oct 2024 15:37:07 CST</pubDate>
                </item>
                <item>
                    <title>
                        <![CDATA[单片机MCU的统计与思考]]>
                    </title>
                    <link>https://zhengyu.tech/archives/dan-pian-ji-mcu-de-tong-ji-yu-si-kao</link>
                    <description>
                            <![CDATA[<p>单片机（Microcontroller Unit，简称 MCU）是一种集成了处理器、存储器和各种输入/输出（I/O）接口于一体的微型计算机。与通用计算机相比，单片机体积小巧、成本低，专门用于嵌入式系统和特定的控制任务。单片机可以理解为一个完整的计算机系统的“缩小版”，适用于特定任务和应用场景中。</p><h3 id="%E5%8D%95%E7%89%87%E6%9C%BA%E7%9A%84%E5%9F%BA%E6%9C%AC%E7%BB%84%E6%88%90%E9%83%A8%E5%88%86" tabindex="-1">单片机的基本组成部分</h3><ol><li><p><strong>中央处理器（CPU）</strong>：<br />CPU 是单片机的核心，负责执行程序指令并进行逻辑运算。单片机的 CPU 通常是针对嵌入式控制优化的，可能是8位、16位或32位的处理器。</p></li><li><p><strong>存储器</strong>：</p><ul><li><strong>闪存（Flash Memory）</strong>：存储程序代码的地方，掉电不丢失数据。常见的程序和固件就是存储在闪存中。</li><li><strong>随机存取存储器（RAM）</strong>：用于存储程序运行过程中需要的临时数据。掉电后数据会丢失。</li><li><strong>只读存储器（ROM）</strong>：用于存储不能修改的固化数据，某些单片机中可能会有 ROM 用来存放启动程序或预设数据。</li></ul></li><li><p><strong>输入/输出接口（I/O）</strong>：<br />单片机通常集成了多种 I/O 接口，用于与外部设备进行通信和控制，如开关、显示屏、传感器、马达等。常见的接口包括 GPIO（通用输入输出口）、串口（UART）、SPI、I²C 等。</p></li><li><p><strong>定时器/计数器</strong>：<br />定时器和计数器用于时间的测量和控制，可以执行定时任务、产生时钟信号或测量外部事件的发生频率。</p></li><li><p><strong>模数转换器（ADC）/ 数模转换器（DAC）</strong>：<br />在一些应用中，单片机需要处理模拟信号（如温度、光线等），ADC 将模拟信号转换为数字信号，而 DAC 则相反，将数字信号转换为模拟信号。</p></li><li><p><strong>中断系统</strong>：<br />中断系统允许单片机在某些事件发生时，立即中断当前正在执行的程序，转而去处理高优先级的任务。中断机制在实时系统中非常重要。</p></li></ol><h3 id="%E5%8D%95%E7%89%87%E6%9C%BA%E7%9A%84%E5%86%85%E6%A0%B8%E6%9E%B6%E6%9E%84%E7%B3%BB%E5%88%97" tabindex="-1">单片机的内核架构系列</h3><p>单片机（MCU）的内核架构主要有以下几种常见的系列，每种架构针对不同的应用场景和需求设计，涵盖了从低功耗、低成本到高性能的需求。以下是常见的 MCU 内核架构系列：</p><h4 id="1.-arm-cortex-%E7%B3%BB%E5%88%97" tabindex="-1">1. <strong>ARM Cortex 系列</strong></h4><p>ARM 是目前最广泛使用的 MCU 内核架构，尤其是在高性能嵌入式系统中。ARM Cortex 系列分为多个子系列，适用于从低功耗设备到高性能系统的各种应用。</p><ul><li><p><strong>ARM Cortex-M</strong> 系列：专为微控制器（MCU）设计，主要应用于实时控制和嵌入式系统中。</p><ul><li><strong>Cortex-M0/M0+</strong>：超低功耗，适合电池供电的设备，如传感器、智能家居设备。</li><li><strong>Cortex-M3</strong>：用于中等性能的应用，支持丰富的外设和较高的计算能力，常用于工业控制和消费电子。</li><li><strong>Cortex-M4</strong>：集成了 DSP（数字信号处理）指令集，适合音频处理、运动控制等需要较强计算能力的场合。</li><li><strong>Cortex-M7</strong>：高性能 MCU，适合复杂的嵌入式系统，支持 DSP 和浮点运算，常用于物联网网关、图像处理等领域。</li></ul></li><li><p><strong>ARM Cortex-A</strong> 系列：为高性能应用设计，通常用于更复杂的嵌入式操作系统（如 Linux），适合智能手机、平板、复杂的物联网设备。</p></li><li><p><strong>ARM Cortex-R</strong> 系列：适合实时性要求非常高的应用，如汽车、医疗设备、工业控制系统等。</p></li></ul><h4 id="2.-risc-v-%E6%9E%B6%E6%9E%84" tabindex="-1">2. <strong>RISC-V 架构</strong></h4><p>RISC-V 是一种开源的指令集架构（ISA），近年来发展迅速，适用于各种嵌入式应用。由于其开源特性，RISC-V 在物联网、教育和创新型开发项目中越来越受欢迎。</p><ul><li><strong>RISC-V 内核</strong>：灵活的架构设计，制造商可以根据具体应用定制自己的 MCU，支持从低功耗到高性能的各种设备。许多企业基于 RISC-V 开发出适合物联网、嵌入式控制等场景的 MCU。</li></ul><h4 id="3.-avr-%E6%9E%B6%E6%9E%84" tabindex="-1">3. <strong>AVR 架构</strong></h4><p>AVR 是 Atmel（现已被 Microchip 收购）开发的8位 RISC 架构，拥有简洁的指令集，适合初学者和一些低成本、低功耗应用。</p><ul><li><strong>8位 AVR</strong>：指令集精简、执行效率高，适合教育、DIY 项目以及简单的工业控制。常用于 Arduino 开发板。</li></ul><h4 id="4.-pic-%E6%9E%B6%E6%9E%84" tabindex="-1">4. <strong>PIC 架构</strong></h4><p>PIC 是 Microchip 推出的系列微控制器，架构简单易懂，涵盖了从8位到32位的 MCU，适用于各种嵌入式应用。</p><ul><li><strong>8位 PIC（PIC10/12/16/18）</strong>：低功耗，适合简单的控制任务。</li><li><strong>16位 PIC（PIC24）</strong>：适用于中等复杂度的嵌入式应用。</li><li><strong>32位 PIC（PIC32）</strong>：基于 MIPS 架构，适合高性能要求的嵌入式系统。</li></ul><h4 id="5.-8051-%E6%9E%B6%E6%9E%84" tabindex="-1">5. <strong>8051 架构</strong></h4><p>8051 是一种经典的8位 MCU 架构，由 Intel 在1980年代开发。虽然历史悠久，但由于其简单性和广泛的生态系统，仍然在许多低功耗、低成本的嵌入式应用中使用。</p><ul><li><strong>8051 内核</strong>：许多厂商基于该架构推出了增强版的8051微控制器，集成了更多的外设和改进的性能，适合传统控制、家电、工业应用等。</li></ul><h4 id="6.-msp430-%E6%9E%B6%E6%9E%84" tabindex="-1">6. <strong>MSP430 架构</strong></h4><p>MSP430 是由 Texas Instruments 推出的16位 MCU，专为超低功耗应用设计。该架构非常适合电池供电设备和需要长期低功耗运行的嵌入式系统。</p><ul><li><strong>MSP430 内核</strong>：以超低功耗著称，应用于传感器、智能仪表、医疗设备等领域。</li></ul><h4 id="7.-mips-%E6%9E%B6%E6%9E%84" tabindex="-1">7. <strong>MIPS 架构</strong></h4><p>MIPS 是一种经典的 RISC 架构，在早期的嵌入式系统中应用广泛。虽然其市场份额较 ARM 等架构较小，但仍然有一些厂商使用 MIPS 架构开发 MCU。</p><ul><li><strong>MIPS 内核</strong>：被 Microchip 的 PIC32 系列所采用，适合高性能嵌入式应用。</li></ul><h4 id="8.-tensilica-xtensa-%E6%9E%B6%E6%9E%84" tabindex="-1">8. <strong>Tensilica Xtensa 架构</strong></h4><p>Tensilica Xtensa 是一种高度可配置的处理器架构，允许用户根据需求自定义内核结构，常用于特定应用的优化，如音频处理、网络通信等。</p><ul><li><strong>Xtensa 内核</strong>：如乐鑫科技（Espressif）的 ESP32 MCU，使用了 Xtensa 内核，广泛应用于物联网、智能家居等场景。</li></ul><h3 id="%E7%9B%AE%E5%89%8D%E5%B8%82%E5%9C%BA%E4%B8%BB%E6%B5%81%E7%9A%84%E5%8D%95%E7%89%87%E6%9C%BA%E7%B3%BB%E5%88%97" tabindex="-1">目前市场主流的单片机系列</h3><p>目前市场上主流的单片机（MCU）产品系列可以根据不同公司来划分，以下是主要的单片机厂商及其对应的产品系列：</p><h4 id="1.-stmicroelectronics%EF%BC%88%E6%84%8F%E6%B3%95%E5%8D%8A%E5%AF%BC%E4%BD%93%EF%BC%89" tabindex="-1">1. <strong>STMicroelectronics（意法半导体）</strong></h4><ul><li><strong>STM32 系列</strong>：基于 ARM Cortex-M 内核，是意法半导体最受欢迎的 MCU 系列，广泛用于各种嵌入式应用，从物联网设备到工业自动化。<ul><li><strong>STM32F 系列</strong>：高性能系列，支持浮点运算，适合工业自动化和高性能嵌入式系统。</li><li><strong>STM32L 系列</strong>：超低功耗 MCU，适合可穿戴设备、智能传感器等需要低功耗的应用。</li><li><strong>STM32H 系列</strong>：基于 Cortex-M7 的高性能 MCU，适用于图像处理和复杂嵌入式任务。</li></ul></li><li><strong>STM8 系列</strong>：8位 MCU，适用于简单的嵌入式应用，如家电控制、传感器节点等。</li></ul><h4 id="2.-nxp-semiconductors%EF%BC%88%E6%81%A9%E6%99%BA%E6%B5%A6%E5%8D%8A%E5%AF%BC%E4%BD%93%EF%BC%89" tabindex="-1">2. <strong>NXP Semiconductors（恩智浦半导体）</strong></h4><ul><li><strong>LPC 系列</strong>：基于 ARM Cortex-M 内核的 MCU，广泛应用于嵌入式系统开发。<ul><li><strong>LPC800 系列</strong>：基于 Cortex-M0+，适用于低功耗和低成本应用，如智能家居。</li><li><strong>LPC500 系列</strong>：适合较高性能要求的应用，基于 Cortex-M4 内核，适用于复杂的嵌入式系统。</li></ul></li><li><strong>Kinetis 系列</strong>：基于 ARM Cortex-M0+/M4 内核，广泛应用于物联网和工业控制。</li><li><strong>iMX RT 系列</strong>：高性能 MCU 系列，采用 ARM Cortex-M7 核心，适合需要高处理能力的应用。</li></ul><h4 id="3.-microchip-technology%EF%BC%88%E5%BE%AE%E8%8A%AF%E7%A7%91%E6%8A%80%EF%BC%89" tabindex="-1">3. <strong>Microchip Technology（微芯科技）</strong></h4><ul><li><strong>PIC 系列</strong>：Microchip 经典的 MCU 系列，分为8位、16位和32位。<ul><li><strong>PIC10/12/16</strong> 系列：8位 MCU，常用于低成本、低功耗的应用，如家电控制。</li><li><strong>PIC18 系列</strong>：8位高性能 MCU，适合要求较高的嵌入式系统。</li><li><strong>PIC24 系列</strong>：16位 MCU，适用于中等复杂度的嵌入式应用。</li><li><strong>PIC32 系列</strong>：基于 MIPS 架构的32位 MCU，适合高性能嵌入式系统，如音频处理、图像处理等。</li></ul></li><li><strong>AVR 系列</strong>：Atmel 产品线，现由 Microchip 提供。<ul><li><strong>ATmega 系列</strong>：8位 MCU，常见于 Arduino 开发板，广泛应用于教育和 DIY 项目。</li><li><strong>ATtiny 系列</strong>：小型、低功耗的 MCU，适合小型电子设备和传感器应用。</li><li><strong>SAM 系列</strong>：基于 ARM Cortex-M 内核，适用于高性能应用。</li></ul></li></ul><h4 id="4.-texas-instruments%EF%BC%88%E5%BE%B7%E5%B7%9E%E4%BB%AA%E5%99%A8%EF%BC%89" tabindex="-1">4. <strong>Texas Instruments（德州仪器）</strong></h4><ul><li><strong>MSP430 系列</strong>：超低功耗16位 MCU，广泛应用于电池供电设备，如传感器、便携设备、医疗设备等。</li><li><strong>Tiva C 系列</strong>：基于 ARM Cortex-M 内核的32位 MCU，适用于物联网、工业控制和通信应用。</li><li><strong>SimpleLink 系列</strong>：集成无线通信的 MCU 系列，支持 Wi-Fi、Bluetooth 和 Sub-1GHz，适合物联网应用。</li></ul><h4 id="5.-renesas-electronics%EF%BC%88%E7%91%9E%E8%90%A8%E7%94%B5%E5%AD%90%EF%BC%89" tabindex="-1">5. <strong>Renesas Electronics（瑞萨电子）</strong></h4><ul><li><strong>RX 系列</strong>：基于 Renesas 自主开发的32位内核，适用于高性能嵌入式系统，如工业自动化和汽车电子。</li><li><strong>RL78 系列</strong>：16位超低功耗 MCU，适用于家电控制、传感器应用等。</li><li><strong>RA 系列</strong>：基于 ARM Cortex-M 内核，专注于物联网和工业控制。</li><li><strong>RZ 系列</strong>：适用于高性能的嵌入式系统，尤其是需要处理图像、通信和数据处理的应用。</li></ul><h4 id="6.-espressif-systems%EF%BC%88%E4%B9%90%E9%91%AB%E7%A7%91%E6%8A%80%EF%BC%89" tabindex="-1">6. <strong>Espressif Systems（乐鑫科技）</strong></h4><ul><li><strong>ESP8266 系列</strong>：性价比高的 Wi-Fi MCU，广泛用于物联网设备和智能家居。</li><li><strong>ESP32 系列</strong>：集成了 Wi-Fi 和 Bluetooth，适用于物联网、智能家居、可穿戴设备等广泛应用。</li></ul><h4 id="7.-silicon-labs%EF%BC%88%E8%8A%AF%E7%A7%91%E5%AE%9E%E9%AA%8C%E5%AE%A4%EF%BC%89" tabindex="-1">7. <strong>Silicon Labs（芯科实验室）</strong></h4><ul><li><strong>EFM32 Gecko 系列</strong>：超低功耗 MCU，基于 ARM Cortex-M 内核，适合电池供电和物联网应用。</li><li><strong>Wireless Gecko 系列</strong>：支持无线通信（如 Zigbee、Bluetooth）的 MCU，适用于物联网设备和智能家居应用。</li></ul><h4 id="8.-cypress-semiconductor%EF%BC%88%E8%B5%9B%E6%99%AE%E6%8B%89%E6%96%AF%E5%8D%8A%E5%AF%BC%E4%BD%93%EF%BC%8C%E7%8E%B0%E5%B1%9E%E4%BA%8E%E8%8B%B1%E9%A3%9E%E5%87%8C%EF%BC%89" tabindex="-1">8. <strong>Cypress Semiconductor（赛普拉斯半导体，现属于英飞凌）</strong></h4><ul><li><strong>PSoC 系列</strong>：可编程片上系统 MCU，集成了模拟和数字外设，适用于工业、消费电子等领域。</li><li><strong>FM 系列</strong>：基于 ARM Cortex-M 内核的 MCU，适用于工业控制、汽车电子和家电。</li></ul><h4 id="9.-raspberry-pi%EF%BC%88%E6%A0%91%E8%8E%93%E6%B4%BE%EF%BC%89" tabindex="-1">9. <strong>Raspberry Pi（树莓派）</strong></h4><ul><li><strong>RP2040 系列</strong>：树莓派基金会推出的低成本 MCU，基于双核 ARM Cortex-M0+ 内核，适用于教育和 DIY 项目。</li></ul><h4 id="10.-nordic-semiconductor" tabindex="-1">10. <strong>Nordic Semiconductor</strong></h4><ul><li><strong>nRF 系列</strong>：专注于低功耗无线通信 MCU，广泛用于物联网、可穿戴设备和蓝牙应用。<ul><li><strong>nRF51 系列</strong>：基于 ARM Cortex-M0，适用于低功耗蓝牙应用。</li><li><strong>nRF52 系列</strong>：基于 ARM Cortex-M4，支持蓝牙、Thread 和 Zigbee。</li></ul></li></ul><h3 id="%E7%9B%AE%E5%89%8D%E5%B8%82%E5%9C%BA%E4%B8%BB%E6%B5%81%E7%9A%84-ide" tabindex="-1">目前市场主流的 IDE</h3><p>目前市场上主流的单片机编程平台有多种，这些平台通常提供了集成开发环境（IDE）和库支持，帮助开发者进行快速开发。以下是主要的单片机编程平台及其支持的单片机芯片：</p><h4 id="1.-arduino-ide" tabindex="-1">1. <strong>Arduino IDE</strong></h4><ul><li><strong>特点</strong>：开源、跨平台（Windows、macOS 和 Linux），适合初学者，界面简单易用，拥有大量的库和社区支持。</li><li><strong>支持的单片机</strong>：<ul><li><strong>AVR 系列</strong>（Atmel，现为 Microchip）：如 ATmega328P（Arduino UNO）、ATmega2560（Arduino Mega）。</li><li><strong>ARM Cortex-M 系列</strong>：如 ATSAMD21（Arduino Zero）和 ATSAM3X8E（Arduino Due）。</li><li><strong>ESP 系列</strong>（Espressif）：如 ESP8266 和 ESP32，适用于物联网应用。</li><li><strong>Raspberry Pi RP2040</strong>：如 Raspberry Pi Pico。</li><li><strong>其他</strong>：通过安装第三方核心文件，Arduino IDE 还支持 STM32、TI 的 MSP430 等。</li></ul></li></ul><h4 id="2.-stm32cubeide%EF%BC%88stmicroelectronics%EF%BC%89" tabindex="-1">2. <strong>STM32CubeIDE（STMicroelectronics）</strong></h4><ul><li><strong>特点</strong>：集成了 STM32CubeMX 和 Eclipse，支持图形化配置外设和生成代码，专为 STM32 微控制器开发。</li><li><strong>支持的单片机</strong>：<ul><li><strong>STM32 系列</strong>：所有基于 ARM Cortex-M0、M3、M4、M7 的 STM32 微控制器，如 STM32F0、STM32F4、STM32F7 等系列。</li></ul></li><li><strong>功能</strong>：提供了图形化外设配置工具（STM32CubeMX），自动生成初始化代码，支持丰富的调试和分析工具，适合从入门到高端开发者。</li></ul><h4 id="3.-esp-idf%EF%BC%88espressif%EF%BC%89" tabindex="-1">3. <strong>ESP-IDF（Espressif）</strong></h4><ul><li><strong>特点</strong>：Espressif 提供的官方开发框架，针对 ESP8266 和 ESP32 进行了优化，支持 FreeRTOS，多任务和实时系统开发。</li><li><strong>支持的单片机</strong>：<ul><li><strong>ESP 系列</strong>：ESP8266、ESP32、ESP32-S、ESP32-C 系列。</li></ul></li><li><strong>功能</strong>：支持 Wi-Fi、蓝牙、OTA（空中升级）、安全和低功耗管理，广泛应用于物联网设备开发。</li></ul><h4 id="4.-platformio" tabindex="-1">4. <strong>PlatformIO</strong></h4><ul><li><strong>特点</strong>：一个多功能、跨平台的集成开发环境，支持多种单片机平台和开发板，基于 Visual Studio Code 或 CLion，支持大量框架。</li><li><strong>支持的单片机</strong>：<ul><li><strong>AVR 系列</strong>：如 ATmega328P、ATmega2560 等。</li><li><strong>ARM Cortex-M 系列</strong>：如 STM32、SAMD21、LPC 系列。</li><li><strong>ESP 系列</strong>：ESP8266 和 ESP32。</li><li><strong>RISC-V 系列</strong>：如 SiFive 和 GigaDevice 的 RISC-V 微控制器。</li><li><strong>其他</strong>：支持 900 多种开发板，包括 Teensy、Raspberry Pi Pico、Nordic nRF 系列等。</li></ul></li><li><strong>功能</strong>：集成了丰富的库管理工具、调试工具和自动化测试支持，适合专业开发者使用。</li></ul><h4 id="5.-keil-mdk%EF%BC%88microcontroller-development-kit%EF%BC%89" tabindex="-1">5. <strong>Keil MDK（Microcontroller Development Kit）</strong></h4><ul><li><strong>特点</strong>：高性能、广泛用于工业和商业开发，提供丰富的调试和优化工具，适用于 ARM Cortex-M 内核单片机。</li><li><strong>支持的单片机</strong>：<ul><li><strong>ARM Cortex-M 系列</strong>：如 STM32、NXP LPC、TI Tiva C 系列等。</li><li><strong>8051 系列</strong>：如 Intel MCS-51、Silicon Labs C8051。</li><li><strong>其他</strong>：通过安装对应的包，还可以支持多种其他架构。</li></ul></li><li><strong>功能</strong>：集成调试器、编译器和分析工具，支持 RTOS 和高级优化，是 ARM Cortex-M 开发的主流选择。</li></ul><h3 id="%E6%80%BB%E7%BB%93" tabindex="-1">总结</h3><p>在选择单片机和开发平台时，关键在于综合考虑<strong>项目需求</strong>、<strong>开发效率</strong>、<strong>平台生态系统</strong>、<strong>硬件性能</strong>和<strong>可用资源</strong>等多个因素。以下是一些具体建议，帮助你在实际开发中选择最合适的单片机和开发平台：</p><h4 id="1.-%E9%A1%B9%E7%9B%AE%E9%9C%80%E6%B1%82" tabindex="-1">1. <strong>项目需求</strong></h4><p>根据你的项目具体要求，选择适合的单片机和开发平台：</p><ul><li><strong>物联网（IoT）和无线通信</strong>：如果你的项目涉及无线通信，如 Wi-Fi 或蓝牙，那么 <strong>ESP32</strong> 或 <strong>Nordic nRF52 系列</strong> 是不错的选择。它们都支持低功耗的无线通信，并且配套的开发平台（如 <strong>ESP-IDF</strong> 或 <strong>nRF Connect SDK</strong>）能够快速实现网络连接和设备间的通信。</li><li><strong>低功耗应用</strong>：对于需要电池供电的项目，<strong>MSP430 系列</strong> 或 <strong>STM32L 系列</strong> 是理想的选择。配套的 <strong>Code Composer Studio</strong>（MSP430）和 <strong>STM32CubeIDE</strong>（STM32L 系列）提供丰富的低功耗管理功能。</li><li><strong>高性能和实时性要求</strong>：如果你需要高性能的嵌入式控制系统，如电机控制或实时数据处理，那么 <strong>STM32F4/F7 系列</strong> 或 <strong>TI C2000 系列</strong> 是不错的选择，开发平台如 <strong>STM32CubeIDE</strong> 或 <strong>Code Composer Studio</strong> 适合此类复杂的嵌入式任务。</li></ul><h4 id="2.-%E5%BC%80%E5%8F%91%E7%94%9F%E6%80%81%E7%B3%BB%E7%BB%9F" tabindex="-1">2. <strong>开发生态系统</strong></h4><p>一个强大、成熟的开发生态系统会极大提高开发效率：</p><ul><li><strong>Arduino 平台</strong>：如果你需要快速原型开发或刚入门，Arduino 是最方便的选择之一。它具有简单的编程接口、丰富的库和强大的社区支持，尤其适合小型项目、DIY、教育类应用。常见的开发板如 <strong>Arduino UNO</strong> 或 <strong>ESP32</strong> 在 Arduino IDE 上支持。</li><li><strong>PlatformIO</strong>：对于跨平台、多项目的开发者来说，<strong>PlatformIO</strong> 是一个非常灵活的工具。它支持大量的硬件平台（如 STM32、ESP32、AVR），并且通过 <strong>VSCode</strong> 提供现代化的开发体验，适合需要频繁切换硬件平台的开发者。</li><li><strong>STM32CubeIDE</strong>：如果你的项目复杂，涉及多个外设和实时控制需求，STM32 的生态系统（STM32CubeMX、STM32CubeIDE）具有强大的外设配置和调试工具，适合需要控制复杂硬件的开发者。</li></ul><h4 id="3.-%E7%A1%AC%E4%BB%B6%E6%80%A7%E8%83%BD" tabindex="-1">3. <strong>硬件性能</strong></h4><p>根据性能需求选择合适的单片机：</p><ul><li><strong>8位/16位单片机</strong>：如果你的项目对性能要求不高（如简单的传感器读写、LED 控制等），8位或16位单片机（如 <strong>AVR</strong> 系列或 <strong>PIC16</strong> 系列）已经足够，并且它们的开发工具（如 <strong>Arduino IDE</strong> 或 <strong>MPLAB X IDE</strong>）非常简单易用。</li><li><strong>32位单片机</strong>：如果你的项目需要更多的处理能力、存储和外设控制，32位单片机（如 <strong>STM32</strong>、<strong>ESP32</strong>、<strong>PIC32</strong>）是更好的选择。对于这类复杂的项目，配套的开发环境如 <strong>STM32CubeIDE</strong>、<strong>ESP-IDF</strong> 提供的外设配置工具和调试功能能极大提高开发效率。</li></ul><h4 id="4.-%E7%A4%BE%E5%8C%BA%E5%92%8C%E5%BA%93%E6%94%AF%E6%8C%81" tabindex="-1">4. <strong>社区和库支持</strong></h4><p>选择一个拥有活跃社区和丰富库资源的平台，可以减少开发中的许多重复工作：</p><ul><li><strong>Arduino</strong>：如果你希望快速找到丰富的开源库来实现各种功能（如传感器接口、无线通信、显示屏驱动等），Arduino 是最理想的平台。许多复杂的功能都可以通过下载现成的库来实现，适合需要快速开发原型的项目。</li><li><strong>STM32CubeMX</strong>：对于工业级和商业应用，STM32 的生态系统提供了官方库和中间件（如 USB、以太网栈、文件系统等），并且文档齐全，适合更严谨和专业的项目。</li></ul><h4 id="5.-%E5%BC%80%E5%8F%91%E5%B9%B3%E5%8F%B0%E7%9A%84%E8%B0%83%E8%AF%95%E4%B8%8E%E5%B7%A5%E5%85%B7%E9%93%BE%E6%94%AF%E6%8C%81" tabindex="-1">5. <strong>开发平台的调试与工具链支持</strong></h4><p>强大的调试功能是开发高效的关键之一：</p><ul><li><strong>Keil MDK 或 IAR Embedded Workbench</strong>：如果你的项目需要深入调试和优化，这些商业级的开发平台提供了强大的调试工具，能够帮助你找到代码中的问题并进行性能优化。它们常用于 STM32、ARM Cortex-M 和 PIC 系列的开发，适合对质量要求极高的工业项目。</li><li><strong>ESP-IDF</strong>：如果你选择使用 ESP 系列进行物联网开发，ESP-IDF 提供了强大的调试和网络通信工具，支持多线程、低功耗和 OTA（空中升级），是物联网项目的理想选择。</li></ul><h4 id="6.-%E5%85%A5%E9%97%A8%E9%9A%BE%E5%BA%A6%E4%B8%8E%E5%AD%A6%E4%B9%A0%E6%9B%B2%E7%BA%BF" tabindex="-1">6. <strong>入门难度与学习曲线</strong></h4><p>如果你是开发初学者或者项目时间紧急，可以考虑使用简单易上手的平台：</p><ul><li><strong>Arduino IDE</strong>：对初学者最为友好，只需要基础的编程知识即可快速开发功能丰富的项目，支持大量开源硬件和模块。</li><li><strong>PlatformIO</strong>：虽然稍微复杂一些，但其插件式的架构和 VS Code 的集成开发体验使得它非常灵活，适合稍有经验的开发者。</li></ul><h4 id="%E7%BB%BC%E5%90%88%E5%BB%BA%E8%AE%AE%EF%BC%9A" tabindex="-1">综合建议：</h4><ul><li><strong>如果你是初学者或需要快速原型</strong>，可以选择 <strong>Arduino 平台</strong> 配合 <strong>Arduino UNO</strong>、<strong>ESP32</strong> 等主流开发板。简单的编程环境和丰富的库可以让你快速上手。</li><li><strong>如果你的项目涉及物联网或无线通信</strong>，选择 <strong>ESP32</strong> 或 <strong>Nordic nRF52</strong> 系列，这类芯片专注低功耗和无线通信，配合 <strong>ESP-IDF</strong> 或 <strong>nRF Connect SDK</strong> 开发平台可以实现快速部署。</li><li><strong>如果你的项目复杂度较高，涉及多外设和高性能需求</strong>，建议选择 <strong>STM32 系列</strong>（如 STM32F4/F7）配合 <strong>STM32CubeIDE</strong>，这是一个成熟的工业级开发生态系统，支持丰富的硬件资源和调试工具。</li><li><strong>如果需要高效跨平台开发</strong>，选择 <strong>PlatformIO</strong> 配合主流单片机（如 STM32、ESP32 等），能够灵活适应不同项目需求并保持高效开发流程。</li></ul><p>最终的选择取决于你的项目规模、性能需求、时间成本和硬件平台的熟悉程度。</p>]]>
                    </description>
                    <pubDate>Wed, 09 Oct 2024 17:08:34 CST</pubDate>
                </item>
                <item>
                    <title>
                        <![CDATA[Flir Blackfly S 相机的 ROS 驱动安装]]>
                    </title>
                    <link>https://zhengyu.tech/archives/flirblackflys-xiang-ji-de-ros-qu-dong-an-zhuang</link>
                    <description>
                            <![CDATA[<p>FLIR Blackfly S USB3 是 FLIR Systems 旗下的一款高性能工业相机，广泛应用于机器视觉、科学研究、自动化检测和智能监控等领域。这款相机以其卓越的图像质量、丰富的功能和多种应用场景的适应性而闻名。</p><h2 id="%E5%AE%89%E8%A3%85-spinnaker" tabindex="-1">安装 Spinnaker</h2><p>Spinnaker SDK的下载地址：<a href="https://www.teledynevisionsolutions.com/en-150/support/support-center/software-firmware-downloads/iis/spinnaker-sdk-download/spinnaker-sdk--download-files/" target="_blank">Link</a>，其中提供了所有的系统版本（WIN、ARM、AMD），注意如果是Ubuntu要和系统版本对应。</p><p>安装之前首先确认依赖：</p><pre><code class="language-">sudo apt-get install libusb-1.0-0</code></pre><p>在下载并解压后，可以找到 <code>install_spinnaker.sh</code> 这个文件，然后在其路径下打开终端，输入</p><pre><code class="language-">sudo sh install_spinnaker.sh</code></pre><p>安装提示安装即可。</p><h3 id="%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93" tabindex="-1">问题总结</h3><p>但是如果出现了使用软件无法检测到相机时可能是用户名没有加入flirimaging组，可以在终端运行这个命令:</p><pre><code class="language-">usermod -a -G flirimaging exampleuserid</code></pre><p>如果相机已经连接，但无法被程序访问，可能是由于权限问题。可以通过以下步骤修复权限：</p><p>创建或修改 sudo nano /etc/udev/rules.d/40-flir.rules 文件。添加以下内容（替换 &lt;vendor_id&gt; 和 &lt;product_id&gt; 为你的相机的实际 ID，可以通过 lsusb 获得）：</p><pre><code class="language-">SUBSYSTEM==&quot;usb&quot;, ATTR{idVendor}==&quot;&lt;vendor_id&gt;&quot;, ATTR{idProduct}==&quot;&lt;product_id&gt;&quot;, MODE=&quot;0666&quot;</code></pre><p>运行 <code> sudo udevadm control --reload-rules</code> 并重新插拔设备。</p><p>如果相机可以检测到，但是图像无法显示，则是由于图像大小大于2mb时，传输失败。建议将USBFS值增加到1000。使用如下命令查看usbfs_memory_mb大小:</p><pre><code class="language-">cat /sys/module/usbcore/parameters/usbfs_memory_mb</code></pre><p>如果没有成功，可以执行</p><pre><code class="language-">sudo sh configure_usbfs.sh</code></pre><h2 id="%E5%AE%89%E8%A3%85-ros-%E9%A9%B1%E5%8A%A8%E5%8C%85" tabindex="-1">安装 ROS 驱动包</h2><p>同样首先安装依赖支持：</p><pre><code class="language-">sudo apt install ros-noetic-camera-info-manager ros-noetic-diagnostic-updater ros-noetic-dynamic-reconfigure ros-noetic-image-exposure-msgs ros-noetic-image-transport ros-noetic-nodelet ros-noetic-roscpp ros-noetic-sensor-msgs ros-noetic-wfov-camera-msgs</code></pre><p>接下来就是拉取包正常的安装过程：</p><pre><code class="language-">cd ~/catkin_ws/srcgit clone -b noetic-devel https://github.com/ros-drivers/flir_camera_driver.gitcd ~/catkin_wscatkin_make</code></pre><h3 id="%E5%90%AF%E5%8A%A8" tabindex="-1">启动</h3><p>相机本身自己有一个8位的id号，在相机的下部。这个id号要填到启动文件中</p><pre><code class="language-">camera_serial</code></pre><p>启动驱动</p><pre><code class="language-">roslaunch spinnaker_camera_driver camera.launch</code></pre><p>实时查看图像</p><pre><code class="language-">rqt_image_view</code></pre><p>可以通过rqt_reconfigure tool来对参数适时调整</p><pre><code class="language-">rosrun rqt_reconfigure rqt_reconfigure</code></pre><p>如果需要实现外部触发，可以在源文件中加入：</p><pre><code class="language-">&lt;arg name=&quot;enable_trigger&quot;                default=&quot;On&quot; /&gt;&lt;param name=&quot;enable_trigger&quot;          value=&quot;$(arg enable_trigger)&quot; /&gt;</code></pre>]]>
                    </description>
                    <pubDate>Mon, 30 Sep 2024 19:53:21 CST</pubDate>
                </item>
                <item>
                    <title>
                        <![CDATA[ROS的时间系统，以及时间相关]]>
                    </title>
                    <link>https://zhengyu.tech/archives/ros-de-shi-jian-xi-tong</link>
                    <description>
                            <![CDATA[<p>ROS时间系统对于实现同步、调试和控制至关重要。以下是对ROS时间系统、时间戳及时间相关设置的详细讲解。</p><h3 id="%E6%97%B6%E9%97%B4%E7%B3%BB%E7%BB%9F%E6%A6%82%E8%BF%B0" tabindex="-1">时间系统概述</h3><p>ROS中有两种主要的时间概念：</p><ul><li><strong>Wall Time（墙钟时间）</strong>：基于系统时钟，反映实际的时间。适用于大多数需要实际时间戳的场景。</li><li><strong>ROSTime（ROS时间）</strong>：可以被模拟器和仿真器控制，用于仿真环境中。可通过暂停、快进、慢放等方式操控时间流逝。</li></ul><h3 id="%E6%97%B6%E9%97%B4%E7%B1%BB%E5%9E%8B" tabindex="-1">时间类型</h3><p>ROS提供了三个主要的时间相关数据类型：</p><ul><li><code>ros::Time</code>：表示时间点，支持wall time和ROS time两种模式。</li><li><code>ros::Duration</code>：表示时间段。</li><li><code>ros::Rate</code>：控制循环频率，确保循环以固定的时间间隔执行。</li></ul><p>在ROS中，时间的格式主要有两种：<strong>秒（seconds）<strong>和</strong>纳秒（nanoseconds）</strong>。以下是详细介绍。</p><p><code>ros::Time</code>类型表示一个具体的时间点，包含两个字段：</p><pre><code class="language-cpp">class Time {public:    uint32_t sec;  // 秒    uint32_t nsec; // 纳秒};</code></pre><h3 id="%E6%97%B6%E9%97%B4%E6%88%B3" tabindex="-1">时间戳</h3><p>时间戳在ROS中通常用来标记消息的生成时间。在消息定义中，常包含一个<code>std_msgs/Header</code>，其中<code>Header</code>结构有一个时间戳字段：</p><pre><code class="language-cpp">std_msgs/Header headeruint32 seqtime stampstring frame_id</code></pre><p><code>stamp</code>字段就是一个时间戳，表示消息生成的具体时间点。</p><h4 id="%E6%97%B6%E9%97%B4%E6%88%B3%E7%9A%84%E7%94%9F%E6%88%90" tabindex="-1">时间戳的生成</h4><p>时间戳可以通过<code>ros::Time</code>类来生成。通常，时间戳在消息生成时获取当前时间：</p><pre><code class="language-cpp">#include &lt;ros/ros.h&gt;#include &lt;std_msgs/String.h&gt;void generateMessage() {    std_msgs::String msg;    msg.header.stamp = ros::Time::now();  // 获取当前时间作为时间戳    msg.header.frame_id = &quot;base_link&quot;;    // 设置坐标系    msg.data = &quot;Hello, world!&quot;;    // 发布消息...}</code></pre><h4 id="%E6%97%B6%E9%97%B4%E6%88%B3%E7%9A%84%E6%A0%BC%E5%BC%8F" tabindex="-1">时间戳的格式</h4><p>时间戳在ROS中以秒和纳秒表示。<code>ros::Time</code>类包含两个主要字段：</p><pre><code class="language-cpp">class Time {public:    uint32_t sec;  // 秒    uint32_t nsec; // 纳秒};</code></pre><h3 id="%E5%9F%BA%E5%87%86%E6%97%B6%E9%97%B4%E7%9A%84%E8%8E%B7%E5%8F%96" tabindex="-1">基准时间的获取</h3><p>在ROS中，时间的准确性和同步性对于多机器人系统、传感器数据同步和控制系统至关重要。PTP（Precision Time Protocol，精密时间协议）是一种用于同步计算机网络中时钟的协议，它提供了比NTP（Network Time Protocol，网络时间协议）更高的精度。</p><h4 id="1.-%E7%B2%BE%E5%AF%86%E6%97%B6%E9%97%B4%E5%8D%8F%E8%AE%AE%EF%BC%88ptp%EF%BC%89" tabindex="-1">1. 精密时间协议（PTP）</h4><p>PTP是一种用于网络设备间时间同步的协议，常用于需要高精度时间同步的场景，例如金融交易、工业控制和电信领域。</p><h5 id="ptp%E7%9A%84%E7%89%B9%E7%82%B9" tabindex="-1">PTP的特点</h5><ul><li><strong>高精度</strong>：PTP可以实现亚微秒级的时间同步，远高于NTP的毫秒级。</li><li><strong>硬件支持</strong>：许多高端网络设备（如交换机、网卡）直接支持PTP，进一步提高了同步精度。</li><li><strong>层级结构</strong>：PTP使用主从架构，一个主时钟（Grandmaster）和多个从时钟（Slave），通过时间戳消息进行同步。</li></ul><h5 id="ptp%E5%9C%A8ros%E4%B8%AD%E7%9A%84%E5%BA%94%E7%94%A8" tabindex="-1">PTP在ROS中的应用</h5><p>在ROS中，使用PTP进行时间同步可以确保多机器人系统或分布式传感器的时间一致性。</p><h6 id="%E9%85%8D%E7%BD%AEptp" tabindex="-1">配置PTP</h6><ol><li><p><strong>安装PTP工具</strong>：大多数Linux系统可以使用<code>ptpd</code>或<code>phc2sys</code>等工具进行PTP配置。</p><pre><code class="language-bash">sudo apt-get install ptpd</code></pre></li><li><p><strong>配置PTP守护进程</strong>：编辑<code>/etc/ptpd.conf</code>或使用命令行参数配置PTP。</p><pre><code class="language-bash">sudo ptpd -M -i eth0 -f /etc/ptpd.conf</code></pre></li><li><p><strong>启动PTP守护进程</strong>：</p><pre><code class="language-bash">sudo systemctl start ptpd</code></pre></li><li><p><strong>验证同步状态</strong>：使用<code>ptp4l</code>或<code>pmc</code>工具检查PTP同步状态。</p><pre><code class="language-bash">sudo ptp4l -i eth0 -m</code></pre></li></ol><h4 id="2.-%E7%BD%91%E7%BB%9C%E6%97%B6%E9%97%B4%E5%8D%8F%E8%AE%AE%EF%BC%88ntp%EF%BC%89" tabindex="-1">2. 网络时间协议（NTP）</h4><p>NTP是一种常见的时间同步协议，广泛用于Internet和局域网中。</p><h5 id="ntp%E7%9A%84%E7%89%B9%E7%82%B9" tabindex="-1">NTP的特点</h5><ul><li><strong>广泛支持</strong>：几乎所有的操作系统和网络设备都支持NTP。</li><li><strong>中等精度</strong>：通常可以达到毫秒级别的同步精度。</li><li><strong>分层结构</strong>：NTP服务器分层次工作，最顶层是Stratum 1服务器，与原子钟或GPS同步。</li></ul><h5 id="ntp%E5%9C%A8ros%E4%B8%AD%E7%9A%84%E5%BA%94%E7%94%A8" tabindex="-1">NTP在ROS中的应用</h5><p>NTP适用于大多数需要时间同步的ROS应用，尤其是时间精度要求不高的场景。</p><h6 id="%E9%85%8D%E7%BD%AEntp" tabindex="-1">配置NTP</h6><ol><li><p><strong>安装NTP客户端</strong>：</p><pre><code class="language-bash">sudo apt-get install ntp</code></pre></li><li><p><strong>配置NTP服务器</strong>：编辑<code>/etc/ntp.conf</code>文件，添加NTP服务器地址。</p><pre><code class="language-conf">server ntp.ubuntu.com</code></pre></li><li><p><strong>启动NTP服务</strong>：</p><pre><code class="language-bash">sudo systemctl start ntp</code></pre></li><li><p><strong>检查同步状态</strong>：</p><pre><code class="language-bash">ntpq -p</code></pre></li></ol><h4 id="3.-%E6%9C%AC%E5%9C%B0%E7%B3%BB%E7%BB%9F%E6%97%B6%E9%97%B4" tabindex="-1">3. 本地系统时间</h4><p>在ROS中，默认使用本地系统时间（Wall Time）。在不需要高精度时间同步的单机应用中，使用本地系统时间即可。</p><h5 id="%E8%8E%B7%E5%8F%96%E6%9C%AC%E5%9C%B0%E7%B3%BB%E7%BB%9F%E6%97%B6%E9%97%B4" tabindex="-1">获取本地系统时间</h5><pre><code class="language-cpp">ros::Time now = ros::Time::now();  // 获取当前时间</code></pre><h3 id="%E8%AE%BE%E7%BD%AE%E4%B8%8E%E4%BD%BF%E7%94%A8" tabindex="-1">设置与使用</h3><h4 id="%E5%88%9D%E5%A7%8B%E5%8C%96%E4%B8%8E%E5%BD%93%E5%89%8D%E6%97%B6%E9%97%B4%E8%8E%B7%E5%8F%96" tabindex="-1">初始化与当前时间获取</h4><pre><code class="language-cpp">ros::Time::init(); // 初始化时间系统ros::Time now = ros::Time::now(); // 获取当前时间</code></pre><h4 id="%E5%88%9B%E5%BB%BA%E6%97%B6%E9%97%B4%E4%B8%8E%E6%8C%81%E7%BB%AD%E6%97%B6%E9%97%B4%E5%AF%B9%E8%B1%A1" tabindex="-1">创建时间与持续时间对象</h4><pre><code class="language-cpp">// 创建具体时间点ros::Time t1(10.5); // 表示10.5秒ros::Time t2 = ros::Time::now(); // 当前时间// 创建时间段对象ros::Duration d1(5.0); // 5秒ros::Duration d2 = t2 - t1; // 两个时间点之间的差值</code></pre><h4 id="%E6%97%B6%E9%97%B4%E6%93%8D%E4%BD%9C" tabindex="-1">时间操作</h4><pre><code class="language-cpp">ros::Time t3 = t1 + d1; // 时间加上持续时间ros::Duration d3 = t2 - t1; // 两个时间点的差值</code></pre><h4 id="%E4%BD%BF%E7%94%A8rate%E6%8E%A7%E5%88%B6%E9%A2%91%E7%8E%87" tabindex="-1">使用Rate控制频率</h4><pre><code class="language-cpp">ros::Rate loop_rate(10); // 10Hz的循环频率while (ros::ok()) {    // 循环体    loop_rate.sleep(); // 休眠以维持循环频率}</code></pre><h3 id="%E6%A8%A1%E6%8B%9F%E6%97%B6%E9%97%B4" tabindex="-1">模拟时间</h3><p>在仿真环境中（如使用Gazebo），需要使用模拟时间。可以在启动文件中启用模拟时间：</p><pre><code class="language-xml">&lt;param name=&quot;use_sim_time&quot; value=&quot;true&quot;/&gt;</code></pre><p>使用<code>rospy</code>时，类似的设置：</p><pre><code class="language-python">import rospyrospy.init_node(&#39;my_node&#39;)rospy.set_param(&#39;use_sim_time&#39;, True)</code></pre><h3 id="%E6%97%B6%E9%97%B4%E8%BD%AC%E6%8D%A2%E4%B8%8E%E6%AF%94%E8%BE%83" tabindex="-1">时间转换与比较</h3><pre><code class="language-cpp">if (t1 &lt; t2) {    // t1早于t2}ros::Duration duration = t1 - t2; // 时间差ros::Time future_time = t1 + ros::Duration(10); // 未来时间</code></pre>]]>
                    </description>
                    <pubDate>Thu, 11 Jul 2024 10:13:21 CST</pubDate>
                </item>
                <item>
                    <title>
                        <![CDATA[三维形状表示方法：显式与隐式]]>
                    </title>
                    <link>https://zhengyu.tech/archives/三维形状表示方法隐式和显式</link>
                    <description>
                            <![CDATA[<h2 id="%E6%98%BE%E5%BC%8F%E8%A1%A8%E7%A4%BA%E6%96%B9%E6%B3%95" tabindex="-1">显式表示方法</h2><p>显式表示方法直接存储三维形状的表面信息，通常通过顶点、边和面的集合来描述。以下是一些常见的显式表示方法：</p><ol><li><p><strong>多边形网格（Polygon Mesh）</strong>：</p><ul><li><strong>描述</strong>：通过顶点、边和面来表示形状的表面，最常见的是三角网格。</li><li><strong>优点</strong>：直观且易于渲染，广泛应用于计算机图形学。</li><li><strong>应用</strong>：三维建模、动画、游戏、虚拟现实。</li></ul></li><li><p><strong>点云（Point Cloud）</strong>：</p><ul><li><strong>描述</strong>：通过一组三维坐标点来表示形状的表面。</li><li><strong>优点</strong>：简单且直接，可以从激光扫描或深度相机中获取。</li><li><strong>应用</strong>：三维扫描、环境感知、SLAM（同时定位与地图构建）。</li></ul></li><li><p><strong>体素网格（Voxel Grid）</strong>：</p><ul><li><strong>描述</strong>：通过三维空间中的离散体素来表示形状，类似于三维像素。</li><li><strong>优点</strong>：适合表示体积数据，易于进行布尔运算和体积测量。</li><li><strong>应用</strong>：医学成像（如CT、MRI）、物理模拟。</li></ul></li><li><p><strong>边界表示（Boundary Representation, B-Rep）</strong>：</p><ul><li><strong>描述</strong>：通过边界曲面和边界线来表示形状。</li><li><strong>优点</strong>：精确表示复杂几何形状，常用于CAD（计算机辅助设计）。</li><li><strong>应用</strong>：机械设计、建筑设计。</li></ul></li><li><p><strong>参数化曲面（Parametric Surface）</strong>：</p><ul><li><strong>描述</strong>：通过参数方程来表示曲面，如Bezier曲面、NURBS（非均匀有理B样条）等。</li><li><strong>优点</strong>：能够精确控制曲面的形状和光滑度。</li><li><strong>应用</strong>：工业设计、汽车制造、动画制作。</li></ul></li></ol><h2 id="%E9%9A%90%E5%BC%8F%E8%A1%A8%E7%A4%BA%E6%96%B9%E6%B3%95" tabindex="-1">隐式表示方法</h2><p>隐式表示方法使用数学函数或神经网络来间接描述三维形状，而不是直接存储形状的表面信息。以下是一些常见的隐式表示方法：</p><ol><li><p><strong>带符号距离函数（Signed Distance Function, SDF）</strong>：</p><ul><li><strong>描述</strong>：SDF通过一个标量场来表示，每个点的值是其到最近表面的距离，带符号表示在表面内外。</li><li><strong>优点</strong>：能够平滑地表示复杂的几何形状，适合处理拓扑变化。</li><li><strong>应用</strong>：三维重建、碰撞检测、流体模拟。</li></ul></li><li><p><strong>截断带符号距离函数（Truncated Signed Distance Function, TSDF）</strong>：</p><ul><li><strong>描述</strong>：TSDF是SDF的一种变体，通过截断距离值来减少计算复杂度和存储需求。</li><li><strong>优点</strong>：适合用于实时三维重建和融合多视角数据。</li><li><strong>应用</strong>：实时三维重建（如KinectFusion）。</li></ul></li><li><p><strong>神经隐式表示（Neural Implicit Representation）</strong>：</p><ul><li><strong>描述</strong>：使用神经网络（如多层感知器，MLP）来学习和表示三维形状，输入为坐标点，输出为该点的属性（如SDF值、密度值等）。</li><li><strong>优点</strong>：能够表示非常复杂的几何结构，并且具有良好的泛化能力。</li><li><strong>应用</strong>：DeepSDF、NeRF（Neural Radiance Fields）等。</li></ul></li><li><p><strong>二元空间分割树（Binary Space Partitioning, BSP）</strong>：</p><ul><li><strong>描述</strong>：通过递归地将空间划分为两部分来表示形状。</li><li><strong>优点</strong>：适合表示布尔运算的结果，如并集、交集、差集。</li><li><strong>应用</strong>：计算机图形学中的布尔操作。</li></ul></li></ol><h2 id="%E5%B8%A6%E7%AC%A6%E5%8F%B7%E8%B7%9D%E7%A6%BB%E5%87%BD%E6%95%B0%EF%BC%88signed-distance-function%2C-sdf%EF%BC%89" tabindex="-1">带符号距离函数（Signed Distance Function, SDF）</h2><p>带符号距离函数（Signed Distance Function, SDF）是一种用于表示三维几何形状的方法，通过定义三维空间中每个点到最近表面的距离来描述物体的形状。SDF的值带有符号，以表示点在物体表面内外的位置。以下是对SDF的详细介绍：</p><h3 id="sdf%E7%9A%84%E5%AE%9A%E4%B9%89%E5%92%8C%E5%9F%BA%E6%9C%AC%E6%A6%82%E5%BF%B5" tabindex="-1">SDF的定义和基本概念</h3><p><img src="/upload/2024/05/20240529174505.png" alt="" /></p><ol><li><p><strong>距离函数</strong>：</p><ul><li>SDF定义了空间中每个点 ( p ) 到物体表面最近点的距离<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>d</mi><mo stretchy="false">(</mo><mi>p</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">d(p)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">d</span><span class="mopen">(</span><span class="mord mathnormal">p</span><span class="mclose">)</span></span></span></span>。</li><li>符号 ( s ) 表示距离的正负号：<ul><li><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>s</mi><mo>&gt;</mo><mn>0</mn></mrow><annotation encoding="application/x-tex">s &gt; 0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5782em;vertical-align:-0.0391em;"></span><span class="mord mathnormal">s</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">&gt;</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">0</span></span></span></span> 表示点在表面外部。</li><li><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>s</mi><mo>&lt;</mo><mn>0</mn></mrow><annotation encoding="application/x-tex">s &lt; 0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5782em;vertical-align:-0.0391em;"></span><span class="mord mathnormal">s</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">&lt;</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">0</span></span></span></span> 表示点在表面内部。</li><li><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>s</mi><mo>=</mo><mn>0</mn></mrow><annotation encoding="application/x-tex">s = 0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.43056em;vertical-align:0em;"></span><span class="mord mathnormal">s</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">0</span></span></span></span> 表示点在表面上。</li></ul></li></ul></li><li><p><strong>数学表示</strong>：</p><ul><li>对于给定点<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>p</mi></mrow><annotation encoding="application/x-tex">p</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.19444em;"></span><span class="mord mathnormal">p</span></span></span></span>，SDF函数 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>ϕ</mi><mo stretchy="false">(</mo><mi>p</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\phi(p)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">ϕ</span><span class="mopen">(</span><span class="mord mathnormal">p</span><span class="mclose">)</span></span></span></span>表示为：</li></ul></li></ol><p class='katex-block'><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi>ϕ</mi><mo stretchy="false">(</mo><mi>p</mi><mo stretchy="false">)</mo><mo>=</mo><mrow><mo fence="true">{</mo><mtable rowspacing="0.3599999999999999em" columnalign="left left" columnspacing="1em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mo>−</mo><mtext>dist</mtext><mo stretchy="false">(</mo><mi>p</mi><mo separator="true">,</mo><mi mathvariant="normal">∂</mi><mi mathvariant="normal">Ω</mi><mo stretchy="false">)</mo></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mtext>if </mtext><mi>p</mi><mo>∈</mo><mi mathvariant="normal">Ω</mi></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mo>+</mo><mtext>dist</mtext><mo stretchy="false">(</mo><mi>p</mi><mo separator="true">,</mo><mi mathvariant="normal">∂</mi><mi mathvariant="normal">Ω</mi><mo stretchy="false">)</mo></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mtext>if </mtext><mi>p</mi><mo mathvariant="normal">∉</mo><mi mathvariant="normal">Ω</mi></mrow></mstyle></mtd></mtr></mtable></mrow></mrow><annotation encoding="application/x-tex"> \phi(p) =      \begin{cases}      -\text{dist}(p, \partial \Omega) &amp; \text{if } p \in \Omega \\     +\text{dist}(p, \partial \Omega) &amp; \text{if } p \notin \Omega \end{cases} </annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">ϕ</span><span class="mopen">(</span><span class="mord mathnormal">p</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:3.0000299999999998em;vertical-align:-1.25003em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size4">{</span></span><span class="mord"><span class="mtable"><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.69em;"><span style="top:-3.69em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord">−</span><span class="mord text"><span class="mord">dist</span></span><span class="mopen">(</span><span class="mord mathnormal">p</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord" style="margin-right:0.05556em;">∂</span><span class="mord">Ω</span><span class="mclose">)</span></span></span><span style="top:-2.25em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord">+</span><span class="mord text"><span class="mord">dist</span></span><span class="mopen">(</span><span class="mord mathnormal">p</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord" style="margin-right:0.05556em;">∂</span><span class="mord">Ω</span><span class="mclose">)</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.19em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:1em;"></span><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.69em;"><span style="top:-3.69em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord text"><span class="mord">if </span></span><span class="mord mathnormal">p</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">∈</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mord">Ω</span></span></span><span style="top:-2.25em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord text"><span class="mord">if </span></span><span class="mord mathnormal">p</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel"><span class="mord"><span class="mrel">∈</span></span><span class="mord vbox"><span class="thinbox"><span class="llap"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="inner"><span class="mord"><span class="mord">/</span><span class="mspace" style="margin-right:0.05555555555555555em;"></span></span></span><span class="fix"></span></span></span></span></span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mord">Ω</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.19em;"><span></span></span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span></span></p><p>其中 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="normal">Ω</mi></mrow><annotation encoding="application/x-tex">\Omega</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.68333em;vertical-align:0em;"></span><span class="mord">Ω</span></span></span></span> 是物体的内部，<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="normal">∂</mi><mi mathvariant="normal">Ω</mi></mrow><annotation encoding="application/x-tex">\partial \Omega</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.69444em;vertical-align:0em;"></span><span class="mord" style="margin-right:0.05556em;">∂</span><span class="mord">Ω</span></span></span></span> 是物体的表面，<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mtext>dist</mtext><mo stretchy="false">(</mo><mi>p</mi><mo separator="true">,</mo><mi mathvariant="normal">∂</mi><mi mathvariant="normal">Ω</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\text{dist}(p, \partial \Omega)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord text"><span class="mord">dist</span></span><span class="mopen">(</span><span class="mord mathnormal">p</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord" style="margin-right:0.05556em;">∂</span><span class="mord">Ω</span><span class="mclose">)</span></span></span></span> 是点 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>p</mi></mrow><annotation encoding="application/x-tex">p</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.19444em;"></span><span class="mord mathnormal">p</span></span></span></span> 到最近表面的距离。</p><h3 id="sdf%E7%9A%84%E8%AE%A1%E7%AE%97%E5%92%8C%E8%A1%A8%E7%A4%BA" tabindex="-1">SDF的计算和表示</h3><ol><li><p><strong>体素网格表示</strong>：</p><ul><li>空间被离散化为一个三维体素网格，每个体素存储一个SDF值。</li><li>这种方法易于实现和计算，但需要较大的存储空间。</li></ul></li><li><p><strong>连续函数表示</strong>：</p><ul><li>使用数学函数（如多项式、分段函数）或神经网络来表示SDF。</li><li>这种方法可以减少存储需求，并且在某些情况下可以提供更高的精度。</li></ul></li></ol><h2 id="%E6%88%AA%E6%96%AD%E5%B8%A6%E7%AC%A6%E5%8F%B7%E8%B7%9D%E7%A6%BB%E5%87%BD%E6%95%B0%EF%BC%88truncated-signed-distance-function%2C-tsdf%EF%BC%89" tabindex="-1">截断带符号距离函数（Truncated Signed Distance Function, TSDF）</h2><p>截断带符号距离函数（Truncated Signed Distance Function, TSDF）是一种用于三维重建和表示的方法，通过存储每个体素（voxel）到最近表面的距离及其符号，来描述三维空间中的物体表面。TSDF在计算带符号距离函数（Signed Distance Function, SDF）的基础上引入了截断距离的概念，以提高计算效率和减少存储需求。以下是对TSDF的详细介绍：</p><h3 id="1.-tsdf%E7%9A%84%E5%9F%BA%E6%9C%AC%E6%A6%82%E5%BF%B5" tabindex="-1">1. TSDF的基本概念</h3><p><strong>定义</strong>：</p><ul><li>TSDF通过存储每个体素到最近表面的带符号距离来描述三维形状。</li><li>距离值带有符号，正值表示点在表面外部，负值表示点在表面内部，零值表示点在表面上。</li></ul><p><img src="/upload/2024/05/20240529180007.png" alt="" /></p><p><strong>截断距离</strong>：</p><ul><li>为了减少计算复杂度和存储需求，TSDF对距离值进行截断。</li><li>设定一个最大截断距离值 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>μ</mi></mrow><annotation encoding="application/x-tex">\mu</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.19444em;"></span><span class="mord mathnormal">μ</span></span></span></span>，所有大于 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>μ</mi></mrow><annotation encoding="application/x-tex">\mu</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.19444em;"></span><span class="mord mathnormal">μ</span></span></span></span> 或小于<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo>−</mo><mi>μ</mi></mrow><annotation encoding="application/x-tex">-\mu</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7777700000000001em;vertical-align:-0.19444em;"></span><span class="mord">−</span><span class="mord mathnormal">μ</span></span></span></span> 的距离值将被截断为<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>μ</mi></mrow><annotation encoding="application/x-tex">\mu</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.19444em;"></span><span class="mord mathnormal">μ</span></span></span></span> 或<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo>−</mo><mi>μ</mi></mrow><annotation encoding="application/x-tex">-\mu</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7777700000000001em;vertical-align:-0.19444em;"></span><span class="mord">−</span><span class="mord mathnormal">μ</span></span></span></span>。</li></ul><h3 id="2.-tsdf%E7%9A%84%E8%AE%A1%E7%AE%97%E6%96%B9%E6%B3%95" tabindex="-1">2. TSDF的计算方法</h3><p><strong>初始化体素网格</strong>：</p><ul><li>创建一个三维体素网格，每个体素存储一个TSDF值，初始值通常设为正的截断距离 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>μ</mi></mrow><annotation encoding="application/x-tex">\mu</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.19444em;"></span><span class="mord mathnormal">μ</span></span></span></span>。</li></ul><p><strong>深度图更新</strong>：</p><ul><li>使用多个视角的深度图来更新体素网格中的TSDF值。每个深度图提供了一视角下的物体表面距离信息。</li></ul><p><strong>距离计算和截断</strong>：</p><ul><li>对于深度图中的每个像素，通过射线投影找到对应的体素，并计算该体素中心到表面的距离。</li><li>根据距离值和符号更新体素的TSDF值：</li></ul><p class='katex-block'><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi>ϕ</mi><mo stretchy="false">(</mo><mi>p</mi><mo stretchy="false">)</mo><mo>=</mo><mrow><mo fence="true">{</mo><mtable rowspacing="0.3599999999999999em" columnalign="left left" columnspacing="1em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mi>μ</mi></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mtext>if </mtext><mi>d</mi><mo stretchy="false">(</mo><mi>p</mi><mo stretchy="false">)</mo><mo>&gt;</mo><mi>μ</mi></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mo>−</mo><mi>μ</mi></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mtext>if </mtext><mi>d</mi><mo stretchy="false">(</mo><mi>p</mi><mo stretchy="false">)</mo><mo>&lt;</mo><mo>−</mo><mi>μ</mi></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi>d</mi><mo stretchy="false">(</mo><mi>p</mi><mo stretchy="false">)</mo></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mtext>if </mtext><mo>−</mo><mi>μ</mi><mo>≤</mo><mi>d</mi><mo stretchy="false">(</mo><mi>p</mi><mo stretchy="false">)</mo><mo>≤</mo><mi>μ</mi></mrow></mstyle></mtd></mtr></mtable></mrow></mrow><annotation encoding="application/x-tex">  \phi(p) =   \begin{cases}   \mu &amp; \text{if } d(p) &gt; \mu \\  -\mu &amp; \text{if } d(p) &lt; -\mu \\  d(p) &amp; \text{if } -\mu \leq d(p) \leq \mu   \end{cases}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">ϕ</span><span class="mopen">(</span><span class="mord mathnormal">p</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:4.32em;vertical-align:-1.9099999999999997em;"></span><span class="minner"><span class="mopen"><span class="delimsizing mult"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.35002em;"><span style="top:-2.19999em;"><span class="pstrut" style="height:3.15em;"></span><span class="delimsizinginner delim-size4"><span>⎩</span></span></span><span style="top:-2.19499em;"><span class="pstrut" style="height:3.15em;"></span><span class="delimsizinginner delim-size4"><span>⎪</span></span></span><span style="top:-2.20499em;"><span class="pstrut" style="height:3.15em;"></span><span class="delimsizinginner delim-size4"><span>⎪</span></span></span><span style="top:-3.15001em;"><span class="pstrut" style="height:3.15em;"></span><span class="delimsizinginner delim-size4"><span>⎨</span></span></span><span style="top:-4.2950099999999996em;"><span class="pstrut" style="height:3.15em;"></span><span class="delimsizinginner delim-size4"><span>⎪</span></span></span><span style="top:-4.30501em;"><span class="pstrut" style="height:3.15em;"></span><span class="delimsizinginner delim-size4"><span>⎪</span></span></span><span style="top:-4.60002em;"><span class="pstrut" style="height:3.15em;"></span><span class="delimsizinginner delim-size4"><span>⎧</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.8500199999999998em;"><span></span></span></span></span></span></span><span class="mord"><span class="mtable"><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.41em;"><span style="top:-4.41em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord mathnormal">μ</span></span></span><span style="top:-2.97em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord">−</span><span class="mord mathnormal">μ</span></span></span><span style="top:-1.5300000000000002em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord mathnormal">d</span><span class="mopen">(</span><span class="mord mathnormal">p</span><span class="mclose">)</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.9099999999999997em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:1em;"></span><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.41em;"><span style="top:-4.41em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord text"><span class="mord">if </span></span><span class="mord mathnormal">d</span><span class="mopen">(</span><span class="mord mathnormal">p</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">&gt;</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mord mathnormal">μ</span></span></span><span style="top:-2.97em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord text"><span class="mord">if </span></span><span class="mord mathnormal">d</span><span class="mopen">(</span><span class="mord mathnormal">p</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">&lt;</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mord">−</span><span class="mord mathnormal">μ</span></span></span><span style="top:-1.5300000000000002em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord text"><span class="mord">if </span></span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mord mathnormal">μ</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mord mathnormal">d</span><span class="mopen">(</span><span class="mord mathnormal">p</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mord mathnormal">μ</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.9099999999999997em;"><span></span></span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span></span></p><p>其中，<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>d</mi><mo stretchy="false">(</mo><mi>p</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">d(p)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">d</span><span class="mopen">(</span><span class="mord mathnormal">p</span><span class="mclose">)</span></span></span></span> 是点 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>p</mi></mrow><annotation encoding="application/x-tex">p</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.19444em;"></span><span class="mord mathnormal">p</span></span></span></span> 到最近表面的实际距离。</p><h2 id="%E7%A5%9E%E7%BB%8F%E9%9A%90%E5%BC%8F%E8%A1%A8%E7%A4%BA%EF%BC%88neural-implicit-representation%EF%BC%89" tabindex="-1">神经隐式表示（Neural Implicit Representation）</h2><p>神经隐式表示（Neural Implicit Representation）是一种使用神经网络来表示和生成三维几何形状的方法。与传统的显式表示方法（如多边形网格、体素网格）不同，神经隐式表示使用神经网络的连续函数来隐式地描述形状。这种方法近年来在计算机图形学和计算机视觉领域取得了显著的进展。以下是对神经隐式表示的详细介绍：</p><h3 id="%E5%9F%BA%E6%9C%AC%E6%A6%82%E5%BF%B5" tabindex="-1">基本概念</h3><p>神经隐式表示的核心思想是使用神经网络来学习一个隐式函数，该函数能够为给定的三维空间点提供该点的某种属性，例如带符号距离函数（SDF）值、密度值或颜色值。</p><ol><li><p><strong>输入</strong>：</p><ul><li>三维坐标点 ((x, y, z))</li></ul></li><li><p><strong>输出</strong>：</p><ul><li>SDF值：该点到最近表面的带符号距离。</li><li>密度值：该点的密度或物体存在的概率（用于体积渲染）。</li><li>颜色值：该点的颜色信息（用于光线追踪和渲染）。</li></ul></li></ol><h3 id="%E7%A5%9E%E7%BB%8F%E9%9A%90%E5%BC%8F%E8%A1%A8%E7%A4%BA%E7%9A%84%E7%B1%BB%E5%9E%8B" tabindex="-1">神经隐式表示的类型</h3><ol><li><strong>带符号距离函数（SDF）表示</strong>：<ul><li>使用神经网络学习SDF，输入为三维坐标点，输出为该点的SDF值。</li><li>适用于精确表示物体的几何形状。</li></ul></li></ol><p><img src="/upload/2024/05/20240529211921.png" alt="" /></p><ol start="2"><li><p><strong>体素表示（Volumetric Representation）</strong>：</p><ul><li>使用神经网络学习体素密度，输入为三维坐标点，输出为该点的密度值。</li><li>适用于体积渲染和物体存在概率表示。</li></ul></li><li><p><strong>辐射场表示（Neural Radiance Fields, NeRF）</strong>：</p><ul><li>使用神经网络学习三维空间中的颜色和密度分布，输入为三维坐标点和视角方向，输出为该点的颜色和密度。</li><li>适用于真实感渲染和光线追踪。</li></ul></li></ol><p><img src="/upload/2024/05/20240529211548.png" alt="" /></p><h3 id="%E5%AE%9E%E7%8E%B0%E6%96%B9%E6%B3%95" tabindex="-1">实现方法</h3><ol><li><p><strong>神经网络架构</strong>：</p><ul><li>常用的网络架构是多层感知器（MLP），具有输入层、多个隐藏层和输出层。</li><li>输入层接收三维坐标点，隐藏层通过非线性激活函数处理数据，输出层生成目标属性值。</li></ul></li><li><p><strong>训练数据</strong>：</p><ul><li>采集用于训练的三维点和对应的目标值（如SDF值、密度值或颜色值）。</li><li>数据来源可以是实际扫描的点云、深度图、图像等。</li></ul></li><li><p><strong>损失函数</strong>：</p><ul><li>根据具体任务设计损失函数，用于衡量网络输出与真实值之间的差异。</li><li>常用的损失函数包括均方误差（MSE）、交叉熵损失等。</li></ul></li><li><p><strong>训练过程</strong>：</p><ul><li>使用梯度下降等优化算法，最小化损失函数，调整神经网络的参数。</li><li>迭代训练直至网络收敛，能够准确预测三维点的属性值。</li></ul></li></ol><h3 id="%E4%BC%98%E7%82%B9" tabindex="-1">优点</h3><ol><li><p><strong>连续表示</strong>：</p><ul><li>神经隐式表示提供了一种连续的形状表示方法，能够精确描述复杂的几何形状。</li><li>不依赖于离散网格，避免了分辨率限制问题。</li></ul></li><li><p><strong>高效存储</strong>：</p><ul><li>通过神经网络参数表示形状，存储需求远小于传统的显式表示方法（如网格或体素）。</li></ul></li><li><p><strong>良好的泛化能力</strong>：</p><ul><li>神经网络具有良好的泛化能力，能够在训练数据之外的区域生成合理的形状。</li></ul></li></ol><h3 id="%E6%8C%91%E6%88%98%E5%92%8C%E5%B1%80%E9%99%90" tabindex="-1">挑战和局限</h3><ol><li><p><strong>训练时间</strong>：</p><ul><li>训练神经网络可能需要大量的计算资源和时间，尤其是处理复杂的三维数据时。</li></ul></li><li><p><strong>依赖数据质量</strong>：</p><ul><li>神经隐式表示的效果高度依赖于训练数据的质量和覆盖范围。</li></ul></li><li><p><strong>实时性</strong>：</p><ul><li>实时应用中的推理速度可能受到网络复杂性的限制，需要优化和加速技术。</li></ul></li></ol><p>Ref：<br /><a href="https://omrikaduri.github.io/2022/06/18/Using-Neural-Implicit-Representations-for-Shape-and-Scenes.html" target="_blank">3D 形状和场景的神经隐式表示</a></p>]]>
                    </description>
                    <pubDate>Wed, 29 May 2024 16:45:33 CST</pubDate>
                </item>
                <item>
                    <title>
                        <![CDATA[域名与SSL详解]]>
                    </title>
                    <link>https://zhengyu.tech/archives/yu-ming-xiang-jie</link>
                    <description>
                            <![CDATA[<h2 id="%E5%9F%9F%E5%90%8D" tabindex="-1">域名</h2><p>域名是互联网上任何一个网站的网络地址，它使我们能够访问各种网站资源。域名的设计旨在便于人们记忆，而不必记住复杂的数字序列（即IP地址），并通过网域名称系统（DNS，Domain Name System）来将域名和IP地址相互映射，使人更方便地访问互联网，而不用去记住能够被机器直接读取的IP地址数串。</p><h2 id="%E5%9F%9F%E5%90%8D%E7%9A%84%E7%BB%93%E6%9E%84" tabindex="-1">域名的结构</h2><ol><li><strong>顶级域名（TLD）</strong>：域名的最右部分，例如“.com”、“.org”和“.net”等</li><li><strong>二级域名</strong>：顶级域名左边的部分，通常是公司或组织的名称，例如在“<a href="http://google.com" target="_blank">google.com</a>”中，“google”就是二级域名。</li><li><strong>子域名</strong>：位于二级域名前的可选部分，如“<a href="http://mail.google.com" target="_blank">mail.google.com</a>”中的“mail”。</li></ol><h2 id="%E5%A4%87%E6%A1%88" tabindex="-1">备案</h2><p>一级域名在国内需要备案，而二级域名不需要单独备案，只要它所处的一级域名已经备案，就能直接解析。</p><p>一般网站只用到顶级域名即可，有时候一个网站系统比较庞大，那么就可能使用多个域名，如果去申请多个域名肯定不划算，这个时候，使用已申请的一个域名的二级域名的处理方式就应运而生。</p><p>比如百度买下了baidu.com这一顶级域名，将baidu.com绑定了一个地址，<a href="http://map.baicu.com" target="_blank">map.baicu.com</a>、music.baicu.com也绑定到了各个地址，不用单独花钱，只是购买了baidu.com这一个顶级域名</p><h2 id="ssl" tabindex="-1">SSL</h2><p>SSL（Secure Sockets Layer）是一种用于在网络上建立安全连接的协议。它已经被其继任者TLS（Transport Layer Security）所取代，但人们常常仍然使用“SSL”来指代这类协议。以下是SSL的主要功能和概念：</p><h3 id="%E4%B8%BB%E8%A6%81%E5%8A%9F%E8%83%BD" tabindex="-1">主要功能</h3><ol><li><p><strong>数据加密</strong>：SSL通过加密算法确保数据在传输过程中不被窃听或篡改。这意味着即使数据被截获，攻击者也无法读取其内容。</p></li><li><p><strong>数据完整性</strong>：SSL使用校验和和哈希函数来确保数据在传输过程中没有被篡改。如果数据被修改，接收方会检测到并丢弃这些数据。</p></li><li><p><strong>身份验证</strong>：SSL使用数字证书来验证服务器和客户端的身份。数字证书由权威的证书颁发机构（CA）颁发，确保连接的一方是它声称的那一方。</p></li></ol><h3 id="ssl%2Ftls-%E8%BF%9E%E6%8E%A5%E8%BF%87%E7%A8%8B" tabindex="-1">SSL/TLS 连接过程</h3><ol><li><p><strong>握手阶段</strong>：</p><ul><li>客户端向服务器发送请求，并包含客户端支持的加密算法列表。</li><li>服务器从中选择一个加密算法，并向客户端发送数字证书。</li><li>客户端验证服务器证书的有效性。</li><li>客户端生成一个随机数，并使用服务器的公钥加密该随机数，然后发送给服务器。</li><li>服务器使用自己的私钥解密随机数，从而生成会话密钥。</li></ul></li><li><p><strong>加密通信</strong>：</p><ul><li>双方使用会话密钥对通信数据进行加密和解密，确保数据在传输过程中保密。</li></ul></li></ol><h3 id="%E8%8E%B7%E5%8F%96%E5%92%8C%E4%BD%BF%E7%94%A8ssl%E8%AF%81%E4%B9%A6" tabindex="-1">获取和使用SSL证书</h3><ol><li><strong>选择证书类型和供应商</strong>：根据网站需求选择合适的证书类型和供应商，例如Let’s Encrypt（免费）或商业证书供应商。</li><li><strong>生成证书签名请求（CSR）</strong>：在服务器上生成CSR文件，包含公钥和域名信息。</li><li><strong>提交CSR并获取证书</strong>：将CSR提交给证书颁发机构，经过验证后获取SSL证书。</li><li><strong>安装证书</strong>：将SSL证书安装到服务器上，并配置服务器使用该证书进行加密通信。</li></ol><h3 id="let%E2%80%99s-encrypt-%E4%BD%BF%E7%94%A8" tabindex="-1">Let’s Encrypt 使用</h3><p>将Let’s Encrypt与Nginx结合使用，以下是完整的步骤和修改后的Nginx配置：</p><h4 id="%E6%AD%A5%E9%AA%A4-1%3A-%E5%AE%89%E8%A3%85certbot%E5%92%8Cnginx%E6%8F%92%E4%BB%B6" tabindex="-1">步骤 1: 安装Certbot和Nginx插件</h4><p>在基于Debian/Ubuntu的系统上，使用以下命令安装Certbot和Nginx插件：</p><pre><code class="language-bash">sudo apt updatesudo apt install certbot python3-certbot-nginx</code></pre><h4 id="%E6%AD%A5%E9%AA%A4-2%3A-%E4%BD%BF%E7%94%A8certbot%E8%8E%B7%E5%8F%96ssl%E8%AF%81%E4%B9%A6%E5%B9%B6%E8%87%AA%E5%8A%A8%E9%85%8D%E7%BD%AEnginx" tabindex="-1">步骤 2: 使用Certbot获取SSL证书并自动配置Nginx</h4><p>使用Certbot获取Let’s Encrypt证书并自动配置Nginx。以下命令会获取证书并修改Nginx配置以启用HTTPS：</p><pre><code class="language-bash">sudo certbot --nginx -d zhengyu.tech</code></pre><h4 id="%E6%AD%A5%E9%AA%A4-3%3A-%E9%AA%8C%E8%AF%81%E9%85%8D%E7%BD%AE%E5%B9%B6%E9%87%8D%E5%90%AFnginx" tabindex="-1">步骤 3: 验证配置并重启Nginx</h4><p>Certbot会自动修改你的Nginx配置文件以启用HTTPS。以下是修改后的Nginx配置文件示例：</p><pre><code class="language-nginx"># 具体打开自己的会有注明 managed by Certbot</code></pre><h4 id="%E6%AD%A5%E9%AA%A4-4%3A-%E9%87%8D%E5%90%AFnginx" tabindex="-1">步骤 4: 重启Nginx</h4><pre><code class="language-bash">sudo systemctl restart nginx</code></pre><h4 id="%E6%AD%A5%E9%AA%A4-5%3A-%E8%87%AA%E5%8A%A8%E7%BB%AD%E6%9C%9F" tabindex="-1">步骤 5: 自动续期</h4><p>Certbot会自动设置续期任务。你可以通过以下命令检查自动续期是否正常工作：</p><pre><code class="language-bash">sudo certbot renew --dry-run</code></pre><p>以上步骤完成后，你的Nginx服务器将使用Let’s Encrypt的SSL证书来提供HTTPS服务，并自动续期证书。</p>]]>
                    </description>
                    <pubDate>Mon, 27 May 2024 14:18:02 CST</pubDate>
                </item>
                <item>
                    <title>
                        <![CDATA[Jetson GPIO 输出 PWM]]>
                    </title>
                    <link>https://zhengyu.tech/archives/jetsongpio-shu-chu-pwm</link>
                    <description>
                            <![CDATA[<h3 id="%E7%8E%AF%E5%A2%83%E8%AE%BE%E7%BD%AE" tabindex="-1">环境设置</h3><p>Jetson 系列的板子上都搭载了40pin接口用于实现对外通讯与控制，通常直接通过 <a href="https://github.com/NVIDIA/jetson-gpio" target="_blank">Jetson.GPIO</a> 库即可实现编程。</p><p>但是如果要在 Jetson  中使用硬件 PWM，则需要修改 Pinmux 表来多路复用。Jetpack 提供了一个名为 jetson-io 的工具，它允许创建和更新可以使用 PWM 的 dtb。</p><p>首先，在 Jetson 终端中运行以下命令：</p><pre><code class="language-">sudo /opt/nvidia/jetson-io/jetson-io.py</code></pre><p>从菜单中，选择 <code>Configure Jetson 40pin Header</code> &gt; <code> Configure header pins manually</code> ， pwm1（15） 和 pwm5（18）选择并 <code>Back</code>，<code> Save pin changes</code> ，<code>Save and reboot to reconfigure pins</code>，按下任意键后重启，即可完成设置。</p><p><img src="/upload/2024/03/20240327164915.png" alt="20240327164915" /></p><h3 id="python-pwm-%E7%BC%96%E7%A8%8B" tabindex="-1">Python PWM 编程</h3><pre><code class="language-">import Jetson.GPIO as GPIOimport timePWM_PIN = 18GPIO.setwarnings(False)GPIO.setmode(GPIO.BOARD)GPIO.setup(PWM_PIN, GPIO.OUT)pwm = GPIO.PWM(PWM_PIN, 5)  # 设置输出pin与频率为50Hzpwm.start(1)   # 开启PWM输出，并设置占空比为50%while True:    time.sleep(1)    print(&quot;hello, pwm&quot;)    pwm.stop()GPIO.cleanup()</code></pre><p>下图是输出的波形图，</p><p><img src="/upload/2024/03/20240327164625.png" alt="" /></p><h3 id="%E9%97%AE%E9%A2%98" tabindex="-1">问题</h3><p>描述1：在执行<code>sudo /opt/nvidia/jetson-io/jetson-io.py</code>后并没有文字显示或乱码。</p><p>解决1：放终端窗口放大，小窗口可能会导致其显示出问题。</p><p>描述2：在执行<code>sudo /opt/nvidia/jetson-io/jetson-io.py</code>后进入了界面，但是突然闪退，而且重启后依旧。</p><p>解决2：问题极大可能是前面的设置时候没有保存好导致了文件冲突。执行：</p><pre><code class="language-">cd /opt/nvidia/jetson-iosudo python config-by-pin.py -p 5</code></pre><p>这时候会出现报错：</p><pre><code class="language-">RuntimeError: Multiple DT overlays for &#39;Jetson 40pin Header&#39; found!Please remove duplicate(s)/boot/tegra234-p3737-0000-p3701-0000-hdr40.dtbo/boot/kernel_tegra234-p3701-0000-p3737-0000-hdr40-user-custom.dtbo</code></pre><p>原因是系统中存在多个设备树叠加（DTBO）文件，它们都针对同一个硬件组件——“Jetson 40pin Header”。错误消息明确指出了存在多个DTBO文件。</p><p>所以，直接将其中<code>user-custom</code>的文件删除即可。</p><p>Ref：<br /><a href="https://docs.nvidia.com/jetson/archives/r35.3.1/DeveloperGuide/text/HR/ConfiguringTheJetsonExpansionHeaders.html" target="_blank">官方文档配置</a></p>]]>
                    </description>
                    <pubDate>Wed, 27 Mar 2024 15:56:54 CST</pubDate>
                </item>
                <item>
                    <title>
                        <![CDATA[Mosaic-X5 RTK-GPS的初始化与设置，以及ROS包安装]]>
                    </title>
                    <link>https://zhengyu.tech/archives/mosaic-x5rtk-gps的初始化与设置</link>
                    <description>
                            <![CDATA[<p>SparkFun 的 Mosaic-X5 Triband GNSS RTK Breakout 为用户提供了同时使用<strong>L1、L2和L5</strong>频段的最简单方式。它内置了 Septentrio 的高精度 GNSS 接收器 mosaic-X5，这是一个超低功耗、多频段、多星座接收器，能够以高更新率提供<strong>厘米级精度</strong>。</p><p>Mosaic-X5支持多个全球导航卫星系统，包括 GPS、GLONASS、Beidou、Galileo和NavIC，具备实时动态（RTK）能力，可作为基站或漫游器使用，实现极高的位置精度。此外，mosaic-X5 还具备内置网络服务器，通过<strong>USB接口</strong>访问，兼容第三方软件，无需编程即可操作，提供了数据记录和PPS输出功能。</p><img src="/upload/2024/02/20240222103047.png" width="400" ><p>参数指标如下：</p><ul><li>RTK Accuracy（使用固定基站的校正数据）<ul><li>Horizontal: 0.6cm (±0.5ppm)</li><li>Vertical: 1cm (±1ppm)</li></ul></li><li>DGNSS Accuracy（差分全球导航卫星系统，通过比较两个接收器的信号来减少误差）<ul><li>Horizontal: 40cm</li><li>Vertical: 70cm</li></ul></li><li>SBAS Accuracy（基于卫星的增强系统，通过额外的卫星信号和地面站提供的校正信息）<ul><li>Horizontal: 60cm</li><li>Vertical: 80cm</li></ul></li><li>Standalone Accuracy（单独使用GNSS接收器进行定位，不依赖外部校正信号）<ul><li>Horizontal: 1.2m</li><li>Vertical: 1.9m</li></ul></li><li>Time to Fix<ul><li>Cold Start: &lt; 45s</li><li>Warm: &lt; 20s</li><li>Reacquisition: 1s</li></ul></li><li>Timing Precision: 5ns</li><li>Update Rate: 100Hz</li><li>Latency: &lt; 10ms</li><li>GNSS Support<ul><li>GPS: L1C/A, L1PY, L2C, L2P, L5</li><li>GLONASS: L1CA, L2CA, L2P, L3 CDMA</li><li>Beidou: B1I, B1C, B2a, B2b, B2I, B3</li><li>Galileo: E1, E5a, E5b, E5 AltBoc, E6</li><li>QZSS: L1C/A, L1 C/B, L2C, L5</li><li>NavIC: L5</li><li>SBAS: Egnos, WA</li></ul></li></ul><p><img src="/upload/2024/02/20240222104109.png" alt="" /></p><h3 id="%E8%BF%9E%E6%8E%A5%E9%85%8D%E7%BD%AE%E6%96%B9%E6%B3%95" tabindex="-1">连接配置方法</h3><p>Mosaic-X5 提供了多样的连接配置方法，包括：USB-C连接后通过网页配置、USB-C连接后通过Rxtool软件配置、USAT串口指令配置。其中最常用的是可视化的网页配置，最为简单。接下来介绍网页配置方法。</p><p>当 Mosaic-X5 模块最初连接到计算机时，该板将初始化为 USB 大容量存储设备。其中包括了重要的 USB 驱动固件。</p><p><img src="/upload/2024/02/20240222105837.png" alt="" /></p><p>安装 USB 驱动程序后，此接口将支持 Ethernet-over-USB，默认情况下，Win下不允许接收器通过 USB 访问 Internet，而 Ubuntu 下则可以直接访问，不需要安装任何驱动程序。</p><p>完成驱动安装后，通过网页即可访问分配给 Ethernet-over-USB 接口的 IP 地址：192.168.3.1。这里可视化的包含了所有当前<strong>状态信息</strong>与需要<strong>配置选项</strong>。</p><p><img src="/upload/2024/02/20240222110215.png" alt="20240222110215" /></p><h3 id="%E5%85%B1%E4%BA%AB-internet-%E8%AE%BF%E9%97%AE" tabindex="-1">共享 Internet 访问</h3><p>默认情况下，mosaic-X5 GNSS 接收器未配置为通过 USB 接口访问互联网。为了向 RTK 网络（如 NTRIP）接收或投射 RTK 校正，用户需要启用功能。</p><p>需要使用 Web 界面启用导航选项卡的 <code>Communication</code> &gt; <code>USB</code> 下拉菜单。将 <code>Outgoing Internet Access Over USB</code> 状态选择为 <code>on</code>，并保存设置。</p><p><img src="/upload/2024/02/20240222110852.png" alt="" /></p><p>然后通过允许在计算机上进行 Internet 共享。执行此操作的过程取决于操作系统。</p><h5 id="windows" tabindex="-1">Windows</h5><p>通过 <code>控制面板</code> -&gt; <code>网络和 Internet</code> -&gt; <code>网络连接</code>。并将当前的网络分享分享给USB网口。</p><p><img src="/upload/2024/02/20240222111428.png" alt="" /></p><p>启用网桥后，接收方将从计算机的 DHCP 服务器接收其 IP 地址。根据路由表，可能无法再通过其默认 IP 地址 （192.168.3.1） 访问模块。</p><p>接下来通过 <code>CMD</code>终端输入 <code>arp -a</code>，找到分配到的IP地址，并再次通过网页访问。注意，如果在分享后还是相同的IP地址 （192.168.3.1） ，则可能没有成功。</p><img src="/upload/2024/02/20240222111659.png" width="400" ><h5 id="ubuntu" tabindex="-1">Ubuntu</h5><p>在 Ubuntu 中，打开 <code>网络</code>，选择 <code>USB以太网</code>后的小齿轮，将 <code>IPv4</code> 下的方式配置为 <code>与其他计算机共享</code>。其他操作与上面相同。</p><p><img src="/upload/2024/02/20240222112723.png" alt="" /></p><h3 id="rtk-%E6%A0%A1%E6%AD%A3%E8%AE%BE%E7%BD%AE" tabindex="-1">RTK 校正设置</h3><p>这里设置通过互联网接收来自第三方服务的 RTK 校正。</p><p>首先将 <code>GNSS</code> -&gt; <code>Position</code> -&gt; <code>Position Mode</code> 设置为 <code>Rover</code></p><p><img src="/upload/2024/02/20240222113354.png" alt="" /></p><p>在将 <code>Corrections</code>  -&gt;  <code>NTRIP</code> 中新建 <code>New NTRIP clinet</code>，正确填写保存后即可使用</p><p><img src="/upload/2024/02/20240222131026.png" alt="" /></p><h3 id="%E5%90%AF%E7%94%A8-l5-%E9%A2%91%E6%AE%B5" tabindex="-1">启用 L5 频段</h3><p>mosaic-X5 能够使用该频段。不过，在 GPS 网络中，该服务尚未完全投入使用，需要对 mosaic-X5 进行配置，以启用该频段。</p><p>首先，通过下拉菜单导航到 <code>Admin</code> &gt; <code>Expert Control</code> &gt; <code>Control Panel</code> &gt; <code>Navigation</code> &gt; <code>Receiver Operation</code> &gt; <code>Masks</code>。找到 <code>Health Masks</code> 框，然后为“<strong>Tracking</strong> ”和“<strong>Tracking</strong> ”选项配置为off。</p><p><img src="/upload/2024/02/L5_step1.png" alt="L5_step1" /></p><p>再将 <code>Navigation</code> &gt; <code>Advance User Settings</code> &gt; <code>Tracking</code> &gt; <code>Signal Tracking</code>，找到 <code>Signal Tracking</code>，启动 <code>GPSL5</code></p><p><img src="/upload/2024/02/L5_step2.png" alt="L5_step2" /></p><p>最后将 <code>Navigation</code> &gt; <code>Advance User Settings</code> &gt; <code>PVT</code> &gt; <code>Signal Usage</code>，中的<code>GPSL5</code>勾选上。</p><p><img src="/upload/2024/02/L5_step3.png" alt="L5_step3" /></p><h3 id="%E5%AE%9A%E4%BD%8D-nmea-%E4%BF%A1%E6%81%AF%E8%BE%93%E5%87%BA" tabindex="-1">定位 NMEA 信息输出</h3><p>默认情况下是没有输出的，需要手动配置。Mosaic-X5 GPS 提供了多种的输出途径与输出格式，</p><ul><li>4 个 UART（LVTTL，高达 4 Mbps）</li><li>USB-C 端口 （2.0， HS）</li><li>SDIO（大容量存储）</li></ul><p>配置选项在 <code>NMEA/SBF Out</code> 中配置，通过 <code>New NMEA stream</code>，添加。</p><p><img src="/upload/2024/02/20240222134915.png" alt="" /></p><h3 id="pps%E8%BE%93%E5%87%BA" tabindex="-1">PPS输出</h3><p>Mosaic-X5 GPS生成PPS信号的机制是基于其高精度的时间同步功能。PPS（Pulse Per Second）信号是一个精确到秒的时间标记，用于指示每个GPS时间秒的开始。</p><p>Mosaic-X5利用接收到的卫星信号来校准其内部时钟，确保PPS信号与全球标准时间（UTC）高度同步。这个过程允许设备提供极高精度的时间信号，用于各种需要精确时间同步的应用，如数据采集、网络同步等。</p><img src="/upload/2024/02/time_pulseMosaicX5.jpg" width="400" ><p>从模块来看，PPS输出信号的逻辑电平为1.8V。但是，为了方便用户，我们添加了一个缓冲器，并在三频 GNSS RTK 分线器上将信号的逻辑电平提高到 3.3V。此 3.3V 信号输出可通过 SMA 连接器和引脚访问。该信号还连接到 LED，用作视觉指示器。</p><p>此外，我们还可以在 <code>GNSS</code> &gt; <code>PPS/Timing</code> ，中配置详细参数，比如提高频率等。</p><p><img src="/upload/2024/02/20240222134045.png" alt="" /></p><h3 id="ros%E5%8C%85%E5%AE%89%E8%A3%85%E4%B8%8E%E8%AE%BE%E7%BD%AE" tabindex="-1">ROS包安装与设置</h3><p><a href="https://github.com/septentrio-gnss/septentrio_gnss_driver" target="_blank">ROSaic</a> 是 Septentrio 维护的一个ROS包，用于支持其GPS接收器与ROS的集成，就包括了mosaic-X5。</p><p>安装依赖：</p><pre><code class="language-">sudo apt install ros-$ROS_DISTRO-nmea-msgs ros-$ROS_DISTRO-gps-commonsudo apt install libboost-all-devsudo apt install libpcap-devsudo apt install libgeographic-dev</code></pre><p>安装ROS包：</p><pre><code class="language-">mkdir -p ~/septentrio/srccd ~/septentrio/srcgit clone https://github.com/septentrio-gnss/septentrio_gnss_driverrosdep install . --from-paths -icatkin_makeecho &quot;source ~/septentrio/devel/setup.bash&quot; &gt;&gt; ~/.bashrc</code></pre><p>执行：</p><pre><code class="language-">roslaunch septentrio_gnss_driver rover.launch param_file_name:=&quot;gnss&quot;</code></pre>]]>
                    </description>
                    <pubDate>Thu, 22 Feb 2024 09:31:59 CST</pubDate>
                </item>
                <item>
                    <title>
                        <![CDATA[相机参数]]>
                    </title>
                    <link>https://zhengyu.tech/archives/相机参数</link>
                    <description>
                            <![CDATA[<h3 id="%E6%84%9F%E5%85%89%E5%85%83%E4%BB%B6" tabindex="-1">感光元件</h3><p>感光元件是相机中非常重要的部分，它负责捕捉光线并将其转换为电子信号，进而形成数字图像。感光元件的尺寸对相机的性能和图像质量有显著影响。以下是一些常见的感光元件尺寸及其特点：</p><p><img src="/upload/2023/12/20231202190528.png" alt="" /></p><ol><li><p><strong>全画幅（Full Frame）</strong>：</p><ul><li>尺寸：通常为36mm x 24mm，与传统35mm胶片相同。</li><li>优点：更好的低光性能，更小的景深（更容易实现背景虚化），通常具有更高的动态范围和图像细节。</li><li>缺点：相机和镜头通常更大、更重，成本也更高。</li></ul></li><li><p><strong>APS-C 半画幅</strong>：</p><ul><li>尺寸：约为22mm x 15mm，因品牌而异。</li><li>优点：相机体积和重量通常小于全画幅相机，成本更低，适合日常使用和业余摄影。</li><li>缺点：在低光条件下的表现通常不如全画幅，景深也相对较大。</li></ul></li><li><p><strong>M4/3（Micro Four Thirds, MFT）</strong>：</p><ul><li>尺寸：17.3mm x 13mm。</li><li>优点：更小巧的相机体积，轻便，适合旅行和街头摄影。</li><li>缺点：在极低光照条件下的表现不及更大感光元件。</li></ul></li><li><p><strong>1英寸感光元件</strong>：</p><ul><li>尺寸：约13.2mm x 8.8mm。</li><li>优点：常见于高级紧凑相机，提供良好的图像质量，同时保持相机体积小巧。</li><li>缺点：低光性能和背景虚化能力不如更大的感光元件。</li></ul></li><li><p><strong>1/1.7英寸感光元件</strong>：</p><ul><li>尺寸：大约7.6mm x 5.7mm。</li><li>常见于某些高级紧凑相机。</li><li>提供比1/2.3英寸感光元件更好的图像质量，但仍低于1英寸感光元件。</li></ul></li><li><p><strong>1/2.3英寸感光元件</strong>：</p><ul><li>尺寸：大约6.17mm x 4.55mm。</li><li>常见于许多入门级数码相机和智能手机。</li><li>优点：使相机非常小巧和便携，成本较低。</li><li>缺点：在低光条件下和动态范围方面的表现通常较差，图像噪点更多。</li></ul></li></ol><h3 id="%E5%88%86%E8%BE%A8%E7%8E%87" tabindex="-1">分辨率</h3><p>相机的分辨率是指相机能够捕捉的图像的细节程度，通常以像素数（兆像素，MP，1MP等于100万像素）来衡量。分辨率高意味着相机能够产生更细腻、更清晰的图像。以下是分辨率的详细介绍：</p><ol><li><p><strong>低分辨率</strong></p><ul><li><strong>2MP (1600 x 1200)</strong>：适用于小尺寸打印和网页用途。</li><li><strong>5MP (2592 x 1944)</strong>：能够提供一些裁剪空间，同时适合一般大小的打印。</li></ul></li><li><p><strong>中分辨率</strong></p><ul><li><strong>8MP (3264 x 2448)</strong>：普遍用于智能手机和基本数码相机，适合大部分日常用途。</li><li><strong>12MP (4290 x 2800)</strong>：提供更好的细节和裁剪灵活性，常见于更高级的手机和相机。</li></ul></li><li><p><strong>高分辨率</strong></p><ul><li><strong>16MP (4920 x 3264)</strong>：适合专业用途，包括大型打印和详细的后期处理。</li><li><strong>24MP (6000 x 4000) 及以上</strong>：常见于专业级数码单反和无反相机，提供极高的细节捕捉能力。</li></ul></li></ol><h3 id="iso" tabindex="-1">ISO</h3><p>ISO 是一个衡量相机感光元件对光线敏感度的标准，它在摄影中起着至关重要的作用。以下是 ISO 的详细介绍：</p><p><img src="/upload/2023/12/20231202194544.png" alt="" /></p><ol><li><p><strong>ISO 的作用</strong>：</p><ul><li>调整 ISO 值可以改变相机感光元件对光线的敏感程度。ISO 值越高，感光元件对光线的敏感度越高，需要的光线越少。</li><li>在光线较暗的环境中提高 ISO 值，可以帮助相机捕捉更多的光线，从而拍摄到更亮的图像。</li></ul></li><li><p><strong>ISO 与曝光</strong>：</p><ul><li>ISO 是影响曝光的三个主要设置之一，另外两个是快门速度和光圈。</li><li>低 ISO（如 ISO 100）通常用于光线充足的环境，而在低光环境中，则可能需要提高 ISO。</li></ul></li><li><p><strong>ISO 与图像质量</strong>：</p><ul><li>提高 ISO 会增加图像的噪点或“颗粒感”，可能导致图像质量下降。</li><li>较高的 ISO 设置（如 ISO 3200 及以上）通常会产生更多噪点，尤其是在小型感光元件（如智能手机或小型数码相机）上更为明显。</li></ul></li><li><p><strong>选择合适的 ISO</strong>：</p><ul><li>在选择 ISO 时，需要考虑环境光线、所需的曝光水平以及对图像噪点的容忍度。</li><li>一般建议在光线充足的情况下使用尽可能低的 ISO，以获得最佳图像质量。</li><li>在必要时，可以适当提高 ISO 以避免运动模糊或实现快速快门速度。</li></ul></li></ol><p>相机的 ISO 设置范围可以从很低到非常高，不同的相机可能有不同的具体数值和范围。以下是一些常见的 ISO 设置：</p><ol><li><p><strong>低 ISO 设置</strong>：</p><ul><li><strong>ISO 50/64/80</strong>：这些通常在特定的专业相机中找到，用于非常亮的条件，如直射阳光下，以获得最低的噪点和最高的图像质量。</li><li><strong>ISO 100/200</strong>：这是大多数相机的标准或基本 ISO，适用于日常光线良好的情况，提供最佳的图像质量。</li></ul></li><li><p><strong>中等 ISO 设置</strong>：</p><ul><li><strong>ISO 400/800</strong>：在室内或阴天等光线较暗的环境中使用，可以获得较好的曝光而不会引入太多噪点。</li><li><strong>ISO 1600</strong>：在较暗的环境中使用，如室内低光照或夜间场景，能够提供较亮的图像，但可能会有一些噪点。</li></ul></li><li><p><strong>高 ISO 设置</strong>：</p><ul><li><strong>ISO 3200/6400</strong>：用于非常暗的环境，或者需要非常快的快门速度来捕捉动作的场合。在这些设置下，噪点更加明显。</li><li><strong>ISO 12800 及以上</strong>：这些非常高的 ISO 设置通常在极端低光条件下使用，或在无法使用其他光源的情况下。图像质量会受到噪点的显著影响。</li></ul></li><li><p><strong>扩展 ISO 设置</strong>：</p><ul><li>许多相机提供了超出标准范围的“扩展”ISO 设置，如 ISO 25600、51200，甚至更高。这些设置通常会产生很高的噪点，但在某些特殊情况下可能很有用。</li></ul></li></ol><p>不同的相机在高 ISO 性能上有显著差异。高端相机（尤其是全画幅相机）通常在高 ISO 下表现更好，能够在保持较低噪点的同时提供较高的图像质量。ISO 的选择取决于具体的拍摄条件和所需的图像质量。通常建议只在需要时提高 ISO，以保持最佳的图像质量。</p><h3 id="%E5%BF%AB%E9%97%A8" tabindex="-1">快门</h3><h3 id="%E5%BF%AB%E9%97%A8%E7%B1%BB%E5%9E%8B" tabindex="-1">快门类型</h3><p>快门是相机的一个关键组件，用于控制光线进入相机感光元件的时间长度。快门类型主要有两种：</p><ol><li><p><strong>机械快门</strong>：</p><ul><li>传统的机械快门主要在单镜头反光相机（SLR）和数码单镜头反光相机（DSLR）中使用。</li><li>它使用物理机械来控制感光元件前的快门帘开闭，从而控制曝光时间。</li><li>机械快门能够精确控制曝光时间，但可能会因为机械磨损而影响性能。</li></ul></li><li><p><strong>电子快门</strong>：</p><ul><li>电子快门主要用于无反光镜相机（如微单相机）和智能手机。</li><li>它通过电子方式控制感光元件的活动，无需物理运动。</li><li>电子快门通常更安静、耐用，且能够实现非常高的快门速度，但在某些情况下可能会引起滚动带效应或变形。</li></ul></li></ol><h3 id="%E5%BF%AB%E9%97%A8%E9%80%9F%E5%BA%A6" tabindex="-1">快门速度</h3><p>快门速度指的是快门打开和关闭之间的时间长度，它决定了感光元件接收光线的时间，从而影响照片的曝光量和动态捕捉。快门速度通常以秒或其分数来表示，例如：</p><ol><li><p><strong>慢速快门</strong>：</p><ul><li>1秒、1/2秒、1/4秒等：用于低光环境或创造运动模糊效果（如流水的丝绸效果）。</li><li>慢速快门通常需要使用三脚架以避免相机抖动造成的模糊。</li></ul></li><li><p><strong>中速快门</strong>：</p><ul><li>1/30秒、1/60秒、1/125秒等：适合日常拍摄，如人像或静态景物。</li></ul></li><li><p><strong>快速快门</strong>：</p><ul><li>1/500秒、1/1000秒、1/2000秒等：用于冻结快速运动，如体育赛事、飞鸟等。</li><li>快速快门有助于捕捉瞬间动作，避免运动模糊。</li></ul></li></ol><p>快门速度与光圈和ISO值共同决定了照片的最终曝光效果。正确平衡这三个元素（通常称为“曝光三角”）是摄影的关键技能之一。</p><h3 id="%E5%85%89%E5%9C%88" tabindex="-1">光圈</h3><p>光圈是摄影中的一个核心概念，它指的是镜头中用于控制通过镜头到达感光元件的光量的装置。光圈的大小由一系列叶片组成，这些叶片可以展开或收缩以调整进光量。以下是光圈的详细介绍：</p><p><img src="/upload/2023/12/20231202194653.png" alt="20231202194653" /></p><h4 id="%E5%85%89%E5%9C%88%E7%9A%84%E5%9F%BA%E6%9C%AC%E5%8E%9F%E7%90%86" tabindex="-1">光圈的基本原理</h4><ol><li><p><strong>光圈大小</strong>：</p><ul><li>光圈的大小是通过f-stop（f数）来表示的，例如f/1.4、f/2.8、f/5.6等。</li><li>f数越小，光圈开得越大，进入镜头的光线越多；反之，f数越大，光圈越小，进光量越少。</li></ul></li><li><p><strong>光圈与曝光</strong>：</p><ul><li>光圈大小直接影响照片的曝光量。光圈越大（f数小），照片越亮；光圈越小（f数大），照片越暗。</li></ul></li><li><p><strong>光圈与景深</strong>：</p><ul><li>光圈还影响照片的景深，即照片中清晰部分的范围。</li><li>大光圈（f数小）产生浅景深，背景会模糊，适合人像摄影。</li><li>小光圈（f数大）产生深景深，前景和背景都较为清晰，适合风景摄影。</li></ul></li></ol><h4 id="%E5%85%89%E5%9C%88%E7%9A%84%E5%BA%94%E7%94%A8" tabindex="-1">光圈的应用</h4><ol><li><p><strong>低光环境摄影</strong>：</p><ul><li>在光线不足的环境中，使用大光圈可以捕获更多光线，帮助曝光。</li></ul></li><li><p><strong>控制景深</strong>：</p><ul><li>创造艺术效果时，通过调整光圈大小来控制景深，突出主体或展示场景的深度。</li></ul></li><li><p><strong>提高图像质量</strong>：</p><ul><li>许多镜头在中等光圈（如f/8）时提供最佳的图像锐度和最小的光学畸变。</li></ul></li></ol><h4 id="%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9" tabindex="-1">注意事项</h4><ul><li><strong>光圈与镜头</strong>：不同镜头支持的光圈范围不同，高端镜头通常能够提供更大的光圈（如f/1.4）。</li><li><strong>衍射限制</strong>：过小的光圈（如f/16或f/22）可能会导致衍射，降低图像锐度。</li></ul><p>光圈的选择取决于摄影师想要实现的创意效果、光线条件以及镜头的特性。理解和运用光圈是掌握摄影艺术的关键之一。</p><h3 id="%E9%95%9C%E5%A4%B4" tabindex="-1">镜头</h3><h4 id="%E7%84%A6%E6%AE%B5" tabindex="-1">焦段</h4><p>焦段是描述相机镜头特性的重要参数，它直接影响着拍摄的视角和图像的构成。焦段通常以毫米（mm）为单位来表示，并决定了镜头的视角宽窄。以下是焦段的详细介绍：</p><h5 id="%E7%84%A6%E6%AE%B5%E7%9A%84%E5%88%86%E7%B1%BB" tabindex="-1">焦段的分类</h5><ol><li><p><strong>广角镜头</strong>：</p><ul><li>焦距小于35mm的镜头通常被认为是广角镜头。</li><li>广角镜头能捕捉更广阔的视野，非常适合风景摄影、建筑摄影和室内摄影。</li><li>它们也会产生一定的透视变形，使图像中的对象在视觉上似乎离得更远。</li></ul></li><li><p><strong>标准镜头</strong>：</p><ul><li>焦距在35mm到70mm之间的镜头被视为标准镜头。</li><li>这些镜头提供接近人眼视觉的视角，适合肖像摄影、街头摄影和日常拍摄。</li></ul></li><li><p><strong>长焦镜头</strong>：</p><ul><li>焦距超过70mm的镜头被称为长焦镜头。</li><li>长焦镜头能够放大远处的物体，常用于体育摄影、野生动物摄影和特写摄影。</li><li>它们通常能产生更浅的景深，使背景模糊，突出主体。</li></ul></li><li><p><strong>超长焦镜头</strong>：</p><ul><li>焦距非常长的镜头（如300mm、400mm及以上）被称为超长焦镜头。</li><li>适用于需要从远距离拍摄的场合，如鸟类摄影和天体摄影。</li></ul></li><li><p><strong>变焦镜头与定焦镜头</strong>：</p><ul><li>变焦镜头提供一系列焦段，如18-55mm、70-200mm等，灵活适用于多种拍摄场景。</li><li>定焦镜头只有一个固定的焦距，如50mm或85mm，通常提供更高的图像质量和更大的光圈。</li></ul></li></ol><h5 id="%E7%84%A6%E6%AE%B5%E7%9A%84%E5%BD%B1%E5%93%8D" tabindex="-1">焦段的影响</h5><ul><li><strong>视角</strong>：焦段越短，视角越宽；焦段越长，视角越窄。</li><li><strong>透视关系</strong>：广角镜头会夸大前景和背景之间的距离，而长焦镜头则压缩这种距离感。</li><li><strong>景深</strong>：长焦镜头更容易获得浅景深效果。</li></ul><h4 id="%E9%95%9C%E5%A4%B4%E6%BB%A4%E9%95%9C" tabindex="-1">镜头滤镜</h4><ol><li>UV镜：紫外线滤光镜（UltraViolet），起到保护镜头，提高画面质量的作用。</li><li>CPL镜：圆偏振镜（CircularPolarizer），可以消除非金属物质表面的反光，比如玻璃，但有一定减光。</li><li>柔光镜：柔滑光线，使画面像胶片，分白柔和黑柔滤镜，有美艳效果，降低锐化。</li><li>ND镜：中性密度滤波器（Neutral density filter），减光镜，可以提高低iso时的快门速度</li></ol>]]>
                    </description>
                    <pubDate>Sat, 02 Dec 2023 18:04:06 CST</pubDate>
                </item>
                <item>
                    <title>
                        <![CDATA[GPS 相关内容汇总]]>
                    </title>
                    <link>https://zhengyu.tech/archives/gps-xiang-guan-nei-rong-hui-zong</link>
                    <description>
                            <![CDATA[<h3 id="gps-%E5%9F%BA%E6%9C%AC%E6%A6%82%E5%BF%B5" tabindex="-1">GPS 基本概念</h3><p>GPS的工作原理是通过接收设备（如智能手机或专用GPS接收器）从多颗GPS卫星接收信号。这些信号包含卫星的位置和发射时间。接收设备使用这些信号来计算其到每颗卫星的距离，并使用这些距离来确定其自身的精确位置。这通常涉及至少从四颗卫星接收信号，以提供三维位置（纬度、经度和高度）和时间信息。</p><p>GPS的精度受多种因素影响，包括大气条件、电子干扰和接收器的质量。尽管如此，对于大多数消费者应用，其定位精度通常在<strong>几米之内</strong>。对于特定的应用和增强技术，如差分GPS（DGPS），精度可以提高到厘米级。</p><p>GPS系统在许多领域都有广泛应用，包括汽车导航、手机定位服务、海上和航空导航、地质勘探和灾害管理。</p><p><img src="/upload/2023/11/GPS24goldenSML.gif" alt="" /></p><h3 id="rtk-gps" tabindex="-1">RTK GPS</h3><p>RTK GPS（Real-Time Kinematic GPS）是一种高精度的定位技术，它利用GPS卫星信号进行实时的位置校正，以提供厘米级的定位精度。这种技术是通过在基站（已知位置）和移动接收器之间比较GPS信号来实现的。</p><p><img src="/upload/2023/11/20231120192707.png" alt="" /></p><p>RTK的工作原理：</p><ul><li>差分GPS：RTK是一种差分GPS技术。它通过比较来自GPS卫星的信号在两个不同位置（基站和移动接收器）的微小差异来工作。</li><li>基站：基站位于一个已知精确坐标的固定位置。它接收GPS卫星的信号，并计算出误差。</li><li>移动接收器：移动接收器同样接收来自相同GPS卫星的信号，并利用从基站接收到的误差信息进行实时校正。</li><li>信号校正：基站将其计算出的误差信息通过无线电、蜂窝网络或其他通信方式实时发送给移动接收器，后者使用这些数据来校正自己的GPS信号，从而极大地提高其定位精度。</li></ul><p>算法过程：</p><ul><li>载波相位观测：RTK GPS主要利用载波相位观测进行定位。这种方法比使用卫星信号的编码信息更精确，因为载波的波长较短，从而提供了更高的测量精度。</li><li><strong>双差分技术</strong>：RTK算法通常使用双差分技术来减少误差。这涉及到对来自两个接收器（基站和移动接收器）和至少两颗卫星的信号进行差分计算。</li><li><strong>固定解和浮点解</strong>：在处理差分信号时，RTK算法会尝试确定每个GPS卫星信号的整数模糊度。成功解决整数模糊度问题可以获得固定解（更高的精度），否则只能获得浮点解（精度较低）。</li></ul><p>RTK GPS的状态：</p><ul><li><strong>单点定位</strong>（SPP）：没有使用差分校正数据时的普通GPS定位模式。</li><li><strong>浮点解</strong>（Float RTK）：当RTK系统无法完全解决整数模糊度时，将提供浮点解。这比单点定位精确，但不如固定解精确。</li><li><strong>固定解</strong>（Fixed RTK）：当<strong>整数模糊度完全解决</strong>时，RTK系统将提供固定解，这是最高精度的状态。</li></ul><p>RTK系统提供了迄今为止GPS技术中的最高精度，因此它在各种精密应用中变得越来越重要。</p><h3 id="%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90" tabindex="-1">数据分析</h3><p>RTK（实时动态运动定位）设备，作为一种高精度的GPS定位系统，会输出多种数据类型，旨在提供详尽的位置和时间信息。这些数据通常包括但不限于以下几种：</p><ol><li><p><strong>位置数据</strong>：</p><ul><li>经度、纬度和高度坐标。</li><li>以某种坐标系统（如WGS 84）表示的位置信息。</li></ul></li><li><p><strong>速度数据</strong>：</p><ul><li>移动接收器的速度，通常包括水平和垂直方向的速度。</li></ul></li><li><p><strong>时间数据</strong>：</p><ul><li>精确的时间戳，与卫星的时间同步。</li></ul></li><li><p><strong>定位精度估计</strong>：</p><ul><li>定位精度的估计值，例如水平和垂直定位误差界限。</li></ul></li><li><p><strong>差分校正数据</strong>：</p><ul><li>如实时差分（RTD）信息，用于提高定位精度。</li></ul></li><li><p><strong>载波相位和信号强度信息</strong>：</p><ul><li>载波相位测量值，对于解算整数模糊度至关重要。</li><li>各个卫星信号的信噪比（SNR）和信号强度。</li></ul></li><li><p><strong>卫星信息</strong>：</p><ul><li>可见卫星的编号和状态。</li><li>卫星几何分布的质量指标，如GDOP（几何精度衰减因子）。</li></ul></li><li><p><strong>固定/浮动解状态</strong>：</p><ul><li>当前解算状态，指示是固定解（Fixed Solution）还是浮动解（Float Solution）。</li></ul></li><li><p><strong>健康状态和诊断信息</strong>：</p><ul><li>设备自身的健康和状态信息，可能包括温度、电源状态等。</li></ul></li><li><p><strong>日志和事件记录</strong>：</p><ul><li>定位事件和系统日志，用于问题诊断和分析。</li></ul></li></ol><p>这些数据通常以NMEA（国家海洋电子协会）格式或其他专业格式（如RTCM）输出，并可以通过串行端口、蓝牙或Wi-Fi等通信接口传输。RTK设备输出的确切数据类型和格式可能因制造商和模型而异，因此用户在使用时应参考具体设备的技术文档。</p><h4 id="%E5%85%B7%E4%BD%93%E5%88%86%E6%9E%90" tabindex="-1">具体分析</h4><p>例如，以下是从某个设备中接收的GPS数据：</p><pre><code class="language-">$GNRMC,120924.00,A,3510.5689031,N,12654.0297672,E,0.850,,151123,,,D,V*19 12:09:24  $GNGGA,120924.00,3510.5689031,N,12654.0297672,E,2,11,1.67,71.462,M,19.729,M,2.0,0000*5F 12:09:24</code></pre><p>以上是 NMEA（National Marine Electronics Association）格式的，这是一种常用于GPS设备的数据标准。</p><p>这些数据包含两种主要类型的NMEA语句：<code>$GNRMC</code> 和 <code>$GNGGA</code>。</p><ol><li><p><strong>$GNRMC（Recommended Minimum Specific GNSS Data）</strong>:</p><ul><li><strong>时间</strong>：例如，在第一行中，“120924.00”表示时间是12:09:24（UTC时间）。</li><li><strong>状态</strong>：“A”表示数据有效，“V”表示导航接收器警告。</li><li><strong>纬度</strong>：“3510.5689031,N”表示纬度是35度10.5689031分北纬。</li><li><strong>经度</strong>：“12654.0297672,E”表示经度是126度54.0297672分东经。</li><li><strong>速度</strong>：例如，“0.850”表示速度是0.850节。</li><li><strong>日期</strong>：“151123”表示日期是2023年11月15日。</li><li><strong>定位模式</strong>：“D”表示差分GPS模式。</li></ul></li><li><p><strong>$GNGGA（Global Navigation Satellite System Fix Data）</strong>:</p><ul><li><strong>时间</strong>：“120924.00”表示时间是12:09:24（UTC时间）。</li><li><strong>纬度</strong> 和 <strong>经度</strong>：同上。</li><li><strong>定位质量</strong>：“2”表示差分GPS定位（DGPS）。</li><li><strong>卫星数量</strong>：“11”表示正在使用11颗卫星进行定位。</li><li><strong>HDOP（水平精度衰减因子）</strong>：“1.67”表示定位的水平精度。</li><li><strong>海拔高度</strong>：“71.462,M”表示海拔高度是71.462米。</li><li><strong>大地水准面高度</strong>：“19.729,M”表示大地水准面高度是19.729米。</li><li><strong>差分数据年龄</strong>：如“2.0”表示差分数据的年龄是2.0秒（差分GPS校正信号的时延）。</li><li><strong>差分基站ID</strong>：“0000”表示差分GPS基站的标识。</li></ul></li></ol><p>在 <code>$GNGGA</code>（Global Navigation Satellite System Fix Data）NMEA（National Marine Electronics Association）语句中，定位质量值提供了关于当前定位的状态和精度的关键信息。这个字段的具体值及其含义如下：</p><ul><li><strong>0：无效定位</strong>  GPS尚未获得或失去定位。</li><li><strong>1：标准GPS定位</strong>  GPS定位有效，通常指没有使用差分修正的标准GPS定位。</li><li><strong>2：差分GPS定位（DGPS）</strong> 使用了差分GPS修正，通常通过地面参考站提供额外的校正信息，提高定位精度。</li><li><strong>3：PPS模式</strong>  PPS（精密定位服务）模式，通常用于军事或其他政府授权使用的高精度定位。</li><li><strong>4：固定RTK</strong>  实时动态运动定位的固定解。这是RTK GPS系统中最高精度的定位模式，提供厘米级精度。</li><li><strong>5：浮动RTK</strong>  实时动态运动定位的浮动解。这是RTK GPS系统中的一种较高精度模式，但精度低于固定RTK。</li><li><strong>6：估算（死算）</strong>  使用先前的定位数据或其他方法进行估算的定位，精度较低。</li><li><strong>7：手动输入模式</strong>  定位数据是手动输入的。</li><li><strong>8：模拟模式</strong>  定位是通过模拟方式获得的。</li></ul><p>一般如果是 RTK 设备，主要看到定位质量值为2（差分GPS定位），4（固定RTK），和5（浮动RTK）这三种状态。</p><p>这些数据提供了关于设备当前位置、时间、定位状态、使用的卫星数量、精度因子等的详细信息。通过这些数据，您可以了解设备的确切位置、定位精度、以及是否正在使用差分GPS来提高定位精度。每个数据点都提供了一个特定时刻的定位信息，这对于需要高精度定位的应用非常重要，如航海导航、地理测绘等。</p><h3 id="%E5%9D%90%E6%A0%87%E7%B3%BB" tabindex="-1">坐标系</h3><p>GPS系统主要使用WGS 84（World Geodetic System 1984）坐标系，但GPS接收设备通常能够将这些坐标转换为多种其他坐标系。下面是一些常见的坐标系：</p><ol><li><p><strong>WGS 84</strong>:</p><ul><li>全球定位系统（GPS）的标准坐标系。</li><li>提供全球范围内的位置信息。</li><li>用于定义地球上任意点的<strong>经度、纬度和高度</strong>。</li></ul></li><li><p><strong>GCS（地理坐标系统）</strong>:</p><ul><li>基于WGS 84或其他地球参考椭球体。</li><li>用<strong>经度和纬度</strong>表示位置。</li></ul></li><li><p><strong>UTM（通用横轴墨卡托）</strong>:</p><ul><li>将世界划分为多个纵向区域，每个区域使用不同的投影。</li><li>提供在局部范围内更准确的<strong>平面坐标</strong>。</li></ul></li><li><p><strong>国家/地区特定的坐标系</strong>:</p><ul><li>许多国家或地区有自己的坐标系，如北美的NAD83（北美大地基准1983），欧洲的ETRS89（欧洲陆地参考系统1989）等。</li><li>这些系统可能基于特定区域的地理特性进行优化。</li></ul></li><li><p><strong>Web Mercator</strong>:</p><ul><li>常用于网络地图服务，如Google Maps和Bing Maps。</li><li>适合于电子地图浏览，但不适于精确测量。</li></ul></li></ol><p>大多数现代GPS接收设备和软件支持在这些不同的坐标系之间进行转换，使用户能够根据需要选择最合适的系统。例如，测量师可能倾向于使用UTM坐标系进行精确的地面测量，而在全球范围内航行的人可能会使用WGS 84坐标系。</p><h4 id="utm%EF%BC%88%E9%80%9A%E7%94%A8%E6%A8%AA%E8%BD%B4%E5%A2%A8%E5%8D%A1%E6%89%98%EF%BC%89" tabindex="-1"><a href="https://manifold.net/doc/mfd8/universal_transverse_mercator_utm_.htm" target="_blank">UTM</a>（通用横轴墨卡托）</h4><p>UTM（通用横轴墨卡托）坐标系是一种广泛使用的地理坐标系统，特别适用于精确的地图制作和空间数据管理。以下是关于UTM坐标系的详细介绍：</p><p><img src="/upload/2023/11/20231120204129.png" alt="" /></p><p>基本原理：</p><ul><li><strong>投影方法</strong>：UTM是一种基于墨卡托投影的地图投影系统，它使用一个圆柱投影面，这个面沿地球的一个纬度线（通常是赤道）接触地球。</li><li><strong>区域划分</strong>：UTM系统将地球表面分割成60个垂直的6度经度区域，从180度经线西侧的第1区开始，向东至180度经线的第60区。</li></ul><p>区域和带号：</p><ul><li><strong>区域编号</strong>：每个6度经度范围的区域被赋予一个从1到60的编号。</li><li><strong>纬带指示</strong>：除了区域编号外，UTM还使用纬带字母从南到北（从C到X，不包括I和O）表示不同的纬度范围，每个纬带约8度纬度高。</li></ul><p>坐标表示：</p><ul><li><strong>东坐标（Easting）</strong>：表示从中央经线（每个区域的中心线）向东的距离，单位为米。中央经线的东坐标被赋值为500,000米，以避免出现负数坐标。</li><li><strong>北坐标（Northing）</strong>：表示从赤道向北或向南的距离，单位也是米。在北半球，赤道的北坐标是0米；在南半球，赤道的北坐标设置为10,000,000米。</li></ul><p>UTM坐标系因其相对简单和高精度的特性，在专业和学术领域得到了广泛的使用。对于处理局部地区的空间数据，UTM提供了一个有效和精确的方法。</p><h3 id="%E5%AF%BC%E8%88%AA%E7%B3%BB%E7%BB%9F%E4%B8%AD%E7%9A%84%E9%A2%91%E7%8E%87%E4%BF%A1%E5%8F%B7" tabindex="-1">导航系统中的频率信号</h3><p>L1, L2, 和 L5 是指卫星导航系统中的不同频率信号。它们是全球定位系统（GPS）和其他全球卫星导航系统（GNSS）如GLONASS、Galileo、和北斗卫星导航系统使用的关键信号频率。这些信号对于定位、导航和时间同步至关重要。下面是对这三个频率的简要说明：</p><ul><li><p>L1频率：这是最早被GPS系统使用的频率，大多数消费级GPS接收器都使用L1信号。L1频率携带了C/A（粗/获取）码，用于标准定位服务，以及更复杂的P(Y)码，用于军事和政府使用。</p><ul><li>L1 C/A：这是最初的GPS信号，用于民用。它使用1.57542 GHz的频率。</li><li>L1C：这是一个新的信号组件，设计用于民用GPS，并被引入到了GPS III卫星中。它提供了改进的信号结构，用于增强性能和兼容性。</li></ul></li><li><p>L2频率：L2频率主要被用于专业级GPS接收器，用于提供更精确的测量。这是因为L2携带的P(Y)码可以用来减少大气造成的延迟效应，这种效应在L1信号上更为显著。通过同时使用L1和L2信号，可以显著提高定位的准确性。</p><ul><li>L2C：这是针对民用的第一个L2 GPS信号，使用1.2276 GHz频率。L2C提供了比L1 C/A更好的性能，包括更强的信号和更快的定位。</li><li>L2 P(Y)：这是一个加密的信号，主要用于军事和政府应用。</li></ul></li><li><p>L5频率：L5是相对较新的信号频率，它提供更高的传输功率和更先进的调制技术，从而提高了信号的稳定性和抗干扰能力。L5频率也被设计用于民航安全关键应用，如飞机的精确导航。</p></li></ul><p>结合使用这些不同的频率可以提供更准确和可靠的定位结果，特别是在多径效应和大气延迟等因素影响较大的情况下。多频接收器（同时接收L1, L2和L5信号的设备）特别适用于需要高精度定位的应用，例如测绘、农业、建筑和军事用途。</p>]]>
                    </description>
                    <pubDate>Mon, 20 Nov 2023 18:55:05 CST</pubDate>
                </item>
                <item>
                    <title>
                        <![CDATA[DJI Mavic3 多光谱版介绍与应用]]>
                    </title>
                    <link>https://zhengyu.tech/archives/djimavic3多光谱版介绍与应用</link>
                    <description>
                            <![CDATA[<p>DJI Mavic 3 <strong>多光谱版</strong>是一款专为农业应用设计的高精度无人机。它配备了一个 20MP 的 RGB相机 和四个 5MP 的多光谱相机，能够捕获绿色、红色、红边缘和近红外波长的图像。</p><p>Mavic 3M包含一个<strong>阳光传感器</strong>，用于提高NDVI结果的准确性，并在图像数据处理中提供光照补偿。它搭载的 RTK 模块支持无需地面控制点即可实现 <strong>厘米级定位</strong> 的高精度空中测绘。</p><p>该无人机的电池寿命为<strong>43分钟</strong>，可以高效地覆盖大面积区域，其O3传输系统支持长达15公里的数据传输距离。它具备全方位障碍物避让功能，并能进行地形跟随测量，特别适用于果园和不平坦的地形。</p><p><img src="/upload/2023/11/20231120160532.png" alt="" /></p><h3 id="%E5%A4%9A%E5%85%89%E8%B0%B1%E7%9B%B8%E6%9C%BA" tabindex="-1">多光谱相机</h3><p><strong>近红外（NIR）</strong>: 波长大约在 <strong>860</strong> 纳米（±26 纳米）。这个波段对于分析植被健康特别有用，因为<strong>健康的植被</strong>会在近红外波段强烈反射光线。<br /><strong>红色（R）</strong>: 波长大约在 <strong>650</strong> 纳米（±16 纳米）。这个波段可以帮助识别和分析植物的<strong>光合作用效率和健康状况</strong>。<br /><strong>红边（RE）</strong>: 波长大约在 <strong>730</strong> 纳米（±16 纳米）。红边是植被反射率变化最显著的区域，通常用于<strong>植被分类</strong>和<strong>生物量估算</strong>。<br /><strong>绿色（G）</strong>: 波长大约在 <strong>560</strong> 纳米（±16 纳米）。绿色光波段反射的是植被的健康状况，因为植<strong>物叶绿素吸收红色和蓝色光</strong>，反射绿色光。</p><p>些不同的光谱波段镜头使得相机可以捕捉多维度的数据，这对于精确农业、环境监测、地图制作和其他需要详细地表信息的领域非常重要。通过这些波段的组合，可以生成<strong>植被指数</strong>（如<strong>NDVI</strong>）或其他类型的分析来帮助研究者和专业人员理解目标区域的情况。</p><h3 id="%E6%A4%8D%E8%A2%AB%E6%8C%87%E6%95%B0" tabindex="-1">植被指数</h3><p>植被指数（Vegetation Indices, VIs）主要用于估算和监测植被的<strong>覆盖度</strong>、<strong>生长状况</strong>、<strong>生物量</strong>、和<strong>植被健康情况</strong>。以下是一些常用的植被指数：</p><ul><li>NDVI (归一化差异植被指数): 用于监测植被生长和健康。</li><li>EVI (增强型植被指数): 类似于NDVI，但对大气和土壤背景影响更不敏感。</li><li>SAVI (土壤调整植被指数): 适用于植被覆盖度较低的地区。</li><li>MSAVI (改进型土壤调整植被指数): 用于减少土壤背景的影响。</li><li>NDWI (归一化差异水体指数): 可用于监测植被水分含量。</li><li>NDRE (归一化差异红边指数): 对植物叶片中的氮含量变化敏感。</li></ul><p>植被指数的生成需要特定波段的图像数据，通常是使用多光谱遥感数据。通过特定波段的反射率计算得出，比如NDVI就是使用红色和近红外波段的反射率数据来计算的。这些指数可以通过遥感软件或GIS（地理信息系统）工具来生成，广泛应用于农业、生态监测、地理学和环境科学等领域。</p><p>基于 DJI 多光谱相机传感器，它具备捕捉<strong>近红外（NIR）、红色（R）、红边（RE）和绿色（G）波段</strong>的能力。在果园数据分析中，可以应用以下几种植被指数：</p><ul><li><strong>NDVI</strong> (归一化差异植被指数): 用于评估果园植被的<strong>生物量和健康状况</strong>。</li><li><strong>GNDVI</strong> (绿色归一化差异植被指数): 由于涉及绿色波段，它可以帮助评估叶绿素含量，对果园中植物的<strong>光合作用活性和氮含量</strong>的评估可能更敏感。</li><li><strong>NDRE</strong> (归一化差异红边指数): 这个指数利用红边和近红外波段，可以用来估计<strong>植被的氮含量</strong>，尤其适合用于监测果园中植被的营养状况。</li><li><strong>CI</strong> (叶绿素指数 Chlorophyll Index): 在红边和红色波段的基础上，可以计算<strong>叶绿素指数</strong>，这对于评估果树的健康和成熟度特别有用。</li></ul><h3 id="ndvi%EF%BC%88%E5%BD%92%E4%B8%80%E5%8C%96%E5%B7%AE%E5%BC%82%E6%A4%8D%E8%A2%AB%E6%8C%87%E6%95%B0%EF%BC%89" tabindex="-1">NDVI（归一化差异植被指数）</h3><p>NDVI，全称是<strong>归一化差异植被指数</strong>（Normalized Difference Vegetation Index），是一种简单且有效的数学方法，用于评估是否有活跃的绿色植被。通过比较<strong>可见光</strong>和<strong>近红外光</strong>的反射率，NDVI可以指示植物的健康状况和生物量。NDVI的计算公式如下：</p><p class='katex-block'><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi>N</mi><mi>D</mi><mi>V</mi><mi>I</mi><mo>=</mo><mfrac><mrow><mo stretchy="false">(</mo><mi>N</mi><mi>I</mi><mi>R</mi><mo>−</mo><mi>R</mi><mi>e</mi><mi>d</mi><mo stretchy="false">)</mo></mrow><mrow><mo stretchy="false">(</mo><mi>N</mi><mi>I</mi><mi>R</mi><mo>+</mo><mi>R</mi><mi>e</mi><mi>d</mi><mo stretchy="false">)</mo></mrow></mfrac></mrow><annotation encoding="application/x-tex">NDVI = \frac{(NIR - Red)}{(NIR + Red)}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.68333em;vertical-align:0em;"></span><span class="mord mathnormal" style="margin-right:0.10903em;">N</span><span class="mord mathnormal" style="margin-right:0.02778em;">D</span><span class="mord mathnormal" style="margin-right:0.22222em;">V</span><span class="mord mathnormal" style="margin-right:0.07847em;">I</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:2.363em;vertical-align:-0.936em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.427em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.10903em;">N</span><span class="mord mathnormal" style="margin-right:0.07847em;">I</span><span class="mord mathnormal" style="margin-right:0.00773em;">R</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mord mathnormal" style="margin-right:0.00773em;">R</span><span class="mord mathnormal">e</span><span class="mord mathnormal">d</span><span class="mclose">)</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.10903em;">N</span><span class="mord mathnormal" style="margin-right:0.07847em;">I</span><span class="mord mathnormal" style="margin-right:0.00773em;">R</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mord mathnormal" style="margin-right:0.00773em;">R</span><span class="mord mathnormal">e</span><span class="mord mathnormal">d</span><span class="mclose">)</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.936em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span></span></p><ul><li><strong>NIR</strong> 表示近红外波段的反射强度。</li><li><strong>Red</strong> 表示红色波段的反射强度。</li></ul><p>NDVI值的范围是从-1到+1：</p><ul><li><strong>负值</strong> 通常指示水体。</li><li><strong>接近0的值</strong> 通常指示裸土或岩石。</li><li><strong>正值</strong> 指示植被，其中较高的正值（接近+1）指示更健康的植被。</li></ul><p>为了生成NDVI，你需要以下数据：</p><ol><li><strong>红色波段的图像</strong>：通常在650nm左右，用于捕捉植物叶绿素的吸收。</li><li><strong>近红外波段的图像</strong>：通常在850nm左右，健康植被在这个波段有很高的反射率。</li></ol><p>多光谱相机正是提供这类数据的工具。通过在红色和近红外波段捕捉图像，可以计算出每个像素的NDVI值，从而生成植被的健康状况地图。这些信息对于农业管理、生态监测和环境研究来说非常宝贵。</p><h3 id="gndvi%EF%BC%88%E7%BB%BF%E8%89%B2%E5%BD%92%E4%B8%80%E5%8C%96%E5%B7%AE%E5%BC%82%E6%A4%8D%E8%A2%AB%E6%8C%87%E6%95%B0%EF%BC%89" tabindex="-1">GNDVI（绿色归一化差异植被指数）</h3><p>GNDVI，即绿色归一化差异植被指数（Green Normalized Difference Vegetation Index），是一种遥感植被指数，主要用于评估植物的生长状况和健康。它通过比较近红外（NIR）波段和绿色（Green）波段的反射率来计算。</p><p>计算公式是：</p><p class='katex-block'><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi>G</mi><mi>N</mi><mi>D</mi><mi>V</mi><mi>I</mi><mo>=</mo><mfrac><mrow><mo stretchy="false">(</mo><mi>N</mi><mi>I</mi><mi>R</mi><mo>−</mo><mi>G</mi><mi>r</mi><mi>e</mi><mi>e</mi><mi>n</mi><mo stretchy="false">)</mo></mrow><mrow><mo stretchy="false">(</mo><mi>N</mi><mi>I</mi><mi>R</mi><mo>+</mo><mi>G</mi><mi>r</mi><mi>e</mi><mi>e</mi><mi>n</mi><mo stretchy="false">)</mo></mrow></mfrac></mrow><annotation encoding="application/x-tex">GNDVI = \frac{(NIR - Green)}{(NIR + Green)}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.68333em;vertical-align:0em;"></span><span class="mord mathnormal">G</span><span class="mord mathnormal" style="margin-right:0.10903em;">N</span><span class="mord mathnormal" style="margin-right:0.02778em;">D</span><span class="mord mathnormal" style="margin-right:0.22222em;">V</span><span class="mord mathnormal" style="margin-right:0.07847em;">I</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:2.363em;vertical-align:-0.936em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.427em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.10903em;">N</span><span class="mord mathnormal" style="margin-right:0.07847em;">I</span><span class="mord mathnormal" style="margin-right:0.00773em;">R</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mord mathnormal">G</span><span class="mord mathnormal" style="margin-right:0.02778em;">r</span><span class="mord mathnormal">e</span><span class="mord mathnormal">e</span><span class="mord mathnormal">n</span><span class="mclose">)</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.10903em;">N</span><span class="mord mathnormal" style="margin-right:0.07847em;">I</span><span class="mord mathnormal" style="margin-right:0.00773em;">R</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mord mathnormal">G</span><span class="mord mathnormal" style="margin-right:0.02778em;">r</span><span class="mord mathnormal">e</span><span class="mord mathnormal">e</span><span class="mord mathnormal">n</span><span class="mclose">)</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.936em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span></span></p><ul><li><strong>NIR (近红外波段)</strong>: 这个波段反映了植被对光的反射，健康的植被通常在NIR波段有较高的反射率。</li><li><strong>Green (绿色波段)</strong>: 绿色波段通常用来捕捉植物叶绿素的反射光，因为植物叶绿素主要吸收红色和蓝色光线，而反射绿色光。</li></ul><p>GNDVI值的范围通常介于-1和+1之间。这个范围的不同值代表了不同的植被特性：</p><ul><li><strong>负值</strong>：通常表示非植被区域，如水体或裸露地面。</li><li><strong>接近0的值</strong>：表明植被覆盖较少或植被健康状况较差。</li><li><strong>正值</strong>：表示存在植被，数值越高，通常意味着植被的密度和健康状况越好。</li></ul><p>GNDVI较高的正值表明植被具有较强的光合作用活性和较高的叶绿素含量，这通常与植物的良好健康状况相关。在农业和生态研究中，GNDVI被用来评估作物的生长状况和植被的整体健康状况。</p><p>GNDVI常用于监测植物的光合作用活性、氮含量以及整体健康状况。相比传统的NDVI，GNDVI在某些应用中可能更能准确反映植物生理状态，尤其是在评估植物叶绿素和氮含量方面。它被广泛应用于农业、林业和生态研究。</p><h3 id="ndre%EF%BC%88%E5%BD%92%E4%B8%80%E5%8C%96%E5%B7%AE%E5%BC%82%E7%BA%A2%E8%BE%B9%E6%8C%87%E6%95%B0%EF%BC%89" tabindex="-1">NDRE（归一化差异红边指数）</h3><p>NDRE，即归一化差异红边指数（Normalized Difference Red Edge Index），是一种用于监测植被健康和营养状况，尤其是氮素含量的遥感指数。它利用红边波段（Red Edge）和近红外波段（NIR）的反射率数据。</p><p class='katex-block'><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi>N</mi><mi>D</mi><mi>R</mi><mi>E</mi><mo>=</mo><mfrac><mrow><mo stretchy="false">(</mo><mi>N</mi><mi>I</mi><mi>R</mi><mo>−</mo><mi>R</mi><mi>e</mi><mi>d</mi><mi>E</mi><mi>d</mi><mi>g</mi><mi>e</mi><mo stretchy="false">)</mo></mrow><mrow><mo stretchy="false">(</mo><mi>N</mi><mi>I</mi><mi>R</mi><mo>+</mo><mi>R</mi><mi>e</mi><mi>d</mi><mi>E</mi><mi>d</mi><mi>g</mi><mi>e</mi><mo stretchy="false">)</mo></mrow></mfrac></mrow><annotation encoding="application/x-tex">NDRE = \frac{(NIR - RedEdge)}{(NIR + RedEdge)}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.68333em;vertical-align:0em;"></span><span class="mord mathnormal" style="margin-right:0.10903em;">N</span><span class="mord mathnormal" style="margin-right:0.02778em;">D</span><span class="mord mathnormal" style="margin-right:0.00773em;">R</span><span class="mord mathnormal" style="margin-right:0.05764em;">E</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:2.363em;vertical-align:-0.936em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.427em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.10903em;">N</span><span class="mord mathnormal" style="margin-right:0.07847em;">I</span><span class="mord mathnormal" style="margin-right:0.00773em;">R</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mord mathnormal" style="margin-right:0.00773em;">R</span><span class="mord mathnormal">e</span><span class="mord mathnormal">d</span><span class="mord mathnormal" style="margin-right:0.05764em;">E</span><span class="mord mathnormal">d</span><span class="mord mathnormal" style="margin-right:0.03588em;">g</span><span class="mord mathnormal">e</span><span class="mclose">)</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.10903em;">N</span><span class="mord mathnormal" style="margin-right:0.07847em;">I</span><span class="mord mathnormal" style="margin-right:0.00773em;">R</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mord mathnormal" style="margin-right:0.00773em;">R</span><span class="mord mathnormal">e</span><span class="mord mathnormal">d</span><span class="mord mathnormal" style="margin-right:0.05764em;">E</span><span class="mord mathnormal">d</span><span class="mord mathnormal" style="margin-right:0.03588em;">g</span><span class="mord mathnormal">e</span><span class="mclose">)</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.936em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span></span></p><p>为了生成 NDRE，需要以下数据：</p><ul><li><strong>NIR（近红外波段）</strong>: 反映植被的光合作用能力和健康状况。</li><li><strong>RedEdge（红边波段）</strong>: 这个波段位于红色和近红外之间，敏感于植被的生理和生化变化，尤其是叶绿素的变化。</li></ul><p>NDRE 的值范围通常在-1到+1之间，其中：</p><ul><li><strong>负值</strong>：通常表示非植被或水体。</li><li><strong>接近0的值</strong>：表明植被覆盖度较低或植被健康状况较差。</li><li><strong>正值</strong>：指示存在植被，数值越高表示植被的密度和健康状况越好。</li></ul><p>NDRE 特别适用于精确农业和生态监测，能够有效评估作物的营养状况，尤其是氮素水平的变化。</p><h3 id="ci-%EF%BC%88%E5%8F%B6%E7%BB%BF%E7%B4%A0%E6%8C%87%E6%95%B0%EF%BC%89" tabindex="-1">CI （叶绿素指数）</h3><p>CI，即叶绿素指数（Chlorophyll Index），是用于评估植被叶绿素含量的遥感指数。它反映了植被的健康状况和营养水平，特别是叶绿素含量。</p><p>为了生成CI，需要以下数据：</p><ul><li><strong>NIR（近红外波段）</strong>: 反映植被对光的反射，健康植被在NIR波段有较高的反射率。</li><li><strong>Red</strong> 表示红色波段的反射强度。</li><li><strong>RedEdge（红边波段）</strong>: 位于红色和近红外之间，敏感于植物叶片中的叶绿素变化。</li></ul><p>CI的计算公式是：</p><p class='katex-block'><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi>C</mi><mi>I</mi><mo>=</mo><mfrac><mrow><mo stretchy="false">(</mo><mi>N</mi><mi>I</mi><mi>R</mi><mi mathvariant="normal">/</mi><mi>R</mi><mi>e</mi><mi>d</mi><mi>E</mi><mi>d</mi><mi>g</mi><mi>e</mi><mo stretchy="false">)</mo><mo>−</mo><mn>1</mn></mrow><mrow><mo stretchy="false">(</mo><mi>N</mi><mi>I</mi><mi>R</mi><mi mathvariant="normal">/</mi><mi>R</mi><mi>e</mi><mi>d</mi><mo stretchy="false">)</mo><mo>−</mo><mn>1</mn></mrow></mfrac></mrow><annotation encoding="application/x-tex">CI = \frac{(NIR / RedEdge) - 1}{(NIR / Red) - 1}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.68333em;vertical-align:0em;"></span><span class="mord mathnormal" style="margin-right:0.07153em;">C</span><span class="mord mathnormal" style="margin-right:0.07847em;">I</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:2.363em;vertical-align:-0.936em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.427em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.10903em;">N</span><span class="mord mathnormal" style="margin-right:0.07847em;">I</span><span class="mord mathnormal" style="margin-right:0.00773em;">R</span><span class="mord">/</span><span class="mord mathnormal" style="margin-right:0.00773em;">R</span><span class="mord mathnormal">e</span><span class="mord mathnormal">d</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mord">1</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.10903em;">N</span><span class="mord mathnormal" style="margin-right:0.07847em;">I</span><span class="mord mathnormal" style="margin-right:0.00773em;">R</span><span class="mord">/</span><span class="mord mathnormal" style="margin-right:0.00773em;">R</span><span class="mord mathnormal">e</span><span class="mord mathnormal">d</span><span class="mord mathnormal" style="margin-right:0.05764em;">E</span><span class="mord mathnormal">d</span><span class="mord mathnormal" style="margin-right:0.03588em;">g</span><span class="mord mathnormal">e</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.936em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span></span></p><p>CI的值范围不固定，但通常较高的<strong>CI值表示更高的叶绿素含量</strong>，反映出植物更健康的状态。CI值较低可能表示植被健康状况较差或叶绿素含量较低。CI广泛用于农业和生态研究中，帮助监测和管理作物健康。</p><h3 id="evi-(%E5%A2%9E%E5%BC%BA%E5%9E%8B%E6%A4%8D%E8%A2%AB%E6%8C%87%E6%95%B0)" tabindex="-1">EVI (增强型植被指数)</h3><p>EVI，即增强型植被指数（Enhanced Vegetation Index），是一种用于分析植被反射率数据的遥感指数，特别在高植被区域表现更好。它通过减少大气影响（如气溶胶）和土壤背景的影响，提高了对植被信号的灵敏度。其计算公式为：</p><p class='katex-block'><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi>E</mi><mi>V</mi><mi>I</mi><mo>=</mo><mi>G</mi><mo>×</mo><mfrac><mrow><mo stretchy="false">(</mo><mi>N</mi><mi>I</mi><mi>R</mi><mo>−</mo><mi>R</mi><mi>e</mi><mi>d</mi><mo stretchy="false">)</mo></mrow><mrow><mo stretchy="false">(</mo><mi>N</mi><mi>I</mi><mi>R</mi><mo>+</mo><msub><mi>C</mi><mn>1</mn></msub><mo>×</mo><mi>R</mi><mi>e</mi><mi>d</mi><mo>−</mo><msub><mi>C</mi><mn>2</mn></msub><mo>×</mo><mi>B</mi><mi>l</mi><mi>u</mi><mi>e</mi><mo>+</mo><mi>L</mi><mo stretchy="false">)</mo></mrow></mfrac></mrow><annotation encoding="application/x-tex">EVI = G \times \frac{(NIR - Red)}{(NIR + C_1 \times Red - C_2 \times Blue + L)}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.68333em;vertical-align:0em;"></span><span class="mord mathnormal" style="margin-right:0.05764em;">E</span><span class="mord mathnormal" style="margin-right:0.22222em;">V</span><span class="mord mathnormal" style="margin-right:0.07847em;">I</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.76666em;vertical-align:-0.08333em;"></span><span class="mord mathnormal">G</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span></span><span class="base"><span class="strut" style="height:2.363em;vertical-align:-0.936em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.427em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.10903em;">N</span><span class="mord mathnormal" style="margin-right:0.07847em;">I</span><span class="mord mathnormal" style="margin-right:0.00773em;">R</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.07153em;">C</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.30110799999999993em;"><span style="top:-2.5500000000000003em;margin-left:-0.07153em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mord mathnormal" style="margin-right:0.00773em;">R</span><span class="mord mathnormal">e</span><span class="mord mathnormal">d</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.07153em;">C</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.30110799999999993em;"><span style="top:-2.5500000000000003em;margin-left:-0.07153em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mord mathnormal" style="margin-right:0.05017em;">B</span><span class="mord mathnormal" style="margin-right:0.01968em;">l</span><span class="mord mathnormal">u</span><span class="mord mathnormal">e</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mord mathnormal">L</span><span class="mclose">)</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.10903em;">N</span><span class="mord mathnormal" style="margin-right:0.07847em;">I</span><span class="mord mathnormal" style="margin-right:0.00773em;">R</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mord mathnormal" style="margin-right:0.00773em;">R</span><span class="mord mathnormal">e</span><span class="mord mathnormal">d</span><span class="mclose">)</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.936em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span></span></p><p>其中( NIR )、( Red )、和( Blue )分别是近红外、红色和蓝色波段的反射率，<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>G</mi></mrow><annotation encoding="application/x-tex">G</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.68333em;vertical-align:0em;"></span><span class="mord mathnormal">G</span></span></span></span>、<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>C</mi><mn>1</mn></msub></mrow><annotation encoding="application/x-tex">C_1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.83333em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.07153em;">C</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.30110799999999993em;"><span style="top:-2.5500000000000003em;margin-left:-0.07153em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>、<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>C</mi><mn>2</mn></msub></mrow><annotation encoding="application/x-tex">C_2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.83333em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.07153em;">C</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.30110799999999993em;"><span style="top:-2.5500000000000003em;margin-left:-0.07153em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>和<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>L</mi></mrow><annotation encoding="application/x-tex">L</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.68333em;vertical-align:0em;"></span><span class="mord mathnormal">L</span></span></span></span>是常数，用以调整公式的敏感度和光线散射的影响。</p><h3 id="savi-(%E5%9C%9F%E5%A3%A4%E8%B0%83%E6%95%B4%E6%A4%8D%E8%A2%AB%E6%8C%87%E6%95%B0)" tabindex="-1">SAVI (土壤调整植被指数)</h3><p>SAVI是为了减少土壤背景对植被指数的影响而设计的。它特别适用于裸土占比较高的地区。SAVI的计算公式为：</p><p class='katex-block'><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi>S</mi><mi>A</mi><mi>V</mi><mi>I</mi><mo>=</mo><mfrac><mrow><mo stretchy="false">(</mo><mn>1</mn><mo>+</mo><mi>L</mi><mo stretchy="false">)</mo><mo>×</mo><mo stretchy="false">(</mo><mi>N</mi><mi>I</mi><mi>R</mi><mo>−</mo><mi>R</mi><mi>e</mi><mi>d</mi><mo stretchy="false">)</mo></mrow><mrow><mo stretchy="false">(</mo><mi>N</mi><mi>I</mi><mi>R</mi><mo>+</mo><mi>R</mi><mi>e</mi><mi>d</mi><mo>+</mo><mi>L</mi><mo stretchy="false">)</mo></mrow></mfrac></mrow><annotation encoding="application/x-tex">SAVI = \frac{(1 + L) \times (NIR - Red)}{(NIR + Red + L)}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.68333em;vertical-align:0em;"></span><span class="mord mathnormal" style="margin-right:0.05764em;">S</span><span class="mord mathnormal">A</span><span class="mord mathnormal" style="margin-right:0.22222em;">V</span><span class="mord mathnormal" style="margin-right:0.07847em;">I</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:2.363em;vertical-align:-0.936em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.427em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.10903em;">N</span><span class="mord mathnormal" style="margin-right:0.07847em;">I</span><span class="mord mathnormal" style="margin-right:0.00773em;">R</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mord mathnormal" style="margin-right:0.00773em;">R</span><span class="mord mathnormal">e</span><span class="mord mathnormal">d</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mord mathnormal">L</span><span class="mclose">)</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mopen">(</span><span class="mord">1</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mord mathnormal">L</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.10903em;">N</span><span class="mord mathnormal" style="margin-right:0.07847em;">I</span><span class="mord mathnormal" style="margin-right:0.00773em;">R</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mord mathnormal" style="margin-right:0.00773em;">R</span><span class="mord mathnormal">e</span><span class="mord mathnormal">d</span><span class="mclose">)</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.936em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span></span></p><p>这里 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>L</mi></mrow><annotation encoding="application/x-tex">L</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.68333em;vertical-align:0em;"></span><span class="mord mathnormal">L</span></span></span></span> 是一个调整因子，通常取值为0.5，用以降低土壤背景的影响。</p><p>这些指数均依赖于对不同波段的反射率数据的特定数学处理，以此来评估植被的状况和变化。通过这些方法，研究人员和农业从业者可以更好地理解和管理植被健康和生产力。</p>]]>
                    </description>
                    <pubDate>Mon, 20 Nov 2023 15:49:04 CST</pubDate>
                </item>
                <item>
                    <title>
                        <![CDATA[Linux 下的文件管理]]>
                    </title>
                    <link>https://zhengyu.tech/archives/linux下的文件管理</link>
                    <description>
                            <![CDATA[<h2 id="%E7%B3%BB%E7%BB%9F%E6%96%87%E4%BB%B6%E7%9B%AE%E5%BD%95%E7%BB%93%E6%9E%84" tabindex="-1">系统文件目录结构</h2><p>Linux 文件系统的起点，即根目录（/），所有文件和目录都从这里开始。<br /><img src="/upload/2023/11/20231118001730.png" alt="" /></p><p>其中每一个都有具体的功能职责，以下是我们在使用 Linux 时经常打交道的目录，很有比较完整的了解其功能范围：</p><ul><li>/home：<strong>用户文件</strong>，针对每一个用户都专有一个以用户名命名的主目录</li><li>/opt：即 Optional，用于<strong>手动安装自己的软件</strong>，例如商业软件或大型游戏。</li><li>/dev：即 Device，这里存放了系统的<strong>外部设备</strong>，因为 Linux 下的设备是以文件的形式存在的。</li><li>/mnt：即Mount，通常我们会将一些硬盘<strong>临时手动</strong>挂载到该目录。</li><li>/etc：系统管理所需要的<strong>配置文件</strong>目录</li></ul><p>以下是一些通常我们不需要操作的目录，为系统自行维护的：</p><ul><li>/root：管理员目录。</li><li>/sbin：即 Super User，用于存放系统<strong>管理员的指令</strong>。</li><li>/boot：存放<strong>系统启动引导</strong>相关文件，</li><li>/bin：该目录下有在终端中使用的<strong>命令</strong>，例如 <code>cd</code> 等等。</li><li>/usr：存储系统默认的用户级应用程序、库和文档，例如<strong>包管理器</strong>（如 apt、yum）安装的软件。</li><li>/lib：即 Library，用于存放系统的<strong>动态连接共享库</strong>。</li><li>/lost+found：非法关机后，会产生记录文件</li><li>/proc：管理<strong>内存空间</strong>！虚拟的目录，是系统内存的映射，可以直接访问这个目录来，获取系统信息。</li><li>/media：通常用于<strong>自动挂载</strong>外部设备，例如U盘等，且在移除设备前最好先卸载设备 <code>unmount</code>。</li><li>/srv：存放服务启动之后需要提取的数据（不用服务器就是空）。</li><li>/sys：非常特殊且重要的目录，用于向用户空间暴露<strong>内核信息</strong>，例如设备的硬件信息。</li><li>/tmp：即 Temporary，存放一些<strong>临时文件</strong></li><li>/var：那些经常被修改的目录放在这个目录下。包括各种<strong>日志文件</strong>。</li><li>/run：临时文件系统，存储<strong>系统启动</strong>以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。</li></ul><h2 id="%E7%A3%81%E7%9B%98%E7%AE%A1%E7%90%86" tabindex="-1">磁盘管理</h2><p>一块硬盘，例如 2T SSD 的在使用 Sata3 接口接入设备后，如何才用存入数据，通常需要经历以下步骤：</p><ul><li>识别磁盘：使用 <code>lsblk</code> 或 <code>fdisk -l</code> 命令来识别新添加的磁盘。这些命令会显示所有已连接的磁盘及其分区。</li><li>创建分区：确保磁盘中数据已经备份，新建分区后会删除所有数据。使用分区工具如 fdisk 创建分区，并正确设置分区类型（主分区、扩展分区、逻辑分区等）和文件系统类型（EXT4、XFS、Btrfs、NTFS 等。）。</li><li>格式化分区：使用 mkfs 命令来格式化每个分区，创建文件系统。</li><li>挂载分区：手动创建一个挂载点（一个目录），如 <code>mkdir /mnt/newdisk</code>，使用 <code>mount</code> 命令<strong>临时挂载分区</strong>，如 <code>mount /dev/sdx1 /mnt/newdisk</code>，注意这是<strong>临时的</strong>，重启后会失效。要启动时自动挂载分区，需编辑 <code>/etc/fstab</code> 文件并添加相应的条目。</li></ul><h4 id="%E4%B8%BA%E4%BB%80%E4%B9%88%E8%A6%81%E5%88%86%E5%8C%BA%EF%BC%9F" tabindex="-1">为什么要分区？</h4><ul><li>组织性：分区使得用户能够更有效地组织和管理数据。例如，可以将操作系统、应用程序和用户数据放在不同的分区上。</li><li>安全性和数据恢复：如果操作系统损坏，分区可以限制问题的影响范围，便于恢复数据。</li><li>提高效率：不同类型的分区（如交换分区）可以提高系统的性能。</li><li>多操作系统：可以在同一硬盘上安装多个操作系统，每个操作系统在其自己的分区上运行。</li><li>且分区在物理层面上并不是隔离的，而是由分区表在逻辑上定义。</li></ul><h4 id="%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8-fdisk-%E5%88%A0%E9%99%A4%E4%B8%8E%E5%88%9B%E5%BB%BA%E5%88%86%E5%8C%BA%EF%BC%9F" tabindex="-1">如何使用 fdisk 删除与创建分区？</h4><p>启动 fdisk 功能：</p><pre><code class="language-">sudo fdisk /dev/sdx</code></pre><p>将 /dev/sdx 替换为你的硬盘设备名称。</p><p>1、删除分区<br />输入 <code>p</code> 来打印出当前分区表。<br />输入 <code>d</code> 来删除分区。如果有多个分区，系统会提示你选择一个分区号。<br />输入<code> w</code> 将更改写入磁盘。</p><p>2、创建分区<br />输入 <code>n</code> 创建新分区。按照提示操作，选择分区类型、起始和结束点。<br />输入 <code>t</code> 更改分区类型。<br />输入 <code>w</code> 保存更改。</p><h4 id="%E5%88%86%E5%8C%BA%E8%A1%A8%E7%B1%BB%E5%9E%8B" tabindex="-1">分区表类型</h4><ul><li>MBR（<strong>Master</strong> Boot Record）：<strong>老式</strong>的分区表格式，支持最多<strong>四个主分区</strong>，或三个主分区加一个扩展分区。</li><li>GPT（<strong>GUID</strong> Partition Table）：较新的分区表格式，支持多达<strong>128个分区</strong>，没有扩展分区的概念，兼容更大的磁盘。GPT与UEFI兼容性更好，目前主流也是GPT为主。</li></ul><h4 id="%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%E7%B1%BB%E5%9E%8B" tabindex="-1">文件系统类型</h4><p><strong>EXT4（Fourth Extended Filesystem）</strong></p><ul><li>Linux 系统上最常用的文件系统。</li><li>支持大型文件和大容量存储。</li><li>提供日志功能，增强数据恢复能力。</li></ul><p><strong>XFS</strong></p><ul><li>高性能的文件系统，适用于大型文件和数据库。</li><li>支持在线扩展和在线缩减。</li></ul><p><strong>Btrfs（B-Tree Filesystem）</strong></p><ul><li>现代文件系统，提供高级特性，如快照、数据压缩和多磁盘存储。</li><li>适合数据备份和大型存储池。</li></ul><p><strong>NTFS</strong></p><ul><li>Windows系统的标准文件系统。</li><li>在Linux上可通过NTFS-3G驱动进行读写访问。</li></ul><p><strong>FAT32</strong></p><ul><li>广泛兼容的老式文件系统，支持在几乎所有操作系统上读写。</li><li>文件大小和分区大小有限制。</li></ul><p><strong>exFAT</strong></p><ul><li>为大容量存储和大文件设计的文件系统。</li><li>比FAT32更现代，没有FAT32的大小限制。</li></ul><p><strong>Swap</strong></p><ul><li>Linux的交换分区不是文件系统，但它被视为一种“虚拟内存”。</li><li>当物理内存耗尽时，系统可以使用交换空间。</li></ul>]]>
                    </description>
                    <pubDate>Fri, 17 Nov 2023 23:50:22 CST</pubDate>
                </item>
                <item>
                    <title>
                        <![CDATA[SLAM的轨迹评价指标]]>
                    </title>
                    <link>https://zhengyu.tech/archives/slam-de-gui-ji-ping-jia-zhi-biao</link>
                    <description>
                            <![CDATA[<p>SLAM的轨迹评价是衡量定位精度的一个关键部分。以下是针对SLAM轨迹定义以及评价指标定义两方面展开：</p><h2 id="%E8%BD%A8%E8%BF%B9" tabindex="-1">轨迹</h2><p>目前常用的轨迹描述文件包括：kitti、tum。</p><h3 id="kitti-%E6%A0%BC%E5%BC%8F" tabindex="-1">kitti 格式</h3><p>KITTI是一个公开的数据集，主要用于自动驾驶和计算机视觉领域的研究。它由德国卡尔斯鲁厄理工学院(Karlsruhe Institute of Technology)和丰田研究所(TOYOTA Technological Institute at Chicago)联合创建。</p><p>同时，KITTI提供了一个在线评估服务器，允许研究者提交他们的算法结果并与其他方法进行比较。</p><p>但是，实际上 kitti 不是一种真正的轨迹格式，因为它没有<strong>时间戳</strong> - 它只包含姿势。这意味着当要将此格式的两个文件与指标进行比较时必须小心，因为姿势的<strong>数量必须完全相同</strong>。</p><p>文件的每一行都包含 3x4 齐次姿势矩阵 SE(4)  矩阵的前 3 行，这些矩阵展平为一行，每个值用空格分隔。例如，这个姿势矩阵：</p><pre><code class="language-">a b c de f g hi j k l0 0 0 1</code></pre><p>在 txt 文件中的展开形式为：</p><pre><code class="language-">a b c d e f g h i j k l</code></pre><h3 id="tum-%E6%A0%BC%E5%BC%8F" tabindex="-1">tum 格式</h3><p>TUM 是德国慕尼黑工业大学的英文缩写。因为其提供了一系列的数据集和基准测试，尤其是针对视觉测距和SLAM技术。其中，TUM RGB-D 数据集是一个非常流行的数据集，它提供了从RGB-D相机捕获的数据，用于评估各种视觉测距和SLAM方法。</p><p>其中，每行有 8 个条目，包含时间戳（以秒为单位）、位置和方向（以四元数为单位），每个值用空格分隔：</p><pre><code class="language-">timestamp x y z q_x q_y q_z q_w</code></pre><h2 id="%E8%AF%84%E4%BB%B7%E6%8C%87%E6%A0%87" tabindex="-1">评价指标</h2><p>常用评估轨迹误差的方式有两种：绝对轨迹误差（ATE）与相对轨迹误差（RPE）</p><h3 id="%E7%BB%9D%E5%AF%B9%E8%BD%A8%E8%BF%B9%E8%AF%AF%E5%B7%AE%EF%BC%88ate-%EF%BC%89" tabindex="-1">绝对轨迹误差（ATE ）</h3><p>ATE 考虑了估计轨迹和真实轨迹之间的全局误差。首先，我们需要对齐估计的轨迹与真实轨迹。通常，这可以通过找到最佳的刚体变换（平移和旋转）来实现。</p><p class='katex-block'><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mtext>ATE</mtext><mo>=</mo><msqrt><mrow><mfrac><mn>1</mn><mi>N</mi></mfrac><munderover><mo>∑</mo><mrow><mi>i</mi><mo>=</mo><mn>1</mn></mrow><mi>N</mi></munderover><mi mathvariant="normal">∥</mi><mi>T</mi><mo>⋅</mo><msubsup><mi>p</mi><mi>i</mi><mi>e</mi></msubsup><mo>−</mo><msubsup><mi>p</mi><mi>i</mi><mi>g</mi></msubsup><msubsup><mi mathvariant="normal">∥</mi><mn>2</mn><mn>2</mn></msubsup></mrow></msqrt></mrow><annotation encoding="application/x-tex">\text{ATE} = \sqrt{\frac{1}{N} \sum_{i=1}^{N} \| T \cdot p_i^e - p_i^g \|_2^2}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.68333em;vertical-align:0em;"></span><span class="mord text"><span class="mord">ATE</span></span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:3.3337550000000005em;vertical-align:-1.277669em;"></span><span class="mord sqrt"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.0560860000000005em;"><span class="svg-align" style="top:-5.293754999999999em;"><span class="pstrut" style="height:5.293755em;"></span><span class="mord" style="padding-left:1.056em;"><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.32144em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10903em;">N</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mop op-limits"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.8283360000000002em;"><span style="top:-1.872331em;margin-left:0em;"><span class="pstrut" style="height:3.05em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mrel mtight">=</span><span class="mord mtight">1</span></span></span></span><span style="top:-3.050005em;"><span class="pstrut" style="height:3.05em;"></span><span><span class="mop op-symbol large-op">∑</span></span></span><span style="top:-4.3000050000000005em;margin-left:0em;"><span class="pstrut" style="height:3.05em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.10903em;">N</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.277669em;"><span></span></span></span></span></span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord">∥</span><span class="mord mathnormal" style="margin-right:0.13889em;">T</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mord"><span class="mord mathnormal">p</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.6461920000000001em;"><span style="top:-2.4231360000000004em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span><span style="top:-3.0448000000000004em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">e</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.27686399999999994em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mord"><span class="mord mathnormal">p</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7823em;"><span style="top:-2.4231360000000004em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span><span style="top:-3.1809080000000005em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em;">g</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.276864em;"><span></span></span></span></span></span></span><span class="mord"><span class="mord">∥</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7959080000000001em;"><span style="top:-2.433692em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span><span style="top:-3.0448000000000004em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.26630799999999993em;"><span></span></span></span></span></span></span></span></span><span style="top:-4.0160860000000005em;"><span class="pstrut" style="height:5.293755em;"></span><span class="hide-tail" style="min-width:0.742em;height:3.373755em;"><svg width='400em' height='3.373755em' viewBox='0 0 400000 3373' preserveAspectRatio='xMinYMin slice'><path d='M702 80H40000040H742v3239l-4 4-4 4c-.667.7 -2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1h-12l-28-84c-16.667-52-96.667 -294.333-240-727l-212 -643 -85 170c-4-3.333-8.333-7.667-13 -13l-13-13l77-155 77-156c66 199.333 139 419.667219 661 l218 661zM702 80H400000v40H742z'/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.277669em;"><span></span></span></span></span></span></span></span></span></span></p><p>其中：</p><ul><li><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>T</mi></mrow><annotation encoding="application/x-tex">T</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.68333em;vertical-align:0em;"></span><span class="mord mathnormal" style="margin-right:0.13889em;">T</span></span></span></span>：从估计轨迹到真实轨迹的最佳刚体变换（包括旋转和平移）。</li><li><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msubsup><mi>p</mi><mi>i</mi><mi>e</mi></msubsup></mrow><annotation encoding="application/x-tex">p_i^e</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.923056em;vertical-align:-0.258664em;"></span><span class="mord"><span class="mord mathnormal">p</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.664392em;"><span style="top:-2.441336em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">e</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.258664em;"><span></span></span></span></span></span></span></span></span></span>：估计轨迹的第 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.65952em;vertical-align:0em;"></span><span class="mord mathnormal">i</span></span></span></span> 个位置。</li><li><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msubsup><mi>p</mi><mi>i</mi><mi>g</mi></msubsup></mrow><annotation encoding="application/x-tex">p_i^g</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.059164em;vertical-align:-0.276864em;"></span><span class="mord"><span class="mord mathnormal">p</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7823em;"><span style="top:-2.4231360000000004em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span><span style="top:-3.1809080000000005em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em;">g</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.276864em;"><span></span></span></span></span></span></span></span></span></span>：真实轨迹的第 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.65952em;vertical-align:0em;"></span><span class="mord mathnormal">i</span></span></span></span> 个位置。</li><li><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>N</mi></mrow><annotation encoding="application/x-tex">N</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.68333em;vertical-align:0em;"></span><span class="mord mathnormal" style="margin-right:0.10903em;">N</span></span></span></span>：轨迹中的位置点的总数。</li><li><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="normal">∥</mi><mo>⋅</mo><msub><mi mathvariant="normal">∥</mi><mn>2</mn></msub></mrow><annotation encoding="application/x-tex">\| \cdot \|_2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">∥</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord"><span class="mord">∥</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.30110799999999993em;"><span style="top:-2.5500000000000003em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>表示欧氏范数。</li></ul><p>在计算ATE之前，确保估计轨迹和真实轨迹具有相同的时间戳，并已经进行了恰当的对齐。</p><h3 id="%E7%9B%B8%E5%AF%B9%E8%BD%A8%E8%BF%B9%E8%AF%AF%E5%B7%AE%EF%BC%88rpe-%EF%BC%89" tabindex="-1">相对轨迹误差（RPE ）</h3><p>RPE 与ATE（绝对轨迹误差）不同，RTE更关心局部轨迹的精度和连续性，而不是整个轨迹的全局误差。</p><p>RTE通常通过计算两个相邻的位姿之间的相对运动来得到。给定一个<strong>时间窗口长度</strong> Δt，RTE会对所有相距 Δt 的位姿对进行评估，以评估这些位姿对之间的相对误差。</p><p>相对轨迹误差（RTE）可以定义为所有对应相对位姿变换之间的误差的均值或均方根：</p><p class='katex-block'><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mtext>RTE</mtext><mo>=</mo><msqrt><mrow><mfrac><mn>1</mn><mrow><mi>N</mi><mo>−</mo><mi mathvariant="normal">Δ</mi><mi>t</mi></mrow></mfrac><munderover><mo>∑</mo><mrow><mi>i</mi><mo>=</mo><mn>1</mn></mrow><mrow><mi>N</mi><mo>−</mo><mi mathvariant="normal">Δ</mi><mi>t</mi></mrow></munderover><mi mathvariant="normal">∥</mi><mi>δ</mi><msubsup><mi>p</mi><mi>i</mi><mi>e</mi></msubsup><mo>⊖</mo><mi>δ</mi><msubsup><mi>p</mi><mi>i</mi><mi>g</mi></msubsup><msubsup><mi mathvariant="normal">∥</mi><mn>2</mn><mn>2</mn></msubsup></mrow></msqrt></mrow><annotation encoding="application/x-tex">\text{RTE} = \sqrt{\frac{1}{N-\Delta t} \sum_{i=1}^{N-\Delta t} \| \delta p_i^e \ominus \delta p_i^g \|_2^2}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.68333em;vertical-align:0em;"></span><span class="mord text"><span class="mord">RTE</span></span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:3.3337550000000005em;vertical-align:-1.277669em;"></span><span class="mord sqrt"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.0560860000000005em;"><span class="svg-align" style="top:-5.293755000000001em;"><span class="pstrut" style="height:5.293755000000001em;"></span><span class="mord" style="padding-left:1.056em;"><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.32144em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10903em;">N</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mord">Δ</span><span class="mord mathnormal">t</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.7693300000000001em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mop op-limits"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.8283360000000004em;"><span style="top:-1.872331em;margin-left:0em;"><span class="pstrut" style="height:3.05em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mrel mtight">=</span><span class="mord mtight">1</span></span></span></span><span style="top:-3.050005em;"><span class="pstrut" style="height:3.05em;"></span><span><span class="mop op-symbol large-op">∑</span></span></span><span style="top:-4.300005em;margin-left:0em;"><span class="pstrut" style="height:3.05em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.10903em;">N</span><span class="mbin mtight">−</span><span class="mord mtight">Δ</span><span class="mord mathnormal mtight">t</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.277669em;"><span></span></span></span></span></span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord">∥</span><span class="mord mathnormal" style="margin-right:0.03785em;">δ</span><span class="mord"><span class="mord mathnormal">p</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.6461920000000001em;"><span style="top:-2.4231360000000004em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span><span style="top:-3.0448000000000004em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">e</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.27686399999999994em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">⊖</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mord mathnormal" style="margin-right:0.03785em;">δ</span><span class="mord"><span class="mord mathnormal">p</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7823em;"><span style="top:-2.4231360000000004em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span><span style="top:-3.1809080000000005em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em;">g</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.276864em;"><span></span></span></span></span></span></span><span class="mord"><span class="mord">∥</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7959080000000001em;"><span style="top:-2.433692em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span><span style="top:-3.0448000000000004em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.26630799999999993em;"><span></span></span></span></span></span></span></span></span><span style="top:-4.016086000000001em;"><span class="pstrut" style="height:5.293755000000001em;"></span><span class="hide-tail" style="min-width:0.742em;height:3.3737550000000005em;"><svg width='400em' height='3.3737550000000005em' viewBox='0 0 400000 3373' preserveAspectRatio='xMinYMin slice'><path d='M702 80H40000040H742v3239l-4 4-4 4c-.667.7 -2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1h-12l-28-84c-16.667-52-96.667 -294.333-240-727l-212 -643 -85 170c-4-3.333-8.333-7.667-13 -13l-13-13l77-155 77-156c66 199.333 139 419.667219 661 l218 661zM702 80H400000v40H742z'/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.277669em;"><span></span></span></span></span></span></span></span></span></span></p><p>其中：</p><ul><li><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>δ</mi><msubsup><mi>p</mi><mi>i</mi><mi>e</mi></msubsup></mrow><annotation encoding="application/x-tex">\delta p_i^e</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.953104em;vertical-align:-0.258664em;"></span><span class="mord mathnormal" style="margin-right:0.03785em;">δ</span><span class="mord"><span class="mord mathnormal">p</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.664392em;"><span style="top:-2.441336em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">e</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.258664em;"><span></span></span></span></span></span></span></span></span></span>：从估计轨迹中第i个位姿到第i+Δt个位姿的相对变换。</li><li><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>δ</mi><msubsup><mi>p</mi><mi>i</mi><mi>g</mi></msubsup></mrow><annotation encoding="application/x-tex">\delta p_i^g</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.059164em;vertical-align:-0.276864em;"></span><span class="mord mathnormal" style="margin-right:0.03785em;">δ</span><span class="mord"><span class="mord mathnormal">p</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7823em;"><span style="top:-2.4231360000000004em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span><span style="top:-3.1809080000000005em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em;">g</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.276864em;"><span></span></span></span></span></span></span></span></span></span>：从真实轨迹中第i个位姿到第i+Δt个位姿的相对变换。</li><li><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>N</mi></mrow><annotation encoding="application/x-tex">N</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.68333em;vertical-align:0em;"></span><span class="mord mathnormal" style="margin-right:0.10903em;">N</span></span></span></span>：轨迹中的位姿点的总数。</li><li><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo>⊖</mo></mrow><annotation encoding="application/x-tex">\ominus</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.66666em;vertical-align:-0.08333em;"></span><span class="mord">⊖</span></span></span></span>：表示位姿之间的差异操作，通常是指SE(3)空间中的位姿之间的相对变换。</li></ul><h2 id="evo%E5%B7%A5%E5%85%B7" tabindex="-1">evo工具</h2><p><a href="https://github.com/MichaelGrupp/evo" target="_blank">evo 工具</a>是一个用于评估测程法和SLAM的Python包</p><p>安装：</p><pre><code class="language-">pip install evo --upgrade --no-binary evo</code></pre><h3 id="%E7%BB%98%E5%88%B6-kitti-%E6%95%B0%E6%8D%AE" tabindex="-1">绘制 kitti 数据</h3><p>计算 APE 的同时绘制轨迹误差图</p><pre><code class="language-">evo_ape kitti KITTI_00_gt.txt KITTI_00_ORB.txt -va --plot --plot_mode xz</code></pre><p>同时绘制多条曲线</p><pre><code class="language-">evo_traj kitti KITTI_00_ORB.txt KITTI_00_SPTAM.txt --ref=KITTI_00_gt.txt -p --plot_mode=xz</code></pre><h3 id="%E7%BB%98%E5%88%B6-tum-%E6%95%B0%E6%8D%AE" tabindex="-1">绘制 TUM 数据</h3><p>计算 APE 的同时绘制轨迹误差图</p><pre><code class="language-">evo_ape tum fr2_desk_groundtruth.txt  fr2_desk_ORB.txt -va --plot --plot_mode xz</code></pre><p>同时绘制多条曲线</p><pre><code class="language-">evo_traj tum freiburg1_xyz-ORB_kf_mono.txt freiburg1_xyz-rgbdslam.txt  --ref=freiburg1_xyz-groundtruth.txt -va --plot --plot_mode xy</code></pre>]]>
                    </description>
                    <pubDate>Sat, 28 Oct 2023 12:31:04 CST</pubDate>
                </item>
                <item>
                    <title>
                        <![CDATA[VsCode 使用汇总]]>
                    </title>
                    <link>https://zhengyu.tech/archives/vscode-shi-yong-hui-zong</link>
                    <description>
                            <![CDATA[<h3 id="c%2B%2B%E5%A4%B4%E6%96%87%E4%BB%B6%E8%87%AA%E5%8A%A8%E6%A3%80%E7%B4%A2" tabindex="-1">C++头文件自动检索</h3><p>为了方便代码检索，以及不是一片红，头文件自动检索是十分必要的。</p><ul><li>安装 C/C++ 扩展，扩展将为每个工作空间创建一个 .vscode/c_cpp_properties.json 文件。</li><li>如果项目使用的是 CMake 进行编译，在 CMakeLists.txt 中，添加以下行：</li></ul><pre><code class="language-">set(CMAKE_EXPORT_COMPILE_COMMANDS ON)</code></pre><ul><li>然后，在 .vscode/c_cpp_properties.json 文件中，设置 compileCommands 为该文件的路径，如：</li></ul><pre><code class="language-">&quot;compileCommands&quot;: &quot;${workspaceFolder}/build/compile_commands.json&quot;</code></pre><ul><li>这会将编译过中的所有依赖和头文件收集起来，例如：</li></ul><pre><code class="language-">{  &quot;directory&quot;: &quot;/home/sibl/Codes/MultiKinectCalib/build&quot;,  &quot;command&quot;: &quot;/usr/bin/aarch64-linux-gnu-g++ -DDISABLE_LIBUSB_1_0 -DDISABLE_PCAP -DDISABLE_PNG -Dqh_QHpointer -DvtkRenderingContext2D_AUTOINIT=\&quot;1(vtkRenderingContextOpenGL2)\&quot; -DvtkRenderingCore_AUTOINIT=\&quot;3(vtkInteractionStyle,vtkRenderingFreeType,vtkRenderingOpenGL2)\&quot; -I/home/sibl/Codes/MultiKinectCalib/include -isystem /usr/include/vtk-7.1 -isystem /usr/include/freetype2 -isystem /usr/include/opencv4 -isystem /usr/include/pcl-1.10 -isystem /usr/include/eigen3 -isystem /usr/include/ni -isystem /usr/include/openni2   -Wall -g -o CMakeFiles/main.dir/src/main.cpp.o -c /home/sibl/Codes/MultiKinectCalib/src/main.cpp&quot;,  &quot;file&quot;: &quot;/home/sibl/Codes/MultiKinectCalib/src/main.cpp&quot;,  &quot;output&quot;: &quot;CMakeFiles/main.dir/src/main.cpp.o&quot;}</code></pre><h3 id="conda%E7%8E%AF%E5%A2%83%E6%97%A0%E6%B3%95%E6%A3%80%E7%B4%A2" tabindex="-1">conda环境无法检索</h3><p>在vscode直接执行 python 文件时出现报错，无法检索 conda：</p><pre><code class="language-">conda : 无法将“conda”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写，如果包括路径，请确保路径正确，然后再试一次。所在位置 行:1 字符: 1+ conda activate dp+ ~~~~~    + CategoryInfo          : ObjectNotFound: (conda:String) [], CommandNotFoundException    + FullyQualifiedErrorId : CommandNotFoundException</code></pre><p>这是因为我们的 powershell 没有设置好，首先在 cmd 终端中执行：</p><pre><code class="language-">conda init powershell</code></pre><p>另外，请确保你的 PowerShell 的执行策略允许运行这个 profile.ps1 脚本：</p><pre><code class="language-">Set-ExecutionPolicy RemoteSigned -Scope CurrentUser</code></pre>]]>
                    </description>
                    <pubDate>Fri, 06 Oct 2023 09:12:16 CST</pubDate>
                </item>
                <item>
                    <title>
                        <![CDATA[传感器校准方法汇总]]>
                    </title>
                    <link>https://zhengyu.tech/archives/传感器校准方法汇总</link>
                    <description>
                            <![CDATA[<h2 id="%E7%BB%BC%E5%90%88%E5%B7%A5%E5%85%B7%E5%8C%85%EF%BC%9A" tabindex="-1">综合工具包：</h2><p>Opencalib：<a href="https://github.com/PJLab-ADG/SensorsCalibration" target="_blank">github</a></p><ul><li>一个简单的校准工具箱和开源项目，主要用于自动驾驶中的传感器校准。</li><li>校准工具箱可用于校准 IMU、激光雷达、摄像头和雷达等传感器。</li></ul><h2 id="rgb-intrinsice-%EF%BC%9A" tabindex="-1">RGB Intrinsice ：</h2><p>ROS_camera_calibration：<a href="http://wiki.ros.org/camera_calibration/Tutorials/MonocularCalibration" target="_blank">github</a></p><p>Calibration-ZhangZhengyou-Method：<a href="https://github.com/zhiyuanyou/Calibration-ZhangZhengyou-Method" target="_blank">github</a></p><ul><li>相机标定之张正友标定法数学原理详解(python源码)</li><li>可用于校正 RGB 和 IR 相机</li></ul><h2 id="rgb2lidar%EF%BC%9A" tabindex="-1">RGB2LiDAR：</h2><p>cam_lidar_calib：<a href="https://github.com/SubMishMar/cam_lidar_calib" target="_blank">github</a></p><ul><li>使用 OpenCV 获取相机和棋盘之间的相对变换，并提供了棋盘平面表面法线的信息。</li><li>再对激光雷达在棋盘上的点进行聚类，同样能够获取棋盘平面表面法线的信息。</li><li>最后基于两个法线向量优化最小目标函数，获得相机与雷达之间的相对变换。需要提供3个以上的约束会有效</li></ul><p>livox_camera_lidar_calibration：<a href="https://github.com/Livox-SDK/livox_camera_lidar_calibration/tree/master" target="_blank">github</a></p><ul><li>得益于Livox激光雷达的非重复扫描特性，我们可以更容易地找到高密度点云中角落的准确位置</li><li>该方法首先在记录的RGB图片与雷达点云中手动顺序选择目标标定板（无编码）的四个角</li><li>基于相机的内参，计算相机与雷达之间的相对变换</li></ul><p>direct_visual_lidar_calibration ICRA2023：<a href="https://github.com/koide3/direct_visual_lidar_calibration" target="_blank">github</a></p><ul><li>实现了无校正目标，可处理各种激光雷达与摄像头投影模型。并且只需少数帧即可，过程全自动。</li><li>首先对于稀疏的旋转式雷达点云，使用 CT-ICP 对移动后的点云进行拼接累计增加密度，在将点云投影到2D强度图像</li><li>通过 SuperGlue 找到 RGB 与雷达强度图之间的关键点对应关系后，使用 RANSAC 对特征点对进行筛选</li><li>最后基于 NID 最小化进行精细化优化变换矩阵</li></ul><p>lidar_camera_calib_hku：<a href="https://github.com/hku-mars/livox_camera_calib" target="_blank">github</a></p><ul><li>在无目标环境中对高分辨率激光雷达（如 Livox）和摄像机之外在校准工具</li><li>利用雷达所输出累计的高密度点云提取边界信息，再与RGB中的边界信息匹配后获得变换矩阵</li></ul><h2 id="rgb2imu%EF%BC%9A" tabindex="-1">RGB2IMU：</h2><p>Kalibr：<a href="https://github.com/ethz-asl/kalibr" target="_blank">github</a></p><ul><li>Kalibr使用一个非线性优化框架来估计变换参数。通过最小化投影误差和其他相关误差来得到最佳的校准参数。</li><li>对于IMU和相机的校准，Kalibr特别关注时间同步，这是因为IMU和相机的采样率通常不同，而且可能存在时间偏移。</li><li>Kalibr设计为模块化的，允许对单个相机、多相机系统或相机与IMU系统进行校准。</li></ul><h2 id="rgbd2rgbd%EF%BC%9A" tabindex="-1">RGBD2RGBD：</h2><p>k4a-calibration：<a href="https://github.com/stytim/k4a-calibration" target="_blank">github</a></p><ul><li>首先利用marker计算相机之间的初始位姿估计，再利用每个相机输出的RGB点云进行ICP优化。</li></ul><h2 id="armrobot2rgb" tabindex="-1">ArmRobot2RGB</h2><p>easy_handeye：</p>]]>
                    </description>
                    <pubDate>Thu, 14 Sep 2023 16:35:34 CST</pubDate>
                </item>
                <item>
                    <title>
                        <![CDATA[【论文阅读：激光SLAM】 LIO-SAM: Tightly-coupled Lidar Inertial Odometry via Smoothing and Mapping]]>
                    </title>
                    <link>https://zhengyu.tech/archives/lunwenyueduliosam</link>
                    <description>
                            <![CDATA[<div align="center"> <font size="5"><b>LIO-SAM: Tightly-coupled Lidar Inertial Odometry viaSmoothing and Mapping</b></font></div><div align="center" style="font-size:18px; margin-bottom:4px; margin-top:4px; ">   <a href="https://github.com/TixiaoShan/LIO-SAM">代码</a>     ||      <a href="https://arxiv.org/abs/2007.00258">论文</a></div><h2 id="%E6%91%98%E8%A6%81" tabindex="-1">摘要</h2><p>论文提出了一种通过<strong>平滑和映射</strong>（SAM：smoothing and mapping）紧耦合的激光雷达惯性里程计（LIO-SAM），可实现高精度、实时的移动机器人轨迹估计和地图构建。</p><p>LIO-SAM 将<strong>激光雷达</strong>-<strong>惯性</strong>里程测量置于<strong>因子图</strong>之上，允许将来自不同来源的大量<strong>相对和绝对测量</strong>（包括环路闭合）作为因子纳入系统。</p><p>来自惯性测量单元（IMU）<strong>预积分</strong>的<strong>估计运动</strong>会对点云进行<strong>纠偏</strong>，并生成用于雷达里程计优化的<strong>初始值</strong>。获得的雷达里程计又用于估算<strong>惯性单元</strong>的偏置（bias）。</p><p>为了确保高性能的实时性，我们将当前帧-<strong>局部地图</strong>匹配用于姿态优化，而不是将当前帧-<strong>全局地图</strong>匹配。在<strong>局部尺度</strong>而非全局尺度上进行扫描匹配可显著提高系统的实时性能，选择性地引入<strong>关键帧和高效的滑动窗口</strong>方法也是如此，这种方法将新的关键帧注册到一组固定大小的先前 &quot;<strong>子关键帧组</strong> &quot;中。</p><h2 id="%E7%AE%80%E4%BB%8B" tabindex="-1">简介</h2><ul><li>状态估计、定位和绘图是智能移动机器人取得成功的基本前提，是反馈控制、避障和规划等许多功能所必需的。利用基于视觉和激光雷达的传感技术，人们致力于实现高性能的实时同步定位和绘图（SLAM），以支持移动机器人的六自由度状态估计。</li><li><strong>基于视觉</strong>的方法通常使用单目或立体摄像机，通过对连续图像进行三角测量来确定摄像机的运动特征。虽然基于视觉的方法特别适用于地点识别，但它们对<strong>初始化、光照和范围的敏感性</strong>使其在单独用于支持自主导航系统时并不可靠。</li><li>另一方面，基于激光雷达的方法在很大程度上<strong>不受光照变化的影响</strong>。尤其是最近出现了长距离、高分辨率的三维激光雷达，如 Velodyne VLS-128 和 Ouster OS1-128，激光雷达更适合直接捕捉三维空间环境的细节。因此，本文重点讨论<strong>基于激光雷达</strong>的状态估计和绘图方法。</li></ul><p>在过去二十年中，提出了许多基于激光雷达的状态估计和测绘方法。其中，用于低漂移和实时状态估计与测绘的激光雷达里程测量与测绘（<strong>LOAM</strong>）方法是应用最广泛的方法之一。</p><ul><li>LOAM 系列算法使用激光雷达和惯性测量单元 (IMU)，达到了最先进的性能，自其在 KITTI 里程测量基准网站上发布以来，一直被评为基于激光雷达的顶级方法。</li><li>尽管取得了成功，LOAM 仍然存在一些局限性–由于其数据保存在全局体素图中，因此通常<strong>难以执行闭环检测</strong>，也<strong>难以结合其他绝对测量数据</strong>（如 GPS）<strong>进行姿态校正</strong>。</li><li>当这种体素图在特征丰富的环境中变得密集时，其在线优化过程的效率就会降低。由于 LOAM 的核心是基于扫描匹配的方法，因此在大规模测试中也会出现漂移。</li></ul><p>在本文中，提出了一个通过平滑和映射实现紧耦合激光雷达惯性里程测量的框架（LIO-SAM），以解决上述问题。</p><ul><li>我们为点云<strong>去畸变</strong>假设了一个非线性运动模型，在激光雷达扫描过程中使用原始的 IMU 测量来估计传感器的运动。除了对点云进行去畸变外，<strong>运动估计</strong>还可作为雷达里程计优化的初始值。</li><li>获得的雷达里程计可用于估计<strong>因子图中 IMU 的偏差</strong>。通过为机器人轨迹估算引入全局因子图，我们可以利用激光雷达和 IMU 测量有效地进行传感器融合，在机器人姿势中加入位置识别，并在可用时引入 <strong>GPS 定位和罗盘航向</strong>等<strong>绝对测量</strong>。这些来自不同来源的因子集合将用于<strong>联合图优化</strong>。</li><li>此外，我们将当前帧-<strong>局部地图</strong>匹配，用于姿势优化，而不是像 LOAM 那样将当前帧-全局地图匹配。在局部尺度而非全局尺度上进行扫描匹配大大提高了系统的实时性能，选择性地引入关键帧和高效的滑动窗口方法也是如此，这种方法将新的关键帧注册到一组固定大小的先前 &quot;<strong>子关键帧组</strong> &quot;中。</li></ul><h2 id="%E7%9B%B8%E5%85%B3%E5%B7%A5%E4%BD%9C" tabindex="-1">相关工作</h2><p>激光雷达测距通常是通过使用 ICP 和 GICP 等扫描<strong>点云匹配</strong>方法找到两个连续帧之间的相对变换。</p><p>由于计算效率高，<strong>基于特征</strong>的匹配方法已成为替代全点云匹配的流行方法。例如，<strong>基于平面</strong>的配准方法，假定在结构化环境中进行操作，从点云中提取平面，并通过求解最小二乘问题对其进行匹配。<strong>基于线</strong>的测距方法，线段从原始点云中生成，随后用于配准。</p><p>然而，由于目前三维激光雷达的<strong>旋转机制</strong>和<strong>传感器的运动</strong>，扫描点云往往是畸变的。仅使用激光雷达进行姿态估计并不理想，因为使用畸变的点云或特征进行注册最终会导致<strong>较大的漂移</strong>。</p><p>因此，激光雷达通常与 IMU 和 GPS 等其他传感器<strong>结合使用</strong>，用于状态估计和绘图。这种利用传感器融合的设计方案通常可分为两类：<strong>松耦合</strong>融合和<strong>紧耦合</strong>融合。</p><ul><li>在 <strong>LOAM</strong> 中，IMU 被引入对激光雷达扫描进行<strong>去畸变</strong>，并为扫描匹配提供运动先验。但是，IMU 并不参与算法的<strong>优化过程</strong>。因此，LOAM 可以归类为一种<strong>松耦合</strong>方法。LeGO-LOAM 对 IMU 测量的融合与 LOAM 相同。</li><li>使用<strong>扩展卡尔曼滤波器</strong>（EKF）进行<strong>松耦合</strong>融合是一种更为流行的方法。例如，在机器人状态估计的优化阶段使用 EKF 对<strong>激光雷达、IMU 和 GPS</strong> 的测量输出（即分开计算，仅对结果进行 EKF）进行融合。</li></ul><p><strong>紧耦合</strong>系统通常能提高精度，是目前研究的重点方向。</p><ul><li><strong>R-LINS</strong> 使用<strong>误差状态卡尔曼滤波器</strong>，以<strong>紧耦合</strong>的方式递归修正机器人的状态估计。但由于缺乏用于状态估计的其他可用传感器，它在长时间导航过程中会出现漂移。</li><li><strong>LIOM</strong> <strong>紧耦合</strong>联合优化了激光雷达和IMU的测量结果，与 LOAM 相比，LIOM 能达到相似甚至更高的精度。由于 LIOM 是为处理所有传感器数据而设计的，因此无法实现实时性能。</li></ul><h2 id="%E6%96%B9%E6%B3%95%E8%AE%BA" tabindex="-1">方法论</h2><h3 id="%E7%B3%BB%E7%BB%9F%E6%A6%82%E8%BF%B0" tabindex="-1">系统概述</h3><p><img src="/upload/2023/08/20230808174918.png" alt="" /></p><p>首先定义在整个论文中使用的框架和符号。我们将世界坐标系表示为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="bold">W</mi></mrow><annotation encoding="application/x-tex">\mathbf{W}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.68611em;vertical-align:0em;"></span><span class="mord"><span class="mord mathbf" style="margin-right:0.01597em;">W</span></span></span></span></span>，机器人本体坐标系表示为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="bold">B</mi></mrow><annotation encoding="application/x-tex">\mathbf{B}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.68611em;vertical-align:0em;"></span><span class="mord"><span class="mord mathbf">B</span></span></span></span></span>，为方便起见，我们还假设 IMU 坐标系与机器人本体坐标系重合。机器人状态 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="bold">x</mi></mrow><annotation encoding="application/x-tex">\mathbf{x}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.44444em;vertical-align:0em;"></span><span class="mord"><span class="mord mathbf">x</span></span></span></span></span> 可以写成:</p><p class='katex-block'><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi mathvariant="bold">x</mi><mo>=</mo><msup><mrow><mo fence="true">[</mo><msup><mi mathvariant="bold">R</mi><mi mathvariant="bold">T</mi></msup><mo separator="true">,</mo><msup><mi mathvariant="bold">p</mi><mi mathvariant="bold">T</mi></msup><mo separator="true">,</mo><msup><mi mathvariant="bold">v</mi><mi mathvariant="bold">T</mi></msup><mo separator="true">,</mo><msup><mi mathvariant="bold">b</mi><mi mathvariant="bold">T</mi></msup><mo fence="true">]</mo></mrow><mi mathvariant="bold">T</mi></msup><mo separator="true">,</mo></mrow><annotation encoding="application/x-tex">\mathbf{x}=\left[\mathbf{R}^{\mathbf{T}}, \mathbf{p}^{\mathbf{T}}, \mathbf{v}^{\mathbf{T}}, \mathbf{b}^{\mathbf{T}}\right]^{\mathbf{T}},</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.44444em;vertical-align:0em;"></span><span class="mord"><span class="mord mathbf">x</span></span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:1.4764639999999998em;vertical-align:-0.35001em;"></span><span class="minner"><span class="minner"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size1">[</span></span><span class="mord"><span class="mord"><span class="mord mathbf">R</span></span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8932769999999999em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathbf mtight">T</span></span></span></span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord"><span class="mord"><span class="mord mathbf">p</span></span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8932769999999999em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathbf mtight">T</span></span></span></span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord"><span class="mord"><span class="mord mathbf" style="margin-right:0.01597em;">v</span></span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8932769999999999em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathbf mtight">T</span></span></span></span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord"><span class="mord"><span class="mord mathbf">b</span></span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8932769999999999em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathbf mtight">T</span></span></span></span></span></span></span></span></span></span><span class="mclose delimcenter" style="top:0em;"><span class="delimsizing size1">]</span></span></span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:1.1264539999999998em;"><span style="top:-3.346177em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathbf mtight">T</span></span></span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mpunct">,</span></span></span></span></span></p><p>其中 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="bold">R</mi><mo>∈</mo><mi>S</mi><mi>O</mi><mo stretchy="false">(</mo><mn>3</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\mathbf{R} \in S O(3)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.72521em;vertical-align:-0.0391em;"></span><span class="mord"><span class="mord mathbf">R</span></span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">∈</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.05764em;">S</span><span class="mord mathnormal" style="margin-right:0.02778em;">O</span><span class="mopen">(</span><span class="mord">3</span><span class="mclose">)</span></span></span></span> 是旋转矩阵， <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="bold">p</mi><mo>∈</mo><msup><mi mathvariant="double-struck">R</mi><mn>3</mn></msup></mrow><annotation encoding="application/x-tex">\mathbf{p} \in \mathbb{R}^3</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7335400000000001em;vertical-align:-0.19444em;"></span><span class="mord"><span class="mord mathbf">p</span></span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">∈</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.8141079999999999em;vertical-align:0em;"></span><span class="mord"><span class="mord"><span class="mord mathbb">R</span></span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141079999999999em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">3</span></span></span></span></span></span></span></span></span></span></span> 是位移向量，<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="bold">v</mi></mrow><annotation encoding="application/x-tex">\mathbf{v}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.44444em;vertical-align:0em;"></span><span class="mord"><span class="mord mathbf" style="margin-right:0.01597em;">v</span></span></span></span></span> 为速度，<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="bold">b</mi></mrow><annotation encoding="application/x-tex">\mathbf{b}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.69444em;vertical-align:0em;"></span><span class="mord"><span class="mord mathbf">b</span></span></span></span></span> 为 IMU 的偏置。从 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="bold">B</mi></mrow><annotation encoding="application/x-tex">\mathbf{B}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.68611em;vertical-align:0em;"></span><span class="mord"><span class="mord mathbf">B</span></span></span></span></span> 到 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="bold">W</mi></mrow><annotation encoding="application/x-tex">\mathbf{W}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.68611em;vertical-align:0em;"></span><span class="mord"><span class="mord mathbf" style="margin-right:0.01597em;">W</span></span></span></span></span> 的坐标变换表示为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="bold">T</mi><mo>=</mo><mo stretchy="false">[</mo><mi mathvariant="bold">R</mi><mo>∣</mo><mi mathvariant="bold">p</mi><mo stretchy="false">]</mo></mrow><annotation encoding="application/x-tex">\mathbf{T}=[\mathbf{R} \mid \mathbf{p}]</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.68611em;vertical-align:0em;"></span><span class="mord"><span class="mord mathbf">T</span></span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">[</span><span class="mord"><span class="mord mathbf">R</span></span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">∣</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord"><span class="mord mathbf">p</span></span><span class="mclose">]</span></span></span></span>，<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="bold">T</mi><mo>∈</mo><mi>S</mi><mi>E</mi><mo stretchy="false">(</mo><mn>3</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\mathbf{T} \in S E(3)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.72521em;vertical-align:-0.0391em;"></span><span class="mord"><span class="mord mathbf">T</span></span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">∈</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.05764em;">S</span><span class="mord mathnormal" style="margin-right:0.05764em;">E</span><span class="mopen">(</span><span class="mord">3</span><span class="mclose">)</span></span></span></span>。</p><p>如上图所示，系统接收来自 <strong>3D 激光雷达</strong>、<strong>IMU</strong> 和 <strong>GPS</strong> 的传感器数据。我们试图利用这些传感器的<strong>观测数据</strong>来<strong>估计机器人状态</strong>及其轨迹。</p><p>这个状态估计问题可以表述为<strong>最大后验（MAP）问题</strong>。与贝叶斯网相比，<strong>因子图</strong>更适合进行推理，因此我们使用因子图来模拟这一问题。</p><p>在<strong>高斯噪声模型</strong>的假设下，我们问题的 MAP 推理等同于求解<strong>非线性最小二乘问题</strong>。需要注意的是，在不失一般性的前提下，所提出的系统还可以结合<strong>其他传感器的测量结果</strong>，如高度计的海拔高度或罗盘的航向。</p><p>我们引入了<strong>四种类型的因子</strong>，以及一种用于因子图构建的变量类型。该变量代表机器人在特定时间的状态，被归属于图节点。分别是：(a) IMU 预积分因子，(b) 激光雷达里程因子，© GPS 因子，以及 (d) 闭环因子。</p><p>当<strong>姿态变化</strong>超过定义的<strong>阈值</strong>时，就会在图中添加一个新的机器人状态节点 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="bold">x</mi></mrow><annotation encoding="application/x-tex">\mathbf{x}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.44444em;vertical-align:0em;"></span><span class="mord"><span class="mord mathbf">x</span></span></span></span></span>。在插入新节点时，会使用<strong>贝叶斯树</strong>（<strong>iSAM2</strong>）进行<strong>增量平滑和映射</strong>，对因子图进行<strong>优化</strong>。这些因子的生成过程将在以下章节中介绍。</p><h3 id="imu-%E9%A2%84%E7%A7%AF%E5%88%86%E5%9B%A0%E5%AD%90" tabindex="-1">IMU 预积分因子</h3><p>IMU 的<strong>角速度</strong>和<strong>加速度测量值</strong>由公式 2 和 3 确定：</p><p class='katex-block'><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mtable rowspacing="0.24999999999999992em" columnalign="right left" columnspacing="0em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><msub><mover accent="true"><mi>ω</mi><mo>^</mo></mover><mi>t</mi></msub><mo>=</mo><msub><mi>ω</mi><mi>t</mi></msub><mo>+</mo><msubsup><mi mathvariant="bold">b</mi><mi>t</mi><mi>ω</mi></msubsup><mo>+</mo><msubsup><mi mathvariant="bold">n</mi><mi>t</mi><mi>ω</mi></msubsup></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><msub><mover accent="true"><mi mathvariant="bold">a</mi><mo>^</mo></mover><mi mathvariant="normal">ℓ</mi></msub><mo>=</mo><msubsup><mi mathvariant="bold">R</mi><mi>t</mi><mrow><mi mathvariant="normal">B</mi><mi mathvariant="normal">W</mi></mrow></msubsup><mrow><mo fence="true">(</mo><msub><mi mathvariant="bold">a</mi><mi>t</mi></msub><mo>−</mo><mi mathvariant="bold">g</mi><mo fence="true">)</mo></mrow><mo>+</mo><msubsup><mi mathvariant="bold">b</mi><mi>t</mi><mi mathvariant="bold">a</mi></msubsup><mo>+</mo><msubsup><mi mathvariant="bold">n</mi><mi>t</mi><mi mathvariant="bold">a</mi></msubsup><mo separator="true">,</mo></mrow></mstyle></mtd></mtr></mtable><annotation encoding="application/x-tex">\begin{aligned}&amp; \hat{\omega}_t=\omega_t+\mathbf{b}_t^\omega+\mathbf{n}_t^\omega \\&amp; \hat{\mathbf{a}}_{\ell}=\mathbf{R}_t^{\mathrm{BW}}\left(\mathbf{a}_t-\mathbf{g}\right)+\mathbf{b}_t^{\mathbf{a}}+\mathbf{n}_t^{\mathbf{a}},\end{aligned}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:3.0513310000000002em;vertical-align:-1.2756655000000001em;"></span><span class="mord"><span class="mtable"><span class="col-align-r"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.7756655000000001em;"><span style="top:-3.8269965em;"><span class="pstrut" style="height:2.891331em;"></span><span class="mord"></span></span><span style="top:-2.2756655em;"><span class="pstrut" style="height:2.891331em;"></span><span class="mord"></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.2756655000000001em;"><span></span></span></span></span></span><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.7756655000000001em;"><span style="top:-3.9356655em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord"></span><span class="mord"><span class="mord accent"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.69444em;"><span style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.03588em;">ω</span></span></span><span style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="accent-body" style="left:-0.25em;"><span class="mord">^</span></span></span></span></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2805559999999999em;"><span style="top:-2.5500000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">t</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.03588em;">ω</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2805559999999999em;"><span style="top:-2.5500000000000003em;margin-left:-0.03588em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">t</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mord"><span class="mord"><span class="mord mathbf">b</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7143919999999999em;"><span style="top:-2.4530000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">t</span></span></span><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em;">ω</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.247em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mord"><span class="mord"><span class="mord mathbf">n</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7143919999999999em;"><span style="top:-2.4530000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">t</span></span></span><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em;">ω</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.247em;"><span></span></span></span></span></span></span></span></span><span style="top:-2.3843345em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord"></span><span class="mord"><span class="mord accent"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.70788em;"><span style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord"><span class="mord mathbf">a</span></span></span></span><span style="top:-3.01344em;"><span class="pstrut" style="height:3em;"></span><span class="accent-body" style="left:-0.25em;"><span class="mord">^</span></span></span></span></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.33610799999999996em;"><span style="top:-2.5500000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">ℓ</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mord"><span class="mord"><span class="mord mathbf">R</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8913309999999999em;"><span style="top:-2.4530000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">t</span></span></span><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathrm mtight">B</span><span class="mord mathrm mtight" style="margin-right:0.01389em;">W</span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.247em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;">(</span><span class="mord"><span class="mord"><span class="mord mathbf">a</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2805559999999999em;"><span style="top:-2.5500000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">t</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mord"><span class="mord mathbf" style="margin-right:0.01597em;">g</span></span><span class="mclose delimcenter" style="top:0em;">)</span></span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mord"><span class="mord"><span class="mord mathbf">b</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.724108em;"><span style="top:-2.4530000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">t</span></span></span><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathbf mtight">a</span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.247em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mord"><span class="mord"><span class="mord mathbf">n</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.724108em;"><span style="top:-2.4530000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">t</span></span></span><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathbf mtight">a</span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.247em;"><span></span></span></span></span></span></span><span class="mpunct">,</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.2756655000000001em;"><span></span></span></span></span></span></span></span></span></span></span></span></p><p>其中 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mover accent="true"><mi mathvariant="bold-italic">ω</mi><mo>^</mo></mover><mi>t</mi></msub></mrow><annotation encoding="application/x-tex">\hat{\boldsymbol{\omega}}_t</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.85788em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord accent"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.70788em;"><span style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord"><span class="mord"><span class="mord boldsymbol" style="margin-right:0.03704em;">ω</span></span></span></span></span><span style="top:-3.01344em;"><span class="pstrut" style="height:3em;"></span><span class="accent-body" style="left:-0.25em;"><span class="mord">^</span></span></span></span></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2805559999999999em;"><span style="top:-2.5500000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">t</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 和 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mover accent="true"><mi mathvariant="bold">a</mi><mo>^</mo></mover><mi>t</mi></msub></mrow><annotation encoding="application/x-tex">\hat{\mathbf{a}}_t</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.85788em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord accent"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.70788em;"><span style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord"><span class="mord mathbf">a</span></span></span></span><span style="top:-3.01344em;"><span class="pstrut" style="height:3em;"></span><span class="accent-body" style="left:-0.25em;"><span class="mord">^</span></span></span></span></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2805559999999999em;"><span style="top:-2.5500000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">t</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 是 IMU 在坐标系 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="bold">B</mi></mrow><annotation encoding="application/x-tex">\mathbf{B}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.68611em;vertical-align:0em;"></span><span class="mord"><span class="mord mathbf">B</span></span></span></span></span> 下 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>t</mi></mrow><annotation encoding="application/x-tex">t</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.61508em;vertical-align:0em;"></span><span class="mord mathnormal">t</span></span></span></span> 时刻的原始测量数据，而 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mover accent="true"><mi mathvariant="bold-italic">ω</mi><mo>^</mo></mover><mi>t</mi></msub></mrow><annotation encoding="application/x-tex">\hat{\boldsymbol{\omega}}_t</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.85788em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord accent"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.70788em;"><span style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord"><span class="mord"><span class="mord boldsymbol" style="margin-right:0.03704em;">ω</span></span></span></span></span><span style="top:-3.01344em;"><span class="pstrut" style="height:3em;"></span><span class="accent-body" style="left:-0.25em;"><span class="mord">^</span></span></span></span></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2805559999999999em;"><span style="top:-2.5500000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">t</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 和 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mover accent="true"><mi mathvariant="bold">a</mi><mo>^</mo></mover><mi>t</mi></msub></mrow><annotation encoding="application/x-tex">\hat{\mathbf{a}}_t</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.85788em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord accent"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.70788em;"><span style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord"><span class="mord mathbf">a</span></span></span></span><span style="top:-3.01344em;"><span class="pstrut" style="height:3em;"></span><span class="accent-body" style="left:-0.25em;"><span class="mord">^</span></span></span></span></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2805559999999999em;"><span style="top:-2.5500000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">t</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 同样都受到缓慢变化的偏置 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi mathvariant="bold">b</mi><mi>t</mi></msub></mrow><annotation encoding="application/x-tex">\mathbf{b}_t</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.84444em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord"><span class="mord mathbf">b</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2805559999999999em;"><span style="top:-2.5500000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">t</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 和白噪声<br /><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi mathvariant="bold">n</mi><mi>t</mi></msub></mrow><annotation encoding="application/x-tex">\mathbf{n}_t</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.59444em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord"><span class="mord mathbf">n</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2805559999999999em;"><span style="top:-2.5500000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">t</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 的影响。<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msubsup><mi mathvariant="bold">R</mi><mi>t</mi><mrow><mi mathvariant="bold">B</mi><mi mathvariant="bold">W</mi></mrow></msubsup></mrow><annotation encoding="application/x-tex">\mathbf{R}_t^{\mathbf{B W}}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.090277em;vertical-align:-0.247em;"></span><span class="mord"><span class="mord"><span class="mord mathbf">R</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8432769999999999em;"><span style="top:-2.4530000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">t</span></span></span><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathbf mtight">B</span><span class="mord mathbf mtight" style="margin-right:0.01597em;">W</span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.247em;"><span></span></span></span></span></span></span></span></span></span> 是从坐标系 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="bold">W</mi></mrow><annotation encoding="application/x-tex">\mathbf{W}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.68611em;vertical-align:0em;"></span><span class="mord"><span class="mord mathbf" style="margin-right:0.01597em;">W</span></span></span></span></span> 到 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="bold">B</mi></mrow><annotation encoding="application/x-tex">\mathbf{B}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.68611em;vertical-align:0em;"></span><span class="mord"><span class="mord mathbf">B</span></span></span></span></span> 的转换变换矩阵。<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="normal">g</mi></mrow><annotation encoding="application/x-tex">\mathrm{g}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.19444em;"></span><span class="mord"><span class="mord mathrm" style="margin-right:0.01389em;">g</span></span></span></span></span> 是坐标系  <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="bold">W</mi></mrow><annotation encoding="application/x-tex">\mathbf{W}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.68611em;vertical-align:0em;"></span><span class="mord"><span class="mord mathbf" style="margin-right:0.01597em;">W</span></span></span></span></span> 下的常数重力值。</p><p>现在可以使用 IMU 的<strong>测量值</strong>来推断机器人的运动。机器人在 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>t</mi><mo>+</mo><mi mathvariant="normal">Δ</mi><mi>t</mi></mrow><annotation encoding="application/x-tex">t+\Delta t</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.69841em;vertical-align:-0.08333em;"></span><span class="mord mathnormal">t</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span></span><span class="base"><span class="strut" style="height:0.68333em;vertical-align:0em;"></span><span class="mord">Δ</span><span class="mord mathnormal">t</span></span></span></span> 时刻的速度、位置和旋转可计算为:</p><p class='katex-block'><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mtable rowspacing="0.24999999999999992em" columnalign="right left" columnspacing="0em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><msub><mi mathvariant="bold">v</mi><mrow><mi>t</mi><mo>+</mo><mi mathvariant="normal">Δ</mi><mi>t</mi></mrow></msub><mo>=</mo><msub><mi mathvariant="bold">v</mi><mi>t</mi></msub></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>+</mo><mi mathvariant="bold">g</mi><mi mathvariant="normal">Δ</mi><mi>t</mi><mo>+</mo><msub><mi mathvariant="bold">R</mi><mi>t</mi></msub><mrow><mo fence="true">(</mo><msub><mover accent="true"><mi mathvariant="bold">a</mi><mo>^</mo></mover><mi>t</mi></msub><mo>−</mo><msubsup><mi mathvariant="bold">b</mi><mi>t</mi><mi mathvariant="bold">a</mi></msubsup><mo>−</mo><msubsup><mi mathvariant="bold">n</mi><mi>t</mi><mi mathvariant="bold">a</mi></msubsup><mo fence="true">)</mo></mrow><mi mathvariant="normal">Δ</mi><mi>t</mi></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><msub><mi mathvariant="bold">p</mi><mrow><mi>t</mi><mo>+</mo><mi mathvariant="normal">Δ</mi><mi>t</mi></mrow></msub><mo>=</mo><msub><mi mathvariant="bold">p</mi><mi>t</mi></msub></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>+</mo><msub><mi mathvariant="bold">v</mi><mi>t</mi></msub><mi mathvariant="normal">Δ</mi><mi>t</mi><mo>+</mo><mfrac><mn>1</mn><mn>2</mn></mfrac><mi mathvariant="bold">g</mi><mi mathvariant="normal">Δ</mi><msup><mi>t</mi><mn>2</mn></msup></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>+</mo><mfrac><mn>1</mn><mn>2</mn></mfrac><msub><mi mathvariant="bold">R</mi><mi>t</mi></msub><mrow><mo fence="true">(</mo><msub><mover accent="true"><mi mathvariant="bold">a</mi><mo>^</mo></mover><mi>t</mi></msub><mo>−</mo><msubsup><mi mathvariant="bold">b</mi><mi>t</mi><mi mathvariant="bold">a</mi></msubsup><mo>−</mo><msubsup><mi mathvariant="bold">n</mi><mi>t</mi><mi mathvariant="bold">a</mi></msubsup><mo fence="true">)</mo></mrow><mi mathvariant="normal">Δ</mi><msup><mi>t</mi><mn>2</mn></msup></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><msub><mi mathvariant="bold">R</mi><mrow><mi>t</mi><mo>+</mo><mi mathvariant="normal">Δ</mi><mi>t</mi></mrow></msub><mo>=</mo></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><msub><mi mathvariant="bold">R</mi><mi>t</mi></msub><mi>exp</mi><mo>⁡</mo><mrow><mo fence="true">(</mo><mrow><mo fence="true">(</mo><msub><mover accent="true"><mi mathvariant="bold-italic">ω</mi><mo>^</mo></mover><mi>t</mi></msub><mo>−</mo><msubsup><mi mathvariant="bold">b</mi><mi>t</mi><mi mathvariant="bold-italic">ω</mi></msubsup><mo>−</mo><msubsup><mi mathvariant="bold">n</mi><mi>t</mi><mi mathvariant="bold-italic">ω</mi></msubsup><mo fence="true">)</mo></mrow><mi mathvariant="normal">Δ</mi><mi>t</mi><mo fence="true">)</mo></mrow><mo separator="true">,</mo></mrow></mstyle></mtd></mtr></mtable><annotation encoding="application/x-tex">\begin{aligned}\mathbf{v}_{t+\Delta t}=\mathbf{v}_t &amp; +\mathbf{g} \Delta t+\mathbf{R}_t\left(\hat{\mathbf{a}}_t-\mathbf{b}_t^{\mathbf{a}}-\mathbf{n}_t^{\mathbf{a}}\right) \Delta t \\\mathbf{p}_{t+\Delta t}=\mathbf{p}_t &amp; +\mathbf{v}_t \Delta t+\frac{1}{2} \mathbf{g} \Delta t^2 \\&amp; +\frac{1}{2} \mathbf{R}_t\left(\hat{\mathbf{a}}_t-\mathbf{b}_t^{\mathbf{a}}-\mathbf{n}_t^{\mathbf{a}}\right) \Delta t^2 \\\mathbf{R}_{t+\Delta t}= &amp; \mathbf{R}_t \exp \left(\left(\hat{\boldsymbol{\omega}}_t-\mathbf{b}_t^{\boldsymbol{\omega}}-\mathbf{n}_t^{\boldsymbol{\omega}}\right) \Delta t\right),\end{aligned}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:7.614880000000001em;vertical-align:-3.5574400000000015em;"></span><span class="mord"><span class="mtable"><span class="col-align-r"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:4.05744em;"><span style="top:-6.53888em;"><span class="pstrut" style="height:3.32144em;"></span><span class="mord"><span class="mord"><span class="mord"><span class="mord mathbf" style="margin-right:0.01597em;">v</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.328331em;"><span style="top:-2.5500000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">t</span><span class="mbin mtight">+</span><span class="mord mtight">Δ</span><span class="mord mathnormal mtight">t</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.208331em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mord"><span class="mord"><span class="mord mathbf" style="margin-right:0.01597em;">v</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2805559999999999em;"><span style="top:-2.5500000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">t</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span><span style="top:-4.557439999999999em;"><span class="pstrut" style="height:3.32144em;"></span><span class="mord"><span class="mord"><span class="mord"><span class="mord mathbf">p</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.328331em;"><span style="top:-2.5500000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">t</span><span class="mbin mtight">+</span><span class="mord mtight">Δ</span><span class="mord mathnormal mtight">t</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.208331em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mord"><span class="mord"><span class="mord mathbf">p</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2805559999999999em;"><span style="top:-2.5500000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">t</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span><span style="top:-2.2499999999999982em;"><span class="pstrut" style="height:3.32144em;"></span><span class="mord"></span></span><span style="top:-0.4239999999999986em;"><span class="pstrut" style="height:3.32144em;"></span><span class="mord"><span class="mord"><span class="mord"><span class="mord mathbf">R</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.328331em;"><span style="top:-2.5500000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">t</span><span class="mbin mtight">+</span><span class="mord mtight">Δ</span><span class="mord mathnormal mtight">t</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.208331em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">=</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:3.5574400000000015em;"><span></span></span></span></span></span><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:4.05744em;"><span style="top:-6.53888em;"><span class="pstrut" style="height:3.32144em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mord"><span class="mord mathbf" style="margin-right:0.01597em;">g</span></span><span class="mord">Δ</span><span class="mord mathnormal">t</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mord"><span class="mord"><span class="mord mathbf">R</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2805559999999999em;"><span style="top:-2.5500000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">t</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;">(</span><span class="mord"><span class="mord accent"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.70788em;"><span style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord"><span class="mord mathbf">a</span></span></span></span><span style="top:-3.01344em;"><span class="pstrut" style="height:3em;"></span><span class="accent-body" style="left:-0.25em;"><span class="mord">^</span></span></span></span></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2805559999999999em;"><span style="top:-2.5500000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">t</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mord"><span class="mord"><span class="mord mathbf">b</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.724108em;"><span style="top:-2.4530000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">t</span></span></span><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathbf mtight">a</span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.247em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mord"><span class="mord"><span class="mord mathbf">n</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.724108em;"><span style="top:-2.4530000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">t</span></span></span><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathbf mtight">a</span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.247em;"><span></span></span></span></span></span></span><span class="mclose delimcenter" style="top:0em;">)</span></span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord">Δ</span><span class="mord mathnormal">t</span></span></span><span style="top:-4.557439999999999em;"><span class="pstrut" style="height:3.32144em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mord"><span class="mord"><span class="mord mathbf" style="margin-right:0.01597em;">v</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2805559999999999em;"><span style="top:-2.5500000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">t</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord">Δ</span><span class="mord mathnormal">t</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.32144em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">2</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mord"><span class="mord mathbf" style="margin-right:0.01597em;">g</span></span><span class="mord">Δ</span><span class="mord"><span class="mord mathnormal">t</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8641079999999999em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span><span style="top:-2.2499999999999982em;"><span class="pstrut" style="height:3.32144em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.32144em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">2</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mord"><span class="mord"><span class="mord mathbf">R</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2805559999999999em;"><span style="top:-2.5500000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">t</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;">(</span><span class="mord"><span class="mord accent"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.70788em;"><span style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord"><span class="mord mathbf">a</span></span></span></span><span style="top:-3.01344em;"><span class="pstrut" style="height:3em;"></span><span class="accent-body" style="left:-0.25em;"><span class="mord">^</span></span></span></span></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2805559999999999em;"><span style="top:-2.5500000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">t</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mord"><span class="mord"><span class="mord mathbf">b</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.724108em;"><span style="top:-2.4530000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">t</span></span></span><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathbf mtight">a</span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.247em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mord"><span class="mord"><span class="mord mathbf">n</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.724108em;"><span style="top:-2.4530000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">t</span></span></span><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathbf mtight">a</span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.247em;"><span></span></span></span></span></span></span><span class="mclose delimcenter" style="top:0em;">)</span></span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord">Δ</span><span class="mord"><span class="mord mathnormal">t</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8641079999999999em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span><span style="top:-0.4239999999999986em;"><span class="pstrut" style="height:3.32144em;"></span><span class="mord"><span class="mord"></span><span class="mord"><span class="mord"><span class="mord mathbf">R</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2805559999999999em;"><span style="top:-2.5500000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">t</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mop">exp</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;">(</span><span class="minner"><span class="mopen delimcenter" style="top:0em;">(</span><span class="mord"><span class="mord accent"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.70788em;"><span style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord"><span class="mord"><span class="mord boldsymbol" style="margin-right:0.03704em;">ω</span></span></span></span></span><span style="top:-3.01344em;"><span class="pstrut" style="height:3em;"></span><span class="accent-body" style="left:-0.25em;"><span class="mord">^</span></span></span></span></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2805559999999999em;"><span style="top:-2.5500000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">t</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mord"><span class="mord"><span class="mord mathbf">b</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.724108em;"><span style="top:-2.4530000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">t</span></span></span><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord boldsymbol mtight" style="margin-right:0.03704em;">ω</span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.247em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mord"><span class="mord"><span class="mord mathbf">n</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.724108em;"><span style="top:-2.4530000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">t</span></span></span><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord boldsymbol mtight" style="margin-right:0.03704em;">ω</span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.247em;"><span></span></span></span></span></span></span><span class="mclose delimcenter" style="top:0em;">)</span></span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord">Δ</span><span class="mord mathnormal">t</span><span class="mclose delimcenter" style="top:0em;">)</span></span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mpunct">,</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:3.5574400000000015em;"><span></span></span></span></span></span></span></span></span></span></span></span></p><p>其中 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi mathvariant="bold">R</mi><mi>t</mi></msub><mo>=</mo><msubsup><mi mathvariant="bold">R</mi><mi>t</mi><mrow><mi mathvariant="bold">W</mi><mi mathvariant="bold">B</mi></mrow></msubsup><mo>=</mo><msubsup><mi mathvariant="bold">R</mi><mi>t</mi><mrow><mrow><mi mathvariant="bold">B</mi><mi mathvariant="bold">W</mi></mrow><msup><mi mathvariant="bold">W</mi><mi mathvariant="normal">⊤</mi></msup></mrow></msubsup></mrow><annotation encoding="application/x-tex">\mathbf{R}_t=\mathbf{R}_t^{\mathbf{W B}}=\mathbf{R}_t^{\mathbf{B W} \mathbf{W}^{\top}}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.83611em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord"><span class="mord mathbf">R</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2805559999999999em;"><span style="top:-2.5500000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">t</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:1.090277em;vertical-align:-0.247em;"></span><span class="mord"><span class="mord"><span class="mord mathbf">R</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8432769999999999em;"><span style="top:-2.4530000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">t</span></span></span><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathbf mtight" style="margin-right:0.01597em;">W</span><span class="mord mathbf mtight">B</span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.247em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:1.2589199999999998em;vertical-align:-0.247em;"></span><span class="mord"><span class="mord"><span class="mord mathbf">R</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.01192em;"><span style="top:-2.4530000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">t</span></span></span><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathbf mtight">B</span><span class="mord mathbf mtight" style="margin-right:0.01597em;">W</span></span><span class="mord mtight"><span class="mord mtight"><span class="mord mathbf mtight" style="margin-right:0.01597em;">W</span></span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.9270285714285713em;"><span style="top:-2.931em;margin-right:0.07142857142857144em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight"><span class="mord mtight">⊤</span></span></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.247em;"><span></span></span></span></span></span></span></span></span></span>。 这里我们假设在上述 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="normal">Δ</mi><mi>t</mi></mrow><annotation encoding="application/x-tex">\Delta t</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.68333em;vertical-align:0em;"></span><span class="mord">Δ</span><span class="mord mathnormal">t</span></span></span></span> 积分过程中，<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="bold">B</mi></mrow><annotation encoding="application/x-tex">\mathbf{B}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.68611em;vertical-align:0em;"></span><span class="mord"><span class="mord mathbf">B</span></span></span></span></span> 的角速度和加速度保持不变。</p><p>然后，我们使用 IMU 预积分方法来获得两个时间帧之间的物体相对运动。时间 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.65952em;vertical-align:0em;"></span><span class="mord mathnormal">i</span></span></span></span> 和 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>j</mi></mrow><annotation encoding="application/x-tex">j</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.85396em;vertical-align:-0.19444em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span></span></span></span> 之间的预积分测量 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="normal">Δ</mi><msub><mi mathvariant="bold">v</mi><mrow><mi>i</mi><mi>j</mi></mrow></msub><mo separator="true">,</mo><mi mathvariant="normal">Δ</mi><msub><mi mathvariant="bold">p</mi><mrow><mi>i</mi><mi>j</mi></mrow></msub></mrow><annotation encoding="application/x-tex">\Delta \mathbf{v}_{i j}, \Delta \mathbf{p}_{i j}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.969438em;vertical-align:-0.286108em;"></span><span class="mord">Δ</span><span class="mord"><span class="mord"><span class="mord mathbf" style="margin-right:0.01597em;">v</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.311664em;"><span style="top:-2.5500000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.286108em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord">Δ</span><span class="mord"><span class="mord"><span class="mord mathbf">p</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.311664em;"><span style="top:-2.5500000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.286108em;"><span></span></span></span></span></span></span></span></span></span> 和 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="normal">Δ</mi><msub><mi mathvariant="bold">R</mi><mrow><mi>i</mi><mi>j</mi></mrow></msub></mrow><annotation encoding="application/x-tex">\Delta \mathbf{R}_{i j}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.972218em;vertical-align:-0.286108em;"></span><span class="mord">Δ</span><span class="mord"><span class="mord"><span class="mord mathbf">R</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.311664em;"><span style="top:-2.5500000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.286108em;"><span></span></span></span></span></span></span></span></span></span> 可以使用以下方法计算:</p><p class='katex-block'><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mtable rowspacing="0.24999999999999992em" columnalign="right left" columnspacing="0em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mi mathvariant="normal">Δ</mi><msub><mi mathvariant="bold">v</mi><mrow><mi>i</mi><mi>j</mi></mrow></msub></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>=</mo><msubsup><mi mathvariant="bold">R</mi><mi>i</mi><mi mathvariant="normal">⊤</mi></msubsup><mrow><mo fence="true">(</mo><msub><mi mathvariant="bold">v</mi><mi>j</mi></msub><mo>−</mo><msub><mi mathvariant="bold">v</mi><mi>i</mi></msub><mo>−</mo><mi mathvariant="bold">g</mi><mi mathvariant="normal">Δ</mi><msub><mi>t</mi><mrow><mi>i</mi><mi>j</mi></mrow></msub><mo fence="true">)</mo></mrow></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mi mathvariant="normal">Δ</mi><msub><mi mathvariant="bold">p</mi><mrow><mi>i</mi><mi>j</mi></mrow></msub></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>=</mo><msubsup><mi mathvariant="bold">R</mi><mi>i</mi><mi mathvariant="normal">⊤</mi></msubsup><mrow><mo fence="true">(</mo><msub><mi mathvariant="bold">p</mi><mi>j</mi></msub><mo>−</mo><msub><mi mathvariant="bold">p</mi><mi>i</mi></msub><mo>−</mo><msub><mi mathvariant="bold">v</mi><mi>i</mi></msub><mi mathvariant="normal">Δ</mi><msub><mi>t</mi><mrow><mi>i</mi><mi>j</mi></mrow></msub><mo>−</mo><mfrac><mn>1</mn><mn>2</mn></mfrac><mi mathvariant="bold">g</mi><mi mathvariant="normal">Δ</mi><msubsup><mi>t</mi><mrow><mi>i</mi><mi>j</mi></mrow><mn>2</mn></msubsup><mo fence="true">)</mo></mrow></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mi mathvariant="normal">Δ</mi><msub><mi mathvariant="bold">R</mi><mrow><mi>i</mi><mi>j</mi></mrow></msub></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>=</mo><msubsup><mi mathvariant="bold">R</mi><mi>i</mi><mi mathvariant="normal">⊤</mi></msubsup><msub><mi mathvariant="bold">R</mi><mi>j</mi></msub><mi mathvariant="normal">.</mi></mrow></mstyle></mtd></mtr></mtable><annotation encoding="application/x-tex">\begin{aligned}\Delta \mathbf{v}_{i j} &amp; =\mathbf{R}_i^{\top}\left(\mathbf{v}_j-\mathbf{v}_i-\mathbf{g} \Delta t_{i j}\right) \\\Delta \mathbf{p}_{i j} &amp; =\mathbf{R}_i^{\top}\left(\mathbf{p}_j-\mathbf{p}_i-\mathbf{v}_i \Delta t_{i j}-\frac{1}{2} \mathbf{g} \Delta t_{i j}^2\right) \\\Delta \mathbf{R}_{i j} &amp; =\mathbf{R}_i^{\top} \mathbf{R}_j .\end{aligned}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:5.818246em;vertical-align:-2.659123em;"></span><span class="mord"><span class="mtable"><span class="col-align-r"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:3.159123em;"><span style="top:-5.710015em;"><span class="pstrut" style="height:3.45em;"></span><span class="mord"><span class="mord">Δ</span><span class="mord"><span class="mord"><span class="mord mathbf" style="margin-right:0.01597em;">v</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.311664em;"><span style="top:-2.5500000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.286108em;"><span></span></span></span></span></span></span></span></span><span style="top:-3.6000150000000004em;"><span class="pstrut" style="height:3.45em;"></span><span class="mord"><span class="mord">Δ</span><span class="mord"><span class="mord"><span class="mord mathbf">p</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.311664em;"><span style="top:-2.5500000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.286108em;"><span></span></span></span></span></span></span></span></span><span style="top:-1.4508770000000002em;"><span class="pstrut" style="height:3.45em;"></span><span class="mord"><span class="mord">Δ</span><span class="mord"><span class="mord"><span class="mord mathbf">R</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.311664em;"><span style="top:-2.5500000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.286108em;"><span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.659123em;"><span></span></span></span></span></span><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:3.159123em;"><span style="top:-5.710015em;"><span class="pstrut" style="height:3.45em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mord"><span class="mord"><span class="mord mathbf">R</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8991079999999998em;"><span style="top:-2.4530000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">⊤</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.247em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;">(</span><span class="mord"><span class="mord"><span class="mord mathbf" style="margin-right:0.01597em;">v</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.311664em;"><span style="top:-2.5500000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.286108em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mord"><span class="mord"><span class="mord mathbf" style="margin-right:0.01597em;">v</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.31166399999999994em;"><span style="top:-2.5500000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mord"><span class="mord mathbf" style="margin-right:0.01597em;">g</span></span><span class="mord">Δ</span><span class="mord"><span class="mord mathnormal">t</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.311664em;"><span style="top:-2.5500000000000003em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.286108em;"><span></span></span></span></span></span></span><span class="mclose delimcenter" style="top:0em;">)</span></span></span></span><span style="top:-3.6000150000000004em;"><span class="pstrut" style="height:3.45em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mord"><span class="mord"><span class="mord mathbf">R</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8991079999999998em;"><span style="top:-2.4530000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">⊤</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.247em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size3">(</span></span><span class="mord"><span class="mord"><span class="mord mathbf">p</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.311664em;"><span style="top:-2.5500000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.286108em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mord"><span class="mord"><span class="mord mathbf">p</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.31166399999999994em;"><span style="top:-2.5500000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mord"><span class="mord"><span class="mord mathbf" style="margin-right:0.01597em;">v</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.31166399999999994em;"><span style="top:-2.5500000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord">Δ</span><span class="mord"><span class="mord mathnormal">t</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.311664em;"><span style="top:-2.5500000000000003em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.286108em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.32144em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">2</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mord"><span class="mord mathbf" style="margin-right:0.01597em;">g</span></span><span class="mord">Δ</span><span class="mord"><span class="mord mathnormal">t</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.864108em;"><span style="top:-2.4530000000000003em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span><span style="top:-3.1130000000000004em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.383108em;"><span></span></span></span></span></span></span><span class="mclose delimcenter" style="top:0em;"><span class="delimsizing size3">)</span></span></span></span></span><span style="top:-1.4508770000000002em;"><span class="pstrut" style="height:3.45em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mord"><span class="mord"><span class="mord mathbf">R</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8991079999999998em;"><span style="top:-2.4530000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">⊤</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.247em;"><span></span></span></span></span></span></span><span class="mord"><span class="mord"><span class="mord mathbf">R</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.311664em;"><span style="top:-2.5500000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.286108em;"><span></span></span></span></span></span></span><span class="mord">.</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.659123em;"><span></span></span></span></span></span></span></span></span></span></span></span></p><p>除了效率之外，应用 IMU 预积分还自然而然地为我们提供了一种因子图约束–<strong>IMU 预积分因子</strong>。在因子图中，IMU <strong>偏置</strong>与激光雷达里程因子共同优化。</p><h3 id="%E6%BF%80%E5%85%89%E9%9B%B7%E8%BE%BE%E9%87%8C%E7%A8%8B%E5%9B%A0%E5%AD%90" tabindex="-1">激光雷达里程因子</h3><p>当新的激光雷达扫描帧到达时，首先进行<strong>特征提取</strong>。通过评估局部区域内各点的<strong>粗糙度</strong>来提取<strong>边缘和平面特征</strong>。<strong>粗糙度值较大的点</strong>被归类为<strong>边缘特征</strong>。同样，<strong>粗糙度值较小的点</strong>被归类为<strong>平面特征</strong>。</p><p>我们将第 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.65952em;vertical-align:0em;"></span><span class="mord mathnormal">i</span></span></span></span> 时间激光雷达扫描提取的<strong>边缘和平面特征</strong>分别称为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msubsup><mi mathvariant="normal">F</mi><mi>i</mi><mi>e</mi></msubsup></mrow><annotation encoding="application/x-tex">\mathrm{F} _{i}^{e}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.941994em;vertical-align:-0.258664em;"></span><span class="mord"><span class="mord"><span class="mord mathrm">F</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.664392em;"><span style="top:-2.441336em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">e</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.258664em;"><span></span></span></span></span></span></span></span></span></span> 和 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msubsup><mi mathvariant="normal">F</mi><mi>i</mi><mi>p</mi></msubsup></mrow><annotation encoding="application/x-tex">\mathrm{F} _{i}^{p}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.059164em;vertical-align:-0.276864em;"></span><span class="mord"><span class="mord"><span class="mord mathrm">F</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7823em;"><span style="top:-2.4231360000000004em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span style="top:-3.1809080000000005em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">p</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.276864em;"><span></span></span></span></span></span></span></span></span></span>。第 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.65952em;vertical-align:0em;"></span><span class="mord mathnormal">i</span></span></span></span> 个时间点提取的所有特征组成一个激光雷达帧  <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi mathvariant="double-struck">F</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">\mathbb{F} _{i}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.83889em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord"><span class="mord mathbb">F</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.31166399999999994em;"><span style="top:-2.5500000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>  ，其中  <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi mathvariant="double-struck">F</mi><mi>i</mi></msub><mo>=</mo><mo stretchy="false">{</mo><msubsup><mi mathvariant="normal">F</mi><mi>i</mi><mi>e</mi></msubsup><mo separator="true">,</mo><msubsup><mi mathvariant="normal">F</mi><mi>i</mi><mi>p</mi></msubsup><mo stretchy="false">}</mo></mrow><annotation encoding="application/x-tex">\mathbb{F} _{i} = \{\mathrm{F} _{i}^{e} , \mathrm{F} _{i}^{p}\}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.83889em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord"><span class="mord mathbb">F</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.31166399999999994em;"><span style="top:-2.5500000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:1.059164em;vertical-align:-0.276864em;"></span><span class="mopen">{</span><span class="mord"><span class="mord"><span class="mord mathrm">F</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.664392em;"><span style="top:-2.441336em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">e</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.258664em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord"><span class="mord"><span class="mord mathrm">F</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7823em;"><span style="top:-2.4231360000000004em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span style="top:-3.1809080000000005em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">p</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.276864em;"><span></span></span></span></span></span></span><span class="mclose">}</span></span></span></span>。请注意，<strong>激光雷达帧</strong> <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="double-struck">F</mi></mrow><annotation encoding="application/x-tex">\mathbb{F}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.68889em;vertical-align:0em;"></span><span class="mord"><span class="mord mathbb">F</span></span></span></span></span> 是用 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="bold">B</mi></mrow><annotation encoding="application/x-tex">\mathbf{B}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.68611em;vertical-align:0em;"></span><span class="mord"><span class="mord mathbf">B</span></span></span></span></span> 表示的。关于特征提取过程的更详细说明，请参阅 LOAM 文献，如果使用的是测距图像，则请参阅 LeGO-LOAM 文献。</p><p>使用<strong>所有</strong>激光雷达帧来计算并向图中添加因子在计算上是难以实现的，因此我们采用了<strong>关键帧</strong>选择的概念，这一概念在<strong>视觉 SLAM 领域</strong>得到了广泛应用。我们采用一种简单而有效的<strong>启发式方法</strong>，当机器人<strong>姿势变化</strong>与之前的状态 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi mathvariant="bold">x</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">\mathbf{x}_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.59444em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord"><span class="mord mathbf">x</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.31166399999999994em;"><span style="top:-2.5500000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 相比超过用户定义的阈值时，就会选择一个激光雷达帧  <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi mathvariant="double-struck">F</mi><mrow><mi>i</mi><mo>+</mo><mn>1</mn></mrow></msub></mrow><annotation encoding="application/x-tex">\mathbb{F} _{i+1}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.897221em;vertical-align:-0.208331em;"></span><span class="mord"><span class="mord"><span class="mord mathbb">F</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.311664em;"><span style="top:-2.5500000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">+</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.208331em;"><span></span></span></span></span></span></span></span></span></span> 作为关键帧。新保存的关键帧   <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi mathvariant="double-struck">F</mi><mrow><mi>i</mi><mo>+</mo><mn>1</mn></mrow></msub></mrow><annotation encoding="application/x-tex">\mathbb{F} _{i+1}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.897221em;vertical-align:-0.208331em;"></span><span class="mord"><span class="mord"><span class="mord mathbb">F</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.311664em;"><span style="top:-2.5500000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">+</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.208331em;"><span></span></span></span></span></span></span></span></span></span> 与因子图中新的机器人状态节点 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi mathvariant="bold">x</mi><mrow><mi>i</mi><mo>+</mo><mn>1</mn></mrow></msub></mrow><annotation encoding="application/x-tex">\mathbf{x}_{i+1}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.652771em;vertical-align:-0.208331em;"></span><span class="mord"><span class="mord"><span class="mord mathbf">x</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.311664em;"><span style="top:-2.5500000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">+</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.208331em;"><span></span></span></span></span></span></span></span></span></span> 相关联。两个关键帧之间的激光雷达帧<strong>将被丢弃</strong>。以这种方式添加关键帧不仅能在<strong>地图密度和内存消耗</strong>之间取得平衡，还有助于保持相对<strong>稀疏的因子图</strong>，适合<strong>实时非线性优化</strong>。在我们的工作中，添加新关键帧的<strong>位置和旋转变化阈值</strong>分别选为 1m 和 10°。</p><p>假设希望在因子图中添加一个新的<strong>状态节点</strong> <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi mathvariant="bold">x</mi><mrow><mi>i</mi><mo>+</mo><mn>1</mn></mrow></msub></mrow><annotation encoding="application/x-tex">\mathbf{x}_{i+1}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.652771em;vertical-align:-0.208331em;"></span><span class="mord"><span class="mord"><span class="mord mathbf">x</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.311664em;"><span style="top:-2.5500000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">+</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.208331em;"><span></span></span></span></span></span></span></span></span></span>。与该状态相关的<strong>激光雷达关键帧</strong>为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi mathvariant="double-struck">F</mi><mrow><mi>i</mi><mo>+</mo><mn>1</mn></mrow></msub></mrow><annotation encoding="application/x-tex">\mathbb{F} _{i+1}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.897221em;vertical-align:-0.208331em;"></span><span class="mord"><span class="mord"><span class="mord mathbb">F</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.311664em;"><span style="top:-2.5500000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">+</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.208331em;"><span></span></span></span></span></span></span></span></span></span>。激光雷达测距因子的生成步骤如下：</p><p>1、<strong>子关键帧组</strong>合成<strong>体素图</strong>：采用<strong>滑动窗口法</strong>创建<strong>点云图</strong>，其中包含<strong>固定数量</strong>的<strong>最近</strong>激光雷达扫描帧。我们不对两个<strong>连续</strong>激光雷达扫描之间的变换进行优化，而是提取最近的 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.43056em;vertical-align:0em;"></span><span class="mord mathnormal">n</span></span></span></span> 个关键帧（称之为子关键帧）进行估计。然后使用与之相关的变换 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">{</mo><msub><mi mathvariant="bold">T</mi><mrow><mi>i</mi><mo>−</mo><mi>n</mi></mrow></msub><mo separator="true">,</mo><mo>…</mo><mo separator="true">,</mo><msub><mi mathvariant="bold">T</mi><mi>i</mi></msub><mo stretchy="false">}</mo></mrow><annotation encoding="application/x-tex">\{ {\mathbf{T}}_{i-n},\dots ,  {\mathbf{T}}_{i}\}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">{</span><span class="mord"><span class="mord"><span class="mord"><span class="mord mathbf">T</span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.311664em;"><span style="top:-2.5500000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">−</span><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.208331em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="minner">…</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord"><span class="mord"><span class="mord"><span class="mord mathbf">T</span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.31166399999999994em;"><span style="top:-2.5500000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mclose">}</span></span></span></span> 将子关键帧集合 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">{</mo><msub><mi mathvariant="double-struck">F</mi><mrow><mi>i</mi><mo>−</mo><mi>n</mi></mrow></msub><mo separator="true">,</mo><mo>…</mo><mo separator="true">,</mo><msub><mi mathvariant="double-struck">F</mi><mi>i</mi></msub><mo stretchy="false">}</mo></mrow><annotation encoding="application/x-tex">\{ {\mathbb{F}}_{i-n},\dots ,  {\mathbb{F}}_{i}\}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">{</span><span class="mord"><span class="mord"><span class="mord"><span class="mord mathbb">F</span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.311664em;"><span style="top:-2.5500000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">−</span><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.208331em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="minner">…</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord"><span class="mord"><span class="mord"><span class="mord mathbb">F</span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.31166399999999994em;"><span style="top:-2.5500000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mclose">}</span></span></span></span> 变换为帧 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="bold">W</mi></mrow><annotation encoding="application/x-tex">\mathbf{W}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.68611em;vertical-align:0em;"></span><span class="mord"><span class="mord mathbf" style="margin-right:0.01597em;">W</span></span></span></span></span>。转换后的子关键帧合并成一个体素图 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi mathvariant="bold">M</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">\mathbf{M}_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.83611em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord"><span class="mord mathbf">M</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.31166399999999994em;"><span style="top:-2.5500000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>。由于我们在前面的特征提取步骤中提取了<strong>两种类型的特征</strong>，因此 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi mathvariant="bold">M</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">\mathbf{M}_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.83611em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord"><span class="mord mathbf">M</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.31166399999999994em;"><span style="top:-2.5500000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 由两个子体素图组成，分别表示为<strong>边缘特征体素图</strong> <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msubsup><mi mathvariant="bold">M</mi><mi>i</mi><mi>e</mi></msubsup></mrow><annotation encoding="application/x-tex">\mathbf{M}^e_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.944774em;vertical-align:-0.258664em;"></span><span class="mord"><span class="mord"><span class="mord mathbf">M</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.664392em;"><span style="top:-2.441336em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">e</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.258664em;"><span></span></span></span></span></span></span></span></span></span> 和<strong>平面特征体素图</strong> <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msubsup><mi mathvariant="bold">M</mi><mi>i</mi><mi>p</mi></msubsup></mrow><annotation encoding="application/x-tex">\mathbf{M}^p_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.059164em;vertical-align:-0.276864em;"></span><span class="mord"><span class="mord"><span class="mord mathbf">M</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7823em;"><span style="top:-2.4231360000000004em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span><span style="top:-3.1809080000000005em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">p</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.276864em;"><span></span></span></span></span></span></span></span></span></span>。激光雷达帧和体素图之间的关系如下：</p><p class='katex-block'><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><msub><mi mathvariant="bold">M</mi><mi>i</mi></msub><mo>=</mo><mo stretchy="false">{</mo><msubsup><mi mathvariant="bold">M</mi><mi>i</mi><mi>e</mi></msubsup><mo separator="true">,</mo><msubsup><mi mathvariant="bold">M</mi><mi>i</mi><mi>p</mi></msubsup><mo stretchy="false">}</mo><mspace linebreak="newline"></mspace><mi>w</mi><mi>h</mi><mi>e</mi><mi>r</mi><mi>e</mi><mo>:</mo><mtable rowspacing="0.24999999999999992em" columnalign="right" columnspacing=""><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><msubsup><mi mathvariant="bold">M</mi><mi>i</mi><mi>e</mi></msubsup><msup><mo>=</mo><mo mathvariant="normal" lspace="0em" rspace="0em">′</mo></msup><msubsup><mi mathvariant="normal">F</mi><mi>i</mi><mi>e</mi></msubsup><msup><mo>∪</mo><mo mathvariant="normal" lspace="0em" rspace="0em">′</mo></msup><msubsup><mi mathvariant="normal">F</mi><mrow><mi>i</mi><mo>−</mo><mn>1</mn></mrow><mi>e</mi></msubsup><mo>∪</mo><mo>⋯</mo><msup><mo>∪</mo><mo mathvariant="normal" lspace="0em" rspace="0em">′</mo></msup><msubsup><mi mathvariant="normal">F</mi><mrow><mi>i</mi><mo>−</mo><mn>1</mn></mrow><mi>e</mi></msubsup></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><msubsup><mi mathvariant="bold">M</mi><mi>i</mi><mi>p</mi></msubsup><msup><mo>=</mo><mo mathvariant="normal" lspace="0em" rspace="0em">′</mo></msup><msubsup><mi mathvariant="normal">F</mi><mi>i</mi><mi>p</mi></msubsup><msup><mo>∪</mo><mo mathvariant="normal" lspace="0em" rspace="0em">′</mo></msup><msubsup><mi mathvariant="normal">F</mi><mrow><mi>i</mi><mo>−</mo><mn>1</mn></mrow><mi>p</mi></msubsup><mo>∪</mo><mo>⋯</mo><msup><mo>∪</mo><mo mathvariant="normal" lspace="0em" rspace="0em">′</mo></msup><msubsup><mi mathvariant="normal">F</mi><mrow><mi>i</mi><mo>−</mo><mn>1</mn></mrow><mi>p</mi></msubsup></mrow></mstyle></mtd></mtr></mtable></mrow><annotation encoding="application/x-tex">\mathbf{M}_i = \{\mathbf{M}^e_i, \mathbf{M}^p_i\} \\where : \begin{aligned}\mathbf{M}^e_i= &#x27;\mathrm{F}^e_i\cup&#x27;\mathrm{F}^e_{i-1}\cup\dots\cup&#x27;\mathrm{F}^e_{i-1} \\\mathbf{M}^p_i= &#x27;\mathrm{F}^p_i\cup&#x27;\mathrm{F}^p_{i-1}\cup\dots\cup&#x27;\mathrm{F}^p_{i-1}\end{aligned}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.83611em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord"><span class="mord mathbf">M</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.31166399999999994em;"><span style="top:-2.5500000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:1.059164em;vertical-align:-0.276864em;"></span><span class="mopen">{</span><span class="mord"><span class="mord"><span class="mord mathbf">M</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7143919999999999em;"><span style="top:-2.4530000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">e</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.247em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord"><span class="mord"><span class="mord mathbf">M</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7822999999999999em;"><span style="top:-2.4231360000000004em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span><span style="top:-3.180908em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">p</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.276864em;"><span></span></span></span></span></span></span><span class="mclose">}</span></span><span class="mspace newline"></span><span class="base"><span class="strut" style="height:0.69444em;vertical-align:0em;"></span><span class="mord mathnormal" style="margin-right:0.02691em;">w</span><span class="mord mathnormal">h</span><span class="mord mathnormal">e</span><span class="mord mathnormal" style="margin-right:0.02778em;">r</span><span class="mord mathnormal">e</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">:</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:3.0000000000000004em;vertical-align:-1.2500000000000002em;"></span><span class="mord"><span class="mtable"><span class="col-align-r"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.7500000000000002em;"><span style="top:-3.91em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord"><span class="mord"><span class="mord mathbf">M</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7143919999999999em;"><span style="top:-2.4530000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">e</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.247em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel"><span class="mrel">=</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.801892em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mord"><span class="mord"><span class="mord mathrm">F</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7143919999999999em;"><span style="top:-2.4530000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">e</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.247em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin"><span class="mbin">∪</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.801892em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mord"><span class="mord"><span class="mord mathrm">F</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.714392em;"><span style="top:-2.4530000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span><span style="top:-3.1130000000000004em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">e</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.305331em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">∪</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="minner">⋯</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin"><span class="mbin">∪</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.801892em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mord"><span class="mord"><span class="mord mathrm">F</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.714392em;"><span style="top:-2.4530000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span><span style="top:-3.1130000000000004em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">e</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.305331em;"><span></span></span></span></span></span></span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord"><span class="mord"><span class="mord mathbf">M</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7822999999999999em;"><span style="top:-2.4231360000000004em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span><span style="top:-3.180908em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">p</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.276864em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel"><span class="mrel">=</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.801892em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mord"><span class="mord"><span class="mord mathrm">F</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7822999999999999em;"><span style="top:-2.4231360000000004em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span><span style="top:-3.180908em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">p</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.276864em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin"><span class="mbin">∪</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.801892em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mord"><span class="mord"><span class="mord mathrm">F</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7823em;"><span style="top:-2.423136em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span><span style="top:-3.1809080000000005em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">p</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.335195em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">∪</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="minner">⋯</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin"><span class="mbin">∪</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.801892em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mord"><span class="mord"><span class="mord mathrm">F</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7823em;"><span style="top:-2.423136em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span><span style="top:-3.1809080000000005em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">p</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.335195em;"><span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.2500000000000002em;"><span></span></span></span></span></span></span></span></span></span></span></span></p><p><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mrow></mrow><mo mathvariant="normal" lspace="0em" rspace="0em">′</mo></msup><msubsup><mi mathvariant="normal">F</mi><mi>i</mi><mi>e</mi></msubsup></mrow><annotation encoding="application/x-tex">&#x27;\mathrm{F}^e_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.010556em;vertical-align:-0.258664em;"></span><span class="mord"><span></span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.751892em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span></span><span class="mord"><span class="mord"><span class="mord mathrm">F</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.664392em;"><span style="top:-2.441336em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">e</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.258664em;"><span></span></span></span></span></span></span></span></span></span> 和 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mrow></mrow><mo mathvariant="normal" lspace="0em" rspace="0em">′</mo></msup><msubsup><mi mathvariant="normal">F</mi><mi>i</mi><mi>p</mi></msubsup></mrow><annotation encoding="application/x-tex">&#x27;\mathrm{F}^p_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.059164em;vertical-align:-0.276864em;"></span><span class="mord"><span></span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.751892em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span></span><span class="mord"><span class="mord"><span class="mord mathrm">F</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7823em;"><span style="top:-2.4231360000000004em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span><span style="top:-3.1809080000000005em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">p</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.276864em;"><span></span></span></span></span></span></span></span></span></span> 是 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="bold">W</mi></mrow><annotation encoding="application/x-tex">\mathbf{W}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.68611em;vertical-align:0em;"></span><span class="mord"><span class="mord mathbf" style="margin-right:0.01597em;">W</span></span></span></span></span> 中经过转换的<strong>边缘特征</strong>和<strong>平面特征</strong>。然后对 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi mathvariant="bold">M</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">\mathbf{M}_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.83611em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord"><span class="mord mathbf">M</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.31166399999999994em;"><span style="top:-2.5500000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 和 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msubsup><mi mathvariant="bold">M</mi><mi>i</mi><mi>e</mi></msubsup></mrow><annotation encoding="application/x-tex">\mathbf{M}^e_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.944774em;vertical-align:-0.258664em;"></span><span class="mord"><span class="mord"><span class="mord mathbf">M</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.664392em;"><span style="top:-2.441336em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">e</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.258664em;"><span></span></span></span></span></span></span></span></span></span> 进行<strong>降采样</strong>，以消除位于同一体素单元中的<strong>重复特征</strong>。本文选择 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.43056em;vertical-align:0em;"></span><span class="mord mathnormal">n</span></span></span></span> 为 25。<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi mathvariant="bold">M</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">\mathbf{M}_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.83611em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord"><span class="mord mathbf">M</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.31166399999999994em;"><span style="top:-2.5500000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 和 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msubsup><mi mathvariant="bold">M</mi><mi>i</mi><mi>e</mi></msubsup></mrow><annotation encoding="application/x-tex">\mathbf{M}^e_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.944774em;vertical-align:-0.258664em;"></span><span class="mord"><span class="mord"><span class="mord mathbf">M</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.664392em;"><span style="top:-2.441336em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">e</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.258664em;"><span></span></span></span></span></span></span></span></span></span> 的下采样分辨率分别为 0.2m 和 0.4m。</p><p>2、<strong>扫描匹配</strong>：我们通过扫描匹配将新获得的激光雷达帧 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi mathvariant="double-struck">F</mi><mrow><mi>i</mi><mo>+</mo><mn>1</mn></mrow></msub></mrow><annotation encoding="application/x-tex">\mathbb{F}_{i+1}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.897221em;vertical-align:-0.208331em;"></span><span class="mord"><span class="mord"><span class="mord mathbb">F</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.311664em;"><span style="top:-2.5500000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">+</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.208331em;"><span></span></span></span></span></span></span></span></span></span>（<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">{</mo><msubsup><mi mathvariant="normal">F</mi><mrow><mi>i</mi><mo>+</mo><mn>1</mn></mrow><mi>e</mi></msubsup><mo separator="true">,</mo><msubsup><mi mathvariant="normal">F</mi><mrow><mi>i</mi><mo>+</mo><mn>1</mn></mrow><mi>p</mi></msubsup><mo stretchy="false">}</mo></mrow><annotation encoding="application/x-tex">\{\mathrm{F} _{i+1}^{e} , \mathrm{F} _{i+1}^{p}\}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.117495em;vertical-align:-0.335195em;"></span><span class="mopen">{</span><span class="mord"><span class="mord"><span class="mord mathrm">F</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.664392em;"><span style="top:-2.441336em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">+</span><span class="mord mtight">1</span></span></span></span><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">e</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.316995em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord"><span class="mord"><span class="mord mathrm">F</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7823em;"><span style="top:-2.423136em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">+</span><span class="mord mtight">1</span></span></span></span><span style="top:-3.1809080000000005em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">p</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.335195em;"><span></span></span></span></span></span></span><span class="mclose">}</span></span></span></span>与 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi mathvariant="bold">M</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">\mathbf{M}_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.83611em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord"><span class="mord mathbf">M</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.31166399999999994em;"><span style="top:-2.5500000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 匹配。有多种扫描匹配方法可用于此目的，如 <strong>ICP</strong> 和 <strong>GICP</strong>。在这里，我们选择使用 <strong>LOAM</strong> 中提出的方法，因为该方法计算效率高，而且在各种具有挑战性的环境中都很稳健。</p><p>我们首先将 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">{</mo><msubsup><mi mathvariant="normal">F</mi><mrow><mi>i</mi><mo>+</mo><mn>1</mn></mrow><mi>e</mi></msubsup><mo separator="true">,</mo><msubsup><mi mathvariant="normal">F</mi><mrow><mi>i</mi><mo>+</mo><mn>1</mn></mrow><mi>p</mi></msubsup><mo stretchy="false">}</mo></mrow><annotation encoding="application/x-tex">\{\mathrm{F} _{i+1}^{e} , \mathrm{F} _{i+1}^{p}\}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.117495em;vertical-align:-0.335195em;"></span><span class="mopen">{</span><span class="mord"><span class="mord"><span class="mord mathrm">F</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.664392em;"><span style="top:-2.441336em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">+</span><span class="mord mtight">1</span></span></span></span><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">e</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.316995em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord"><span class="mord"><span class="mord mathrm">F</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7823em;"><span style="top:-2.423136em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">+</span><span class="mord mtight">1</span></span></span></span><span style="top:-3.1809080000000005em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">p</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.335195em;"><span></span></span></span></span></span></span><span class="mclose">}</span></span></span></span> 从 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="bold">B</mi></mrow><annotation encoding="application/x-tex">\mathbf{B}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.68611em;vertical-align:0em;"></span><span class="mord"><span class="mord mathbf">B</span></span></span></span></span>  变换到  <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="bold">W</mi></mrow><annotation encoding="application/x-tex">\mathbf{W}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.68611em;vertical-align:0em;"></span><span class="mord"><span class="mord mathbf" style="margin-right:0.01597em;">W</span></span></span></span></span>，得到  <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mo stretchy="false">{</mo><mo mathvariant="normal" lspace="0em" rspace="0em">′</mo></msup><msubsup><mi mathvariant="normal">F</mi><mrow><mi>i</mi><mo>+</mo><mn>1</mn></mrow><mi>e</mi></msubsup><msup><mo separator="true">,</mo><mo mathvariant="normal" lspace="0em" rspace="0em">′</mo></msup><msubsup><mi mathvariant="normal">F</mi><mrow><mi>i</mi><mo>+</mo><mn>1</mn></mrow><mi>p</mi></msubsup><mo stretchy="false">}</mo></mrow><annotation encoding="application/x-tex">\{&#x27;\mathrm{F} _{i+1}^{e} , &#x27;\mathrm{F} _{i+1}^{p}\}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.117495em;vertical-align:-0.335195em;"></span><span class="mopen"><span class="mopen">{</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.751892em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span></span><span class="mord"><span class="mord"><span class="mord mathrm">F</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.664392em;"><span style="top:-2.441336em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">+</span><span class="mord mtight">1</span></span></span></span><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">e</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.316995em;"><span></span></span></span></span></span></span><span class="mpunct"><span class="mpunct">,</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.751892em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord"><span class="mord"><span class="mord mathrm">F</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7823em;"><span style="top:-2.423136em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">+</span><span class="mord mtight">1</span></span></span></span><span style="top:-3.1809080000000005em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">p</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.335195em;"><span></span></span></span></span></span></span><span class="mclose">}</span></span></span></span>。这个<strong>初始变换</strong>是利用 <strong>IMU</strong> 预测的机器人 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mover accent="true"><mi mathvariant="bold">T</mi><mo>~</mo></mover><mrow><mi>i</mi><mo>+</mo><mn>1</mn></mrow></msub></mrow><annotation encoding="application/x-tex">\tilde{\mathbf{T}}_{i+1}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.131301em;vertical-align:-0.208331em;"></span><span class="mord"><span class="mord accent"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.9229699999999998em;"><span style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord"><span class="mord mathbf">T</span></span></span></span><span style="top:-3.6051100000000003em;"><span class="pstrut" style="height:3em;"></span><span class="accent-body" style="left:-0.16666em;"><span class="mord">~</span></span></span></span></span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.311664em;"><span style="top:-2.5500000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">+</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.208331em;"><span></span></span></span></span></span></span></span></span></span>  的运动得出的。对于 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mrow></mrow><mo mathvariant="normal" lspace="0em" rspace="0em">′</mo></msup><msubsup><mi mathvariant="normal">F</mi><mrow><mi>i</mi><mo>+</mo><mn>1</mn></mrow><mi>e</mi></msubsup></mrow><annotation encoding="application/x-tex">&#x27;\mathrm{F} _{i+1}^{e}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0688870000000001em;vertical-align:-0.316995em;"></span><span class="mord"><span></span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.751892em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span></span><span class="mord"><span class="mord"><span class="mord mathrm">F</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.664392em;"><span style="top:-2.441336em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">+</span><span class="mord mtight">1</span></span></span></span><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">e</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.316995em;"><span></span></span></span></span></span></span></span></span></span> 或 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mrow></mrow><mo mathvariant="normal" lspace="0em" rspace="0em">′</mo></msup><msubsup><mi mathvariant="normal">F</mi><mrow><mi>i</mi><mo>+</mo><mn>1</mn></mrow><mi>p</mi></msubsup></mrow><annotation encoding="application/x-tex">&#x27;\mathrm{F} _{i+1}^{p}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.117495em;vertical-align:-0.335195em;"></span><span class="mord"><span></span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.751892em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span></span><span class="mord"><span class="mord"><span class="mord mathrm">F</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7823em;"><span style="top:-2.423136em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">+</span><span class="mord mtight">1</span></span></span></span><span style="top:-3.1809080000000005em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">p</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.335195em;"><span></span></span></span></span></span></span></span></span></span> 中的每个特征，我们都要在 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msubsup><mi mathvariant="bold">M</mi><mi>i</mi><mi>p</mi></msubsup></mrow><annotation encoding="application/x-tex">\mathbf{M}^p_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.059164em;vertical-align:-0.276864em;"></span><span class="mord"><span class="mord"><span class="mord mathbf">M</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7823em;"><span style="top:-2.4231360000000004em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span><span style="top:-3.1809080000000005em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">p</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.276864em;"><span></span></span></span></span></span></span></span></span></span> 或 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msubsup><mi mathvariant="bold">M</mi><mi>i</mi><mi>e</mi></msubsup></mrow><annotation encoding="application/x-tex">\mathbf{M}^e_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.944774em;vertical-align:-0.258664em;"></span><span class="mord"><span class="mord"><span class="mord mathbf">M</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.664392em;"><span style="top:-2.441336em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">e</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.258664em;"><span></span></span></span></span></span></span></span></span></span> 中找到其<strong>边缘或平面对应关系</strong>。</p><p>3、<strong>相对变换</strong>： 特征与其边缘或平面块对应关系之间的距离可以通过以下公式计算出来：</p><p class='katex-block'><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mtable rowspacing="0.24999999999999992em" columnalign="center" columnspacing="1em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><msub><mi mathvariant="bold">d</mi><msub><mi>e</mi><mi>k</mi></msub></msub><mo>=</mo><mfrac><mrow><mo fence="true">∣</mo><mrow><mo fence="true">(</mo><msubsup><mi mathvariant="bold">p</mi><mrow><mi>i</mi><mo>+</mo><mn>1</mn><mo separator="true">,</mo><mi>k</mi></mrow><mi>e</mi></msubsup><mo>−</mo><msubsup><mi mathvariant="bold">p</mi><mrow><mi>i</mi><mo separator="true">,</mo><mi>u</mi></mrow><mi>e</mi></msubsup><mo fence="true">)</mo></mrow><mo>×</mo><mrow><mo fence="true">(</mo><msubsup><mi mathvariant="bold">p</mi><mrow><mi>i</mi><mo>+</mo><mn>1</mn><mo separator="true">,</mo><mi>k</mi></mrow><mi>e</mi></msubsup><mo>−</mo><msubsup><mi mathvariant="bold">p</mi><mrow><mi>i</mi><mo separator="true">,</mo><mi>v</mi></mrow><mi>e</mi></msubsup><mo fence="true">)</mo></mrow><mo fence="true">∣</mo></mrow><mrow><mo fence="true">∣</mo><msubsup><mi mathvariant="bold">p</mi><mrow><mi>i</mi><mo separator="true">,</mo><mi>u</mi></mrow><mi>e</mi></msubsup><mo>−</mo><msubsup><mi mathvariant="bold">p</mi><mrow><mi>i</mi><mo separator="true">,</mo><mi>v</mi></mrow><mi>e</mi></msubsup><mo fence="true">∣</mo></mrow></mfrac></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><msub><mi mathvariant="bold">d</mi><msub><mi>p</mi><mi>k</mi></msub></msub><mo>=</mo><mfrac><mrow><mo fence="true">∣</mo><mtable rowspacing="0.15999999999999992em" columnalign="center" columnspacing="1em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mo fence="true">(</mo><msubsup><mi mathvariant="bold">p</mi><mrow><mi>i</mi><mo>+</mo><mn>1</mn><mo separator="true">,</mo><mi>k</mi></mrow><mi>p</mi></msubsup><mo>−</mo><msubsup><mi mathvariant="bold">p</mi><mrow><mi>i</mi><mo separator="true">,</mo><mi>u</mi></mrow><mi>p</mi></msubsup><mo fence="true">)</mo></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mrow><mo fence="true">(</mo><msubsup><mi mathvariant="bold">p</mi><mrow><mi>i</mi><mo separator="true">,</mo><mi>u</mi></mrow><mi>p</mi></msubsup><mo>−</mo><msubsup><mi mathvariant="bold">p</mi><mrow><mi>i</mi><mo separator="true">,</mo><mi>v</mi></mrow><mi>p</mi></msubsup><mo fence="true">)</mo></mrow><mo>×</mo><mrow><mo fence="true">(</mo><msubsup><mi mathvariant="bold">p</mi><mrow><mi>i</mi><mo separator="true">,</mo><mi>u</mi></mrow><mi>p</mi></msubsup><mo>−</mo><msubsup><mi mathvariant="bold">p</mi><mrow><mi>i</mi><mo separator="true">,</mo><mi>w</mi></mrow><mi>p</mi></msubsup><mo fence="true">)</mo></mrow></mrow></mstyle></mtd></mtr></mtable><mo fence="true">∣</mo></mrow><mrow><mo fence="true">∣</mo><mrow><mo fence="true">(</mo><msubsup><mi mathvariant="bold">p</mi><mrow><mi>i</mi><mo separator="true">,</mo><mi>u</mi></mrow><mi>p</mi></msubsup><mo>−</mo><msubsup><mi mathvariant="bold">p</mi><mrow><mi>i</mi><mo separator="true">,</mo><mi>v</mi></mrow><mi>p</mi></msubsup><mo fence="true">)</mo></mrow><mo>×</mo><mrow><mo fence="true">(</mo><msubsup><mi mathvariant="bold">p</mi><mrow><mi>i</mi><mo separator="true">,</mo><mi>u</mi></mrow><mi>p</mi></msubsup><mo>−</mo><msubsup><mi mathvariant="bold">p</mi><mrow><mi>i</mi><mo separator="true">,</mo><mi>w</mi></mrow><mi>p</mi></msubsup><mo fence="true">)</mo></mrow><mo fence="true">∣</mo></mrow></mfrac><mo separator="true">,</mo></mrow></mstyle></mtd></mtr></mtable><annotation encoding="application/x-tex">\begin{gathered}\mathbf{d}_{e_k}=\frac{\left|\left(\mathbf{p}_{i+1, k}^e-\mathbf{p}_{i, u}^e\right) \times\left(\mathbf{p}_{i+1, k}^e-\mathbf{p}_{i, v}^e\right)\right|}{\left|\mathbf{p}_{i, u}^e-\mathbf{p}_{i, v}^e\right|} \\\mathbf{d}_{p_k}=\frac{\left|\begin{array}{c}\left(\mathbf{p}_{i+1, k}^p-\mathbf{p}_{i, u}^p\right) \\\left(\mathbf{p}_{i, u}^p-\mathbf{p}_{i, v}^p\right) \times\left(\mathbf{p}_{i, u}^p-\mathbf{p}_{i, w}^p\right)\end{array}\right|}{\left|\left(\mathbf{p}_{i, u}^p-\mathbf{p}_{i, v}^p\right) \times\left(\mathbf{p}_{i, u}^p-\mathbf{p}_{i, w}^p\right)\right|},\end{gathered}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:8.61336em;vertical-align:-4.05668em;"></span><span class="mord"><span class="mtable"><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:4.55668em;"><span style="top:-7.800146em;"><span class="pstrut" style="height:5.4574609999999995em;"></span><span class="mord"><span class="mord"><span class="mord"><span class="mord mathbf">d</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.15139199999999997em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight">e</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3448em;"><span style="top:-2.3487714285714287em;margin-left:0em;margin-right:0.07142857142857144em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mathnormal mtight" style="margin-right:0.03148em;">k</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15122857142857138em;"><span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.25586em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.213995em;"><span style="top:-2.4159949999999997em;"><span class="pstrut" style="height:3.173975em;"></span><span class="mord"><span class="minner"><span class="mopen"><span class="delimsizing mult"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8679800000000001em;"><span style="top:-2.2559899999999997em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>∣</span></span></span><span style="top:-2.26698em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>∣</span></span></span><span style="top:-2.86798em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>∣</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.35000999999999993em;"><span></span></span></span></span></span></span><span class="mord"><span class="mord"><span class="mord mathbf">p</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.646192em;"><span style="top:-2.4231360000000004em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight">u</span></span></span></span><span style="top:-3.0448000000000004em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">e</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4129719999999999em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mord"><span class="mord"><span class="mord mathbf">p</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.646192em;"><span style="top:-2.4231360000000004em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.03588em;">v</span></span></span></span><span style="top:-3.0448000000000004em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">e</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4129719999999999em;"><span></span></span></span></span></span></span><span class="mclose"><span class="delimsizing mult"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8679800000000001em;"><span style="top:-2.2559899999999997em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>∣</span></span></span><span style="top:-2.26698em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>∣</span></span></span><span style="top:-2.86798em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>∣</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.35000999999999993em;"><span></span></span></span></span></span></span></span></span></span><span style="top:-3.403975em;"><span class="pstrut" style="height:3.173975em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-4.213995000000001em;"><span class="pstrut" style="height:3.173975em;"></span><span class="mord"><span class="minner"><span class="mopen"><span class="delimsizing mult"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.173975em;"><span style="top:-1.955985em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>∣</span></span></span><span style="top:-2.556985em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>∣</span></span></span><span style="top:-2.572975em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>∣</span></span></span><span style="top:-3.173975em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>∣</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.6500149999999999em;"><span></span></span></span></span></span></span><span class="minner"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size2">(</span></span><span class="mord"><span class="mord"><span class="mord mathbf">p</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.664392em;"><span style="top:-2.4168920000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">+</span><span class="mord mtight">1</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.03148em;">k</span></span></span></span><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">e</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4192159999999999em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mord"><span class="mord"><span class="mord mathbf">p</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.664392em;"><span style="top:-2.441336em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight">u</span></span></span></span><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">e</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.394772em;"><span></span></span></span></span></span></span><span class="mclose delimcenter" style="top:0em;"><span class="delimsizing size2">)</span></span></span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size2">(</span></span><span class="mord"><span class="mord"><span class="mord mathbf">p</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.664392em;"><span style="top:-2.4168920000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">+</span><span class="mord mtight">1</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.03148em;">k</span></span></span></span><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">e</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4192159999999999em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mord"><span class="mord"><span class="mord mathbf">p</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.664392em;"><span style="top:-2.441336em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.03588em;">v</span></span></span></span><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">e</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.394772em;"><span></span></span></span></span></span></span><span class="mclose delimcenter" style="top:0em;"><span class="delimsizing size2">)</span></span></span><span class="mclose"><span class="delimsizing mult"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.173975em;"><span style="top:-1.955985em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>∣</span></span></span><span style="top:-2.556985em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>∣</span></span></span><span style="top:-2.572975em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>∣</span></span></span><span style="top:-3.173975em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>∣</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.6500149999999999em;"><span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.170952em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span><span style="top:-2.871733em;"><span class="pstrut" style="height:5.4574609999999995em;"></span><span class="mord"><span class="mord"><span class="mord"><span class="mord mathbf">d</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.15139200000000003em;"><span style="top:-2.5500000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight">p</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3448em;"><span style="top:-2.3487714285714287em;margin-left:0em;margin-right:0.07142857142857144em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mathnormal mtight" style="margin-right:0.03148em;">k</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15122857142857138em;"><span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.286108em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:3.4574609999999995em;"><span style="top:-3.0279849999999997em;"><span class="pstrut" style="height:3.785965em;"></span><span class="mord"><span class="minner"><span class="mopen"><span class="delimsizing mult"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8679800000000001em;"><span style="top:-2.2559899999999997em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>∣</span></span></span><span style="top:-2.26698em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>∣</span></span></span><span style="top:-2.86798em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>∣</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.35000999999999993em;"><span></span></span></span></span></span></span><span class="minner"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size1">(</span></span><span class="mord"><span class="mord"><span class="mord mathbf">p</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7823em;"><span style="top:-2.4231360000000004em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight">u</span></span></span></span><span style="top:-3.1809080000000005em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">p</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.412972em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mord"><span class="mord"><span class="mord mathbf">p</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7823em;"><span style="top:-2.4231360000000004em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.03588em;">v</span></span></span></span><span style="top:-3.1809080000000005em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">p</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.412972em;"><span></span></span></span></span></span></span><span class="mclose delimcenter" style="top:0em;"><span class="delimsizing size1">)</span></span></span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size1">(</span></span><span class="mord"><span class="mord"><span class="mord mathbf">p</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7823em;"><span style="top:-2.4231360000000004em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight">u</span></span></span></span><span style="top:-3.1809080000000005em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">p</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.412972em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mord"><span class="mord"><span class="mord mathbf">p</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7823em;"><span style="top:-2.4231360000000004em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.02691em;">w</span></span></span></span><span style="top:-3.1809080000000005em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">p</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.412972em;"><span></span></span></span></span></span></span><span class="mclose delimcenter" style="top:0em;"><span class="delimsizing size1">)</span></span></span><span class="mclose"><span class="delimsizing mult"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8679800000000001em;"><span style="top:-2.2559899999999997em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>∣</span></span></span><span style="top:-2.26698em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>∣</span></span></span><span style="top:-2.86798em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>∣</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.35000999999999993em;"><span></span></span></span></span></span></span></span></span></span><span style="top:-4.015965em;"><span class="pstrut" style="height:3.785965em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-5.4574609999999995em;"><span class="pstrut" style="height:3.785965em;"></span><span class="mord"><span class="minner"><span class="mopen"><span class="delimsizing mult"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.785965em;"><span style="top:-1.355975em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>∣</span></span></span><span style="top:-1.956975em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>∣</span></span></span><span style="top:-2.557975em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>∣</span></span></span><span style="top:-3.158975em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>∣</span></span></span><span style="top:-3.184965em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>∣</span></span></span><span style="top:-3.785965em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>∣</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.250025em;"><span></span></span></span></span></span></span><span class="mord"><span class="mtable"><span class="arraycolsep" style="width:0.5em;"></span><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.781496em;"><span style="top:-3.781496em;"><span class="pstrut" style="height:3.15em;"></span><span class="mord"><span class="minner"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size2">(</span></span><span class="mord"><span class="mord"><span class="mord mathbf">p</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7823em;"><span style="top:-2.3986920000000005em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">+</span><span class="mord mtight">1</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.03148em;">k</span></span></span></span><span style="top:-3.1809080000000005em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">p</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4374159999999999em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mord"><span class="mord"><span class="mord mathbf">p</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7823em;"><span style="top:-2.4231360000000004em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight">u</span></span></span></span><span style="top:-3.1809080000000005em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">p</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.412972em;"><span></span></span></span></span></span></span><span class="mclose delimcenter" style="top:0em;"><span class="delimsizing size2">)</span></span></span></span></span><span style="top:-2.281476em;"><span class="pstrut" style="height:3.15em;"></span><span class="mord"><span class="minner"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size1">(</span></span><span class="mord"><span class="mord"><span class="mord mathbf">p</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7823em;"><span style="top:-2.4231360000000004em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight">u</span></span></span></span><span style="top:-3.1809080000000005em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">p</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.412972em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mord"><span class="mord"><span class="mord mathbf">p</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7823em;"><span style="top:-2.4231360000000004em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.03588em;">v</span></span></span></span><span style="top:-3.1809080000000005em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">p</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.412972em;"><span></span></span></span></span></span></span><span class="mclose delimcenter" style="top:0em;"><span class="delimsizing size1">)</span></span></span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size1">(</span></span><span class="mord"><span class="mord"><span class="mord mathbf">p</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7823em;"><span style="top:-2.4231360000000004em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight">u</span></span></span></span><span style="top:-3.1809080000000005em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">p</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.412972em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mord"><span class="mord"><span class="mord mathbf">p</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7823em;"><span style="top:-2.4231360000000004em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.02691em;">w</span></span></span></span><span style="top:-3.1809080000000005em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">p</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.412972em;"><span></span></span></span></span></span></span><span class="mclose delimcenter" style="top:0em;"><span class="delimsizing size1">)</span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.281496em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:0.5em;"></span></span></span><span class="mclose"><span class="delimsizing mult"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.785965em;"><span style="top:-1.355975em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>∣</span></span></span><span style="top:-1.956975em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>∣</span></span></span><span style="top:-2.557975em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>∣</span></span></span><span style="top:-3.158975em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>∣</span></span></span><span style="top:-3.184965em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>∣</span></span></span><span style="top:-3.785965em;"><span class="pstrut" style="height:2.606em;"></span><span class="delimsizinginner delim-size1"><span>∣</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.250025em;"><span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.1709520000000002em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mpunct">,</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:4.05668em;"><span></span></span></span></span></span></span></span></span></span></span></span></p><p>其中 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>k</mi><mo separator="true">,</mo><mi>u</mi><mo separator="true">,</mo><mi>v</mi></mrow><annotation encoding="application/x-tex">k, u, v</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8888799999999999em;vertical-align:-0.19444em;"></span><span class="mord mathnormal" style="margin-right:0.03148em;">k</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord mathnormal">u</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord mathnormal" style="margin-right:0.03588em;">v</span></span></span></span>, 和 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>w</mi></mrow><annotation encoding="application/x-tex">w</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.43056em;vertical-align:0em;"></span><span class="mord mathnormal" style="margin-right:0.02691em;">w</span></span></span></span> 是相应集合中的<strong>特征索引</strong>。 对于<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mrow></mrow><mo mathvariant="normal" lspace="0em" rspace="0em">′</mo></msup><msubsup><mi mathvariant="normal">F</mi><mrow><mi>i</mi><mo>+</mo><mn>1</mn></mrow><mi>e</mi></msubsup></mrow><annotation encoding="application/x-tex">{ }^{\prime} \mathrm{F}_{i+1}^e</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0688870000000001em;vertical-align:-0.316995em;"></span><span class="mord"><span class="mord"></span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.751892em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span></span><span class="mord"><span class="mord"><span class="mord mathrm">F</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.664392em;"><span style="top:-2.441336em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">+</span><span class="mord mtight">1</span></span></span></span><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">e</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.316995em;"><span></span></span></span></span></span></span></span></span></span> 中的<strong>边缘特征</strong> <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msubsup><mi mathvariant="bold">p</mi><mrow><mi>i</mi><mo>+</mo><mn>1</mn><mo separator="true">,</mo><mi>k</mi></mrow><mi>e</mi></msubsup></mrow><annotation encoding="application/x-tex">\mathbf{p}_{i+1, k}^e</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.083608em;vertical-align:-0.4192159999999999em;"></span><span class="mord"><span class="mord"><span class="mord mathbf">p</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.664392em;"><span style="top:-2.4168920000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">+</span><span class="mord mtight">1</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.03148em;">k</span></span></span></span><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">e</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4192159999999999em;"><span></span></span></span></span></span></span></span></span></span> , <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msubsup><mi mathvariant="bold">p</mi><mrow><mi>i</mi><mo separator="true">,</mo><mi>u</mi></mrow><mi>e</mi></msubsup></mrow><annotation encoding="application/x-tex">\mathbf{p}_{i, u}^e</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.059164em;vertical-align:-0.394772em;"></span><span class="mord"><span class="mord"><span class="mord mathbf">p</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.664392em;"><span style="top:-2.441336em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight">u</span></span></span></span><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">e</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.394772em;"><span></span></span></span></span></span></span></span></span></span> 和 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msubsup><mi mathvariant="bold">p</mi><mrow><mi>i</mi><mo separator="true">,</mo><mi>v</mi></mrow><mi>e</mi></msubsup></mrow><annotation encoding="application/x-tex">\mathbf{p}_{i, v}^e</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.059164em;vertical-align:-0.394772em;"></span><span class="mord"><span class="mord"><span class="mord mathbf">p</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.664392em;"><span style="top:-2.441336em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.03588em;">v</span></span></span></span><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">e</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.394772em;"><span></span></span></span></span></span></span></span></span></span>是 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msubsup><mi mathvariant="bold">M</mi><mi>i</mi><mi>e</mi></msubsup></mrow><annotation encoding="application/x-tex">\mathbf{M}^e_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.944774em;vertical-align:-0.258664em;"></span><span class="mord"><span class="mord"><span class="mord mathbf">M</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.664392em;"><span style="top:-2.441336em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">e</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.258664em;"><span></span></span></span></span></span></span></span></span></span> 中构成<strong>相应边缘线的点</strong>。 对于<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mrow></mrow><mo mathvariant="normal" lspace="0em" rspace="0em">′</mo></msup><msubsup><mi mathvariant="normal">F</mi><mrow><mi>i</mi><mo>+</mo><mn>1</mn></mrow><mi>p</mi></msubsup></mrow><annotation encoding="application/x-tex">{ }^{\prime} \mathrm{F}_{i+1}^p</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.117495em;vertical-align:-0.335195em;"></span><span class="mord"><span class="mord"></span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.751892em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span></span><span class="mord"><span class="mord"><span class="mord mathrm">F</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7823em;"><span style="top:-2.423136em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">+</span><span class="mord mtight">1</span></span></span></span><span style="top:-3.1809080000000005em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">p</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.335195em;"><span></span></span></span></span></span></span></span></span></span> 中的<strong>平面特征</strong> <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msubsup><mi mathvariant="bold">p</mi><mrow><mi>i</mi><mo>+</mo><mn>1</mn><mo separator="true">,</mo><mi>k</mi></mrow><mi>p</mi></msubsup></mrow><annotation encoding="application/x-tex">\mathbf{p}_{i+1, k}^p</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.219716em;vertical-align:-0.4374159999999999em;"></span><span class="mord"><span class="mord"><span class="mord mathbf">p</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7823em;"><span style="top:-2.3986920000000005em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">+</span><span class="mord mtight">1</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.03148em;">k</span></span></span></span><span style="top:-3.1809080000000005em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">p</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4374159999999999em;"><span></span></span></span></span></span></span></span></span></span> , <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msubsup><mi mathvariant="bold">p</mi><mrow><mi>i</mi><mo separator="true">,</mo><mi>u</mi></mrow><mi>p</mi></msubsup><mo separator="true">,</mo><msubsup><mi mathvariant="bold">p</mi><mrow><mi>i</mi><mo separator="true">,</mo><mi>v</mi></mrow><mi>p</mi></msubsup></mrow><annotation encoding="application/x-tex">\mathbf{p}_{i, u}^p, \mathbf{p}_{i, v}^p</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.1952720000000001em;vertical-align:-0.412972em;"></span><span class="mord"><span class="mord"><span class="mord mathbf">p</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7823em;"><span style="top:-2.4231360000000004em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight">u</span></span></span></span><span style="top:-3.1809080000000005em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">p</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.412972em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord"><span class="mord"><span class="mord mathbf">p</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7823em;"><span style="top:-2.4231360000000004em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.03588em;">v</span></span></span></span><span style="top:-3.1809080000000005em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">p</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.412972em;"><span></span></span></span></span></span></span></span></span></span>, 和 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msubsup><mi mathvariant="bold">p</mi><mrow><mi>i</mi><mo separator="true">,</mo><mi>w</mi></mrow><mi>p</mi></msubsup></mrow><annotation encoding="application/x-tex">\mathbf{p}_{i, w}^p</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.1952720000000001em;vertical-align:-0.412972em;"></span><span class="mord"><span class="mord"><span class="mord mathbf">p</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7823em;"><span style="top:-2.4231360000000004em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.02691em;">w</span></span></span></span><span style="top:-3.1809080000000005em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">p</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.412972em;"><span></span></span></span></span></span></span></span></span></span>  在 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msubsup><mi mathvariant="bold">M</mi><mi>i</mi><mi>p</mi></msubsup></mrow><annotation encoding="application/x-tex">\mathbf{M}^p_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.059164em;vertical-align:-0.276864em;"></span><span class="mord"><span class="mord"><span class="mord mathbf">M</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7823em;"><span style="top:-2.4231360000000004em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span><span style="top:-3.1809080000000005em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">p</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.276864em;"><span></span></span></span></span></span></span></span></span></span> 中构成<strong>相应的平面块</strong>。然后使用<strong>高斯牛顿法</strong>求解最优变换，即<strong>最小化</strong>：</p><p class='katex-block'><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><munder><mo><mi>min</mi><mo>⁡</mo></mo><msub><mi mathvariant="bold">T</mi><mrow><mi>i</mi><mo>+</mo><mn>1</mn></mrow></msub></munder><mrow><mo fence="true">{</mo><munder><mo>∑</mo><mrow><msubsup><mi mathvariant="bold">p</mi><mrow><mi>i</mi><mo>+</mo><mn>1</mn><mo separator="true">,</mo><mi>k</mi></mrow><mi>e</mi></msubsup><mo>∈</mo><msup><mo>∈</mo><mo mathvariant="normal" lspace="0em" rspace="0em">′</mo></msup><msubsup><mi mathvariant="bold">F</mi><mrow><mi>i</mi><mo>+</mo><mn>1</mn></mrow><mi>e</mi></msubsup></mrow></munder><msub><mi mathvariant="bold">d</mi><msub><mi>e</mi><mi>k</mi></msub></msub><mo>+</mo><munder><mo>∑</mo><mrow><msubsup><mi mathvariant="bold">p</mi><mrow><mi>i</mi><mo>+</mo><mn>1</mn><mo separator="true">,</mo><mi>k</mi></mrow><mi>p</mi></msubsup><mo>∈</mo><msubsup><mi mathvariant="normal">F</mi><mrow><mi>i</mi><mo>+</mo><mn>1</mn></mrow><mi>p</mi></msubsup></mrow></munder><msub><mi mathvariant="bold">d</mi><msub><mi>p</mi><mi>k</mi></msub></msub><mo fence="true">}</mo></mrow><mi mathvariant="normal">.</mi></mrow><annotation encoding="application/x-tex">\min _{\mathbf{T}_{i+1}}\left\{\sum_{\mathbf{p}_{i+1, k}^e \in \in^{\prime} \mathbf{F}_{i+1}^e} \mathbf{d}_{e_k}+\sum_{\mathbf{p}_{i+1, k}^p \in \mathrm{F}_{i+1}^p} \mathbf{d}_{p_k}\right\} .</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:3.7601649999999998em;vertical-align:-1.710145em;"></span><span class="mop op-limits"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.66786em;"><span style="top:-2.353723em;margin-left:0em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathbf mtight">T</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.32808571428571426em;"><span style="top:-2.357em;margin-right:0.07142857142857144em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">+</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.20252142857142857em;"><span></span></span></span></span></span></span></span></span></span><span style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span><span class="mop">min</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.888042em;"><span></span></span></span></span></span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="minner"><span class="mopen"><span class="delimsizing mult"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.05002em;"><span style="top:-2.49999em;"><span class="pstrut" style="height:3.15em;"></span><span class="delimsizinginner delim-size4"><span>⎩</span></span></span><span style="top:-2.20499em;"><span class="pstrut" style="height:3.15em;"></span><span class="delimsizinginner delim-size4"><span>⎪</span></span></span><span style="top:-3.15001em;"><span class="pstrut" style="height:3.15em;"></span><span class="delimsizinginner delim-size4"><span>⎨</span></span></span><span style="top:-4.00501em;"><span class="pstrut" style="height:3.15em;"></span><span class="delimsizinginner delim-size4"><span>⎪</span></span></span><span style="top:-4.30002em;"><span class="pstrut" style="height:3.15em;"></span><span class="delimsizinginner delim-size4"><span>⎧</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.55002em;"><span></span></span></span></span></span></span><span class="mop op-limits"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.050005em;"><span style="top:-1.8537179999999998em;margin-left:0em;"><span class="pstrut" style="height:3.05em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathbf mtight">p</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.6523428571428572em;"><span style="top:-2.1527714285714286em;margin-right:0.07142857142857144em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">+</span><span class="mord mtight">1</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.03148em;">k</span></span></span></span><span style="top:-2.8448em;margin-right:0.07142857142857144em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mathnormal mtight">e</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.48611428571428567em;"><span></span></span></span></span></span></span><span class="mrel mtight">∈</span><span class="mrel mtight"><span class="mrel mtight">∈</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.6828285714285715em;"><span style="top:-2.786em;margin-right:0.07142857142857144em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span></span><span class="mord mtight"><span class="mord mtight"><span class="mord mathbf mtight">F</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.6523428571428571em;"><span style="top:-2.177714285714286em;margin-right:0.07142857142857144em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">+</span><span class="mord mtight">1</span></span></span></span><span style="top:-2.8447999999999998em;margin-right:0.07142857142857144em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mathnormal mtight">e</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.38180714285714284em;"><span></span></span></span></span></span></span></span></span></span><span style="top:-3.0500049999999996em;"><span class="pstrut" style="height:3.05em;"></span><span><span class="mop op-symbol large-op">∑</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.636562em;"><span></span></span></span></span></span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord"><span class="mord"><span class="mord mathbf">d</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.15139199999999997em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight">e</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3448em;"><span style="top:-2.3487714285714287em;margin-left:0em;margin-right:0.07142857142857144em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mathnormal mtight" style="margin-right:0.03148em;">k</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15122857142857138em;"><span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.25586em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mop op-limits"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.050005em;"><span style="top:-1.7801349999999998em;margin-left:0em;"><span class="pstrut" style="height:3.05em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathbf mtight">p</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7912285714285715em;"><span style="top:-2.1527714285714286em;margin-right:0.07142857142857144em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">+</span><span class="mord mtight">1</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.03148em;">k</span></span></span></span><span style="top:-2.9836857142857145em;margin-right:0.07142857142857144em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mathnormal mtight">p</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.48611428571428567em;"><span></span></span></span></span></span></span><span class="mrel mtight">∈</span><span class="mord mtight"><span class="mord mtight"><span class="mord mathrm mtight">F</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7912285714285714em;"><span style="top:-2.177714285714286em;margin-right:0.07142857142857144em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">+</span><span class="mord mtight">1</span></span></span></span><span style="top:-2.9836857142857145em;margin-right:0.07142857142857144em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mathnormal mtight">p</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.3818071428571428em;"><span></span></span></span></span></span></span></span></span></span><span style="top:-3.0500049999999996em;"><span class="pstrut" style="height:3.05em;"></span><span><span class="mop op-symbol large-op">∑</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.710145em;"><span></span></span></span></span></span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord"><span class="mord"><span class="mord mathbf">d</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.15139200000000003em;"><span style="top:-2.5500000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight">p</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3448em;"><span style="top:-2.3487714285714287em;margin-left:0em;margin-right:0.07142857142857144em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mathnormal mtight" style="margin-right:0.03148em;">k</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15122857142857138em;"><span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.286108em;"><span></span></span></span></span></span></span><span class="mclose"><span class="delimsizing mult"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.05002em;"><span style="top:-2.49999em;"><span class="pstrut" style="height:3.15em;"></span><span class="delimsizinginner delim-size4"><span>⎭</span></span></span><span style="top:-2.20499em;"><span class="pstrut" style="height:3.15em;"></span><span class="delimsizinginner delim-size4"><span>⎪</span></span></span><span style="top:-3.15001em;"><span class="pstrut" style="height:3.15em;"></span><span class="delimsizinginner delim-size4"><span>⎬</span></span></span><span style="top:-4.00501em;"><span class="pstrut" style="height:3.15em;"></span><span class="delimsizinginner delim-size4"><span>⎪</span></span></span><span style="top:-4.30002em;"><span class="pstrut" style="height:3.15em;"></span><span class="delimsizinginner delim-size4"><span>⎫</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.55002em;"><span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord">.</span></span></span></span></span></p><p>最后，我们可以得到 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi mathvariant="normal">x</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">\mathrm{x}_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.58056em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord"><span class="mord mathrm">x</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.31166399999999994em;"><span style="top:-2.5500000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 和 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi mathvariant="normal">x</mi><mrow><mi>i</mi><mo>+</mo><mn>1</mn></mrow></msub></mrow><annotation encoding="application/x-tex">\mathrm{x}_{i+1}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.638891em;vertical-align:-0.208331em;"></span><span class="mord"><span class="mord"><span class="mord mathrm">x</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.311664em;"><span style="top:-2.5500000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">+</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.208331em;"><span></span></span></span></span></span></span></span></span></span> 之间的相对变换 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="normal">Δ</mi><msub><mi mathvariant="bold">T</mi><mrow><mi>i</mi><mo separator="true">,</mo><mi>i</mi><mo>+</mo><mn>1</mn></mrow></msub></mrow><annotation encoding="application/x-tex">\Delta \mathbf{T}_{i, i+1}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.972218em;vertical-align:-0.286108em;"></span><span class="mord">Δ</span><span class="mord"><span class="mord"><span class="mord mathbf">T</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.311664em;"><span style="top:-2.5500000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight">i</span><span class="mbin mtight">+</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.286108em;"><span></span></span></span></span></span></span></span></span></span>，它是连接这两个位置的<strong>激光雷达因子</strong>：</p><p class='katex-block'><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi mathvariant="normal">Δ</mi><msub><mi mathvariant="bold">T</mi><mrow><mi>i</mi><mo separator="true">,</mo><mi>i</mi><mo>+</mo><mn>1</mn></mrow></msub><mo>=</mo><msubsup><mi mathvariant="bold">T</mi><mi>i</mi><mi mathvariant="normal">⊤</mi></msubsup><msub><mi mathvariant="bold">T</mi><mrow><mi>i</mi><mo>+</mo><mn>1</mn></mrow></msub></mrow><annotation encoding="application/x-tex">\Delta \mathbf{T}_{i, i+1}=\mathbf{T}_i^{\top} \mathbf{T}_{i+1}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.972218em;vertical-align:-0.286108em;"></span><span class="mord">Δ</span><span class="mord"><span class="mord"><span class="mord mathbf">T</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.311664em;"><span style="top:-2.5500000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight">i</span><span class="mbin mtight">+</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.286108em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:1.146108em;vertical-align:-0.247em;"></span><span class="mord"><span class="mord"><span class="mord mathbf">T</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8991079999999998em;"><span style="top:-2.4530000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">⊤</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.247em;"><span></span></span></span></span></span></span><span class="mord"><span class="mord"><span class="mord mathbf">T</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.311664em;"><span style="top:-2.5500000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">+</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.208331em;"><span></span></span></span></span></span></span></span></span></span></span></p><p>我们注意到，获取 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="normal">Δ</mi><msub><mi mathvariant="bold">T</mi><mrow><mi>i</mi><mo separator="true">,</mo><mi>i</mi><mo>+</mo><mn>1</mn></mrow></msub></mrow><annotation encoding="application/x-tex">\Delta \mathbf{T}_{i, i+1}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.972218em;vertical-align:-0.286108em;"></span><span class="mord">Δ</span><span class="mord"><span class="mord"><span class="mord mathbf">T</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.311664em;"><span style="top:-2.5500000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight">i</span><span class="mbin mtight">+</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.286108em;"><span></span></span></span></span></span></span></span></span></span> 的另一种方法是将子关键帧转换为  <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi mathvariant="normal">x</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">\mathrm{x}_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.58056em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord"><span class="mord mathrm">x</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.31166399999999994em;"><span style="top:-2.5500000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 帧。换句话说，我们将 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi mathvariant="double-struck">F</mi><mrow><mi>i</mi><mo>+</mo><mn>1</mn></mrow></msub></mrow><annotation encoding="application/x-tex">\mathbb{F}_{i+1}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.897221em;vertical-align:-0.208331em;"></span><span class="mord"><span class="mord"><span class="mord mathbb">F</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.311664em;"><span style="top:-2.5500000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">+</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.208331em;"><span></span></span></span></span></span></span></span></span></span> 与 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi mathvariant="normal">x</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">\mathrm{x}_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.58056em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord"><span class="mord mathrm">x</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.31166399999999994em;"><span style="top:-2.5500000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 帧所代表的体素图相匹配。这样，就可以直接得到真正的相对变换 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="normal">Δ</mi><msub><mi mathvariant="bold">T</mi><mrow><mi>i</mi><mo separator="true">,</mo><mi>i</mi><mo>+</mo><mn>1</mn></mrow></msub></mrow><annotation encoding="application/x-tex">\Delta \mathbf{T}_{i, i+1}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.972218em;vertical-align:-0.286108em;"></span><span class="mord">Δ</span><span class="mord"><span class="mord"><span class="mord mathbf">T</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.311664em;"><span style="top:-2.5500000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight">i</span><span class="mbin mtight">+</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.286108em;"><span></span></span></span></span></span></span></span></span></span>。由于变换后的特征 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msubsup><mi mathvariant="bold">M</mi><mi>i</mi><mi>p</mi></msubsup></mrow><annotation encoding="application/x-tex">\mathbf{M}^p_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.059164em;vertical-align:-0.276864em;"></span><span class="mord"><span class="mord"><span class="mord mathbf">M</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7823em;"><span style="top:-2.4231360000000004em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span><span style="top:-3.1809080000000005em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">p</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.276864em;"><span></span></span></span></span></span></span></span></span></span> 或 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msubsup><mi mathvariant="bold">M</mi><mi>i</mi><mi>e</mi></msubsup></mrow><annotation encoding="application/x-tex">\mathbf{M}^e_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.944774em;vertical-align:-0.258664em;"></span><span class="mord"><span class="mord"><span class="mord mathbf">M</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.664392em;"><span style="top:-2.441336em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">e</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.258664em;"><span></span></span></span></span></span></span></span></span></span> 可以多次<strong>重复使用</strong>，因此我们选择使用上上节中描述的方法，以<strong>提高计算效率</strong>。</p><h3 id="gps%E5%9B%A0%E5%AD%90" tabindex="-1">GPS因子</h3><p>虽然我们可以仅利用 IMU 预积分和激光雷达测距因素来获得可靠的状态估计和绘图，但系统在<strong>长时间导航任务</strong>中仍会受到漂移的影响。为了解决这个问题，我们可以引入能够提供<strong>绝对测量值的传感器来消除漂移</strong>。这类传感器包括<strong>高度计、指南针和全球定位系统</strong>。为了便于说明，我们在此讨论 GPS，因为它在现实世界的导航系统中得到了广泛应用。</p><p>当我们接收到 GPS 测量值时，我们将其转换为<strong>本地直角坐标</strong>。在因子图中添加一个新节点后，我们就会将一个新的 GPS 因子与该节点关联起来。如果 GPS 信号与激光雷达帧没有<strong>硬件同步</strong>，我们将根据<strong>激光雷达帧的时间戳对 GPS 测量值</strong>进行<strong>线性插值</strong>。</p><p>我们注意到，由于激光雷达惯性里程测量的漂移增长非常缓慢，因此在有 GPS 接收信号的情况下<strong>无需</strong>不断添加 GPS 因子。实际上，我们只在<strong>估计的位置协方差</strong>大于接收到的 GPS <strong>位置协方差</strong>时才添加 GPS 因子。</p><h3 id="%E9%97%AD%E7%8E%AF%E5%9B%A0%E5%AD%90" tabindex="-1">闭环因子</h3><p>与 LOAM 和 LIOM 不同的是，由于使用了<strong>因子图</strong>，<strong>闭环</strong>也可以无缝地纳入到所提出的系统中。为了便于说明，我们描述并实现了一种<strong>基于欧氏距离</strong>的<strong>简单但有效的闭环检测方法</strong>。我们还注意到，我们提出的框架与其他环路闭合检测方法兼容，它们生成<strong>点云描述符</strong>并用于<strong>地点识别</strong>。</p><p>当一个新的运动状态 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi mathvariant="normal">x</mi><mrow><mi>i</mi><mo>+</mo><mn>1</mn></mrow></msub></mrow><annotation encoding="application/x-tex">\mathrm{x}_{i+1}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.638891em;vertical-align:-0.208331em;"></span><span class="mord"><span class="mord"><span class="mord mathrm">x</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.311664em;"><span style="top:-2.5500000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">+</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.208331em;"><span></span></span></span></span></span></span></span></span></span> 被添加到因子图中时，我们首先搜索因子图，找出在<strong>欧几里得空间</strong>中与 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi mathvariant="normal">x</mi><mrow><mi>i</mi><mo>+</mo><mn>1</mn></mrow></msub></mrow><annotation encoding="application/x-tex">\mathrm{x}_{i+1}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.638891em;vertical-align:-0.208331em;"></span><span class="mord"><span class="mord"><span class="mord mathrm">x</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.311664em;"><span style="top:-2.5500000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">+</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.208331em;"><span></span></span></span></span></span></span></span></span></span> <strong>相近的先验状态</strong>。例如，如图所示，<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>x</mi><mn>3</mn></msub></mrow><annotation encoding="application/x-tex">x_3</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.58056em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.30110799999999993em;"><span style="top:-2.5500000000000003em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">3</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 就是返回的候选状态之一。然后，我们尝试使用扫描匹配法将 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi mathvariant="double-struck">F</mi><mrow><mi>i</mi><mo>+</mo><mn>1</mn></mrow></msub></mrow><annotation encoding="application/x-tex">\mathbb{F}_{i+1}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.897221em;vertical-align:-0.208331em;"></span><span class="mord"><span class="mord"><span class="mord mathbb">F</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.311664em;"><span style="top:-2.5500000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">+</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.208331em;"><span></span></span></span></span></span></span></span></span></span> 与子关键帧 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">{</mo><msub><mi mathvariant="double-struck">F</mi><mrow><mn>3</mn><mo>−</mo><mi>m</mi></mrow></msub><mo separator="true">,</mo><mo>⋯</mo><mtext> </mtext><mo separator="true">,</mo><msub><mi mathvariant="double-struck">F</mi><mn>3</mn></msub><mtext> </mtext><mo>⋯</mo><mtext> </mtext><mo separator="true">,</mo><msub><mi mathvariant="double-struck">F</mi><mrow><mn>3</mn><mo>+</mo><mi>m</mi></mrow></msub><mo stretchy="false">}</mo></mrow><annotation encoding="application/x-tex">\{\mathbb{F}_{3-m},\cdots,\mathbb{F}_{3}\,\cdots,\mathbb{F}_{3+m}\}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">{</span><span class="mord"><span class="mord"><span class="mord mathbb">F</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.301108em;"><span style="top:-2.5500000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">3</span><span class="mbin mtight">−</span><span class="mord mathnormal mtight">m</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.208331em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="minner">⋯</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord"><span class="mord"><span class="mord mathbb">F</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.30110799999999993em;"><span style="top:-2.5500000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">3</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="minner">⋯</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord"><span class="mord"><span class="mord mathbb">F</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.301108em;"><span style="top:-2.5500000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">3</span><span class="mbin mtight">+</span><span class="mord mathnormal mtight">m</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.208331em;"><span></span></span></span></span></span></span><span class="mclose">}</span></span></span></span> 匹配。需要注意的是，在扫描匹配之前，<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi mathvariant="double-struck">F</mi><mrow><mi>i</mi><mo>+</mo><mn>1</mn></mrow></msub></mrow><annotation encoding="application/x-tex">\mathbb{F}_{i+1}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.897221em;vertical-align:-0.208331em;"></span><span class="mord"><span class="mord"><span class="mord mathbb">F</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.311664em;"><span style="top:-2.5500000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">+</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.208331em;"><span></span></span></span></span></span></span></span></span></span> 和过去的子关键帧首先要转换成 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="bold">W</mi></mrow><annotation encoding="application/x-tex">\mathbf{W}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.68611em;vertical-align:0em;"></span><span class="mord"><span class="mord mathbf" style="margin-right:0.01597em;">W</span></span></span></span></span>。我们得到相对变换 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="normal">Δ</mi><msub><mi mathvariant="bold">T</mi><mrow><mn>3</mn><mo separator="true">,</mo><mi>i</mi><mo>+</mo><mn>1</mn></mrow></msub></mrow><annotation encoding="application/x-tex">\Delta \mathbf{T}_{3, i+1}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.972218em;vertical-align:-0.286108em;"></span><span class="mord">Δ</span><span class="mord"><span class="mord"><span class="mord mathbf">T</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.311664em;"><span style="top:-2.5500000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">3</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight">i</span><span class="mbin mtight">+</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.286108em;"><span></span></span></span></span></span></span></span></span></span> 并将其作为循环闭合因子添加到图中。在本文中，我们选择指数 m 为 12，并将从新状态 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi mathvariant="normal">x</mi><mrow><mi>i</mi><mo>+</mo><mn>1</mn></mrow></msub></mrow><annotation encoding="application/x-tex">\mathrm{x}_{i+1}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.638891em;vertical-align:-0.208331em;"></span><span class="mord"><span class="mord"><span class="mord mathrm">x</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.311664em;"><span style="top:-2.5500000000000003em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">+</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.208331em;"><span></span></span></span></span></span></span></span></span></span> 开始的闭环搜索距离设定为 15m。</p><p>在实践中，我们发现当<strong>全球定位系统</strong>是唯一可用的绝对传感器时，添加闭环因子对修正机器人<strong>高度漂移</strong>特别有用。这是因为全球定位系统的海拔测量非常不准确–在我们的测试中，在没有闭环的情况下，<strong>海拔误差</strong>接近 100 米。</p>]]>
                    </description>
                    <pubDate>Thu, 17 Aug 2023 16:51:57 CST</pubDate>
                </item>
                <item>
                    <title>
                        <![CDATA[卡尔曼滤波（KF）、扩展卡尔曼滤波（EKF）、误差状态卡尔曼滤波（ESKF）]]>
                    </title>
                    <link>https://zhengyu.tech/archives/kfekfeskf</link>
                    <description>
                            <![CDATA[<h2 id="%E7%AE%80%E4%BB%8B" tabindex="-1">简介</h2><p>当处理需要<strong>估计系统状态</strong>的问题时，<strong>卡尔曼滤波</strong>（<strong>KF</strong>）、<strong>扩展卡尔曼滤波</strong>（<strong>EKF</strong>）、<strong>误差状态卡尔曼滤波</strong>（<strong>ESKF</strong>）是常用的滤波算法。它们通过融合系统模型和测量数据，提供准确的状态估计，适用于导航、自动驾驶、机器人定位等领域。</p><ul><li><p>卡尔曼滤波（Kalman Filter，KF）：</p><ul><li>一种递归的、优化的状态估计算法，用于<strong>线性系统</strong>和<strong>高斯噪声</strong>下的<strong>状态估计</strong>。</li><li>通过动态模型和测量模型，实现预测和更新状态估计。</li><li>由Rudolf E. Kálmán在1960年提出，旨在解决航天任务中的导航和控制问题。KF通过<strong>最小化均方误差</strong>来优化状态估计。</li></ul></li><li><p>扩展卡尔曼滤波（Extended Kalman Filter，EKF）：</p><ul><li>通过使用<strong>泰勒展开</strong>来线性化非线性系统模型，从而进行状态估计，适用于一些中度非线性问题。</li><li>用于处理一些非线性系统，如机器人定位、传感器融合等领域，其中系统模型可以通过非线性函数描述。</li><li>扩展卡尔曼滤波由Paul J. Werbos在1971年提出，是为了处理<strong>非线性系统</strong>而发展的。</li></ul></li><li><p>误差状态卡尔曼滤波（Error-State Kalman Filter，ESKF）：</p><ul><li>ESKF是在EKF的基础上引入<strong>误差状态</strong>来进行状态估计的改进方法， 它将系统状态分解为<strong>真实状态</strong>和<strong>误差状态</strong>，并通过对<strong>误差状态</strong>进行卡尔曼滤波来提高估计精度。</li><li>引入误差状态来提高状态估计精度，同时考虑系统不确定性，用于非线性系统和传感器误差较大的环境。</li><li>ESKF在惯性导航和机器人定位中应用广泛，旨在克服EKF线性化<strong>误差累积</strong>和<strong>传感器误差</strong>的限制。</li></ul></li></ul><p>这些算法在实际应用中用于估计无法直接观测到的系统状态，如导航、机器人定位、目标跟踪、自动驾驶等领域。选择合适的算法取决于<strong>系统的性质</strong>、<strong>模型的复杂性</strong>以及应用的需求。KF、EKF、ESKF等是状态估计领域中的<strong>基础滤波算法</strong>，而且还有其他滤波方法，可以根据具体情况进行选择。</p><h2 id="%E5%8D%A1%E5%B0%94%E6%9B%BC%E6%BB%A4%E6%B3%A2%EF%BC%88kalman-filter%EF%BC%8Ckf%EF%BC%89" tabindex="-1">卡尔曼滤波（Kalman Filter，KF）</h2><p><a href="https://www.bilibili.com/video/BV1ez4y1X7eR/?spm_id_from=333.999.0.0&amp;vd_source=9fe4fc6627c7739e2a449b46a4477106" target="_blank">B站 DR_CAN-卡尔曼滤波器 视频讲解</a><br /><a href="/upload/2023/08/Kalman%20Filter.pdf" target="_blank">Dezeming Family - 详细推导 文档</a></p>]]>
                    </description>
                    <pubDate>Sun, 13 Aug 2023 23:08:01 CST</pubDate>
                </item>
    </channel>
</rss>