下篇文章蓝牙RSSI定位入门到精通(4)-指纹法实现
https://blog.csdn.net/qq_35651984/article/details/82764334

实现步骤

  1. 指纹的采集(离线阶段)
  2. 指纹的处理(数据存储)
  3. 指纹的使用(在线阶段)

指纹的采集

采集概述

指纹采集,其实是knn中的分类问题,也就是将待测位置划分为小块,每一块为一个类。测试每个类接收到的特征,作为离线数据保存。如图,界面为待测地,将待测地划分测量。

采集实现

每个类,通过手机蓝牙采集20份特征,用平均分获得平均特征,传递给服务器。
将蓝牙名称绑定为信标(实际中应该绑定地址,测试就不介意了哈哈)
并进行初始化。(代码中全局变量应该改成类正规点,测试我就随便写啦)

    private ArrayList<String> Arr_rss;//一次的各信标的rssi值private ArrayList<String> Arr_address; //保存信标的地址(name)private ArrayList<Integer> max;//各信标20次的rssi总值private ArrayList<Integer> scanum;//扫描次数,总扫描某信标的次数private String date=null;//用来显示private String send_date=null;//发送给服务器private String string=null;private  void init_beacon(){Arr_address=new ArrayList<String>();Arr_address.add("111");//增加信标Arr_address.add("555");Arr_address.add("333");Arr_rss=new ArrayList<String>();//距离由rssi获取Arr_rss.add(null);Arr_rss.add(null);Arr_rss.add(null);max=new ArrayList<Integer>();max.add(0);max.add(0);max.add(0);scanum=new ArrayList<Integer>();scanum.add(0);scanum.add(0);scanum.add(0);}

