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等仿真框架的进一步学习。

三边定位算法在OMNet++上的简单实现相关推荐

  1. 基于激光雷达实现三边定位算法开发记录(二)——查找多个反光柱数据

    22年暑假实习过程中第一个开发任务,基于激光雷达实现三边定位开发功能 开发平台为ubuntu 18.04 + ros melodic 日期:2022.7.19 本次实现:由于实现三边定位需要先找反光柱 ...

  2. 基于激光雷达实现三边定位算法开发记录(一)——查找激光最强点

    22年暑假实习过程中第一个开发任务,基于激光雷达实现三边定位开发功能 开发平台为ubuntu 18.04 + ros melodic 日期:2022.7.18 本次实现:由于实现三边定位需要先找反光柱 ...

  3. 基于激光雷达实现三边定位算法开发记录(五)——三角函数法拟定圆心

    22年暑假实习过程中第一个开发任务,基于激光雷达实现三边定位功能 开发平台为ubuntu 18.04 + ros melodic 日期:2022.7.22 本次实现:由于实现三边定位需要先找反光柱的圆 ...

  4. 三角定位matlab,matlab 在三维空间的三边定位算法模拟如何写?

    共回答了21个问题采纳率:100% 按照楼主的算法给楼主编了一个函数,楼主将它存为一个m文件,在matlab的命令窗口即可运行. 这里主要用到一个解线性方程组的方法楼主可以主要一下.其实matlab的 ...

  5. rssi室内定位算法原理_室内定位方案常用的4种定位算法

    目前常见的室内定位技术有超宽带UWB室内定位技术,蓝牙室内定位技术,RFID(无线射频识别)定位,超声波定位,Wi-Fi定位等.室内定位依赖于定位算法,定位算法决定了室内定位的模式.室内定位种类虽然比 ...

  6. 【三边定位】 演示程序V0.1

    忙于工作,这个小东西一直没有空去弄, 最近简单修改了些算法, 精度还有待提高. 贴一张图片 坐上角的坐标是鼠标点(31,17),后面location 是三边定位算出来的(31,19),后面跟的erro ...

  7. 机器人视觉系统组成及定位算法

    1. 机器人视觉 机器人视觉研究的核心内容是:视觉定位与导航.路径规划.避障.多传感器融合.视觉定位技术有多种,包括单目视觉.双目视觉.多目视觉.RGB-D等,后三种方法可以使图像具有深度信息,这些视 ...

  8. 如何在FPS游戏中快速实现简单的人体定位算法

    概述 最近在很多B站的视频上看到大佬们分享的AI应用案例,其中有一个引起了我的兴趣:基于深度学习网络, 在CSGO中实现人体定位算法,并进行自动瞄准与射击.当然,这种明显有悖于游戏公平性的行为我是不会 ...

  9. 蒙特卡洛粒子滤波定位算法_ROS -- 最简单的自主ACML定位

    关于定位的原理和算法: ARUANTOU:自适应MCL(KLD采样)​zhuanlan.zhihu.com ARUANTOU:定位算法 -- MCL蒙特卡洛(粒子)滤波​zhuanlan.zhihu. ...

  10. UWB定位算法比较TDOA和TWR究竟哪个好

    使用UWB技术进行定位时,有两种基本定位算法:基于差分飞行时间(TDOA)和双向测距(TWR)的UWB定位算法,这两种算法各有优劣,下面将进行比较. 超宽带是一种可用于室内定位的短距离无线电通信.与蓝 ...

最新文章

  1. shell中正则表达式详解_Linux中的正则表达式
  2. subversion安装与配置备忘录
  3. java开启新线程的三种方法
  4. matlab 高斯消去法程序,高斯消去法解线性方程的Matlab程序
  5. 烘烤店LOGO在线设计制作教程
  6. Python中正则匹配使用findall时的注意事项
  7. LeetCode:每日一题——数位成本和为目标值的最大数字
  8. 最为奇怪的程序语言的特性
  9. FISCO BCOS(五)———部署安装jdk1.8
  10. 一文看懂中国互联网二十年
  11. Android平板的磁盘分区,平板电脑硬盘分区 Original Pad到PC:教您将Win10安装到Android平台...
  12. 转载 信号量 第六篇
  13. Unity VFX粒子系统入门笔记-2-制作简易火焰特效
  14. 计算机英语论文题目,英语专业毕业论文题目集锦
  15. ICDE‘22推荐系统论文之Research篇
  16. T-SQL数据库修改、删除
  17. 微分几何学习(二)(曲线论,弧微分)
  18. python列表去括号_python 去括号
  19. 目标检测之将bbox绘制到图片上
  20. 360n4s高通版卡刷包

热门文章

  1. unity 保存数据到本地的方法
  2. APISpace 手机号码归属地和运营商查询API
  3. 平面设计就业方向是什么?
  4. 2019五一联赛建模心得
  5. rtklib-RINEX文件读取-rinex.c解析(一)
  6. html设置ie11兼容,ie11浏览器兼容性问题设置方法
  7. 《工业设计史》第五章:设计改革
  8. c语言程序设计计划书示例,C语言学习计划书
  9. 高频直流电源在整改、降压和作用方面解决方案
  10. verilog赋多位值_verilog语句两个always块对同一个变量赋值问题!【恢复】