热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

三边定位算法在OMNet++上的简单实现

2019123高级网络课实验报告,才疏学浅。一、实验原理:本次实验目标为使用OMNet仿真出三边定位算法在移动定位的应用场景,考虑本人

2019/12/3高级网络课实验报告,才疏学浅。


一、实验原理:

本次实验目标为使用OMNet++仿真出三边定位算法在移动定位的应用场景,考虑本人学习有限,而在OMNet++中实现无线通信的工作较为复杂,本次实验采用以有线通信代替无线通信的方式进行简单模拟,搭建一个典型的三边定位网络拓扑图,实现基于到达时间TOA(Time of Arrival)的三边定位算法。

典型的TOA三边定位应用场景如下:

在该场景下,移动终端接收来自三个不同方向的不同基站的信号,通过到达时间计算与基站距离,再通过信号中包含的基站位置,通过三边定位算法估测自身位置。

Trilateration(三边测量)是一种常用的定位算法:


  1. 已知三点位置 (x1, y1), (x2, y2), (x3, y3)
  2. 已知未知点 (x0, y0) 到三点距离 d1, d2, d3

以 d1, d2, d3 为半径作三个圆,根据毕达哥拉斯定理,得出交点即未知点的位置计算公式:


( x1 - x0 )2 + ( y1 - y0 )2 = d12

( x2 - x0 )2 + ( y2 - y0 )2 = d22

( x3 - x0 )2 + ( y3 - y0 )2 = d32


   三边定位的算法原理图如下:

可以看出,在获取到临近三个基站的位置坐标与其相对于终端自身的距离后,即可通过三边定位算法估测自身位置坐标,本次实验搭建的网络拓扑图如下:

其中t1、t2作为终端节点,分别接收来自附近三个基站节点的消息,其中包含了基站名称、基站位置、发送时间,消息发送速率;终端节点处理并存储节点中的位置参考信息,对于来自同一个基站节点的信息采取覆盖存储,直到收到三个不同节点的参考信息,将三个参考数据输入三边定位算法接口,计算自身位置并向服务器节点发送报告信息,随后清空参考信息再次等待定位,实验实现了上述仿真定位方法,最终得到了不错的定位效果。


二、平台基本操作

  本实验使用OMNeT++ 5.5.1作为仿真平台,主要学习内容为:《OMNet++网络仿真》、B站“通信系统综合实验“系列视频,若干CSDN博客。


  1. OMNeT++ 5.5.1安装

  1. 官网下载Windows安装包。


  1. 启动mingwenv.cmd控制台,依次输入./configure、make,创建仿真库。


  1. 输入omnetpp,启动客户端。

 


  1. 客户端基本操作:打开仿真视图


  1. 客户端基本操作:新建工程


  1. 客户端基本操作:新建文件

5、客户端基本操作:运行仿真程序

 


三、关键代码

实验工程目录如下:


3.1 网络描述文件lbs.ned

   节点和网络定义如下图:

以实验目标出发,所有节点以简单模块实现,只定义必要接口,由于信道模块chanel中不包含信道长度一值,不提供读取节点距离的接口,故在网络内部自定义专属信道,添加距离参数,统一合适的速度,由距离计算时延,而距离直接根据节点坐标计算,这样做的优点为简单粗暴,缺点也很明显:信道不复用、添加和移动节点都需要再次计算。


3.2  基站向终端发送的位置参考消息定义lbsMsg.msg

       仅包含定位所需参数:源基站名、基站坐标、发送时间、传送速度(默认为1)。


3.3  终端像服务器发送的定位结果报告消息定义reportMsg.msg

       仅包含基站名称和定位结果。


3.4  终端解析的位置参考信息结构定义lsbRef.cpp

       存储位置参考消息的来源坐标、发送和到达时间、发送速率,在构造函数中调用内置函数,通过TOA方法计算此消息来源的相对距离,对外提供getter接口。


3.5  基站节点功能定义baseStation.cpp

初始化函数initialize()确定一个随机值作为发送时间,调用generateNewMessage()函数,产生定位参考消息lbsMsg,其中包含了节点名称、发送时间,并从ned文件确定的DisplayString中解析出本节点坐标,根据定时值发送。


3.6  终端节点功能定义terminal.cpp

handleMessage接收来自基站节点的消息,解析为lbsMsg类型,输出此定位参考消息的源节点名称和位置、时间信息,调用processMessage()处理。

后者将lbsMsg中的位置参考信息处理并存储在一个lbsRef对象中,由map键值对references保存该对象,references将消息来源节点名称作为key,对应的lbsRef对象作为value,保证了存储中的参考信息来自不同基站,同一基站的值将被覆盖。

当references中的参考信息到达3时,调用lbsFun函数,通过三边定位算法推测自身的位置,随后清空references,将结果输出,并向服务器节点发送位置报告消息reportMsg。

LbsFun函数调用Decawave公司的开源代码实现三边定位,代码参考于:https://blog.csdn.net/qq_40671789/article/details/97003271

由于定位算法实现不是本次网络实验的重点,在此不做介绍。


3.7  服务器节点功能定义server.cpp

对来自终端节点的reportMsg做解析并输出,功能比较单一。


四、实验结果分析

由上图可以看出,仿真程序成功地达到了实验目标,对于终端节点t1,定位算法输出结果为:195.214,155.531,而t1的真实坐标为:190,160;对于终端节点t2,定位算法输出结果为:640,185,而t2的真实坐标为640,185;由于消息发送无损耗、时延等干扰,三边定位算法准确性较高。

实验总结:本实验在OMNet++仿真平台上,通过用有线通信代替无线通信的方式,复现了三边定位算法的应用场景,但由于本人学习水平不够,项目实现的层次太低,具有很大的局限性,有待于对OMNet++平台和mixim等仿真框架的进一步学习。


推荐阅读
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
author-avatar
泉水叮咚139
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有