用于管理可移动物体通信的系统和方法与流程

文档序号:17297168发布日期:2019-04-03 04:31阅读:176来源:国知局
本专利文件的公开的一部分包含受到版权保护的材料。版权所有者不反对任何人对专利文献或专利公开的传真复制,因为它出现在专利和商标局的专利文件或记录中,但在其他方面保留所有版权。所公开的实施例总体上涉及可移动物体,并且更具体但非排他地涉及用于管理与可移动物体的通信的系统和方法。
背景技术
::诸如无人驾驶飞行器的可移动物体可以用于许多不同的领域,诸如,电影制作、体育赛事、救灾、地质研究等。可移动物体可以配置为将远程数据(如视频数据)传输回与可移动物体交互的应用。此外,这样的应用可以定期查询来自可移动物体的数据(例如控制或状态数据)。但是,可移动物体和应用之间的通信通常在有限的带宽内进行,这会导致延迟,从而导致应用对可移动物体数据的异步访问。糟糕的应用设计会不必要地增加有限通信带宽的使用,从而使该问题恶化。目前,缺乏统一的方法和系统来在不影响性能的情况下提供高效的可移动物体通信。因此,需要允许改善与可移动物体的通信的系统和方法。技术实现要素:根据本文公开的第一方面,提出了一种管理与可移动物体的通信的方法,包括:在可移动物体管理器处,从可移动物体环境中的请求方接收针对可移动物体数据的请求;确定与所述请求相对应的可移动物体数据在与所述可移动物体管理器相关联的缓存中是否可用;以及将所述缓存中的可移动物体数据提供给所述请求方。根据本文公开的另一方面,提出了一种管理与可移动物体的通信的方法,包括:通过可移动物体管理器登记用于在可移动物体环境中监听可移动物体数据的监听器;将从可移动物体接收到的可移动物体数据存储在与可移动物体管理器相关联的缓存中;以及将可移动物体数据提供给与监听器相对应的应用。根据本文公开的另一方面,提出了一种用于管理与可移动物体的通信的系统,包括:一个或多个处理器,被配置为:在可移动物体管理器处,从可移动物体环境中的请求方接收针对可移动物体数据的请求;确定与所述请求相对应的可移动物体数据在与所述可移动物体管理器相关联的缓存中是否可用;以及将所述缓存中的可移动物体数据提供给所述请求方。根据本文公开的另一方面,提出了一种用于管理与可移动物体的通信的系统,包括:一个或多个处理器,被配置为:通过可移动物体管理器登记用于在可移动物体环境中监听可移动物体数据的监听器;将从可移动物体接收到的可移动物体数据存储在与可移动物体管理器相关联的缓存中;以及将可移动物体数据提供给与监听器相对应的应用。根据本文公开的另一方面,提出了一种非暂时性计算机可读介质,其上存储有指令,所述指令在由处理器执行时,执行以下步骤:在可移动物体管理器处,从可移动物体环境中的请求方接收针对可移动物体数据的请求;确定与所述请求相对应的可移动物体数据在与所述可移动物体管理器相关联的缓存中是否可用;以及将所述缓存中的可移动物体数据提供给所述请求方。根据本文公开的另一方面,提出了一种非暂时性计算机可读介质,其上存储有指令,所述指令在由处理器执行时,执行以下步骤:通过可移动物体管理器登记用于在可移动物体环境中监听可移动物体数据的监听器;将从可移动物体接收到的可移动物体数据存储在与可移动物体管理器相关联的缓存中;以及将可移动物体数据提供给与监听器相对应的应用。附图说明图1是示出了包括通过通信链路与可移动物体通信的用户终端的可移动物体环境的实施例的示例性顶层框图。图2是示出了图1的可移动物体的实施例的示例性图,其中可移动物体是uav。图3是示出了图1的可移动物体操作系统的环境的实施例的示例性框图。图4是示出了在图1的可移动物体环境中使用的通信协议的实施例的示例性图。图5是示出了在图1的可移动物体环境中使用的数据分组的实施例的示例性图。图6是示出了在图1的可移动物体环境中使用的缓存的实施例的示例性框图。图7是示出了图6的缓存中的硬件抽象的实施例的示例性图。图8是示出了在图1的可移动物体环境中使用的可移动物体数据键的各种实施例的示例性图。图9是示出了用于添加与感兴趣的可移动物体数据相对应的新监听器的方法的实施例的示例性图。图10是示出了用于管理与图1的可移动物体的通信的方法的实施例的示例顶层流程图。图11是示出了用于检索感兴趣的可移动物体数据的方法的实施例的示例性图。图12是示出了用于管理与图1的可移动物体的通信的方法的实施例的另一示例顶层流程图。图13是示出用于管理与图1的可移动物体的通信的图12的方法的更多细节的示例性流程图。图14是示出用于使用“推送”机制和“类似推送”机制从可移动物体接收可移动物体数据的方法的实施例的示例性图。应该注意的是,附图并未按比例绘制,并且出于说明目的,在整个附图中类似结构或功能的元件通常用类似的附图标记来表示。还应该注意的是,附图只是为了便于描述优选实施例。附图没有示出所描述的实施例的每个方面,并且不限制本公开的范围。具体实施方式本公开阐述了用于管理与可移动物体的通信的系统和方法,其克服了现有系统和方法的限制。更具体地说,本系统和方法涉及使用缓存(cache)来调节对可移动物体数据的访问。通过使用缓存,可以有利地减少或消除用于检索可移动物体数据的潜在的冗余调用。由此,本系统和方法可以调节对远程异步可移动物体数据的有效访问,从而改善有限带宽的使用并提高应用性能。此外,本系统和方法可以利用向程序员提供对远程异步可移动物体数据的方便和封装访问的应用编程接口(api)。下面描述本系统和方法的示例性实施例。现在转向图1,示出了根据本系统和方法的各种实施例的示例性可移动物体环境10。可移动物体环境10可以包括用户终端100,其可以经由通信链路200与可移动物体300通信。如下面进一步描述的,用户终端100、通信链路200和/或可移动物体300中的一个或多个可以包括用于管理可移动通信的系统。用户终端100可以被配置为与用户(未示出)交互以操作可移动物体300和/或向用户呈现由可移动物体300收集的数据。用户终端100可以包括例如遥控器(未示出)、便携式计算机、膝上型电脑、移动设备、手持设备、移动电话(例如智能手机)、平板设备、平板电脑、个人数字助理、手持式控制台、便携式媒体播放器、可穿戴设备(例如,智能手表和头戴式显示器)等。如图1所示,用户终端100(和/或其组件)可以包括可用于执行软件的一个或多个处理器110。根据需要,用户终端100可以包括任意数量的处理器110。每个处理器110可以包括一个或多个通用微处理器(例如,单核或多核处理器)、专用集成电路(asic)、现场可编程门阵列(fpga)、专用指令集处理器、数字信号处理单元、协处理器、网络处理单元、音频处理单元、加密处理单元等,而不作限制。处理器110可以被配置成执行本文描述的任何方法,包括但不限于与移动物体控制、跟踪和分享有关的各种任务。在一些实施例中,处理器110可以包括专用软件和/或硬件,例如用于使用接口来处理可移动物体任务。在一些实施例中,处理器110可以执行分析器,该分析器操作以执行本文描述的任何方法。如图1所示,用户终端100还可以包括一个或多个存储器120(在本文中可选地称为非暂时性计算机可读介质)。合适的存储器120可以包括例如随机存取存储器(ram)、静态ram、动态ram、只读存储器(rom)、可编程rom、可擦除可编程rom、电可擦除可编程rom、闪存、安全数字(sd)卡等。用于执行这里描述的任何方法的指令可以被存储在存储器120中。存储器120可以根据需要与处理器110可操作地通信,并且指令和/或数据可以根据需要从存储器120传输到处理器110以供执行。用户终端100可以附加地包括一个或多个输入/输出设备130,例如按钮、键盘、小键盘、轨迹球、显示器和/或监视器。可以使用各种用户界面元素(例如,窗口、按钮、菜单、图标、弹出窗口、标签、控件、光标、插入点等)来向用户呈现数据并从用户接收数据(未示出)。用户终端100可以被配置为经由通信链路200与可移动物体300进行通信。如图1所示,通信链路200可以包括用于从用户终端100向可移动物体300发送数据(例如,控制数据和应用数据)的上行链路和用于从可移动物体300向用户终端发送数据(例如,遥测数据、应用数据、图像数据和视频数据)的下行链路。在一些实施例中,上行链路和下行链路可以使用时间调制来共享单个频率。在其他实施例中,上行链路和下行链路可以使用不同的频率。在一些实施例中,通信链路200可以被配置为根据可移动物体协议250(图4中所示)来发送信号。在一些实施例中,通信链路200可以是无线网络上的无线通信链路200。合适的无线通信可以包括例如无线电、无线保真(wifi)、蜂窝、卫星和广播。在一些实施例中,通信链路200可以在3g、4g或5g移动电信网络上实现。适用于本系统和方法的示例性无线通信技术包括但不限于:全球移动通信系统(gsm)、通用分组无线业务(gprs)、码分多址(cdma)、宽带cdma(w-cdma)、cdma2000、imt单载波、gsm演进增强数据速率(edge)、长期演进(lte)、lte高级、时分lte(td-lte)、高性能无线局域网(hiperlan)、高性能无线广域网(hiperwan)、高性能无线城域网(hiperman)、本地多点分布业务(lmds)、全球微波接入互操作性(wimax)、zigbee、蓝牙、flash正交频分复用(flash-ofdm)、高容量空分多址(hc-sdma)、iburst、通用移动电信系统(umts)、umts时分双工(umts-tdd)、演进高速分组接入(hspa+)、时分同步码分多址(td-scdma)、演进数据优化(ev-do)、数字增强无绳电信(dect)等。在一些实施例中,通信链路200可以有利地被加密以防止第三方侵入可移动物体操作。合适的加密方法包括但不限于:互联网密钥交换、互联网协议安全(ipsec)、kerberos、点对点协议、传输层安全、ssid隐藏、macid过滤、静态ip寻址、802.11安全、有线对等保密(wpa)、wi-fi受保护接入(wpa)、wpa2、临时密钥完整性协议(tkip)、可扩展身份验证协议(eap)、轻量级可扩展身份验证协议(leap)、受保护的可扩展身份验证协议(peap)等。本系统和方法中的可移动物体300可以包括任何类型的可移动物体,包括自行车、汽车、卡车、轮船、船只、火车、直升机、飞机、机器人设备及其各种混合等。尽管为了说明的目的,可移动物体300在本文的一些示例中被示出为飞行的可移动物体,但是这样的示例并不意味着限制。本文中在飞行的可移动物体的上下文中描述的实施例可以应用于任何合适的可移动物体300。可移动物体300可以包括或多个功能模块。可移动物体300的每个功能模块可以包括一个或多个可移动物体组件310,其用于执行例如移动、通信、成像和/或其他功能。例如,可移动物体组件310可以包括一个或多个移动机构312(例如推进机构)、感测系统314和/或通信系统316。可移动物体300还示出为具有包括有效负载319在内的载体318。根据需要,可移动物体300还可以包括例如处理器、存储器等硬件组件。每个可移动物体组件310可以与一个或多个属性相关联。可移动物体组件310的属性和属性值构成了可移动物体数据311(未示出),可以以本文描述的方式生成、检索、存储和使用可移动物体数据311。移动机构312可以包括一个或多个旋翼、螺旋桨、叶片、发动机、电机、轮子、轴、磁体、喷嘴等。例如,可移动物体300可以具有一个或多个推进机构。在一些实施例中,可移动物体300可以具有多个移动机构312,其可以具有相同类型或不同类型的移动机构312。移动机构312可以使用例如支撑元件(例如,驱动轴)之类的任何合适的方法安装在可移动物体300上。移动机构312可以安装在可移动物体300的任何合适的部分上,诸如顶部、底部、前部、后部、侧面或其合适的组合。与移动机构312相关联的可移动物体数据311可以包括例如与移动机构312的位置、开/关状态和/或磨损和撕裂状态有关的数据。在一些实施例中,移动机构312可以使可移动物体300能够垂直地从表面起飞或垂直地降落在表面上,而不需要可移动物体300的水平移动(例如,无需沿着跑道行进)。可选地,移动机构312可以可操作地允许可移动物体112以特定位置和/或朝向悬停。移动机构312中的一个或多个可以独立于其它移动机构312受到控制。例如,可移动物体300可以具有多个水平朝向的旋翼,其可以向可移动物体300提供升力和/或推力。可以驱动旋翼以向可移动物体300提供垂直起飞、垂直着陆和悬停能力。在一些实施例中,一个或多个旋翼可以沿顺时针方向旋转,而一个或多个旋翼可以沿逆时针方向旋转。例如,顺时针旋翼的数量可以等于逆时针旋翼的数量。为了控制由每个旋翼产生的升力和/或推力,从而调整可移动物体300(例如,相对于最多三个平移度和三个旋转度)的空间布置、速度和/或加速度,可以独立地改变每个旋翼的转速。感测系统314可以包括可感测可移动物体300(例如,相对于各种平移度和各种旋转度)的空间布置、速度和/或加速度的一个或多个传感器。一个或多个传感器可以包括例如全球定位系统(gps)传感器、运动传感器、惯性传感器(例如,惯性测量单元(imu))、接近传感器、图像传感器、姿态和航向参考系统(ahrs)、雷达传感器、激光雷达传感器、超声波传感器、红外传感器以及通过光学、无线电、声音、振动、磁性等来检测运动的其他传感器的传感器。感测系统314提供的可移动物体数据311可以用于(例如,使用合适的处理单元和/或控制模块)控制可移动物体300的空间布置、速度和/或朝向。备选地和/或附加地,感测系统314可以用于收集关于可移动物体300周围的操作环境的可移动物体数据311,例如天气条件、接近潜在障碍物、地理特征的位置、人造结构的位置等。例如,用于感测环境的感测系统314可以包括电光传感器、热/红外传感器、彩色或单色传感器、多光谱成像传感器、分光光度计、分光计、温度计、照度计、麦克风/声波换能器、压力传感器、高度传感器、流量传感器、湿度传感器、降水传感器、风速传感器、风向传感器、风速计、光学雨量传感器、定位装置、加速度计、陀螺仪等。通信系统316可以经由通信链路200实现与用户终端100的通信,通信链路300可以包括如上所述的各种有线和/或无线技术。通信系统316可以包括适合于无线通信的任意数量的发射机、接收机和/或收发机。通信可以是单向通信,由此,可移动物体300向用户终端100发送可移动物体数据311,或者反之亦然。通信还可以是双向通信,由此可以在可移动物体300和用户终端100之间的两个方向上发送可移动物体数据311。在一些实施例中,用户终端100可以向可移动物体300、载体318和负载319中的一个或更多个提供作为控制数据的可移动物体数据311,并且从可移动物体300、载体318和负载319中的一个或更多个接收信息(例如,可移动物体、载体或负载的位置和/或运动信息;由负载感测的数据,例如由有效负载相机捕获的图像数据);以及根据由有效负载相机捕捉的图像数据生成的数据)。在一些实施例中,来自用户终端100的控制数据可以包括用于可移动物体、载体和/或负载的相对位置、移动、驱动或控制的指令。例如,控制数据(例如,通过移动机构312的控制)可以导致可移动物体的位置和/或朝向的修改,或(例如,通过载体318的控制)导致负载相对于可移动物体的移动。来自应用的控制数据可以导致对有效负载的控制。本系统和方法可以与任何有效负载319一起使用。在一些实施例中,来自可移动物体300、载体318和/或有效负载319的通信可以包括来自(例如,感测系统314或有效负载319的)一个或多个传感器的信息和/或基于感测信息生成的数据。如上所述,通信可以包括来自一个或多个不同类型的传感器的感测信息。这样的信息可以涉及可移动物体、载体和/或负载的定位(例如位置或朝向)、移动或加速度。来自有效负载319的可移动物体数据311可以包括由有效负载319捕捉的数据或有效负载319的感测状态。现在转到图2,在可移动物体环境10中,示例性可移动物体300被示出为无人机(uav)320。通俗地称为“无人机”uav320包括在自主控制的或由远程驾驶员控制(或有时两者)的载运工具上没有人类驾驶员的飞行器。目前发现uav320在涉及各种空中操作(例如数据收集或传递)的民用应用中使用量增加。本可移动物体操作系统和方法适用于多种类型的uav320,包括但不限于四轴飞行器(也称为四旋翼直升机或四旋翼)、单旋翼、双旋翼、三旋翼、六旋翼和八旋翼旋翼机uav320、固定翼uav320以及混合旋翼机固定翼uav320。例如,uav320的可移动物体组件310可以包括用于控制uav320的飞行操作的飞行控制器321。飞行控制器321可以包括一个或多个感测系统314(如上参考图1所述),例如一个或多个gps322和/或imu323。可以使用嵌入飞行控制器321内的处理器324来操作飞行控制器321。飞行控制器321可以例如控制uav320的移动。示例性的移动控制包括设置目标目的地、速度、高度、姿态(俯仰、横滚和偏航)等。飞行控制器321可以与uav320的所选数据采集仪器(未示出)通信以获得可移动物体数据311。uav320还可以包括成像装置325。成像装置325可以接收来自外部环境的入射光并将该入射光转换为数字和/或模拟信号(未示出)。该信号可以被处理以产生可以显示给用户的图像。适用于本系统和方法的示例成像设备325包括但不限于市售的相机和摄像机。在一些实施例中,成像装置325可以被适配为使用附加传感器(未示出),以用于例如立体视觉、热成像、创建多光谱图像、红外检测、伽马检测、x射线检测等各种应用。可以以各种方式控制成像装置325,例如打开和关闭成像装置325、以及获得或设置成像装置325的参数(例如,成像角度、成像模式、照片/视频尺寸/分辨率、照片/视频格式、缩放设置、曝光设置等)。例如,收集的可移动物体数据311可以包括成像装置325的各种参数、来自成像装置的静止图像数据和/或视频图像数据。示例性静止图像数据和视频图像数据可以分别包括由成像装置325在空中拍摄的静止图像和视频图像。uav320还可以包括云台326,用于所安装的物体(例如成像装置)的精确的旋转和/或平移定位。云台326可以包括相对于一个或多个旋转轴安装的一个或多个枢转支撑件(未示出),由此允许所安装的物体相对于安装云台326的固定件可旋转地独立。配置和安装枢转支撑件的方式可以变化,并且可以包括例如同心环结构和非环结构。根据期望的自由度的数量,云台326可以包括任意合适的数量,包括一个、两个或三个枢转支撑件。云台326可以根据需要包括各种机械装置,例如球轴承、轨道、驱动器等。云台326可以被配置为对引导成像装置325的移动的外部命令(例如,来自处理器)进行响应。根据需要,可以检索云台326的可移动物体数据311(例如角度和位置)。uav320还可以包括一个或多个电池327,用于向uav320和/或uav320的任何功能模块供电。每个电池327可以包括任何数量的电池单元,每个电池单元具有两个电极(未示出)和电解质(未示出),该电解质化学反应以产生电势,从而在电极之间提供电流。电池327可以是可充电的和/或可再充电的。电池327可以包括任何类型的电池单元,包括但不限于铅酸电池、锂空气电池、锂离子电池、镍镉电池、镍金属氢化物氢电池等。在一些实施例中,电池327是智能电池,其内部状态和充电/放电由电池管理器(未示出)监测。根据需要,可以有利地检索和监控电池327的可移动物体数据311(例如剩余电量),以用于可移动物体300的操作。现在转到图3,示例性可移动物体环境10被示出为包括用户终端100以及可移动物体300。可移动物体环境10例如可以是可移动物体软件环境。可移动物体环境10可以使用任何便利的编程语言来进行配置,例如java、c、c++、python等。可移动物体环境10可以使用如上所述的任何适当的硬件来操作。如图3所示,用户终端100可以包括安装在用户终端100上的一个或多个应用160a、160b和160c。在用户终端100是移动装置的情况下,应用160可以通俗地称为“app”。应用可以由供应商提供,并由供应商通过例如移动应用商店进行更新。在一些实施例中,应用160a、160b和160c可以被单独地或共同地配置为调用接口170。例如,接口170可以是包括一个或多个所定义元素(例如函数、方法、过程、参数、常数、变量、对象、模块、数据类型、例外等等)的应用编程接口(api)。api可以是可移动物体api,其包括用于与可移动物体300交互并控制可移动物体300的元素。软件开发者可以例如使用api对应用160进行编程。当在用户终端100上实现时,应用160可以调用api并且执行由appi指定的功能。如图3所示,应用160a、160b和160c可以通过应用调用处理165与接口170的元件交互。例如,应用调用处理165可以是由应用160对接口170进行的用于检索特定的可移动物体数据311的值的get()方法调用。作为另一个示例,应用调用处理165可以是用于设置特定的可移动物体数据311的值的set()方法调用。另一个示例性应用调用处理165是命令可移动物体300执行可移动物体300的一个或多个任务的对接口170的方法调用。在一些实施例中,接口170可以是可移动物体软件开发工具包(sdk)的一部分。可移动物体sdk可以有利地为与可移动物体300交互的应用160提供公共的集成功能。例如,设计为控制正在飞行中的可移动物体300的应用160可以调用可移动物体sdk中的用于控制正在飞行的可移动物体300的导航的功能。与从可移动物体300成像有关的应用160可以调用可移动物体sdk中的用于控制可移动物体300的成像装置325(图2中所示)或云台326(图2中所示)的功能。可移动物体sdk还可以包含工具、库、文档和示例代码,它们可以帮助软件开发人员使用sdk开发可移动物体应用。在一些实施例中,可以使用可移动物体管理器180来管理可移动物体300。可移动物体管理器180可以位于方便的任何位置。尽管为了说明的目的,在图3中,可移动物体管理器180被描绘为用户终端100的一部分,但是可移动物体管理器180在位置或实现方面不受限制。在一些实施例中,可移动物体管理器180可以是可移动物体300的一部分,或者是可移动物体环境10的任何部分。可移动物体管理器180可以配置有用于确定何时与可移动物体300的通信是必要的以及何时不需要这种通信的逻辑。可移动物体管理器180可以被配置为通过例如接收数据、发送命令和/或处理与可移动物体300有关的数据来管理可移动物体300。在一些实施例中,可移动物体管理器180可以被配置为通过处理经由接口170接收的应用调用处理165来管理可移动物体300。可移动物体管理器180可以将接收到的应用调用处理165转换为对可移动物体300的协议调用处理255。另外,可移动物体管理器180可以向可移动物体300发出并非是通过接口170触发的协议调用处理255。例如,可移动物体管理器180可以执行与维持可移动物体的性能有关的后台任务(例如维持正在飞行中的可移动物体300的高度、俯仰或航向,检查可移动物体300具有足够的剩余燃料,或自动引导可移动物体避开机场等限制区域)。在一些实施例中,可移动物体管理器180可以被配置为与认证服务器(未示出)进行通信,以提供用于用户终端100和可移动物体300之间的通信的安全环境。根据需要,可移动物体管理器180可以包括各种模块,例如通信模块或数据管理模块(未示出)。如图3所示,可移动物体管理器180包括用于管理与可移动物体300的通信的缓存190。具体地,缓存190可以存储感兴趣的某些可移动物体数据311的值。可以由应用160异步地检索可移动物体数据311。在一些实施例中,期望访问可移动物体数据311的应用可以登记与可移动物体数据相对应的监听器191(在图6中示出)。监听器191可以根据需要为更新和检索可移动物体数据311提供便利。在一些实施例中,用户终端100与可移动物体300之间的通信可以使用在用户终端100与可移动物体300之间来回发送的协议调用处理255来进行。协议调用处理255可以根据可移动物体协议250(如图4所示)来发送。协议调用处理255可以包括对用于使可移动物体300采取特定动作的信号进行编码的结构化数据,或来自可移动物体300的指示当前状态的信号。协议调用处理255可以有利地被加密以避免第三方对可移动物体操作的入侵和不希望的干扰。在这种情况下,协议调用处理255可以被配置为仅由经验证的或可信的用户来解密。在一些实施例中,可以根据仅能由可移动物体300的设计者或制造者解译的专有格式来对协议调用处理255格式化。因此,协议调用处理255对于用户而言可以是不透明的,并仅能由设计者或制造者解译以用于故障排除目的。如图3所示,由可移动物体300接收的信号可以由可移动物体300内的固件380处理。固件380可以驻留在例如可移动物体300的只读存储器中。固件380可以被配置为解码从用户终端100接收到的协议调用处理255,并将相应的信号发送到可移动物体300的可移动物体组件310a、310b和310c。相应地,协议调用处理255可以被可移动物体组件310直接转换为物理动作。现在转向图4,示出了根据本系统和方法的各种实施例的用于通信链路200(在图1中示出)的示例性可移动物体协议250。可移动物体协议250可以包括应用层251、网络层252和数据链路层253。应用层251可用于例如对应用逻辑进行处理,例如控制可移动物体300(图1所示)的功能模块310的行为。网络层252可以用于例如支持数据分组路由和中继。数据链路层253可以用于例如处理数据成帧、数据验证和数据重传。在一些实施例中,可移动物体协议250可以支持uav320的各种模块(例如,飞行控制模块、云台模块、相机模块和/或其它模块)之间的通信。可移动物体协议250可以与不同的通信链路技术一起使用,例如通用异步收发器(uart)技术、控制器局域网(can)技术和内部集成电路(i2c)技术。可以通过利用通信链路200传输分组260来使用可移动物体协议250进行通信。图5中示出了示例性分组260。分组260可以包括标头261、应用标头262、数据263和尾部264。标头261和尾部264可以包括例如网络为了传递数据263而所需的控制信息。例如,控制信息可以包括源和目的地网络地址、错误检测码和分组排序信息。应用标头262可以包括例如各种发送者和接收者信息。例如,发送者和接收者可以是可移动物体300上的不同功能模块310和用户终端100(图1中所示)上的应用160。现在转到图6,在可移动物体环境10中示出示例性缓存190,其有利地允许访问来自可移动物体300的数据,诸如异步远程数据。如以上参照图3所示,缓存可以是可移动物体管理器180的一部分,或以其他方式与可移动物体管理器180相关联。示例性缓存190被示出为包括监听器191、储存器(store)195和硬件抽象197。缓存190的这种多层配置有利地将可移动物体数据311的状态与逻辑相分离,从而增加了实现和测试的容易度。通常,视情况而定,可以在缓存190内创建、使用和/或毁坏任意数量的监听器191、储存器195和硬件抽象197。在一些实施例中,多个应用160可以同时访问缓存190。在一些实施例中,对缓存190的访问可以限于单个应用160。虽然在图6中仅出于说明的目的示出了单个硬件抽象197,但是可以根据需要使用任何数量的硬件抽象197。缓存190例如可以通过以下方式来实现,即,在存储器130(图1所示)中分配一个或多个存储块以用于存储可移动物体数据311。当缓存190不再需要存储块时,存储块可以被释放。可以登记一个或多个监听器191,用于监听和/或提供对特定的可移动物体数据311的访问。在一些实施例中,监听器191可以由期望访问特定的可移动物体数据311的应用160来登记。例如,应用160可以调用可移动物体api中的addlistener()方法以创建或实例化可移动物体环境10中的监听器191。addlistener()方法可以包括标识监听器191感兴趣的可移动物体数据311的可移动物体数据键192。可移动物体数据键192例如可以表示为addlistener()方法的参数——例如,作为具有所定义格式的字符串或作为任何其他合适的类型或类。可移动物体数据键192可以包括不同的数据字段(在图8中示出),这些数据字段标识特定的可移动物体组件310以及可移动物体组件310的特定属性。缓存190还可以包括可移动物体环境10中的储存器195,其用于存储可移动物体数据311的值。在一些实施例中,储存器195可以是用于存储可移动物体数据311的值的底层存储块的软件表示。可以根据需要分配和释放存储器。储存器195可以使用任何合适的数据结构来表示,例如数组、列表、哈希表、树、队列等。在一些实施例中,可以为每个可移动物体组件310创建单独的储存器195。在这种情况下,可以根据相应的属性来引用可移动物体数据311的每个值。在其他实施例中,单个储存器195可以包括用于多个可移动物体组件310的可移动物体数据311。在这种情况下,可以根据与可移动物体组件310相对应的标识符(例如,字符串)以及与可移动物体组件的属性相对应的标识符(例如,字符串)来引用可移动物体数据311。在一些实施例中,可以在可移动物体环境10中为所有可移动物体数据311创建单个储存器195(如图6所示)。在一些实施例中,可移动物体数据311可以被表示为储存器195中的常数、只读值或不可变(immutable)值。当缓存190接收到可移动物体数据311的新的或更新后的值时,可以从储存器195中删除可移动物体数据311的先前的只读表示,并且可以在储存器195中创建并放置可移动物体数据311的新的只读表示。在一些实施例中,可以创建新的可移动物体数据键192,并将其与可移动物体数据311的新表示相关联。作为常数可移动物体数据311的表示确保了多个线程中的可移动物体数据311的一致性,从而改善了线程安全性并改善了应用性能。使用可移动物体数据311的不可变表示来处理线程共享的数据有利地避免了线程锁定并且可以改善性能。备选地和/或附加地,可移动物体数据311可以在缓存190中表示为可改变(mutable)值或可变(variable)值。在一些实施例中,可以使用诸如线程锁定的机制来避免多个线程之间的数据损坏。如图6所示,缓存190还可以包括可移动物体环境10中的一个或多个硬件抽象197。每个硬件抽象197可以对应于特定的可移动物体组件310。在一些实施例中,每个硬件抽象197可以是用于与对应的可移动物体组件310交互的软件对象。例如,可以在可移动物体环境10中实例化与飞行控制器321(如图2所示)相对应的flightcontroller对象。类似地,可以在可移动物体环境10中实例化与成像装置325(在图2中示出)相对应的camera对象。类似地,可以在可移动物体环境10中实例化与uav320的电池327(在图2中示出)相对应的battery对象。在一些实施例中,可以使用继承来组织硬件抽象197。例如,可以将基础的camera类定义为具有各种成像装置325所共有的属性(例如,iso设置)。根据需要,camera基类可以包括例如getiso()和setiso()方法。子类highperformancecamera可以定义为从camera基类继承,并且根据需要包括专用于高性能成像装置325的访问器。在一些实施例中,一个或多个硬件抽象197可以被配置为对应于具有一个或多个子组件的可移动物体组件310。例如,可以实例化硬件抽象以对应于具有gps322和/或imu323的飞行控制器321。如上所述,可以使用可移动物体数据键192来访问子组件的可移动物体数据311。在一些实施例中,可以创建硬件抽象197,以与特定对应的可移动物体组件310通信或访问特定对应的可移动物体组件310。例如,应用160可以使用合适的应用调用处理165来创建硬件抽象197。在一些实施例中,当不再需要与特定对应的可移动物体组件310通信或访问特定对应的可移动物体组件310时,可以移除或销毁硬件抽象197。在运行期间,任何时刻实例化的硬件抽象197的数量可以有利地保持为较少,以减少存储器使用并提高效率。在一些实施例中,硬件抽象197的数量可以保持在预定阈值以下(例如,最多20个硬件抽象197)。现在转到图7,示例性硬件抽象197被示出为具有键路由器198和一个或多个访问器199。键路由器198可以包括可移动物体数据键192的字典、以及与每个可移动物体数据键192相关联的可移动物体数据311的值。键路由器198的字典可以使用任何合适的数据结构来表示,例如数组、列表、哈希表、树、队列等。键路由器198由此可以定义表示可移动物体组件310的各种属性的、可用的可移动物体数据键192。此外,键路由器198可以定义每个属性的各种特征,例如对于每个属性哪个类型的访问(例如读访问、写访问、或其任何组合)是可用的。例如,这样的特征可以与可移动物体数据键192相关联,该可移动物体数据键192与可移动物体组件310的每个属性相对应。硬件抽象197的访问器199可以包括例如用于检索特定属性的值的get()方法或用于设置特定属性的值的set()方法。视情况而定,开发者可以实现访问器199的具体细节。在一些实施例中,键路由器198可以被实现为不可改变的字典,使得可移动物体组件310的属性不变。现在转到图8,示例性的可移动物体数据键192以字符串格式示出,其中每个字符串呈现预定的键模式。在图8的左侧示出了示例性的键模式,其可以是“组件/键”、“组件/索引/键”、“组件/索引/子组件/键”、或者“组件/索引/子组件/子组件索引/键”。这里,“组件”可以表示要使用可移动物体数据键192访问的可移动物体组件310(例如,“camera”表示成像装置325)。“索引”可以表示与特定类型的特定可移动物体组件310相对应的数值(例如,“camera/1”表示两个成像装置325中的第一个)。“子组件”可以表示可移动物体组件310的子组件(例如,飞行控制器321的gps322)。“子组件索引”可以表示与可移动物体组件310的特定子组件相对应的数值(例如,“gps/1”指飞行控制器321的两个gps322装置中的第一个)。“键(key)”可以表示与可移动物体组件310或子组件相关联的特定属性、参数或其他数据。例如,用于第一飞行控制器321的第二gps322装置的卫星数量属性的可移动物体数据键192可以表示为如图8所示的字符串“flightcontroller/1/gps/2/satellitesnumber”。在一些实施例中,可移动物体数据键192的字符串表示可以被缓存190转换为用于缓存190内的内部使用和通信的任何其他数据类型。例如,缓存190可以使用keypath对象,其包括用于解析可移动物体数据键192的字符串表示的方法,并且包括每个部分字符串的属性。使用keypath或类似对象有利地避免重新解析可移动物体数据键192的字符串表示。现在转到图9,根据上面提供的示例示出了用于登记监听器191的示例性过程。这里,应用160感兴趣的是uav320的飞行控制器321(未示出)的gps322装置的“卫星数量”属性的值。具体地,需要向应用160通知卫星数量字段的值的变化。为此,应用160可以访问可移动物体接口180,该可移动物体接口180具有用于登记监听器191的addlistener()方法。具体而言,应用160可以在应用调用处理165中调用addlistener()方法,该方法指定可移动物体数据键192(例如,字符串键“flightcontroller/1/gps/satellitesnumber”)作为参数。在调用addlistener()方法之后,创建与可移动物体数据键192“flightcontroller/1/gps/satellitesnumber”相对应的新监听器191。此后,可以向适当的可移动物体组件310(这里,为飞行控制器321和/或gps322子组件)创建的监听器191。监听器191可以与对应于可移动物体组件310的硬件抽象197相关联。当与监听器191相对应的属性的值被改变时,可以使用监听器191来通过适当的可移动物体数据311向应用160通知该改变和/或新值。现转到图10,示出了用于管理与可移动物体300的通信的示例性方法1000。在1010处,通过可移动物体管理器180登记用于在可移动物体环境10中监听可移动物体数据311的监听器191。在一些实施例中,监听器191可以登记在可移动物体软件环境50中(如图3所示)。例如,可以通过如以上参照图3所描述的可移动物体应用编程接口(api)来登记监听器191。可移动物体api可以包括例如应用160可以用来与可移动物体交互并控制可移动物体的一个或多个功能、方法、过程、参数、常数、变量、对象、模块、数据类型、例外等。在一些实施例中,可以通过作为可移动物体软件开发工具包(sdk)的一部分的可移动物体api来登记监听器191。可移动物体sdk可以包含工具、库、文档和示例代码,它们可以帮助软件开发人员使用sdk开发可移动物体应用160。在一些实施例中,可以向与特定可移动物体数据311相对应的可移动物体组件310登记监听器191。例如,如上面针对图9所描述的,可以向飞行控制器321和/或gps322登记用于飞行控制器321的gps322装置的监听器191。在一些实施例中,可以向与可移动物体组件310相对应的硬件抽象197登记监听器191。例如,如上面关于图9所描述的,用于飞行控制器321和/或gps322的硬件抽象197可以在应用160的运行期间被实例化。硬件抽象197可以具有键路由器198,该键路由器198用可移动物体组件310和/或其各种子组件的相关属性进行初始化。可以使用标识可移动物体组件310的适当的可移动物体数据键192来登记监听器191。例如,可移动物体数据键192可以是具有标识可移动物体组件310的子字符串(例如,标识飞行控制器321的“flightcontroller”)的字符串。可移动物体数据键192还可以标识可移动物体组件310或其子组件的属性(例如,标识gps322的卫星数量属性的“satellitesnumber”)。在一些实施例中,当不再需要来自可移动物体组件310的可移动物体数据191时,可以注销监听器191。例如,应用160可以被配置为向可移动物体管理器180发信号通知该应用160不再与可移动物体300交互。在一些实施例中,应用160可以向可移动物体管理器180发送停止信号。在一些实施例中,可移动物体管理器180失去与应用160的连接,于是监听器191可被自动注销。在1020处,从可移动物体300接收的可移动物体数据311可以存储在与可移动物体管理器180相关联的缓存190中。通过针对可移动物体数据311的、使用可移动物体数据键192的请求,可以使用监听器191接收可移动物体数据311。在一些实施例中,监听器191可以确定可移动物体数据311在缓存190中是否可用,和/或可移动物体数据311在缓存190中是否已更新。当确定可移动物体数据311在缓存190中不可用或未更新时,可以向可移动物体300查询可移动物体数据311的更新值。例如,应用160可以向可移动物体300查询可移动物体数据311的更新值。可以使用诸如可移动物体接口170中的get()方法之类的请求来向可移动物体300查询可移动物体数据311的值。在一些实施例中,缓存190可以被配置为在确定可移动物体数据311不可用或未更新时自动向可移动物体300查询可移动物体数据311的更新值。可以通过与具有期望的可移动物体数据311的可移动物体组件310相对应的硬件抽象197来执行该请求。例如,可以使用协议调用处理255来执行该请求,其中使用硬件抽象197将协议调用处理255发送到可移动物体300。在查询之后,可以从可移动物体接收可移动物体数据311的更新值(例如,使用从可移动物体300发送的协议调用处理255)。在1030处,可以将在1020处接收到的可移动物体数据311提供给与监听器191相对应的应用160。在一些实施例中,应用160可以是用于与可移动物体300交互和/或控制可移动物体300的应用160。在一些实施例中,监听器191可以用于检测可移动物体数据311的值的改变。例如,可以通过将可移动物体数据311的先前值存储在缓存190中来检测该改变。监听器191可以周期性地接收可移动物体数据311的更新值,并将先前值与更新值进行比较以检测该值的改变。在检测到该值的改变时,监听器可以向应用160通知可移动物体数据311的改变。此外,可移动物体数据311的改变值可以自动提供给应用160。在一些实施例中,可移动物体数据311不自动提供给应用160,并且如果需要,应用可以可选地请求可移动物体数据311。现在转到图11,根据上面提供的示例示出了用于请求可移动物体数据311的示例性过程。这里,应用160要请求uav320的飞行控制器321(未示出)的gps322装置的“卫星数量”属性。可以使用接口170(如图3所示)将针对可移动物体数据311的请求发送到可移动物体管理器180(图3所示)。可以使用应用调用处理165和适当的可移动物体数据键192来发送该请求。例如,应用160可以调用get(“flightcontroller/1/gps/satellitesnumber”)方法。在调用该请求后,可以确定可移动物体数据311在缓存190中(例如,在缓存190的储存器195内)是否可用和/或已更新。在可移动物体数据311是可用的和/或已更新的情况下,可移动物体可有利地从缓存190提供回应用160而不向可移动物体300查询,从而减少在可能有限的带宽上发送的协议调用处理255的数量。在可移动物体数据311是不可用和/或未更新的情况下,可以使用与感兴趣的飞行控制器321相对应的硬件抽象197从可移动物体300检索可移动物体。现转到图12,示出了用于管理与可移动物体300的通信的方法1200的示例性顶层框图。在1210处,在可移动物体管理器180处,从可移动物体环境10中的请求方接收针对可移动物体数据311的请求。请求方可以是例如应用160(图3中所示)或运行在可移动物体环境10中的任何其他进程。如上关于图11所述,可以使用适当的可移动物体数据键192作为应用调用处理165来进行该请求。在1220处,可以确定与所述请求相对应的可移动物体数据311在与所述可移动物体管理器180相关联的缓存190中是否可用。例如,可以评估缓存190的储存器195是否存在与可移动物体数据键192相对应的可移动物体数据311。在一些实施例中,可以确定缓存190中的可移动物体数据311是否已更新。可以根据一组预定规则来确定可移动物体数据311是否已更新。在一些实施例中,可以根据可移动物体数据311的数据类型来确定可移动物体数据311是否已更新。例如,在可移动物体300的使用期间内,可期待某些类型的可移动物体数据311是保持固定的(例如,在可移动物体的任务期间,反映可移动物体300的机械结构(例如电池数量)的可移动物体数据311是固定的)。在另一示例中,可以将一些类型的可移动物体数据311从可移动物体300定期地发送(或“推送”)到可移动物体管理器180,并存储在缓存190中。一些类型的“推送”数据可以被假定为已更新,而不需要进一步的确定。备选地和/或附加地,可以根据可移动物体数据311的时间戳t来确定可移动物体数据311是否已更新。时间戳t可以是可移动物体300发送可移动物体数据311的时间,和/或可移动物体管理器180接收到可移动物体数据311的时间。根据需要,可移动物体数据311的时间戳t可以存储在缓存190中。在一些实施例中,可以将存储在缓存190中的可移动物体数据311的时间戳t与请求的当前时间t0进行比较,以查找自从最后更新可移动物体数据311以来经过的时间δt。经过的时间δt可以与预定阈值t进行比较以确定可移动物体数据311是否已更新。预定阈值t可以是可移动物体数据311的类型所特定的。例如,某些类型的可移动物体数据311(例如,gps322的卫星数目)不需要定期更新,因此预定阈值t可以相应地设置为较大的值。其他类型的可移动物体数据311(例如,电池327的充电状态)优选定期更新,预定阈值t可以相应地设置为较小的值。备选地和/或附加地,可以根据可移动物体数据311的先前值来确定可移动物体数据311是否已更新。例如,在可移动物体位于基地处或沿着预期轨道的情况下,可以确定可移动物体300的位置已更新。如果可移动物体300的位置是意想不到的(例如,脱离轨道或在限制区域中),则可以确定该位置未更新。在1230处,可以将缓存190中的可移动物体数据311提供给请求方。在一些实施例中,在缓存190中的可移动物体数据311已更新的情况下,可移动物体数据311可以直接提供给请求方而无需可移动物体300,有利地节省了时间和带宽。现在转到图13,示出了方法1200的各种实施例的进一步细节。在1221处,如以上参照图12所述,可以确定可移动物体数据311在缓存190中是否已更新。如果可移动物体数据311未更新,则在1222处向可移动物体300查询更新值。在1223处,随后从可移动物体300接收可移动物体数据311的更新值。在1224处,将可移动物体数据311的更新值存储在缓存190中。备选地,如果可移动物体数据311已更新,则在1225处从缓存190检索可移动物体数据311。最后,在1231处,将缓存190中的可移动物体数据311提供给可移动物体数据311的请求方。现在转到图14,显示了示出用于从可移动物体300接收可移动物体数据311的各种实施例的示例性图。在图14的左侧画面中,示出了“推送”机制,通过该机制,可移动物体数据311被可移动物体300自动地发送到可移动物体管理器180。根据需要,某些类型的数据可以被指定为“推送”数据并自动发送到可移动物体管理器180。在一些实施例中,可移动物体数据311可以从可移动物体300周期性地发送,由可移动物体管理器180接收并存储在缓存190中。根据需要,这种“推送”数据的发送频率可以改变。相反,在图14的右侧画面中,示出了当没有“推送”数据可用时可以使用的“类似推送”机制。在这种情况下,可移动物体管理器180可以发送诸如可移动物体接口170中的get()方法之类的协议调用处理255,以从可移动物体300检索可移动物体数据311。在一些实施例中,可以使用自动get()方法周期性地检索可移动物体数据311,并将其存储在缓存190中。在一些实施例中,检索可移动物体数据311的“推送”和“类似推送”机制可以用于不同类型的可移动物体数据311,以获得最大的灵活性和效率。所公开的实施例存在各种修改和备选形式,并且其具体示例已经通过示例在附图中示出并且在本文进行了详细描述。然而,应该理解的是,所公开的实施例不限于所公开的特定形式或方法,相反,所公开的实施例将覆盖所有的修改、等同物和备选方案。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1