三边测距定位算法详解

article/2025/11/10 10:44:03

关注、星标公众号,直达精彩内容

来源:平行机器人 | 赵得江

整理:李肖遥

通过GPS定位系统实现无人机的空中悬停定点飞行


     “定位”这个概念我想大家并不陌生,可以说定位技术的迅猛发展给我们的日常生活带来了极大的便利。比如,手机的定位导航系统让“路痴”再也不怕出远门了;航天飞行器可以自由地穿梭于浩瀚的宇宙却逃不出人类的掌控;无人驾驶技术更是离不开定位系统的支撑……

   接下来将向大家介绍一种简单的定位算法——三边测距定位算法。

【简介】

简单的说,实现定位你只需要做好以下两点:

测量值  从某种意义上说,几乎所有你能测量的数据都取决于“位置”,并且可以利用测得的数据进行定位。最理想的情况是测量那些对“位置”非常敏感的数据。例如,测量温度可能会知道你身在哪个大陆,当然这样的结果并不准确,但是如果测量的是你相对于某些点的距离或者角度,那么对你的位置的定位可能会更精确一些。

参考点  描述一个确定的位置,正确的方法就是描述它相对于某些参考点的位置。参考点可以是“你的家”、“北极星”或“天空中的一些卫星”。对我们来说,我们将使用锚。利用3个锚点就可以描述一个二维的坐标系统,在这个系统中我们可以找到我们的位置。对于三维定位系统,我们则需要4个锚点。

下面是一些例子:

定位系统

测量值

参考点

GPS

距离*

卫星

Pozyx

距离

摄像机

视频图像

相机指定方向

WiFi、指纹识别

接收信号强度

数据库中的指纹

数字罗盘

磁场矢量

磁场北极

航位推算

加速度和角速度(来自陀螺仪)

最初的位置和方向

注意:一些GPS接收器也使用多普勒频移定位

【三边测距法】

最常用的定位方法是使用基本的几何图形来估计位置。通过测量与锚点的距离,就可以确定你的位置。如果我们只知道自己与锚点的距离,那么我们的位置肯定会在以锚点P为圆心以测得距离d为半径的圆上。如果我们用3个锚进行距离测量,我们会发现我们的位置在三个圆的交点上,如图1所示。这种方法被称为三边测距法(如果使用的锚点数量超过3个,则称为多边测距法)。

这种方法的困难在于测量中总会有一些噪音,测量并不完美。因此,圆不会在一个点相交。为了解决这个问题,我们试着找出最接近所有圆的点。

   图1 三边测量

 

注:你可以选择跳过该算法的描述,直接参阅下一篇文章:超宽带是如何工作的。

【一个基本的算法】

在本节中,我们将介绍一种简单的算法,它可以从一系列的范围测量中计算出位置。这个基本算法不是最优的,但是当范围测量足够精确时,它就会很好地工作。

我们将解释2D定位的算法。位置P由坐标x和y给出。第i个锚点pi的位置坐标为(xi,yi),如果我们有N个锚,那么i的取值为从1到N,这些锚点的坐标是已知的。

现在,位置P与第i个锚点之间的距离由di表示,di由下面的公式给出:

 

  对等式两边取平方:

    上面方程的问题在于含有非线性项x^2和y^2。我们可以通过从di^2中减去dN^2来消除这些非线性项,得到N-1个方程,其中第i个方程式为:

现在我们有了一些关于坐标x和y的线性方程,这很好,因为线性方程很容易求解。我们把它写成矩阵的形式:

其中

我们现在可以解这个方程组了。

如果我们恰好有3个锚点:N=3,我们就会得到两个方程来求解两个未知数,通过求解下面的方程,我们可以找到P的位置:

如果我们有超过3个锚点:N>3,我们得到的方程的数量要多于未知数的数量,此时A的逆矩阵是不存在的。为了解决这个问题,我们可以利用伪逆算子来计算这个位置。这就产生了下面的方程式:

