定位系统的设计与实现.DOC

上传人:国*** 文档编号:807272 上传时间:2018-11-02 格式:DOC 页数:15 大小:1.55MB
下载 相关 举报
定位系统的设计与实现.DOC_第1页
第1页 / 共15页
定位系统的设计与实现.DOC_第2页
第2页 / 共15页
定位系统的设计与实现.DOC_第3页
第3页 / 共15页
定位系统的设计与实现.DOC_第4页
第4页 / 共15页
定位系统的设计与实现.DOC_第5页
第5页 / 共15页
点击查看更多>>
资源描述

1、定位系统的设计与实现本文实现的定位系统针对室外环境及办公室环境的实现的定位应用,通过对场景中人员、物品进行定位,方便用户对目标的实时监测和管理。上位机开发环境为 MFC (Microsoft Foundation Classes),它是一个微软公司提供的类库,以 C+类的形式封装了 Windows API,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。其中包含的类包含大量 Windows 句柄封装类和很多 Windows 的内建控件和组件的封装类。它的详细介绍在这里就不赘述了。下面对本定位系统的具体实现过程进行比较详细的描述。1.1 定位系统结构定位系统拓扑结构图如图 1-1 所示

2、。其实际场景应用可以参考图 1-2。K e y A n c h o rA n c h o rT a gA n c h o r监控点测距结果传输方向测距链路图 1-1 定位系统拓扑结构图本地定位终端串行控制线K E Y A N C H O R测距链路定位目标 ,内置 T A G 点A N C H O R串口代理传输测距结果图 1-2 实际应用场景图本拓扑中有三种功能不同类型的节点:主锚节点、从锚节点、目的节点。其中主锚节点和从锚节点是一类已知自身位置坐标信息的固定节点,它们的任务是获取包含距离信息以及信号强度值的数据包。目的节点是可以自由移动的节点,可以在一定范围内自由移动,定位系统的最终目的就

3、是获取该类节点位置的坐标信息;从锚节点负责发起测距请求,将测距信息发往目的节点,得到从锚节点与目的节点的距离信息以及信号强度信息,并将该信息发往主锚节点。主锚节点在整个系统中起着至关重要的作用,首先它要响应上位机发出的命令,确定要定位的目标,并发出指令,命令从锚节点对目标节点进行测距;其次主锚节点不仅要获取自身与目标节点的距离信息以及信号强度信息,还需要协调控制三个从锚节点,接受从锚节点发回的测距信息;最后主锚节点负责并将这些信息送还给上位机软件处理。目的节点实时监测是否有定位请求并配合锚节点测出响应的距离信息以及信号强度信息;本定位系统主要包括四大块:硬件节点、硬件节点软件、上位机监测软件以

4、及显示模块。每一部分设计都有其特殊性,硬件节点为系统提供了定位所需的硬件平台,是信息采集的基础,第三章已经详细介绍其性能,这里不再赘述。硬件节点软件主要完成了节点间的链路建立和数据采集与传输。上位机软件首先通过有线方式(使用串口)接收由定位硬件节点采集到的相关信息,然后对所采集的定位信息进行处理,最后选用合适的定位算法,计算出目标节点在该参考系的坐标。显示模块负责动态显示节点定位效果,免去人工思考数字坐标所代表的具体意义,是定位软件人性化设计的一个体现。图 1-3 为系统整体程序流程图;开始人工测出四个 A N C H O R点之间的距离预处理开始根据以上数据由软件建立坐标系B u f f上位

5、机线程一 : 读取串口数据并存入 b u f f上位机线程二 : 读取b u f f 数据数据预处理将数据按来源分类读取处理后的测距结果计算该点坐标显示到界面上位机发送定位命令整合数据主锚节点监测命令 , 如果是定位指令 , 发出定位指令虚框内工作需提前做好并在软件中设置好主锚节点收集定位所需相关系 , 并返还给上位机图 1-3 系统整体程序流程图下面分别详细介绍余下的三个模块。1.2 硬件节点软件本定位系统的基本思想是主锚节点收集所有的从锚节点到目标节点以及自身到目标节点的距离信息以及信号强度(RSSI),由主锚节点将信息传送到上位机监测软件,上位机软件调用相应的定位算法,计算出目标节点的坐

6、标位置并实现必要的显示。因此,首先需要在硬件平台上实现节点间的通信,本文采用星形拓扑结构,这种网络拓扑组建简单,并且便于数据采集。主锚节点担当中心节点的角色,以轮询的方式发送测距命令,这样实际在同一时间段内只有一对节点在工作。避免了因冲突造成的处理时延单方向增加,导致定位结果不准确。可参考图 1-1。因为本系统采用的 nanoPAN5032 模块自身并没有组网功能。所以需要作者自己重新编写代码以实现组网功能。通信流程如图 1-4:主锚节点 从锚节点 目标节点同时自身对锚节点测距收到测距命令控制从锚节点测距获取距离和 R S S I 信息返回距离和 R S S I 信息上位机发出命令上位机接受数