由于每次广播一个设备只能获得一次ACTION_FOUND,可以在广播接收者中循环取得三个信标的平均rssi,开启线程发送给服务器,结束广播,然后开始广播,连续20次

            String action = intent.getAction();if(BluetoothDevice.ACTION_FOUND.equals(action)){BluetoothDevice scanDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);if (scanDevice.getBondState() != BluetoothDevice.BOND_BONDED){for (int i=0;i<Arr_address.size();i++){if (Arr_address.get(i).equals(scanDevice.getName()))//获取到信标{Textview1.setText("查找次数:"+time++);short rssi = intent.getShortExtra(BluetoothDevice.EXTRA_RSSI, Short.MIN_VALUE);Textview1.append("\n     信标:" + scanDevice.getName() );Arr_rss.set(i,String.valueOf(rssi));//存rssimax.set(i,Integer.valueOf(rssi)+max.get(i));//最大rssi加上scanum.set(i,scanum.get(i)+1);//扫描次数加上size_3++;//计时器加上}}}if (size_3>=3)//如果三个信标都扫到了{mBluetoothAdapter.cancelDiscovery();date=date+Arr_rss.get(0)+" "+Arr_rss.get(1)+" "+Arr_rss.get(2)+"*";}}else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)){Textview1.append("\n扫描完成");if (size_10++<20&&size_3>=3){size_3=0;mBluetoothAdapter.startDiscovery();}if(size_10==20){//  mBluetoothAdapter.cancelDiscovery();Textview1.setText("扫描20次完成");Textview1.append("\n"+date);Textview1.append("\n"+max.get(0));Textview1.append("\n"+max.get(1));Textview1.append("\n"+max.get(2));send_date=string+"&"+max.get(0)/Double.valueOf(scanum.get(0))+"&"+max.get(1)/Double.valueOf(scanum.get(1))+"&"+max.get(2)/Double.valueOf(scanum.get(2));Textview1.append("\n"+send_date+" "+size_10);MyThread myThread=new MyThread(send_date);myThread.start();size_10++;//重置size_3=0;time=0;scanum.set(0,0);scanum.set(1,0);scanum.set(2,0);max.set(0,0);max.set(1,0);max.set(2,0);}}}

线程的代码

   public  void  run(){try {Socket socket = new Socket("43.226.xxx.xxx",8888);OutputStream out = socket.getOutputStream();out.write(string.getBytes());out.flush();out.close();socket.close();}catch (Exception e){e.printStackTrace();}

指纹的处理

服务器端用一个qt程序接收并显示数据,并附上运动轨迹
qt创建套接字,监听后会得到newConnection的信号,在槽函数进行readyRead信号的接收,获得发来的数据。

connect(tcpserver,&QTcpServer::newConnection,[=](){ui->label->setText("建立连接");tcpsocket=tcpserver->nextPendingConnection();//获得套接字QString str=QString("获得连接:%1 获得地址:%2").arg(tcpsocket->peerName()).arg(tcpsocket->peerAddress().toString());ui->label->setText(str);connect(tcpsocket,&QTcpSocket::readyRead,[=](){string=tcpsocket->readAll().data();ui->label->setText(string);

对接收的数据进行处理,文件保存(实际应该用数据库,测试就无所谓啦)

 QFile file_out(".\\ku.txt");if(file_out.open(QIODevice::WriteOnly|QIODevice::Text|QIODevice::Append)){QTextStream textout(&file_out);textout<<string<<endl;}file_out.close();

将获得的数据显示出来,我使用的Qtableview简单显示

 qstr_list<<string;model->setItem(timer,0,new QStandardItem(string.mid(0,string.indexOf("&"))));model->item(timer,0)->setForeground(QBrush(QColor(255,0,0)));//设置字符居中model->item(timer,0)->setTextAlignment(Qt::AlignCenter);model->setItem(timer++,1,new QStandardItem(string.mid(string.indexOf("&"))));ui->label->setText("离线阶段完成");}

效果图


下篇中完成指纹的使用

蓝牙RSSI定位入门到精通(3)-指纹法实现相关推荐

  1. 蓝牙RSSI定位入门到精通(2)--指纹法

    下篇地址蓝牙RSSI定位入门到精通(3)-指纹法实现 点击:室内定位主页目录+一维实战+二维实战+安卓惯性导航基础 前言 继上篇文章,由于信号的严重衰减和多径效应,使得三点定位算法得到的坐标精准度太差 ...

  2. 蓝牙RSSI定位入门到精通(4)-指纹法实现

    下篇文章蓝牙RSSI定位入门到精通(5)-卡尔曼滤波 https://blog.csdn.net/qq_35651984/article/details/82793612 指纹的实现 接上篇文章,指纹 ...

  3. 蓝牙RSSI定位入门到精通(1)---三点定位

    下一篇:蓝牙RSSI定位入门到精通(2)–指纹法 点击:室内定位主页目录+一维实战+二维实战+安卓惯性导航基础 蓝牙5.0的发布,降低了功耗,大大提高了定位的准确度和距离,而它的定位–物联网设备又使室 ...

  4. android 定位蓝牙,Android开发-蓝牙RSSI定位

    RSSI(Received Signal Strength Indication)是接收的信号强度指示,用来判定链接质量,利用RSSI信号值可以计算主设备和蓝牙设备的距离信息.通过至少三个设备的RSS ...

  5. 黑客攻防从入门到精通-手机安全篇

    ISBN: 978-7-301-27735-5 作者: 明月工作室 高翔 阅读时间:2017-03-22 页数:344 页 推荐指数:★★★☆☆ 本书用了近三个星期零散看完,感觉并无宣传如此夸张.适合 ...

  6. 蓝牙室内定位之AOA室内定位技术详解--新导智能

    目前,越来越多的商场.停车场.展馆.医院等场所都进行了或行将进行才智化建设,其间室内导航因其寻路导向功能,成为建设首要内容之一.蓝牙室内定位计划因其成本低.布置便利.精度能满足要求等优点,是企业的首选 ...

  7. Android开发从入门到精通

    Android开发从入门到精通 --Android经典教程 目 录 目 录 1 第一章 什么是Android 1 什么是Android - 嵌入式设备编程的历史-第一章(1) 1 开放手机联盟和And ...

  8. 《iOS移动开发从入门到精通》图书连载一:如果你也想开发一款自己的APP,可以看一下这篇文

    前言:互联网+时代给自己多一个选择的机会,尝试开发一款属于自己的APP,绝对是件激动人心的事情!<iOS移动开发从入门到精通>已经上市并和大家见面.从今天起,我会将把图书的部分内容以连载的 ...

  9. 【组队学习】【28期】数据采集从入门到精通

    数据采集从入门到精通 论坛版块: http://datawhale.club/c/team-learning/38-category/38 开源内容: https://github.com/dataw ...

最新文章

  1. 实时传输协议(RTP)
  2. ForefrontTMG关于单一的网络适配器限制
  3. XenApp共享桌面打开文件警告与桌面文件由于Internet文件安全设置无法打开解决办法...
  4. python 定时器_python 线程之四:定时器(Timer),非阻塞
  5. eplan安装提示没有安装许可语言_CAD和EPLAN!电气制图你会选择哪个?
  6. springboot filter_SpringBoot(二) :web综合开发
  7. 链表C++ | 根据 位置 / 值 删除节点_2
  8. 数据科学和人工智能技术笔记 九、模型验证
  9. python连接mysql用哪个模块_pymysql模块使用---Python连接MySQL数据库
  10. bean type not found
  11. vspython版本控制_python使用git进行版本控制1
  12. java幸运抽奖项目
  13. c语言 设置线程优先级,C# Priority:多线程优先级设置
  14. python 飞翔的小鸟
  15. 从零开始开发一个全栈Web应用实录
  16. mini2440 linux驱动程序,mini2440的led的Linux驱动程序
  17. 转:各种文本格式转换的网站
  18. 在阿里(02):阿里入职记
  19. 阿里2014校园招聘 笔试题
  20. 支持html邮件,HTML邮件兼容问题与解决方案

热门文章

  1. eggjs 定时任务实战
  2. VueCli番外之recast
  3. 当儿时的动画片撞上成年的痛点:这样的视频为什么这么火?(附教程)
  4. c++自制背单词应用
  5. 上海莘海线公交车一下撞倒3名过路女子
  6. python动态规划解决矩阵连乘
  7. mujoco机器人建模教程和优质资源总结-长期更新
  8. 关于阿里云服务器配置Ubuntu18.04+python环境
  9. 谷歌搞事情:最先被AI淘汰的,居然是做AI的?
  10. IxEdit傻瓜式JavaScript开发工具(附下载、汉化版、视频教程)