请注意,上面的公式将尽可能地将坐标x和y与所有不同的方程相匹配。因此,当使用更多的锚时,定位的准确性也会随之提高。

上面描述的算法被称为线性最小二乘算法。“线性”是因为我们把方程进行了线性化(通过平方)和“最小二乘”是因为矩阵的(伪)逆矩阵会使所有方程的平方误差最小化。

【拓展】

上面描述的算法是一种非常简单和低复杂度的算法。如果你想了解更多关于先进定位技术的知识,建议你寻找以下主题:非线性最小二乘、卡尔曼滤波、粒子滤波、置信传播……


来源整理于网络素材,版权归原作者所有,如有侵权,请联系删除,谢谢。
‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧  END  ‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧
关注我的微信公众号,回复“加群”按规则加入技术交流群。

欢迎关注我的视频号:

点击“阅读原文”查看更多分享,欢迎点分享、收藏、点赞、在看。

http://chatgpt.dhexx.cn/article/qQcsyd74.shtml

相关文章

Android框架揭秘电子书pdf下载

Android框架揭秘下载链接: https://pan.baidu.com/s/1W1xrsC2-w5MgsrY-6i_cFg 提取码获取方式:关注下面微信公众号,回复关键字: 1119

Android初学之路—Android系统框架

从下到上依次为: 1.Linux内核(Linux Kernel) Android系统的最底层是基于Linux内核实现的,它负责硬件驱动、网络管理、电源管理、系统安全、内存管理等。例如它可以负责显示驱动、基于Linux的帧缓存驱动、键盘驱动、Flash驱动、摄…

《Android框架揭秘》——2.2节搭建Android平台编译环境

本节书摘来自异步社区《Android框架揭秘》一书中的第2章,第2.2节搭建Android平台编译环境,作者 金泰延 , 宋亨周 , 朴知勋 , 李白 , 林起永,更多章节内容可以访问云栖社区“异步社区”公众号查看 2.2 搭建Android平台编译环境Android框架揭秘…

《Android框架揭秘》——2.3节搭建Android SDK开发环境

本节书摘来自异步社区《Android框架揭秘》一书中的第2章,第2.3节搭建Android SDK开发环境,作者 金泰延 , 宋亨周 , 朴知勋 , 李白 , 林起永,更多章节内容可以访问云栖社区“异步社区”公众号查看 2.3 搭建Android SDK开发环境Android框架揭秘…

《Android框架揭秘》——2.4节开发Android应用程序

本节书摘来自异步社区《Android框架揭秘》一书中的第2章,第2.4节开发Android应用程序,作者 金泰延 , 宋亨周 , 朴知勋 , 李白 , 林起永,更多章节内容可以访问云栖社区“异步社区”公众号查看 2.4 开发Android应用程序Android框架揭秘在上一节…

《Android框架揭秘》——2.1节主机环境构成

本节书摘来自异步社区《Android框架揭秘》一书中的第2章,第2.1节主机环境构成,作者 金泰延 , 宋亨周 , 朴知勋 , 李白 , 林起永,更多章节内容可以访问云栖社区“异步社区”公众号查看 2.1 主机环境构成Android框架揭秘虽然Android开发环境多…

《Android框架揭秘》——1.2节通过启动过程分析Android Framework

本节书摘来自异步社区《Android框架揭秘》一书中的第1章,第1.2节通过启动过程分析Android Framework,作者 金泰延 , 宋亨周 , 朴知勋 , 李白 , 林起永,更多章节内容可以访问云栖社区“异步社区”公众号查看 1.2 通过启动过程分析Android Fra…

《Android框架揭秘》——2.5节应用程序Framework源码级别调试

本节书摘来自异步社区《Android框架揭秘》一书中的第2章,第2.5节应用程序Framework源码级别调试,作者 金泰延 , 宋亨周 , 朴知勋 , 李白 , 林起永,更多章节内容可以访问云栖社区“异步社区”公众号查看 2.5 应用程序Framework源码级别调试An…

