精华内容
下载资源
问答
  • 串口上传位置信息,图形显示目标在地图中的位置
  • 本项目的出发点就是针对如何解决位置的实时共享问题,使得人们组队外出游玩时的安全性得到保障,还有让每个家庭成员之间可以随时随地地查看其他成员的位置,特别是让老人、小孩的安全得到家人的实时监护。...

    本项目的出发点就是针对如何解决位置的实时共享问题,使得人们组队外出游玩时的安全性得到保障,还有让每个家庭成员之间可以随时随地地查看其他成员的位置,特别是让老人、小孩的安全得到家人的实时监护。除此之外,还在软件中增加了一些使用的功能,比如:轨迹记录,记录所走过的路线,以免走错路难以脱险,有备无患;运动功能,特有计步功能,根据不同的体形,路面等因素调节灵敏度;自由设置步长;自由设置体重等参数;语音提示,使应用更加人性化。

    1、项目的整体设计与实现

     整个软件项目的设计主要分成用户注册、登录以及用户基本信息的管理;定位地图的实现以及其中的放大缩小、普通地图和卫星地图切换实现;轨迹记录并回现;运动计步;语音提示;亲戚朋友之间实时位置共享等几部分来完成。

    项目中总共使用到的平台有Bmob后端云,实现用户注册、登录、信息管理以及软件的版本更新;高德地图开放平台,实现地图的相关功能;科大讯飞开放平台,实现语音提示功能。

    软件分为服务器端和客户端,本系统的服务器端主要通过Bmob的云平台实现,客户端用户界面设计则通过Android实现,主要分为五大模块:登录注册,定位导航,轨迹记录,语音提示,运动计步和实时共享位置。点击相应模块,即可实现相应的功能。界面简单,易操作。

    2、Bmob后端云平台

     Bmob可以开发一个云存储的移动应用软件,给应用软件快速添加一个安全灵活的后台管理系统,方便浏览终端保存的各种信息。

    当用户打开App时,首先进入用户登录页面,若未注册,则点击注册按钮进入注册页面进行注册,再返回登录页面。登录成功后,进入用户主界面视图。

    登录注册:将手机App安装后,进入登录页面,若没注册,则先注册后登录。此功能主要使用Bmob后端云数据库,写入用户数据和读取用户信息实现。登录时查询User表输入用户名和密码与该表的数据项匹配一致,则完成登录,进入主界面,登录和注册界面如图1所示。


    图1 登录注册

    使用Bmob后台实现用户登录的部分代码如下:

    finalBmobUser bUser = new BmobUser();
    bUser.setUsername(u_name);
    bUser.setPassword(u_md5_password);
    bUser.login(newSaveListener<BmobUser>() {
     
    @Override
    publicvoid done(BmobUser bmobUser, BmobException e) {
          if (e == null) {
    	ToastUtils.showToast(UserLoginActivity.this, bUser.getUsername() + "登陆成功");
    	Intent intent = newIntent(UserLoginActivity.this, MainActivity.class);
    	startActivity(intent);
    	UserLoginActivity.this.finish();  //结束登陆界面
          } else {
    		ToastUtils.showToast(UserLoginActivity.this,"登录失败:"+ e.toString());
          }
    }
    });

    3、高德地图开放平台

     高德地图开放平台将高德地图专业的定位、地图、导航等位置能力和LBS服务开放出来,因此,利用高德地图提供的定位SDK可以让软件实现准确的定位,从而让轨迹记录和实时共享位置等功能的实现得到保障。

    地图定位导航:利用高德地图提供的API接口,我们可通过GPS、Internet实现定位。单独使用GPS定位,需要打开手机的GPS定位,适用于室外。单独采用Internet,只要联网即可。综合考虑,我们采用两者结合方式,即可准确、快速地实现定位功能。

    本软件的主界面即是实时显示当前位置的定位地图界面,如图2所示。


    图2 主界面

    软件的主界面即实时显示当前的位置,同时主界面地图上还包含了一些控件,如获取当前定位、放大、缩小、普通地图与卫星地图切换等按钮。除此之外,还有一个记录轨迹功能的开启和结束按钮,此按钮在点击时会有语音提示。在主界面的左上角有一个显示侧边栏菜单选项的按钮。菜单上总共有个人信息查看、我的轨迹、运动、位置圈和设置等选项,每一个选项里面实现了相对应的功能,让用户操作更加方便,易懂。

    主界面定位功能实现的部分代码如下:

    	publicvoid activate(OnLocationChangedListener listener) {
                 mListener = listener;
                 //初始化定位
                 mLocationClient = newAMapLocationClient(getApplicationContext());
                 //初始化定位参数
                 mLocationOption = newAMapLocationClientOption();
                 //设置定位模式----高精度模式:会同时使用网络定位和GPS定位,优先返回最高精度的定位结果
          	     mLocationOption.setLocationMode(AMapLocationMode.Hight_Accuracy);
                 //设置定位间隔
                 mLocationOption.setInterval(2000);
                 //设置是否返回地址信息
                 mLocationOption.setNeedAddress(false);
                 //给客户端对象设置定位参数
                 mLocationClient.setLocationOption(mLocationOption);
                 //启动定位
                 mLocationClient.startLocation();
                 //设置定位回调监听
                 mLocationClient.setLocationListener(mLocationListener);
          }
         //声明定位回调监听器
          AMapLocationListener mLocationListener =new AMapLocationListener() {
                
                 @Override
                 public voidonLocationChanged(AMapLocation amapLocation) {
                        if (amapLocation != null) {
                               if(amapLocation.getErrorCode() == 0) {
                                      if (mListener!= null) {
                        mListener.onLocationChanged(amapLocation);
                                      }
                               }
                        }
                 }
          };

    4、科大讯飞开放平台

    科大讯飞开放平台是推出的以语音交互技术为核心的人工智能开放平台。语音技术实现了人机语音交互,使人与机器之间沟通变得像人与人沟通一样简单。语音技术主要包含语音合成和语音识别两项技术。本软件中集合了科大讯飞的在线语音合成SDK,从而实现软件中的语音提示功能,使应用更加人性化。

    在线语音合成的基本参数设置如下:

    if(mEngineType.equals(SpeechConstant.TYPE_CLOUD)){
          mTts.setParameter(SpeechConstant.ENGINE_TYPE,SpeechConstant.TYPE_CLOUD);
          // 设置在线合成发音人
          mTts.setParameter(SpeechConstant.VOICE_NAME,voicer);
          //设置合成语速
          mTts.setParameter(SpeechConstant.SPEED,"50");
          //设置合成音调
          mTts.setParameter(SpeechConstant.PITCH,"50");
          //设置合成音量
          mTts.setParameter(SpeechConstant.VOLUME,"80");
    }

    5、轨迹记录

    在户外活动或者游玩时,可能经常会走到陌生的环境中,那么为了在这种情况下可以正确的辨别方向,不易迷失,这就需要对使用者所走过的路线进行记录保存,在需要的时候进行重现路线,以免走错路难以脱险,有备无患。

    在主界面上的点击开始记录轨迹按钮,同时会有语音提示“开始记录轨迹”,这时应用将在后台开启一个服务,将使用者不断移动位置时更新的经纬度信息保存到集合中,只要位置一旦更新,就把新位置的经纬度保存起来,直到使用者再次点击主界面的停止记录轨迹按钮,这时将停止保存经纬度,同时将集合中的信息全部写入到SD卡文件中,并将此后台服务关闭。当经纬度信息成功保存到文件中时,会有语音提示“轨迹保存成功”,提示使用者已经将当前的记录的轨迹保存成功,可以在“我的轨迹”选项卡中查看。

    点击“我的轨迹”可以查看到历史所有保存的轨迹,而且每一个轨迹都显示了轨迹保存时的时间,方便使用者查看。当点击任意一个轨迹时,将把该轨迹的起点、终点以及路线绘制在界面上,同时显示当前的位置,可以更加清晰的知道当前位置与轨迹之间的偏差,帮助用户更好的回到原地,避免走失。同时还可以将地图切换成卫星地图,在卫星地图上显示轨迹,让使用者更加清除的知道自己身处何处,使安全性得到更大的提升。

    以下是轨迹记录功能开发测试的案例,如图3所示。


    图3 轨迹记录回现

    6、运动计步

    目前,运动越来越受到人们的青睐,特别是智能手机里的计步功能更加是受到人们的喜爱。人们喜欢记录自己每天走过的步数并将其与朋友进行计较,这已经成为了人们日常生活的一种娱乐方式。因此,本软件中也增加了一个特有的计步功能,紧随时代脚步的时髦功能,这将会深受用户喜爱。

    本软件中的运动计步功能可以根据使用者的体形、当时的路面情况等因素来调节灵敏度,设置步长、体重等参数,根据不同使用者的实际情况进行设置,可以让软件记录出来的行程、热量、步数等更加精确。

    点击“运动”可以进行运动计步功能界面,在界面的右上角有一个设置按钮,点击可以进行参数的设置,设置完成点击保存,那么以后计步得到的数据将会按照设置保存的数据进行计算,从而得到更加精确的数据并显示给使用者。在运动界面点击“开始运动”和“结束运动”按钮可以实现计步的开始和结束,同时会有语音提示“开始运动”和“运动结束”。

    以下是运动计步功能开发测试的案例,如图4所示。


    图4 运动计步

    7、实时共享位置

    户外活动时朋友之间位置的实时共享可以避免掉队、走失等意外事件,家庭成员之间位置的实时共享可以让老人、小孩等的位置得到实时监护,因此,位置得到实时的共享具有很重要的意义。

    本软件中设计了一个“位置圈”的功能,顾名思义就是位置实时共享的圈子。使用者可以根据不同的情况创建不同的位置圈,同一位置圈中的成员彼此之间可以实时共享自己的位置和查看彼此的位置。创建位置圈的用户即为该圈的圈长,圈长有最高的权限,可以对该圈进行解散操作,非圈长的用户无法执行此操作,只能是自己退出该圈。

    创建位置圈和搜索加入位置圈的界面如图5所示。


    图5 创建搜索位置圈

     

    点击“位置圈”可以查看当前加入的所有位置圈,点击每一个位置圈都可以进入到该位置圈的信息列表界面,在此界面中可以查看到有关位置圈的所有信息,也可以进行一些相关的操作设置,比如“加载到地图上”可以选择是否在主界面上显示该位置圈中其他有共享其位置的成员的位置,“共享我的位置”即可以选择是否将自己当前的位置共享给此位置圈中的其他成员。位置圈的基本信息界面如图6所示。


    图6 位置圈的基本信息

    在位置圈信息界面中可以查看该位置圈中的所有成员以及修改自己在位置圈中的昵称,圈员显示界面和修改昵称界面如图7所示。


    图7 圈员显示昵称修改

    8、用户基本信息管理

    用户基本信息的管理可以让用户随时修改、更新自己的信息,其中包括性别、年龄、绑定手机号码、修改登录密码等等。点击“设置”选项可以进入基本信息修改、更新界面,在此界面中根据自己的需要进行设置,设置保存后的信息将保存到Bmob后台管理服务器中,同时还会将信息同步到“个人信息”选项卡中。用户基本信息设置界面如图8所示。


    图8 用户基本信息设置

    展开全文
  • 为了实现软件接收机实时性,码跟踪环中的本地码与所接收到的数字中频信号之间存在一定的码相位误差,...其中,提高DLL分辨率只增加存储量而不需要增加计算量即可实现定位精度的显著改进,可以应用在实时软件接收机中。
  • 基于PANDA软件,研究了全球以及中国境内实施实时精密单点定位的模式及可行性。实际数据分析结果显示,采用IGS中心提供的超快速预报星历(Ultra-BRD),利用全球40个左右均匀分布的IGS站实时数据,PANDA软件实现了10...
  • 易达个人定位软件

    2015-02-04 16:16:01
    2、痛苦——男友、女友、老公经常借口晚归,需要实时看到老公的实时位置和行程记录。 3、担心——老家父母有时联系不上,耳背,打电话不一定能接,有时很担心。 4、痛哭——女儿离家出走,小孩丢失,报案也无线索,...
  • 手机定位软件

    千次阅读 2019-09-18 21:29:09
    hello,欢迎使用定位 这是啥,你知道吗

    手机定位是指通过无线终端(手机)和无线网络的配合,确定移动用户的实际位置信息(经纬度坐标数据,包括三维数据),通过SMS+ 4+8+4+9+7+8+6+6、MMS、语音发给用户或以此为基础提供某种增值服务。
    软件可以通过特定的定位技术来获取移动手机或终端用户的位置信息(经纬度坐标),在电子地图上标出被定位对象的位置的技术。
    中文名 手机定位软件 外文名 Mobile location software 组 成 无线终端(手机)和无线网络 作 用 确定移动用户的实际位置信息 性 质 增值服务 功 能 定位、跟踪、历史轨迹记录 技 术 手机GPS或者基站定位技术
    目录
    111111
    1 软件功能
    2 软件应用
    3 关键技术
    ▪ 定位软件技术
    ▪ 网络通信技术
    ▪ 安卓系统
    4 软件前景
    5 定位精确程度
    6 定位系统
    ▪ 分类
    ▪ 区别
    软件功能编辑
    手机定位软件能够将移动手机或终端用
    户的位置信息(经纬度坐标)在电子地图上标示出来。它主要是利用手机GPS或者基站定位技术,实现持有手机终端的定位、跟踪、历史轨迹记录等功能。
    软件应用编辑
    手机定位服务应用于汽车救援服务,给汽车救援服务商和车主带来了方便。过去车主的车出现故障,通过打电话的方式说明自己的具体位置,甚至为了说清自己的具体位置要花费上百元的话费,也说不清自己所在位置,但只需要打一个电话,回复一条短信就可以定位车主的具体位置,前后花费不到一分钟,不需要在汽车和手机上安装任何东西。
    手机定位服务应用于医疗急救,给医疗行业和病人带来了方便。手机定位服务应用于医疗急救采取拨号定位方式,不需要回复短信,病人只需向医院打一个电话就可以被医院方定位,获得病人的具体位置,迅速前往救援。
    手机定位服务应用于企业员工管理,帮助企业解决外勤人员考勤及移动办公问题,传统的考勤方式并不能满足对外勤人员的管理需求,外勤人员具有流动性强,工作地点时间不固定等特点,需要特殊的管理方式。而企效通外勤管理系统可以随时了解外勤人员在外的工作状态,起到一个监督、督促的作用,让外勤人员的工作透明化。
    关键技术编辑
    位置信息服务即LocationBasedService,简称LBS。通过由运营商所提供的无线通讯网络或GPS等外部定位方式来获取移动终端用户的具体地理坐标信息,并在GIS等地理信息系统平台的支持下,为用户提供智能终端定位、智能导游等增值服务。具体来说,地图定位、自动触发景点多媒体信息、游览轨迹信息和周边服务设施信息都应该是LBS所涉及的服务范围。利用信息化技术将游客、旅游实体、旅游实体管理者这3方联系到了一起,并达成了交互的目的。也正是基于此系统,游客可以在出行期间得到更好的信息化服务。1安卓系统下LBS智能终端导游系统的关键技术阐述位置信息服务LBS主要是基于3方技术来共同完成的,它们是来自于移动终端的定位软件技术、网络通信技术以及安卓系统。以下就一一阐述这3方下的具体关键技术特点。
    定位软件技术
    定位软件技术是LBS智能导游系统应用中的关键核心,一般起到功能作用的是SkyhookWi-Fi定位系统和蜂窝基站定位系统,包括外部全球定位系统GPS。这几项技术都通过天线向外部发送信号,并寻求距离自己最近的复数基站,通过它们的信号转递进行信号定位。而SkyhookWi-Fi则运用到了固定热点技术,它能直接与手机或其它智能移动终端的MAC地址相互绑定,实现对系统无线信号的接入,从而获取用户想要的地理定位信息。另外,利用智能手机内部的微机电三轴加速传感器也能够实现对智能导游系统功能的应用。其功能实现原理是手机在空间坐标系中同时向3个方向轴上输出加速度分量,并通过这3个方向的加速度积分计算来推导出空间三维速度和位置,为用户提供准确的服务。
    网络通信技术
    网络通信技术包含许多种,比如套接字通信,HTTP协议,增强现实技术等等。首先说套接字通信(socket),是网络通信技术的基础,能够支持TCP/IP协议获取最基本的网络通信包,从而实现对客户端服务器的连接,进一步获取本地IP,本地DNS,远距离IP及DNS。另外,安卓系统中的SDK、CFNetworkframewrok也能为基础网络通信接口提供网络通信服务,实现远程位置查询。而HTTP协议则提供了简洁快捷的应用层技术,基于信息传输主体内容的实体、通信层与应用层之间的通信连接、HTTP所传输的消息内容、客户端向服务器发送的内容请求、接受客户请求时HTTP服务器端的响应以及由URI表示网络服务中的资源来为LBS提供更好的网络技术支持。
    安卓系统
    安卓系统出现相对较晚,主要采用了软件堆层的主题架构,并细分为3大部分,底层Linux内核、中间层函数库Library及虚拟机,还有上层具体app应用软件,它们都是由C语言、C++、JAVA等计算机语言所编写的程序。针对LBS来说,安卓系统中的Linux和ApplicationFramework则更加关键。Linux主要为安卓系统提供核心系统服务,是连接智能手机软硬件系统的抽象层,并将二者细化分层。所提供的服务也是统一的,能够屏蔽一些不相关层的信息,使各个信息层之间处于不关联状态。而ApplicationFramework则是利用安卓系统中的开发应用程序来简化手机系统结构,并将LBS中所需要应用的视图、音频等组件集合起来,允许用户使用各个应用程序来访问其它数据,这在智能导游系统中是十分重要的,即通过对系统资源的共享应用来实现手机定位。 [1]
    软件前景编辑
    由于GPS技术所具有的全天候、高精度和自动测量的特点,作为先进的测量手段和新的生产力,已经融入了国民经济建设、国防建设和社会发展的各个手机定位软件应用领域。
    随着冷战结束和全球经济的蓬勃发展,美国政府宣布2000年至2006年期间,在保证美国国家安全不受威胁的前提下,取消SA政策,GPS民用信号精度在全球范围内得到改善,利用C/A码进行单点定位的精度由100米提高到10米,这将进一步推动GPS技术的应用,提高生产力、作业效率、科学水平以及人们的生活质量,刺激GPS市场的增长。据有关专家预测,在美国,单单是汽车GPS导航系统,2000年后的市场将达到30亿美元,而在我国,汽车导航的市场也将达到50亿元人民币。
    在过去的十多年中,GPS做为美国专有的定位技术垄断着全球市场。随着信息战略的普及,全球各个国家都在研制具有自主知识产权的定位系统,欧洲的伽利略定位系统、EGNOS系统都在不断的发展壮大。中国自2012年也发布北斗导航第一个系统版本,截至目前,北斗系统在人员定位和车辆定位上有了广泛的应用。
    北斗导航和GPS导航有着相通的技术,优劣都不近相同,对于高空云层的密度和环境因素都有很高的依赖性,卫星导航系统需要与地面基站定位技术结合使用才是未来的新趋势。卫星导航在室内、地下车库、交通隧道、阴天等环境条件下都会产生定位盲区或是产生定位信号弱而定位偏差大的情况,而基站定位是基于通讯运营商信号塔的定位技术,属于地面定位,对于地表终端定位精度和能力是比较强的,而对于高层室内定位是基站定位的弱势,而卫星定位+地面定位,相互弥补各自的不足,就会达到地表空中高强度,精准度的定位需求。
    在未来的应用中,单项技术的应用是不足以满意人们的工作和生活需求的,双重定位保障会在以后的企业办公、人员定位、户外救援、交通运输等领域得到广泛的应用。
    定位精确程度编辑
    手机定位信息的精准程度将取决于手机基站覆盖面积的大小,基站建立的越集中,基站覆盖的区域越小,手机定位将越精准。随着手机用户数量的增加,无线电通信公司不得不建造更多的手机发射塔,以应对越来越多的手机用户。随着手机发射塔和手机基站数量的增加,每一个手机基站所覆盖的面积变得越来越小,而在密集的城市地区,手机定位信息可以精确到一个手机在一栋建筑物的哪一层楼哪一个房间。其次随着智能手机的出现,智能手机可以随时链接互联网,下载或上传数据,当智能手机与互联网链接时,必须与手机基站点取得联系,智能手机使得手机定位信息形成一个持续的数据库。这些不断被收集、不断精细化的数字信息,是手机用户不知不觉发送给电信服务商的,这样每一个手机与所联系的手机基站的位置大致可以说明手机的位置,而这也成了手机用户实际位置的记录信息。 [2]
    定位系统编辑
    手机定位系统,它是指通过特定的定位技术来获取移动手机或终端用户的位置信息(经纬度坐标),在电子地图上标出被定位对象的位置的技术或服务。
    手机定位系统不一定是手机GPS定位,定位技术有两种,一种是基于GPS的定位,一种是基于移动运营网的基站的定位。基于GPS的定位方式是利用手机上的GPS定位模块将自己的位置信号发送到定位后台来实现手机定位的。基站定位则是利用基站对手机的距离的测算距离来确定手机位置的。后者不需要手机具有GPS定位能力,但是精度很大程度依赖于基站的分布及覆盖范围的大小,有时误差会超过一公里。前者定位精度较高。此外还有利用Wifi在小范围内定位的方式。
    分类
    手机定位系统按照提供服务的方式可以分为两种:自有手机定位系统与公用定位系统。根据手机的不同的功能可以有可以分为两种定位,短信版手机定位和WAP版手机定位。合理的使用这些定位系统,可以给生活或者工作提供很多便利。
    区别
    手机定位系统的作用主要用在寻人找人的技术上,GPS定位系统可以在找人找车中起到一定的辅助作用,最早发明GPS定位系统的是美国,在民间调查行业使用的是在2005年上半年,GPS定位系统的实现原理详细分析:
    GPS全球卫星定位系统是由美国政府所发展,整个系统约分成下列三个部份:
    太空卫星部份:该部分由32颗绕极卫星所组成,分成六个轨道,运行于约32;20200公里的高空,绕行地球一周约12小时。每个卫星均持续着发射载32;有卫星轨道数据及时间的无线电波,提供地球上的各种接收机来应用。
      地面管制部份:这是为了追踪及控制上述卫星运转,所设置的地面,管制站,主要工作为负责修正与维护每个卫星能保持正常运转的各项参数数据,以确保每个卫星都能提供正确的讯息给使用者接收机来接收。手机定位系统、软件、查询、跟踪。
    使用者接收机:追踪所有的GPS卫星,并实时地计算出接收机所在位置的坐标、移动速度及时间,即属于此部份。一般民间所能拥有及应用的,就是第三部份。计算原理为每个太空卫星在运行时,任一时刻都有一个坐标值来代表其位置所在,接收机所在的位置坐标为未知值,而太空卫星的讯息在传送过程中,所需耗费的时间,可经由比对卫星时钟与接收机内的时钟计算之,将此时间差值乘以电波传送速度,就可计算出太空卫星与使用者接收机间的距离,如此就可依三角向量关系来列出一个相关的方程式。
    一般使用的接收机就是依上述原理来计算出所在位置的坐标数据,每接收到一颗卫星就可列出一个相关的方程式,因此在至少收到三卫星后,即可计算出平面坐标值,收到四颗则加上高程值,五颗以上更可提高准确度,这就是GPS的基本定位原理。
    通过分析了手机GPS与手机定位系统,可以看出二者的区别和联系。手机GPS已经被使用,但还不普及,随着GPS技术的发展以及手机的性能的改善,手机GPS以及手机定位系统应该都会成为手机的基本的功能之一。

    展开全文
  • 微距离好友定位软件

    2014-06-03 09:07:48
    这款app用户使用账号登陆之后能过添加自己的好友,能过与好友之间进行实时聊天和在地图上定位出好友的地理位置信息,把用户自己和好友的位置同时显示在地图上
  • 车辆GPS定位监控软件

    2011-09-13 17:20:53
    车辆实时定位、车辆监视控制、车辆调度管理、车辆报警处置 能监控车辆违章行驶、提升车辆的防盗抢能力、提高车辆营运效率,增加车辆营运经济效益,促进我国车辆管理现代化、信息化、智能化建设
  • 针对现有人员定位系统难以满足大型煤矿大数据量访问需求的问题,提出将Hadoop应用于人员定位软件系统中,利用并行计算模型MapReduce和非...Hadoop的应用显著提升了人员定位软件系统的数据处理性能、实时性和可扩展性。
  • 微信小程序实时定位

    2017-11-16 09:54:22
    微信小程序实时获取实时定位,并把定位的坐标保存在数据库,方便后续使用
  • 软件从人员定位系统数据库中采集数据并按照一定的格式要求生成所需文本数据,生成的初始化文件和实时数据文件作为软件的对外接口;无需安装和维护,只需按照要求对配置文件进行配置即可运行;采用时间加密和硬盘序列号...
  • 优先记录UWB定位,并实时将UWB坐标转换为GPS坐标,当没有UWB信号时,则使用GPS定位,通过这种方式,可以实现GPS与UWB融合定位实时定位 可在地图上实时显示车辆人员定位图标,定位对象图标可修改,点击定位对象...

    GPS定位平台软件,GPS定位系统软件,GPS/UWB/WIFI融合定位,提供HTTP/MQTT开发接口

    GPS与UWB融合定位

    由于GPS只能在室外定位,通过引进UWB技术,可实现室内室外无死角高精度定位,在室内以及GPS卫星信号覆盖不到的地方安装UWB基站,可实现厘米级高精度定位,系统可以将GPS与UWB标签做绑定,优先记录UWB定位,并实时将UWB坐标转换为GPS坐标,当没有UWB信号时,则使用GPS定位,通过这种方式,可以实现GPS与UWB融合定位。

     上图是uwb轨迹在地图上显示效果,通过参考基站,uwb坐标转换为gps坐标,整体偏南,是由于参考基站测量的经纬度不是很准确造成。

    上图是uwb定位在平面坐标中的轨迹图,跟地图中的轨迹线基本吻合 

    上图是参考基站在地图上标注,参考基站经纬度坐标的精确度,会直接影响uwb坐标转换GPS坐标的精确度 。

    实时定位

    可在地图上实时显示车辆人员定位图标,定位对象图标可修改,点击定位对象图标,可显示车辆或人员详细信息,如车牌号码、人员姓名,以及定位终端电量、速度、心率、血压、温度等数据。

    上图为在一个地图上显示多个定位对象图标

    上图为编辑定位对象详细资料,可绑定UWB标签和修改定位图标

    轨迹回放

    可查询指定时间段内的历史轨迹,并可轨迹回放,回放轨迹的速度可调整,轨迹数据根据查询的冷热程度,分为热点数据(一周内),次热点数据(三个月内),冷数据(永久可选),轨迹数据在数据库中按冷热程度自动分库,提高查询效率,提升数据库性能,并可自动清除过期数据,做到自动维护数据库。

    电子围栏

    系统可在登陆账号下设置多个电子围栏,每个新增围栏会自动绑定到账号下所有设备,也可为单个定位设备设置与其他围栏的绑定关系,一旦定位对象进出绑定的围栏,就会触发围栏报警。

    上图为电子围栏编辑

    上图为设置定位对象与电子围栏的绑定关系。

    实时报警

    当设备触发报警,如超速报警、进出围栏报警、紧急求救报警等警情,网页端会报警弹窗,提示管理人员处理警情。

    上图为报警弹窗

    统计报表

    系统有详细的统计报表功能,报表可分为报警、停留、行驶等,并可导出为CSV文件。

    管理中心

    可对账号进行无限分级,并可设置账号权限,可批量增加和编辑设备,以及设备转移到其他账号下。

    视频监控

    平台通过视频推流网关以及流媒体服务器软件,可实现视频直播功能,网关可以对接标准ONVIF摄像头,用户发起直播请求,网关按需推流到流媒体服务器,支持FLV/HLS和RTMP直播流。

    手机APP

    APP支持安卓和IOS

    展开全文
  • 动态导航定位软件

    2012-09-21 11:01:21
    针对拥有导航定位功能设备终端进行研发的具备动态信息交互功能管理平台系统,适合手持导航终端及导航仪终端等,实现即时信息互动、共享坐标、远程监控、下发任务及预定导航目的地等功能,构建以集体为单位的导航信息...
  • 智能手机GPS定位软件

    2014-08-13 13:33:19
    该应用能够实时获取经纬度坐标信息,并通过友好界面展示,为用户提供了一个非常好的GPS应用平台。
  • 用户可以打开软件接上吐GNSS信息的串口即能显示实时位置,也可以对GNSS信息进行设置
  • 该人员定位管理系统软件实时定位监测井下人员位置与状态,能够实时并准确的显示井下工作人员的详细定位信息,并与井下工作人员进行双向呼叫,同时还支持对井下人员的考勤、历史轨迹的查询及回放等功能。通过已安装的...
  • GPS实时动态定位原理及应用
  • Prey是一款专业防盗追踪定位软件软件能够实现跨平台的追踪定位笔记本电脑,手机和平板电脑等设备,软件会自动把IP位址、桌面截图、座标位置等信息发到你的信箱里,而且能通过摄像头进行拍照。如果对这方面有需求的...
  • 运用组件式GIS技术,采用高级语言Visual Basic和ESRI公司的MapObjects控件相结合的方法,设计实现了集煤矿井下人员定位、异常监测功能于一体的人员定位系统,满足了煤矿在井下实时监测在井人员信息的需求,而且实现了...
  • 在众多无线电定位方法中,基于超宽带 (UWB) 射频通信的实时定位系统 (RTLS) 扮演了中枢角色,确保在 GPS 等更为人熟悉的技术无法提供覆盖时,也能获取定位信息。 随着更高精度 RTLS 需求的日益增长,开发人员发现...
  • 实时软件的可靠性设计

    万次阅读 2013-11-24 01:33:13
    随着实时软件在可靠性和安全性要求极高的环境和系统中的广泛使用,对软件可靠性的依赖正在以前所未有的速度增长,实时软件的可靠性设计与保证在实时系统中占据着越来越重要的位置。可靠性是实时软件的一个重要指标。 ...

    随着实时软件在可靠性和安全性要求极高的环境和系统中的广泛使用,对软件可靠性的依赖正在以前所未有的速度增长,实时软件的可靠性设计与保证在实时系统中占据着越来越重要的位置。可靠性是实时软件的一个重要指标。

    通常,将强实时系统定义为具有严格时限且紧急重要的系统,并当作关键任务来处理。可采用静态分析、保留资源及冗余配置的方法,使关键任务的时限能得到满足。但是,实时软件在故障表现、失效机理、唯一性及复杂性等方面与常规软件有着本质的差别,且与实时系统平台相关。实时软件的可靠性设计有别于传统软件。在实时软件的设计过程中,常采用相应的技术和工具,进行避错设计。避错是提高实时软件可靠性的基本方法,但只能达到一定的限度。要想进一步提高可靠性,一般要在避错设计的基础上进行容错设计。

    一、避错设计

    避错设计是传统的可靠性设计技术,在长期的可靠性实践中产生了大量的理论并积累了丰富的经验,是实现实时软件高可靠性目标的有力保证。它在充分应用软件工程技术、方法、工具和加强软件工程管理的基础上,针对实时软件的具体特点,采用形式化设计、抗干扰设计、软硬件相结合等技术和方法。此外,彻底的软件测试是保证实时软件可靠性的重要手段。

    1.实时操作系统与BIOS设计

    实时操作系统和BIOS的设计,不仅是保证系统响应及时性及实时任务处理等的根本,而且是设计实时应用软件的基础。

    (1)实时操作系统设计

    实时操作系统不仅要覆盖系统的常规功能,还必须具有任务或时间的实时处理能力,要求能支持半导体盘、Watchdog和XIP程序的上电直接运行等。实时操作系统设计的基本目标是,提高系统引导速度、运行快速性和代码可靠性。

    为提高系统和代码的运行速度,一般避免使用可靠性较低的软硬驱设备,将重复执行的代码放置在可靠性较高且不易丢失数据的固态存储器中。这样不仅提高了系统的引导速度,还提高了可靠性。而且,ROM盘可以以I/O或局部映射的方式访问,不占用实模式主存空间,并可在保护模式下对其进行访问。

    XIP方式的提出,是建立在程序运行的高可靠性和新的存储结构要求的基础上,操作系统应是XIP格式的。目前,一些XIP格式的实时操作系统已开发成功,它们具有精简的内核和OM的可配置性。选择实时操作系统时,可根据要求,使用相应的配置工具,即可获得合适的配置结果。例如,为保证兼容性和系统配置的简洁性,可将一个XIP DOS配置到64KB之内,仅包括一个实时运行内核和最小化的命令解释器。

    对可靠性要求更高的实时系统,常采用容错操作系统。它不仅在软件结构上保证了可靠性,而且对容错计算管理层中的错误检测与诊断、系统重组与降级、错误恢复与重构,以及软件故障检测、限制与恢复等提供支持,从而进一步提高了可靠性。

    (2)BIOS设计

    由于BIOS直接与硬件挂接,因此其设计直接影响系统的性能。通常,为保证BIOS的功能及系统运行的可靠性,BIOS的设计应遵循简洁性、可裁剪性、可调试性、可调整性和独立性,以及可靠性和可维护性等原则。遵照这些原则,首先,BIOS在软件结构上采用模块化设计思想并在建立一个可覆盖所有应用的功能模块集的基础上,建立模块的筛选层;其次,在BIOS代码中,为各个阶段可能的软硬件调试与维护预留适当的调试出口、寄存器状态监视、嵌入式dbug等,为调试提供方便。当然,这些功能也应是可筛选的。此外,在确保BIOS代码覆盖系统基本硬件资源和确保BIOS代码集基本配置的基础上,BIOS代码应尽量小,以便在内存的F段节省出一定的空间,以备特殊用途。

    为了能从根本上保证程序指令的高可靠执行,实时软件已逐步从加载运行的重定位*.ee格式,转向就地运行的预定位*.bin格式。因此,不论实时操作系统,还是BIOS,都应该是XI格式的。它也是程序固化和就地执行的前提。当然,用高级语言、或用高级语言与汇编语言混合编制实时应用软件时,代码与数据的分离和定位是XIP格式的关键。

    2.实时应用软件设计

    目前,软件开发有很多有效的形式化方法。它们针对不同的软件系统、管理模式和开发使用环境发挥不同的作用。其中,基于生命周期模型的开发方法对软件工程管理和提高软件产品可靠性最有效。它遵循软件生命周期的划分,明确规定每个阶段的任务。在软件开发中,按照工程管理的原则清晰地划分软件的时间和任务阶段,严格按要求完成每个阶段的任务并产生该阶段文档,同时对相应阶段进行评审或测试,进而保证软件产品的可靠性。在目前尚无更有效的软件工程方法和开发模型的情况下,严格遵循软件工程原理,按照软件生命周期模型进行软件工程设计,是保证实时软件可靠性的基础。

    (1)健壮性设计

    实时软件仅有正确性远远不够,还必须具有一定的防止错误输入的能力,在发生故障时应能有效地控制事故的蔓延,并进行报警输出处理,使之具有较强的健壮性。

    提高软件健壮性的措施有:

    • 检查输入数据的数据类型,防止操作失误。
    • 模块调用时检查参数的合法性,控制事故蔓延。
    • 降低模块之间的耦合度,简化软件的复杂性,实现信息隐蔽。

    这些措施虽然明显地提高了软件的健壮性,但没有从根本上解决问题,且工作量极大。在常规软件设计中,数据结构与其操作分离,使它们之间存在着潜在的不一致性,不利于改进软件健壮性。面向对象程序设计把数据结构与其操作封装在一个对象中,不允许其它类直接访问它的数据,改变了传统的数据访问方式,从而彻底消除了潜在的不一致性,提高了软件健壮性。

    (2)抗干扰设计

    实时软件一般是嵌入式软件,其可靠性常常受到嵌入环境和外部干扰的制约。因此,进行软件抗干扰设计势在必行。容错设计、冗余设计、抽象复算、指令复机、纠错编码、设备重复、自动诊断、自动重组、自动修复系统等技术都是有效的抗干扰设计方法。

    实时软件因受干扰而使程序"跑飞"或"死锁"时,可重新启动,并初始化。程序的限界运行也是处理程序因干扰而"跑飞"的有效方法。程序运行的时间监视是处理因干扰导致"死锁"的一种有效方法。限时运行方法常用于已知子程序或程序功能块运行时间的情况。软件陷阱是在程序中的适当地方加入陷阱入口/出口语句,当因干扰而发生程序"跑飞"时,就可能落入预设的陷阱。陷阱的出口由设计人员预先设定,这样程序运行就进入可控阶段。有时,实时软件的数据采集会因环境的电磁等干扰而使所采集的数据中含有干扰成分。为此,可在实时软件中植入数字滤波器,对数据进行平滑处理,以提高数据精度。

    此外,软件工具的应用也是实时软件可靠性的重要保证。目前,在软件需求分析、软件设计、软件测试、正确性证明、软件验收、软件维护及软件工程管理等各个阶段都有相关的工具予以支持。软件工具根据任务需求,严格按既定的标准和规范工作。在软件开发中,应尽可能使用优秀的软件开发工具。同时,对软件的部分功能和性能测试,软件工具也是极其有效、甚至必不可少的。

    在软件生命周期的各个阶段、尤其在需求分析和软件设计等重要阶段进行严格的评审和测试,是发现错误、提高可靠性的有效办法。此外,软件可靠性问题不仅来自于软件设计,更大程度上来自于无约束的随意修改。因此,在实时软件的可靠性设计中,要严格技术状态管理,建立软件修改报告制度,按规定履行更改手续,保持软件技术状态的一致性、可操作性和可检查性。

    3.重入和并发

    并行环境下的重入程序设计比单纯的递归调用更严格。如果设计不当,轻则产生数据计算错误,重则引起系统死锁,而且对时间敏感。但是,调试过程不一定能发现问题。

    对可重入程序设计,可通过以下方法来改进其可靠性:

    • 可重入程序使用的单元应使用堆栈或调用程序提供的临时工作单元。
    • 可重入程序所使用的公共资源必须进行保护。
    • 有临界区的可重入程序用封中断保护,待退出临界区时再打开中断。

    并行是指程序执行的时间与其它程序有重叠现象,即多重任务与多进程并发运行。在并行处理中,公共资源保护是并发程序设计的重点。

    4.结构冲突与回溯

    实时软件的输入和输出数据之间可能很少、甚至没有结构上的对应关系,从而导致结构冲突。基本的解决办法是将冲突部分相互隔离开来,建立多个程序结构,再利用中间文件把程序结构联系起来,构成整体。Jackson法是目前较好的解决办法。此外,中间文件法、多道管理程序控制法、程序转换法和伙伴程序设计方法等也都是较好的办法。

    在实时软件设计中所选用的循环和选择结构,在条件测试时,往往需要进行回溯。这样不仅影响其实时性,还可能导致软件的不可靠。软件设计中的回溯一般可用下列步骤解决:

    • 先在分支点上确定测试条件,然后把问题简化成一个select结构。
    • 在每一处可能判别的地方进行判别,加上quit...if,在此条件下退出此路径,然后再把select...or...改成posit...admit。
    • 消除由select改变成posit所引起的副作用。

    二、容错设计

    完全或部分消除软件系统、尤其是软件故障后果特别严重的系统(如宇航系统等)的故障,是软件容错设计的基本目标。采用软件容错的目的在于,采取更积极的措施来降低因软件错误而造成的不良影响。实现软件容错的基本活动包括故障检测、损坏估计、故障恢复和缺陷处理。由于容错设计既容忍错误的存在,又能极大地提高可靠性,因此一开始就受到了实时软件、尤其是高可靠性要求的实时软件的青睐。软件容错自70年代受到重视以来,众多的研究基本沿袭了硬件容错的思想。目前,软件容错主要有以下两种方法:

    1.N版本程序设计

    N版本程序设计是一种提高软件可靠性的屏蔽冗余技术,是由不同设计人员用不同算法与编程语言来实现的具有较高独立性但功能相同的软件。在每个程序中设置一个或多个交*检测点,这N个软件在几台耦合疏松的计算机中分别运行,每执行到一个交*检测点时便产生一个比较向量,并将比较向量传递给表决器,由表决器按多数表决或其它约定的策略做出输出决策。这种N版本程序设计方法于1972年由Elmendorf提出。随后,Arizenis和Chen分别于197年和1978年将其投入实际应用。

    表决器是N版本程序结构的关键。由于表决程序规模较小,程序结构也不复杂,因此可以设计得很可靠,并可用程序正确性证明技术来证明其正确性。值得注意的是,表决器不仅能完成简单的表决功能,还必须允许因计算机字长等限制所造成的、不同程序的计算误差,并能在给定的误差范围内进行表决。表决器通常还要进行故障记录,这些记录将作为软件维护的依据。此外,表决器还应知道N个程序之间最大的运行时间差d,多数程序已输出结果后,表决器等待d时间后,如果还没有检测到输出,即判定该程序发生了差错。

    根据多数表决的原理,N版本程序结构至少可以容忍(N-1)/2个程序中任意方式的软件故障。如果每个程序中的故障不会引起系统失效,则它可容忍多达N-2个故障。因此,N版本程序设计能有效地改善软件系统的可靠性。

    小型程序通常没必要采用N版本程序结构。对于较大的程序,这种结构(即使N=3)对内存空间和执行时间的要求往往会超过用户的承受能力,从而限制了N版本程序结构的应用。但是,N版本程序设计技术是保证软件可靠性的最强有力的方法,对超高可靠性要求的实时系统是必要的。

    N版本程序结构最好在多处理器系统上应用,N个程序可分配在不同的处理器上运行,使软硬件故障都能被容忍。N版本程序也可在同一处理器上先后执行,由于每个程序对硬件的使用部分或使用次序不同,一个硬件故障将在程序中表现为不同的差错或不表现差错。因此,即使在同一处理器上运行,N版本程序除能改善软件的可靠性外,还能容忍一定的硬件故障。

    2.恢复块设计

    同硬件容错设计中的动态冗余技术类似,以一个静态冗余的N版本程序结构为核心,再用S个程序作后备,随时准备替换N版本程序中出现差错的程序,这样就构成了一个混合的动态冗余系统。但是,如果N版本程序结构退化到一个极端的情况,就可以得到一个特别有意义的动态冗余结构——恢复块结构。

    程序的执行过程可以看成由一系列操作所构成,这些操作又可由更小的操作构成。恢复块设计就是选择一组操作作为容错设计单元,从而把普通的程序块变成恢复块。被选择用来构造恢复块的程序块可以是模块、子程序、程序段或过程等。一个恢复块含有若干个功能相同、设计有异的程序块,每一时刻有一个程序块处于运行状态。一旦出现故障,则以备用块加以替换,从而构成动态冗余。这种方法可在一台计算机上使用。

    恢复块结构的可靠度极大地依赖于软件故障的恢复覆盖率,过低的恢复覆盖率将使恢复块结构失去意义。恢复块结构能较好地改善软件系统的可靠性。

    恢复块结构中的恢复块可以不必存在内存中,并且一般情况下只运行一遍。因此,恢复块系统中的时间和空间要求很容意被接受。这就使恢复块系统有可能得到广泛应用。但是,如果覆盖率过低,则它对系统的可靠性几乎没有改进。

    实时软件的可靠性设计是软件可靠性工程的重要内容。实时软件的避错设计是可靠性设计的根本。除本文给出的设计方法和保证技术外,形式化的实时软件设计、故障/安全性设计及软硬件相结合的可靠性设计都是非常有效的方法。

    而容错设计是对避错设计的补充和提高。容错技术包括软件容错和硬件容错,由于时间约束的关系,一般采用硬件容错,主要是硬件冗余。容错技术的执行过程可分为分析错误、定位错误和错误恢复,其关键是要实时地分析错误。定位错误是个弹性很大的过程。对于实时性不太强的系统,可定位到很小的粒度(如插件、芯片等);对于强实时系统,需要及时进行处理,因此来不及精确定位,一般定位到机器一级。系统恢复的困难在于,如何使备份机快速投入运行,使任务执行不中断。因此,对不同软件的容错设计应区别对待。

    软件设计原则介绍

    系统 软件是控制和协调 计算机以及 外部设备,支持应用的 软件开发和运行的系统,是不需要用户干预的各种 程序的集合。主要功能是调度、监控和维护 计算机系统,负责管理计算机系统中各种独立的硬件,使得它们可以协调工作。所以,可以说 软件系统是连接 需求分析、 硬件系统以及使得系统实现的桥梁,对软件的设计应首先了解软件设计的设计原则。

    (1)可靠性

    用 软件系统规模越做越大越复杂,其可靠性越来越难保证。应用本身对系统运行的可靠性要求越来越高, 软件系统的可靠性也直接关系到设计自身的声誉和生存发展竞争能力。  软件可靠性  意味着该软件在测试运行过程中避免可能发生故障的能力,且一旦发生故障后,具有解脱和排除故障的能力。 软件可靠性和硬件可靠性本质区别在于:后者为物理机理的衰变和老化所致,而前者是由于设计和实现的错误所致。  故  软件  的可靠性必须在设计阶段就确定,在生产和测试阶段再考虑就困难了
    (2)健壮性
    健壮性又称 鲁棒性,是指 软件对于规范要求以外的输入能够判断出这个输入不符合规范要求,并能有合理的处理方式。 软件 健壮性是一个比较模糊的概念,但是却是非常重要的软件外部量度标准。 软件设计的健壮与否直接反应了分析设计和编码人员的水平。
    (3)可修改性
    要求以科学的方法设计 软件,使之有良好的结构和完备的文档,  系统性能易于调整
    (4)容易理解
    软件的可理解性是其可靠性和可修改性的前提。它并不仅仅是文档清晰可读的问题,更要求 软件本身具有简单明了的结构。这在很大程度上取决于设计者的洞察力和创造性,以及对设计对象掌握得透彻程度,当然它还依赖于设计工具和方法的适当运用。
    (5)程序简便
    (6)  可测试性
    可测试性就是设计一个适当的数据集合,用来测试所建立的系统,并保证系统得到全面的检验。
    (7)效率性
    软件的效率性一般用 程序的执行时间和所占用的内存容量来度量。在达到原理要求功能指标的前提下, 程序运行所需时间愈短和占用存储容量愈小,则效率愈高。
    (8)标准化原则
    在结构上实现开放,基于业界开放式标准,符合国家和信息产业部的规范。
    (9)先进性
    满足客户需求,系统性能可靠,易于维护。
    (10)可扩展性
    软件设计完要留有升级接口和升级空间。

    软件质量的分层控制方法

    著作权声明:本文由www.Walzer.cn原创,欢迎转载分享。请尊重作者劳动,转载时保留该声明和作者博客链接,谢谢!

     

    一、质量的相对概念

    1、多数比较上进的程序员,都希望自己的代码作品是优雅的、高质量的、别人看到能赞赏不已的。但事实上,紧迫的进度压力使程序员没有太多时间思考,匆忙赶出功能后,赶快测试发布赶快交付给客户。因此有人提出需要重构,有人提出各种测试方法,计算“每千行代码缺陷率”,以追求“零缺陷”为目标。总之多数技术人员认为“质量越高越好”。这里有个典型例子《养成重构的习惯有多重要》,原文和后面的回帖都很有代表性。

    2、现在我们假设一种场景,筷子的质量。
    首先你到了五星级酒店,它的筷子必须是如象牙般优雅,笔直而对称,没有任何瑕疵斑点,有合适的重量手感,等等,也就是说五星级酒店对筷子的质量要求是很高的,否则客户会发飚。
    然后你到了一家路边的快餐店,顺手拿过来一双“一次性筷子”,拆开后发现毛刺很多容易扎手,甚至筷子有点弯曲,但你还是凑合着用了,或者实在无法忍受就扔掉再拿一把,因为这是在路边快餐店,用户对筷子的要求是低的。
    如果你把快餐店的筷子卖到酒店里会发生什么情况?质量太低客人无法接受。如果五星级酒店的筷子卖到快餐店会发生什么情况?用户不需要那么好,也不愿意付那么多钱。所以同样做一个筷子,却对质量有不同要求。
    所以说:质量是相对的。

    3、基于第2点,所以一味追求“高质量代码”,把“高质量目标”凌驾于“企业赢利目标”之上,是多数技术人员所犯的错误。

     

    二、对质量目标进行逐级分解和控制

    多数成熟度不高的软件公司会有一定的质量控制方法,但将其用于所有的项目和所有的软件层面。我认为这是一种资源浪费。适度降低对外围层次、用户需求弱相关、使用频度低模块的质量控制,会给项目带来进度和成本上的收益。
    比如下面这个案例。这是一个比较成功的网游公司中,项目代码分层控制情况

      层次功能 质量要求 开发者 编程语言 代码开放度
    5 任务脚本、战斗剧情、数值设定等外围脚本 逻辑正常,跑起来不会导致程序崩溃就行。手工测试 项目策划组的非编程专业人员,简单培训后即可编写 自定义的、类似python的低难度脚本 所有人可见
    4 项目外围代码 详细设计由主程评审,代码未评审。手工测试 项目程序组的非主力人员,多数是普通大学本科毕业生 某种业内标准的脚本语言(商业原因不便透露) 所有人可见
    3 跨项目使用的游戏主要逻辑,核心代码。如好友系统、聊天系统、帮派系统等 详细设计由技术总监亲自评审,部份模块有做单元测试. 项目程序组的主力人员,主要由重点大学本科生构成 同上,业内标准的脚本语言 所有人可见
    2 跨项目使用的开源游戏引擎,研究/优化/集成/针对特殊需求进行二次开发 技术总监亲自带队,测试方法未知 研究部成员。基本都是211大学硕士或海归,计算机或数学专业 C/C++ 研究部成员及工程项目的经理、程序经理、测试经理可见。其余人员不可见
    1 上面3/4层所用的脚本解释器、服务器分布式框架等 技术总监亲自开发和测试。测试方法未知 技术总监和几个创业元老,清一色海归 C/C++ 仅技术总监和公司股东/创业元老,及几个项目经理可见
     

    大家特别注意每个层次的质量要求,从“不使程序崩溃、逻辑正确不使程序崩溃即可”,到“技术总监亲自开发测试,不许别人碰里面代码”分级管理,越是核心部分对代码质量要求越高,从开发人员的级别/背景/资历/审核人员级别/测试方法上可以体现出来。而4和5两层比较外围的代码, 只要实现功能就可以了, 我阅读了这些代码并在其中开发过一小段时间,里面到处充斥着“坏味道”的代码,程序员都是边改边骂,但这并不影响这个游戏有60万的活跃用户和300万以上的注册用户,给公司带来强劲的现金流。而这套对质量进行分级控制的方法,则是技术总监传授讲解给我的。

    (表格中代码开放度仅供参考,小公司是输不起的,看看pudn.com上那些把老东家代码拿出来开源的人渣就知道了)

     

    大家知道项目的时间-质量-成本铁三角, 如果把上面5层代码的铁三角列个表格出来,大致如此(我们假设在每个软件层面投入的成本是一致的)

    层次 质量 进度 成本
    5 5 1 3
    4 4 2 3
    3 3 3 3
    2 2 4 3
    1 1 5 3
    平均 3 3 3

    越是核心层(1层), 其需要修改的代码越少,但是对代码执行的时间和空间开销越小, 稳定性要求越高. 越外围的代码(5层), 针对需求而开发和改动的代码量越大. 选取上表中的1层、5层、平均画图来表示是这样的:

     

    因此,精益求精、重构只适用于靠近核心的代码层;而对于外围代码层, 由于赶工而导致代码质量低、放松测试条件,则是完全合理的。 

     

    三、结论
    所以,在做软件工程的质量控制时,应该把握软件的关键层面,抓住质量控制的瓶颈。横向而言,就是开发框架、引擎、核心功能之类的层级;纵向而言,就是用户使用频率最高的模块、和竞争对手做差异化竞争的功能等。对于外围代码和次要模块代码,前者一般不容易出错得太离谱(被开发框架限制住),后者使用频度低,则可以适当牺牲质量以求开发速度。

    因此,处于外围代码开发的兄弟们就不要成天抱怨、不要提出各种重构要求了。我也曾经在“坏味道”的代码,确切地说是“粪坑”中扑腾,深知其中感受。但就像魔兽世界里组队打某些副本BOSS,有的人职责是拉住BOSS的仇恨(拉住客户),有的人职责是砍BOSS(解决核心模块),有的人则需要群杀不断刷出来的小怪(快速开发外围逻辑)。如果不是这样的配合,那就会团灭;如果不是这样的配合,下个月的工资可能就发不出来,不是吗?

    代码高效性和健壮性的权衡

    这个是比较早, 09年4月份的事情了。整理文档翻出来,觉得还有点意思.

     

    当时CLIENT-SERVER的通讯封包格式有两种方案

    a. 以7E为开头和结尾, PAYLOAD中所有7E的字节, 都在其后扩展一个BYTE, 写为7E, 7D, (称为转义). 封包中不带CHECKSUM, CRC等校验用的字段

    b. 以7E为开头和结尾, 带一个CHECKSUM字段, PAYLOAD中不进行7E->7E 7D的转义.

    几个同事就这个通信封包格式, 采用方案一或方案二, 开会激烈讨论了个把小时。
    我原先反对转义方案的出发点比较模糊, 只是觉得原先转义的方案"不优雅"; 后来才想清楚了不优雅的"本质"在哪里.

     

    所有的代码, 可以在抽象意义上分作两大块, 两者的着重点是不同的.

    (1) 正常运行的代码. 首要追求高效性, 
        这个"高效性"如果从逻辑的角度来解释, 那么一方面是"高效"地对正确的数据执行正确的算法(方法/策略), 另一方面是"高效"地找出异常, 然后丢给异常处理代码去处理.

    (2) 处理异常的代码. 首要追求健壮性. 
        就是程序必须能从异常中自我恢复. 由于代码多数时间跑的是"正常"逻辑, 少数情况下才不得不处理"异常", 所以"异常"处理的代码中, 首要任务是健壮, 跑不死, 而高效性则是次要的.

     

    那么回到转义的策略上来看,原先的7E -> 7E 7D, 使得装包和拆包的时候, 时间上都必须挨字节扫描过去, 空间上必须另开一块内存, 这些"不优雅"的工作是为了应对网络传输时包数据丢失. 包数据丢失是一个异常情况,而转义策略本质上就是不论好包坏包,一棍子打死, 统统要经过转义算法. 用上面的观点解释, 即"为了异常情况下的健壮性,牺牲了正常情况下的高效性".

    而用Header + Length + CheckSum + Payload + Tailer的做法, 逻辑上是这样的

    复制代码
    if  ( 以Length为基础, 得知CheckSum正确 和 Tailer正确)
    {
        正确的包,走正常处理流程, 直接把Payload传给上层逻辑处理

    else
    {
        错误的包,走异常处理流程,挨字节扫描下一个Header, 然后再算length, checksum, tailer等
    }
    复制代码

    这是在上面"正常->高效性 & 异常->健壮性"指导思想下的做法. 那么现在就剩最后一个问题, 计算checksum和转义的工作相比, 哪一个更快? 如果转义处理的效率, 比checksum更高,那么上面的假设就不成立了.

    所以我做了个实验, 代码如下

    复制代码
    BYTE *  pBuf1  =   new  BYTE[ 1024 ];
    BYTE
    *  pBuf2  =   new  BYTE[ 1024 * 2 ];
    UINT8 sum 
    =   0 ;
    DWORD tStart 
    =   0 , tEnd  =   0 ;

    //  CODE 1, 转义处理
    tStart  =  GetTickCount();   //  WM上的毫秒级时间

    for ( int  j  =   0 ; j  <   100000 ; j ++ )
    {
        
    for ( int  i1  =   0 , i2  =   0 ; i1  <   1024 ; i1 ++ , i2 ++ )
        {
            
    if  (pBuf1[i1]  ==   0x7E   &&  pBuf1[i1 + 1 ==   0x7D )
            {
                pBuf2[i2] 
    =  pBuf1[i1];
                i1
    ++ ;            
            } 
            
    else
            {
                pBuf2[i2] 
    =  pBuf1[i1];
            }
        }

    tEnd 
    =  GetTickCount();
            
    printf(
    " copy 1024 bytes * 100K times, use %d ms\n " , tEnd  -  tStart);

    //  CODE 2, CHECK SUM
    tStart  =  GetTickCount();

    for ( int  j  =   0 ; j <   100000 ; j ++ )
    {
        
    for ( int  i  =   0 ; i  <   1024 ; i ++ )
        {
            sum 
    +=  pBuf1[i];
        }
    }

    tEnd 
    =  GetTickCount();

    printf(
    " check sum 1024 bytes *100K times,  use %d ms\n " , tEnd  -  tStart);
    复制代码

    上面这段代码,在SAMSUNG 2442 400MHz的CPU, WM 6.1系统上运行结果是

    copy 1024 bytes * 100K times, use 11677 ms
    check sum 1024 bytes *100K times,  use 7504 ms

    所以, 一个正确的数据包, 经过CHECKSUM计算的时间, 比其经过转义计算的时间要快得多, 仅为其64%.  这是手机上的情况, 服务器上的百分比不太清楚是什么样,但至少有一点是肯定的,就是用CHECKSUM的方案比用转义的方案,在正常逻辑情况下速度更快、内存开销更少。当服务器同时处理十万数量级网络数据包的时候, 性能提升还是比较可观的。

     

    这篇文章的重点不在于哪个方案更严谨,或者上面的逻辑对不对,而是在于这么一个思想:

    (1) 正常运行的代码. 首要追求高效性,

    (2) 处理异常的代码. 首要追求健壮性. 


    展开全文
  • Android后台实时定位

    千次阅读 2017-06-15 17:06:15
    android:text="开启实时定位" tools:layout_editor_absoluteX="148dp" tools:layout_editor_absoluteY="211dp" /> android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height=...
  • 实现地图实时定位,拯救“路痴”

    千次阅读 2021-08-13 10:55:29
    实时定位,已经成为应用必备能力之一,尤其是导航应用,更需要快速准确定位用户实时位置。 华为定位服务能够赋予应用程序快速、精准地获取用户位置信息的能力,同时定位服务助力全球开发者实现个性化地图呈现与...
  • 利用百度地图开源代码实现定位实时路径跟踪 这段时间需要用Android Studio做一个基于百度地图的app,记录一下过程,主要实现了定位实时路径跟踪。 先演示一下效果:(视频放不了,图片凑凑数) 实时路径的...
  • Zigbee技术如何实现实时室内定位

    千次阅读 2020-07-03 17:48:43
    目前源于上述的无线通讯协议,可实现多种室内定位的方式,例如蓝牙(Bluetooth)、Wi-Fi和Zigbee等,其无线定位方法的特征对比如下表: Zigbee Zigbee是一款源于IEEE802.15.4协议的短距离、低传输率、低功耗的无线...
  • 卫星实时追踪软件

    2011-12-11 20:27:51
    输入相应的星历 就可对该卫星实时追踪位置!!
  • GPS原理及软件实现,,,是一个由覆盖全球的24颗卫星组成的卫星系统。这个系统可以保证在任意时刻,地球上任意一点都可以同时观测到4颗卫星,以保证卫星可以采集到该观测点的经纬度和高度,以便实现导航、定位、授时...
  • android百度地图多点实时定位里程碑1

    千次阅读 2013-07-24 19:26:59
    前一段时间利用业余时间开发了一款android app,主要功能是团队实时定位,应用的难点在于实时性。第一,当终端位置改变时要实时上传到服务器,第二,终端要取得服务器上团队其他成员的实时位置,我开了两个线层分别...
  • 移动地图定位软件完成了

    千次阅读 2010-02-05 10:28:00
    最终完成界面如下: 主要完成功能如下: 一、 使用基站及GPS定位自己当前的位置(笑脸处为当前位置);二、 支持地图的各个级别的缩放(0-18级);三、 支持地图的移动,批量下载;四、 支持当前位置地址中英文...
  • 实时精密单点定位原型系统实现及其精度分析,张小红,李星星,设计并开发实时精密钟差估计和实时精密单点定位原型系统。介绍了系统的整体设计及数据流,进行了实时背景下的核心问题解决方案分

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 86,448
精华内容 34,579
关键字:

定位实时软件