7、据返回所有信息图 1-4 通信流程图其具体实现过程如下:(1)主锚节点接受定位命令。主锚节点要获取节点的位置信息,就要循环给所有从锚节点发送测距请求信号,通信方式为轮询方式。保证所有的从锚节点都可收到该测距请求。反复获取所有锚节点与目标节点的距离以及信号强度信息;(2)从锚节点收到测距请求。从锚节点向目标节点发送测距请求,目标节点如果在该区域内,收到该请求就与该锚节点发生点到点的通信,经过一个 SDS-TWR 测距过程以后,从锚节点将获取到的相应的距离信息以及信号强度信息发送给主锚节点;(3)主锚节点一旦受到测距信息,就将这些信息传到上位机监测软件中,由检测软件的缓存暂时保存这些数据,以便以后

8、的定位计算;1.2.1 主锚节点程序设计主锚节点除了要完成从锚节点的主体功能外,还负责整个通信的协调工作以及将数据传送给上位机,给定位软件提供所需的定位信息。下面简要介绍下主锚节点的程序设计。图 1-5 所示为主锚节点的软件流程图。开始等待上位机命令命令正确与否初始化系统结束命令结束对目标节点测距NYY命令所有从锚节点开始测距汇集距离和R S S I 信息写入串口 , 传给上位机程序N图 1-5 主锚节点的流程图其中,系统初始化主要是系统的一些硬件管脚、串口、时钟等进行初始化配置。然后进入死循环,监测上位机命令。监测命令主要通过读取串口信息来实现,如果收到信息,首先进行命令格式检测,如果正确,

9、再判断是什么命令。假如为定位命令,则自身发出测距请求然后命令其余三个锚节点依次对目标节点发出测距请求,这种拓扑结构不仅很容易搭建,而且也避免由于处理冲突导致处理时延增大,导致测距结果变大;int main(void) . RCC_Configuration(); /* Configure the system clocks */ NVIC_Configuration(); /* NVIC Configuration */ GPIO_Configuration(); /* Configure the GPIOs */USART_Configuration(); /* Configure the

10、USART1 */ SysTick_Config(); /* Configure the systick */nano_main(NULL,NULL);其中 nano_main()部分代码如下:int nano_main(int ac, char *av)while(1) .while(SendTimingDelay 0)/限定最大发送测距请求次数 receivedate=0; /是否收到数据的状态PollApplication();Delay(200); NTRXUpdate();if(receivedate=1)break;SendTimingDelay-;SendTimingDelay

11、=3;for(;inodenumber;i+)while(SendTimingDelay != 0)receivedate=0;Appsendmessage(addri,payloadi, 10);Delay(200);NTRXReceivecommand();if(receivedate=1)break;SendTimingDelay-;SendTimingDelay =3; 1.2.2 从锚节点程序设计下面简要介绍下从锚节点的程序设计。图 1-6 为从锚节点的流程图。开始等待主锚节点命令命令正确与否初始化系统结束命令结束对目标节点测距NYY将信息重新封包发送给主锚节点N图 1-6 从锚节点

12、的流程图其中,系统初始化和主锚节点一样。进入死循环,监测来自主锚节点的命令;如果收到信息,首先进行命令格式检测,如果正确,再判断是什么命令。假如为定位命令,则对目标节点发出测距请求。将得到的结果封包发送给主锚节点;1.2.3 目标节点程序设计下面简要介绍下从锚节点的程序设计。图 1-7 为目标节点的流程图。开始等待测距请求请求命令正确与否初始化系统响应测距请求 ,开始测距NY图 1-7 目标节点的流程图其中,系统初始化和主锚节点一样。进入死循环,监测来自锚节点的测距命令;如果收到信息。首先进行命令格式检测,如果正确,就继续和锚节点通信,开始测距任务,并由锚节点收集测距信息。1.3 上位机软件设

13、计定位系统上位机监控软件中,主要包括以下几个功能:串口通信、数据处理、定位计算等三个主要模块。串口通信是上位机监测与控制硬件节点的唯一通道。所有的指令发出以及信息获取都是通过串口来实现的;数据处理主要负责将串口收集到的原始数据加以处理,最大程度还原真实的距离信息,以便定位算法能够算出准确的目的节点坐标;定位算法主要负责将处理过的数据转换为参考坐标系的坐标。这里的参考坐标系是建立在人工测定的几个锚节点的相对位置的基础上的,下面分别介绍这三个模块.1.3.1 串口通信模块串口通信是连接硬件节点和上位机软件的唯一枢纽,用户的定位指令以及硬件上传的测距信息都是通过串口传输到上位机软件中来的。为了方便程

14、序的书写,这里将串口封装称为一个类 class CSerialPort;该类能够完成对串口的初始化,打开,读写,事件等待等功能。MFC 的一大特色是消息响应机制,在本类中,为了完成通信,作者定义以下消息:#define WM_COMM_BREAK_DETECTED WM_USER+1#define WM_COMM_CTS_DETECTED WM_USER+2#define WM_COMM_DSR_DETECTED WM_USER+3#define WM_COMM_ERR_DETECTED WM_USER+4#define WM_COMM_RING_DETECTED WM_USER+5#defi