《Android框架揭秘》读书笔记--在Java中调用C库函数

简介 以下试验在Ubuntu16.04 x86,jdk安装:sudo apt-get install openjdk-9-jdk-headless,原书介绍的是在win系统实现。 步骤 第一步:编写Java代码第二步:编译Java代码第三步:生成C语言头文件第四步&#…

Android 框架揭秘 --读书笔记

Android 框架揭秘 Insied the Android Framework 转载于:https://www.cnblogs.com/drduan/p/4788554.html

android框架揭秘!Android开发者跳槽指南一线互联网公司面经总结

前言概要: 1,进大公司还是小公司,真的有的选? 2,校招的潜规则 3,校招想进大厂怎么办 4,社招的潜规则 5,社招想进大厂怎么办? 面试部门 岗位:商业化 - 高级 …

《Android框架揭秘》——导读

本节书摘来自异步社区《Android框架揭秘》一书中的目录,作者 金泰延 , 宋亨周 , 朴知勋 , 李白 , 林起永,更多章节内容可以访问云栖社区“异步社区”公众号查看 目 录 第1章 Android Framework概要 1.1 Android源代码组成1.2 通过启动过程分析Android…

Android框架揭秘读书笔记

Android启动过程 1.linux内核,加载linux内核 2 init 进程对各种设备进行初始化, 执行Daemon进程,管理USB、ADB链接管理器、Debugger系统、rild管理无线通信链接 Content Manager进程,提供运行Android各种系统服务信息 Media …

android框架揭秘!连续四年百度Android岗必问面试题!实战篇

前言 今天想停下代码,写点脑袋里不断浮现出来的一些看法。 也就是最近在微博和知乎上老看到“互联网寒冬”的说法。要么是看到啥公司薪水无法如期发放了,要么是看到别人说什么“裁员了,没有交接,签字然后电脑还了就走人&#xf…

字节大佬封神之作《Android Framework高级开发笔记》,完整版开放下载

在现阶段的Android开发工作中,无论是底层,还是应用层,Framework都至关重要。Framework的火热程度,相信我也不必再赘述。 为帮助大家深度学习Framework背景及它的巨大作用,这里分享一份《Android Framework高级开发笔记…

ANDROID框架揭秘

本书通过对Android系统源代码的分析,主要介绍Android框架的初始化过程及 主要组件的工作原理。作者直接分析和整理了Android框架的主要源代码,并详细讲 解了理解框架工作原理所需的各种基础知识和构成实际Android平台骨干的服务框架。 其中的主要内容包括…

用Java写linux命令行cd,java执行linux命令cd

java执行linux命令cd [2021-01-31 01:51:23] 简介: php去除nbsp的方法:首先创建一个PHP代码示例文件;然后通过“preg_replace("/(\s|\&nbsp\;| |\xc2\xa0)/", " ", strip_tags($val));”方法去除所有nbsp即可。推荐&#xff1…

Linux 常用命令与教程

http://c.biancheng.net/view/705.html C语言编程网的教程很好 还有菜鸟教程的 还有这个 https://mp.weixin.qq.com/s/7bSwKiPmtJbs7FtRWZZqpA 讲的也不错 https://baike.baidu.com/item/PS/8850709 百度百科 搜索一个linux命令 会出来这个 〇、序言:命令基本格式…

最强的linux命令总结.pdf

白月光-焰灵姬 来源:掘金- Lion https://juejin.cn/post/6938385978004340744 | 编辑:五角钱的程序员 前言 Linux 的学习对于一个程序员的重要性是不言而喻的。前端开发相比后端开发,接触 Linux机会相对较少,因此往往容易忽视它。…

linux命令 视频教程,常用的linux命令视频教程

常用的linux命令视频教程 [2021-02-19 11:27:41] 简介: php去除nbsp的方法:首先创建一个PHP代码示例文件;然后通过“preg_replace("/(\s|\&nbsp\;| |\xc2\xa0)/", " ", strip_tags($val));”方法去除所有nbsp即可。推荐&#…