15、ne WM_COMM_RLSD_DETECTED WM_USER+6#define WM_COMM_RXCHAR WM_USER+7#define WM_COMM_RXFLAG_DETECTED WM_USER+8#define WM_COMM_TXEMPTY_DETECTED WM_USER+9 然后在类 ESAP 中使用 afx_msg LONG OnCommunication(WPARAM ch, LPARAM port);获取串口送上来的消息。因为串口是一个一个字符的形式将消息上传上来,故这里响应的是其 WPARAM ch,当程序遇到”rn”, 并且之前接受的数据长度大于 10 的时候

16、,认为有新的数据包过来,否则丢弃掉。数据包格式如表 1-1,其中第一行为包格式,第二行为样例包。各个数据以空格符号分开,以rn 结尾。表 1-1 主锚节点上传数据包格式Serial Number Anchor Address Tag Address Distance RSSI1 71 11 2.36 50得到完整数据包后将数据包封装成结构体 Result_Node,以节点的形式加入处理缓存队列,方便以后数据处理操作,其中结构体定义如下:struct Result_Nodeint serial_number;char dest_addr3;char src_addr3;float distanc

17、e;char rssi3;为达到对节点的控制的目的,只需在主程序中调用 afx_msg LONG OnCommadToSend(WPARAM wparam, LPARAM cmd);为作者设计的一个指令包,包格式如表 1-2:其中第一行为包格式,第二行为样例包。表 1-2 指令包格式Head Cmd Tag Reserved Tail0x0001 0x0011 0x0011 0x0000 0x1000因为 PC 机有太多不安全因素,命令包并没有像数据包那样没有包头包尾,Head 和 Tail 固定为 0x0001 和 0x1000。主锚节点收到数据包后首先对数据包解包,如果格式不正确。就丢弃,

18、以免因为其他操作,导致数据传入主锚节点,使得系统不稳定。Cmd 表示是何种命令,暂时只定义两种命令,测距开始命令和测距停止命令。RANGINGSTART 0x0011RANGINGSTOP 0x1100Tag 为要测定的目标节点,它可以为 0x00010x00ff 中任意不同于四个锚节点的地址的数。主锚节点根据这一位来确定用户想要定位的目标。如果 Cmd为 0x1100,即停止测距指令,则这一位置应该置 0x0000;Reserbed 为保留位,暂时定为 0x0000,这方便以后命令的扩展等功能。1.3.2 数据处理模块现在缓存中存放的是一堆 Result_Node 节点,但是这些数据并没有被

19、处理,不能直接应用于定位算法中。数据处理模块负责把这些数据分类、排错、滤波、还原。为后续的定位计算准备数据。其处理流程如图 1-8:读取 B u f f根据 s e r i a l n u m b e r序号还原出距离信息根据 A n c h o r A d d r e s s 对数据进行分类将分类后的数据分别进入代表各节点的缓存队列排除错误数据映射还原数据平滑滤波处理完毕开始处理图 1-8 数据处理流程图首先从 Buff 中读取一个节点,因为硬件已经对数据进行平滑处理,由于刚开始的时候平滑数组所有值都为 0,前十个上传的信息都被乘上一个平滑系数。为了还原这些数据,只需判定其 serial n

20、umber 位是否小于 10,然后进行相应的还原处理。为了区分不同锚节点的距离信息,作者为每个节点分配一个缓存队列,对处理完的距离信息分别加入对应的缓存队列,并将缓存队列状态设置为非空状态。 根据第三章分析处理得出的结论,根据不同的情况对进入缓存队列的数据进行相应的处理校正。首先根据新进的数据与上次数据相比较,利用物体在室内运动速度有上限这一前提,制作一个平滑滤波器,滤掉因外界干扰造成的测距误差。然后根据软件的场景设置选择不同的处理方法,软件给出静态目标定位和动态目标定位、视距可达定位和视距不可达定位四种情况,如果定位人员不知道具体场景,可按照默认的选项进行定位。软件会根据 RSSI 值,测距

21、结果对进入缓存队列的数据进行处理。最后对处理完的数据进行平滑滤波,并将结果保存,以便后续计算模块使用。上述处理过程被封装进一个 class CDataPro 中,并给出接口函数 double data_processing(double ranging_distance,double rssi_in,int object, int obstacle),程序中只需调用该函数,就可以完成对数据的处理。1.3.3 定位计算模块上面数据处理已经完成,当定位模块检测到四个缓存队列的状态都是非空状态,即满足定位计算的基本数据要求,就读取其中的数据进行定位计算。要实现定位就需要将这些距离信息转换为相对于坐标系的坐标信息,这才能给人一个比较直观的感觉。这涉及到三个工作:定位坐标系的建立,目标节点的计算,算法的程序实现;a)坐标系的建立任何一个定位系统都有自己的参考坐标系,本系统的参考坐标系是根据实际场景生成的相对坐标系。为方便描述,这里约定主锚节点的物理位置为 A、其余三个锚节点为 B、C 、 D,如图 1-9 所示。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 重点行业资料库 > 1

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。