Author: Hu Kun - 2024/10/18
Github: https://github.com/KJ-Falloutlast
Affiliation: Machatronic School of CUMT
这是一份P440的详细使用文档,这份文档将极大节省使用者调试UWB时间,介绍下重点:
- 详细介绍了UWB测距,组网的使用方法以及调试错误方法;
- 结合time_domain驱动,对原uwb_driver进行改进,加入如下功能:
- 加入了网口连接
- 加入了TDMA模式和ALOHA模式
- 可以发布rangeInfo, ndbInfo, dataInfo, echoedInfo
- 版权归中国矿业大学机电工程学院所有,转载须附上链接。
PulsOn 440 模块(简称P440)是一种波段在3.1G 到4.8GHz 之间的超宽带 无线收发器,它可以实现如下功能:
- 采用双向飞行时间(TW-TOF)方式在2 个或者2 个以上的模块之间进行 测距,测量准确度可达2cm,刷新率最高为125Hz 。
- 可以在两个或多个模块之间实现通信。
- 可作为单基地雷达,双基地雷达或者多基地雷达工作。
- 可同时执行四种功能(测距、数据传输、单基地雷达和多基地雷达)。
- 发射功率极小(~50uW)。
- 具备用优化双向飞行时间测距的组网功能,网络测距可以采用ALOHA(随 机)或者TDMA(时分多址)协议。
- 支持多达11 个独立信道,因此可以实现CDMA(Code Division Multiple Access 码分多址)组网。可以加入更多信道。
- P440 可以和前几代产品的(P400,P410 以及P412)进行互操作。硬件设 计的运行要求完全符合所有工业级温度范围(-40℃至85℃),同时也可在晃动 或者高频震动的环境中运行。
- 天线射频的辐射强度符合美国FCC 的15 条规定,同时遵循欧洲电信标准 化协会的条款302065 协议。
P440 与所有P400 系列的成员相同,是一种相干无线收发器,也就是说每一 个发射脉冲的能量可以相加来增加接收信号的信号噪声比(SNR)。每一次发射 脉冲数量翻倍时,接收信号的信噪比也会翻倍(大约增加3dB),其代价是完成 整个信号的的传输时间也随之加倍。发射强度并没有增加,但更多发射脉冲的能 量被相加起来,改善了接收性能。上述原理适用于任何发射,包括测距,雷达以 及通信。 用户可以通过USB、串口、SPI、网口或者CAN 等方式连接模块,通过下 达API 指令控制和监测模块的工作。USB 驱动程序支持Windows Vista 32/64、 Windows 7 32/64 以及Windows 8 32/64 系统以及Windows 10 操作系统。Uni x 和OS X 系统不需要一个专门的USB 驱动程序。P440 会自动显示为一个串行 设备。
API 提供了所有用户用于设计可操作多个模块组成的雷达传感器或者测距 射频网络的指令和功能。 为了协助用户展示P440 在作为测距模块或者雷达传感器时的性能,Time Domain 提供了基于PC 端的可以运行所有API 指令的用户图形界面(GUIs), 还可实现如下功能:
- 为编程人员列举一个可视化的、应用主机使用API 指令和P440 通信的示 例软件。
- 让用户评估模块的测距通信性能。
- 让用户通过使用运动滤波、检测处理器的例子以及原始数据与经处理的雷 达扫描数据的图形显示来评估模块的雷达性能。
- 让系统分析人员观察、采集并记录下原始的测距数据或者雷达数据,以方 便其针对项目开发优化算法。
- 让用户搭建一个多个P440 测距传感器的网络。 Time Domain 同时提供用C 语言和MATLAB 编写的两种示例代码,用来演示模 块的接口和性能。编程人员可以从用户图形界面和示例程序学习如何使用API 和P440 交互,然后根据自己应用的需要编写应用程序。
本产品配有 3 种 API:
· 测距与组网指令,包含在文档 320-0313 RangeNet API Specification 中
· 单基地雷达指令,包含在文档 320-0298 Monostatic Radar API Specification
中
· 双基地雷达与信道建模指令,包含在文档 330-0305 Channel Analysis Tool
API Specification 中
想要完全掌握一组 API(本文中其实是三组为一套)的所有指令是很耗费时
间的,尤其当这样的 API 具有大量设置指令时更为明显。为了加速这一进程,
Time Domain 为用户准备了三套 GUI 作为示例,可在 PC 端运行并且能够执行所
有 API 指令。这些 API 指令集可以展示收到的数据,让用户能够记录下所有主
机发出或者接收到的 API 指令与数据。每一个 GUI 均对应于一组 API:
·RangeNet RET 可用于展示主机控制下的点对点测距与通信以及 P440 控
制下的组网测距操作。
·MRM RET 可用于展示单基地雷达的功能。
·Channel Analysis Tool (CAT) 可用于展示(a)双基地雷达或者多基地雷
达(b)信道传播分析功能。
另外,时域公司还为每一个 GUI 的应用领域配备了 C 语言示例代码与 MATLAB
示例代码。C 语言版本使嵌入式开发人员快速学习和 P440 通信,MATLAB 版本
则旨在让系统分析人员快速架构实验以调研和评估性能。上述示例代码中还含有
解析器,以供用户从日志文件中提取信息。
每一款软件都配有用户指导手册与快速入门手册,用来示例设备的操作。熟
读这些文档后,用户基本上可以在 30 分钟内学会操作测距、操作网络、操作单
基地雷达或者捕捉双基地雷达扫描数据和射频通信信道波形。手册文档清单如
下:
Ranging and Network (RangeNet):
o 320-0314 RangeNet Quick Start Guide
o 320-0320 RangeNet User Guide
Monostatic Radar:
o 320-0301 MRM Quick Start Guide
o 320-0300 MRM User Guide
Bistatic / Multistatic Radar and Channel Analysis:
o 320-0304 CAT Quick Start Guide
o 320-0303 CAT User Guid
一般来说,GUI 是一种直观的数据表达形式。这些GUI 可以让用户实现很多 功能,比如配置P440,发起测距或者雷达请求,进入或者离开网络,改变睡眠 状态,测量温度,以及显示状态、软硬件版本等有用的信息。除此以外,用户还 可以通过这些GUI 显示和记录采集的数据以及模块与主机之间的通信情况。雷达 的GUI 更是能够对接收数据进行带通滤波,并提供运动滤波与检测滤波处理。
测距组网API 允许用户配置P440 并进行测距。事实上,它支持3 种测距方 式,本章节将会讨论它们。然而测距采用的方式没有获取基本数据的技术重要。 P440 用很多接收器将接收信号数字化,产生接收数据的波形图。这类波形图的 采样率为61ps,是尼奎斯特速率的两倍(如图1 所举的案例)。
这个特点很有用,原因如下: ·过采样可以对数据作关联处理,以得到可靠的亚厘米级的测距估值。 ·通过分析获取波形的形状,可以得到信道的重要特征,比如(a)判断信 号是否为视距(LOS)传播,(b)确定信号是否被压缩,(c)判断受损信号是 受多径效应还是菲涅尔效应影响,这个在图2 中会有描述。 ·可以测量第一个到达脉冲的信号强度,而不是最大的多径信号的强度。 ·可以测量背景噪声的水平,结合信号强度的测量,可以得到接收信号的信 噪比等相关数据 ·可以获取接收波形特性,给出估算测距的误差估值。
这个基本功能可以形成如下三种测距类型: **精确测距(PRM):**该类型使用TW-TOF(双向飞行时间)测距技术,通常具 有高精度,同时也会有距离误差范围以及潜在误差的警告标志。用户可以根据提 供的测距误差范围估值启动卡曼滤波,也可以通过警告功能滤除非精确数值。 **粗略距离估计(CRE):**该类型类似于RSSI(接收信号强度指数)距离估算, 由连续波射频测距系统产生,这种系统把接收信号的强度和距离联系起来。当然, 两者也有两个不同点,首先,这里所讲的信号强度是基于第一个到达脉冲的强度, 而非整个过程中强度最大的那个,这确保了系统不会使用结构多径效应导致的较 强信号来计算距离从而导致错误数值;其次,这类信号强度是基于上一次成功测 距的PRM 数值自动校准过的。 **最新回声距离(ELR):**这是一种系统中在另外两个模块之间精确测距PRM 数据。换句话说,每当一个模块取得PRM 时,它会将上一次的测量数据广播给区 域内其它模块。例如,如果A 模块测量了它与B 模块之间的距离,当它启动与其 它模块的测距行为时,它还会将这个测量结果报告给C、D、E 模块......这也是 一种替代性的通过系统自动发布距离信息的方法。
最后,P440 通过API 指令为主机处理器提供可用的测距值,误差标志,距离 误差估值,信号强度,背景噪声以及波形信息。
RangeNet 的GUI 能够执行每一条API 指令,从而允许用户进行配置模块和 测距等操作。该GUI 另外还加入了更高层次的系统软件性能,具体如下: ·捕捉波形并将其展示于屏幕上,同时能够记录并保存至硬盘中。图3 展示 了一个GUI 显示的代表性波形。 ·测距请求可以是单次的,可以是固定次数的,也可以是连续不断的。 ·展示接收信号强度、噪音强度以及信噪比。 ·当所读数据不可靠时,会显示一个有质量标准的警告。 ·可以计算性能统计数据。例如,如果用户发出了有限次数的测距请求,那 么GUI 可以计算出测距成功率、测距均值、测距标准差、平均信噪比以及信噪比 的标准差。这些统计数据有助于用户决定系统工作质量。系统也可以根据质量标 准对接收数据进行过滤,提供相同的统计数据。 ·判断区域内是否存在干扰源。 ·可以对一个给定的连接进行校准,从而步补偿原测量中固有的偏差。 ·允许客户快速进入并发送数据。 ·允许客户接收并显示数据。 ·可以记录下P440 与主机之间的所有的交换数据。 ·当某个模块在区域内没有直接参与其他模块之间的测距时,通过该模块可 以得到其他模块之间的测距值。
记录数据的功能可以让用户绘制图表建立性能和距离关系函数,这是一个可 以评估给定区域内信号传播质量的优秀工具。图4 中的数据是当模块间的距离增 加时采集的,其中一个模块保持静止,另一个模块缓慢移动,图4 绘制出了信号、 噪音以及信噪比作为分隔距离函数的图形。从该图中可以得出以下几个信息: ·在40 米,60 米以及100 米处有菲涅尔抵消。 ·在略大于120 米处有菲涅尔增强。 ·噪音水平是常数,因此在附近没有明显干扰源。
操作一个只有两个模块的系统是很简单的,操作多个模块会复杂得多。例如: ·系统中模块的数量可能会随时间而变化,进入系统的模块需要被感知,离 开系统的模块则需要从网络内移除。 ·需要有一种方法防止模块互相干扰。 ·不是所有模块都需要行为相同。有的模块可能发起和响应测距请求,有的 只发送请求,有的只响应请求,有的模块只与系统中的子系统通信等。 RangeNet 的API 允许用户在定义一个网络的同时,定义网络内模块的行为, 而在网络的操作由P440 来控制。具体来说,P440 负责调度测距请求,保持一个 所有邻居的数据库,在主机与网络之间传递信息。这样的话,主机只需要负责监 控管理,从而大大减轻了主机负担。
RangeNet API 为用户提供提供了可以**定义并监控网络的工具**,例如:
1)网络可以定义使用两种不同的时分协议:ALOHA(随机)或者TDMA(时 分多址)协议。 2)如果使用的是ALOHA 协议,那么信号发送的平均间隔时间和间隔时间的 随机变化都是可以定义的。基于系统内模块的数量,平均间隔时间可以手动或者 自动压缩。收发行为可以在具体每个模块基础上进行限制,有的模块既收又发, 有的只发或者只收(这里的受是指响应)。另外,还可以限制某些模块使它们只 和部分网络成员进行交互。尽管大部分ALOHA 网络效率为19%,网络效率接近38%,使其等效于一个时隙ALOHA 系统的性能。
3)如果使用的是TDMA 协议,用户可以定义一个时隙表用来指定模块在何 时与哪个模块进行交互,采用的参数是什么。图5 展示了一个时隙表的例子,这 个系统内有4 个节点(100、101、102 和103),其中设定100 和101 与任意其 它3 个模块进行测距,而102 与100 以及101 进行测距。
P440 处理器负责保持系统同步,同步精度可达1μs。
- 由于P440 支持多个信道,因此可以在CDMA(码分多址)覆盖下使用上 述任意两个协议之一。
- 由于P440 网络能够安排测距请求时序,因此避免了主机与模块的频繁通 信,从而提高了测距速率。
- P440 网络维持了邻近模块的数据库。除了记录有网络内所有成员的信息 与距离,该数据库还包含了大量统计数据以及其他有用的信息,例如信噪比,行 进速度,有效测量速率,信号质量等。
- 该网络还利用了简单测距应用的回声距离(ELR)及粗略距离估计(CRE) 这两个特性,用在网络中有其特殊的作用。ELR 利用网络内所有单元都能接收任 何传输信号的特性,即当一个模块对某个模块的测距请求进行响应时,它还会同 时发送上一次成功测距行为中的测距值与对应的模块编号。这类信息向区域内所 有单元广播。因此这个机制向系统中所有单元发布了网络距离信息。CRE 同样利 用了传输的广播特性。当模块接收到一次信号后,它会自动生成波形扫描并测量 第一个到达脉冲的强度,而不是RSSI 情况下的任何信号的峰值强度。其次,RSSI 几乎不会被校准,而CRE 会以上次与目标模块进行成功的TW-TOF 测距后的数据 为基准进行一次校准。虽然CRE 的精度无法与TW-TOF 测量的精度相比,其精度 水平在大部分情况下已经够用,而且还具有在不产生成本的情况下扩展网络信息的益处。
尽管这些工具都有很强大的功能,其内在的复杂度会让仅仅通过API 来展示 和操作变得困难。RangeNet GUI 可以填补这个缺陷。它不仅可以让用户对系统进 行配置,同时还提供了一种方法让用户可以方便地保存不同的配置,监控结果, 评估网络内每条连接关系的性能,监控邻近模块数据库。例如,RangeNet 允许 用户
- 定义所有类型配置信息(包括TDMA 时隙表,测距配置细节,ALOHA 协 议设置信息,邻近数据库特征等),将配置信息载入进P440,保存配置信息至 硬盘并随时调用。
- 以用户需要的刷新率监控数据库。图6 举例说明了一个4 个节点系统的数 据库,注意其中统计数据的范围以及容量。如果想了解每个版块的具体细节,请 查看文档RangeNet 用户指导手册。
- 发送,接收以及显示数据。
- 显示某条连接的扫描波形。
RangeNet Lite 是RangeNet 的限制节点的简化版,用来帮助用户在考虑是否 购买授权或购买全版本的RangeNet 前对该软件进行评估和测试。所有的测距和 定位开发包、PulsON 实验室已经超级实验室已经都包含了RangeNet Lite。在该 软件支持RangeNet 的所有特性,只是其节点数量被锁定为不超过10 个。更具体 地说,系统中加入的前10 台节点设备可以正常运转,他们可以正常加入或者离 开网络。但是第11 台以及所有随后加入的模块将不会被系统识别。这些新加入 的设备可以运转,但可能会干扰前10 台设备,并显著降低前10 台设备的网络性 能。 如果想获取关于如何将RangeNet Lite 升级为全功能的RangeNet 的信息,请 联系北京华星北斗智控技术有限公司
本章节将在一个高层次提供并讨论P440 硬件各个功能区,如图13。关于各 式各样的接口信息的细节将在第四章叙述。
P440 需从直流电源供电,供电功率不能高于2.5W,供电电压在4.5V 到48V 之间。可以使用Time Domain 标准外置电源,电池,或者用户提供的电源(充
电宝,直接用USB供电)。指示灯显示了模块的状态信息。
用户可以通过不同接口接入模块,如USB、SPI、网口,串口或者CAN。10 个 GPIO 管脚可用。如果SPI 接口未被使用,那么这些管脚可以被设置为额外的5 根GPIO 管脚,使其数量达到总计15 根。
目前有多种可实现的物理方式连接至P440,这些方式包括USB 连接器,以太 网RJ45 连接器,锁式连接器以及3 种夹层连接器。详情请阅读第四章。夹层连 **接器适合于直接与用户的电路板相配。**配合夹层连接器可以按照不同的配合高度 来订购,从而允许用户在P440 下方在他们的载板上安装薄型设备。详情请阅读 第五章。
本章将详细介绍P440 各式各样的电子电路接口,一个标准的P440 具有以 下外接端口:
- 两个天线端口
- 通信端口有低速串行接口、USB2.0、以太网接口、CAN 以及SPI
- 多达15 个GPIO 管脚外接端口
- 电源接口(4.5V 到48V),接地端以及机壳接地端
P440 还具有5 种指示灯,其中3 种在电路板上,另外2 中在RJ45 插槽上。 数据通信系统、GPIO 以及供电系统的物理接口是通过以下系列连接器实现的(如 图14):
- 3 个夹层连接器
- 1 个锁定连接器
- 1 个以太网RJ45 连接器
- 2 个USB 端口(1 个只用于供电,1 个只用于数据传输)
- 1 组0.1 英寸的DIP 排针这样的排列为用户提供了很大的灵活性。然而,有些用户还想让这些接口更加简洁。于是,我们允许空载一些不必要的组件,从而节省了一些运行成本并将电路板最小化(这样的配置虽然可能但不是标准的,只有在某个应用的用量超过1000 个单元时我们才会考虑)。对于标准可选配置的细节,请阅读第八章(配置和订购信息)。
用户可以通过多种方式连接模块,比如:
- 通过USB 或者网口直接接入
- 定制一根特殊线缆,通过锁定连接器接入
- 将模块安放在载板上,通过一个或者多个夹层连接器通信
以下列举一些电子连接方式:
- 选项1:USB——用户可以通过USB 数据接口(J5)与USB 供电接口(J13) 接入电路板。
- 选项2:以太网——用户可以通过RJ45 以太端口接入模块,并通过USB 供 **电接口(J13)为模块供电。**可在章节4.4.5--以太网和IP 地址查询怎样分配IP 地址。(移动节点利用网线传输数据,USB接口供电;锚节点用USB供电即可)
- 选项3:锁式连接器——用户可以通过SPI、串口或者CAN 等方式使用锁式 **连接器接入模块。**该连接器还能供电与接地。在下一节我们会详细介绍锁式连接 器的插脚引线以及用于匹配连接器的各个管脚号。
- 选项4:用户夹层连接器——该连接器可支持SPI、用户串口与CAN,同样 **可以供电与接地。**下一节会详细介绍
- 选项5:以太网夹层连接器——该连接器可以用于供电与接地,并提供所有 用于与模块通信的以太网MAC 信号线,但这需要用户在载板上提供一个以太网 PHY 芯片。
所有信号线均配有静电放电(ESD)保护(接触放电为±8kV,气隙放电为 ±15kV)。信号线电压值为直流3.3V,直流1.8V,或者CAN 方式下的特殊压 值,输入电压不可为其他值。若这些线过载高电压或者高电流,会对P440 造成 损坏。用户务必避免这类损坏,不仅是因为会对系统系能造成影响,而且这样的 故障不在保修范围内。
有些夹层连接器标记了“保留”,这些排针的功能可能会随时间变化。如果用户 需要把P440 装在载板上,那么最好是将这些有“保留”标记的排针与载板落点 连接,而非用落点连接至载板上的其他走线。
所有连接器以及和它们相配的零件号在第五章——机械图解中说明。 最后,有必要说明一下关于串行发射和接受(TX/RX)线的方向问题。“用 户串行TX”意思是从P440 发射到主机,“用户串行RX”意思是P440 从主机 接收。 所有的用户串行线路工作电压是3.3V。
这是一项安全功能旨在确保用户不会无意中在通过锁式连接器接入高达 48V 电源的同时又通过USB 供电端口接入5V 的电源,否则有可能导致P440 和任 何通过USB 数据口和P440 相连的电脑产生严重损坏。
电源输入(VCC_Main)具有反极性保护功能,并且可以通过任何4.5V 和48V 之间的电压驱动。
有两种技术可以给P440 供电。一种是直接通过电源连接器间连接或者断连,
一种是在给**模块持续供电的同时,通过J10 用户级夹层连接器上的电源串口针Power_Enable_H)打开或者关闭P440 电压调节阀。**这样的技术让用户可以在 不用物理断连的情况下对模块进行硬重启。
P440 配备了机壳接地功能,六个安装孔在顶部、底部以及孔内经过镀铜处 理而不是覆盖丝印,它们不与任何接地层或者信号系统有连接。只有一个特殊的 安装孔是通过一个0.01μF 电容与1.0MOhm 电阻并联组合与数字接地端连接的。 该特殊孔的位置请看图14。
**给模块供电相对简单,而让模块接地则有些微妙。**微妙之处就在于保险丝接 地与数字接地的区别。按照常识,一般都会选择保险丝接地而非数字接地。对于 那些通常只通过网口或者USB 口接入模块、通过USB 供电口给模块供电的用户 来说,这不是他们关心的问题。如果P440 已经通过锁式连接器或者用户级夹层 连接器集成到一个产品中去,这也不是什么问题。 如果用户试图使用以太网连接器或者工业级夹层连接器的GPIO 排针,那可 能会出现问题。通常保险丝接地是第一选择,但在某些情况下连接数字地会更好。 对于那些想使用这些连接器的用户,可以联系厂家更详细地讨论这个问题。
一个标准P440 在连续工作时要求大约2W 的功率,然而还有另外两个因素 需要考虑。首先电子元器件的能耗会随温度的变化而变化,其次调节器的效率会 随着输入电压的升高而降低。基本上调节器被设计为在工作电压5V 时效率最高。 图16 展示了两个不同的P440 由5V 电源供电条件下能耗随温度变化而变化 的情况。显示的温度是由电路板上的温度传感器测得的,注意模块在作为接收器 工作时需要比作为发射器工作时需要更多的能量。这些数据具有典型性。
在为模块选取电源时,系统设计者需要将以上两个因素考虑在内,并留有安 全边际。例如,一个工作电压为5V,板子最大工作温度为85℃的模块需要的输 入功率至少为2.8W;而相同的系统置于48V 和85℃的条件下时,则至少需要 1.44 倍功率即4.032W。然而这些数据并未包含在任何应用中可能需要的额外的安全边际。 P440 还具有一个闲置状态,该状态下模块既不发射也不接收,能耗降低约 30%。
P440 支持5 种不同的主接口:USB、串口、SPI、网口和CAN。宽广的接口 选择能让用户在具体应用中自由地试验并优化系统通信方式。这些接口方式的性 能在总结如下。具体的串口针排列信息请看4.2 节——连接器引脚。 关于P440 的通信协议,在各种Time Domain API 说明书、各类C 与MATLAB 样例代码、以及文档《Using the USB and Serial Interfaces》中都有定义。以上资 源均由交付光盘提供,在Time Domain 官网上也有相关信息。
P440 通过USB 数据端口(J5)支持USB 2.0 高速设备。当使用J5 时,记住 这个端口只能向P440 开放数据通讯线。如若供电,还需通过USB 供电端口(J13)、 锁式连接器(J11)或者用户级夹层连接器的21 号管脚。
用户串行接口是工作在3.3V TTL 逻辑电平上的RS-232 通用异步接收器/发 送器(UART)串口。接口最大传输速度为115.2kbps,同时支持9.6、19.2、38.4 以及57.6kbps 的传输速率。默认速率为115.2kbps。 事实上最大速率很大程度上取决于系统驱动电缆电容的能力。如果使用短线 或者外部线路驱动器,通信速率可提高至2 倍至921.6kbps。不过在这样更快速 度下工作还受到主机端的串口电路的限制。电缆的最大长度需根据经验来确定, Time Domain 测试发现一段30cm 的缆线能够相当稳定支持460.8kbps 的传输速 度。 用户串口设置在锁式连接器(J11),用户级夹层连接器(J10),以及用户 级串行排针(J7)上。
串行接口使用3.3 伏的逻辑电平。不要把5 伏串行电缆连接到P440 上,实 际上不要让P440 连接任何工作电压值大于3.3 伏的串行电缆。增加的电压将物 理性地损坏P440。
SPI 接口设计信号操作电压为3.3V TTL 电平,最大时钟频率为16.0MHz。 这种连接方式实际的数据流量受到各种通信损耗的限制。不过一个未经优化的系 统仍然可以达到6~7Mbps 的传送速率。
10/100 以太网口连接方式可在RJ45 标准以太网口实现,也可在以太网夹层 连接器(J8)中作为以太网RMII 信号线实现。因此,RMII 信号线无法直接连接, 需要用户加入载板以及一个以太网PHY 芯片。 以太口的通信速率不仅受限于以太网10/100 协议,还取决于连接电脑的处 理能力以及各种系统开销。比如,当传送雷达扫描信号时,一台低端笔记本通常 能够达到的最大速率大约为2Mbps。如果是一台更快的计算机并且运行不受显示 或者其他用户界面功能拖累的C 代码,那么速度可能会提升到4 倍。可以查看 UWB 雷达C 程序样例150-0107D MRM C Sample Application 以获取更多信息。 这个文件可以在Time Domain 官网或者您获得的光盘上找到。
模块的IP 分配有两种方式。如果P440 是作为开发包或者PulsOn 实验室部 件使用,它的IP 地址的出厂设置为192.168.1.X,其中X 标注在模块RJ45 网口 的标签上;如果P440 以“工业模式”采购,那么它的IP 由DHCP 分配。
作为附注,模块的节点名设置方式与上面的方式类似。如果模块作为一个开 发包部件,节点识别号(ID)会被设置为X,如果是“工业模式”,节点识别号 (ID)会在工厂设置,还可以通过系统提供的API 或者GUI 来设置。
关于如何通过以太口连接P440 以及如何改变IP 和节点识别号(ID),可以 在文档320-0328 Connecting to P440 with Ethernet 中查到。
P440 的CAN 接口是由TI SN65HVD231 CAN 数据线驱动器提供的,该驱动 提供一个5V 差分信号,最大传送速率为1Mbps。若想了解更多关于该驱动器的 信息,可以通过下方给出的链接访问德州仪器板块:
P440 具有两个天线端口,指派为端口A 与端口B。每个端口所用的连接器 为标准极性母头SMA 连接器(Digi-Key 零件号J801-ND)。两个端口启用单天 线或者双天线工作模式。
P440 上的一个射频转换开关控制射频电子如何与连接器连接,通常有以下
四种模式: 1)A 端口发送/接收 2)A 端口发送,B 端口接收 3)B 端口发送/接收 4)B 端口发送,A 端口接收
由超宽带FIFE 芯片产生的射频能量通过射频传输转换开关到达天线然后从 天线发射出去。这么做的时候有一部分能量会通过转换开关泄漏出去直接发送给 **接收端。**实际上,发射天线收到的能量也会通过转换开关泄漏出去直接发送给接 收端。通常情况下这并不是大问题,但我们仍然建议用户隔离转换开关,这样可 以少泄漏大约20dB 的能量。 当端口接入一根SMA 线或者天线时,切记别拧过紧,否则会对电路板造成 损坏。当然也不能太松,否则会影响工作性能。只要保证连接器之间用手适当拧 紧,系统就可正常工作。
P440的功耗约为2W,可参考一部普通的手机功耗。尽管功耗不大,这些能 量足以加热整个板子。在某些极端条件下,这可能会带来问题。比如模块在密封 的盒子内工作,周围环境温度很高,同时还有阳光照射加热,那么产生的热量就 会使板子温度上升到超过电路板的耐热极限。 P440 内置有温度传感器,可报告板子温度。用户需监视温度传感器,确保 板子不要在超过最大耐热极限温度的情况下工作。 以下列举一些模块自我加热导致板子升温的效果: 案例1:周围环境23℃,板子裸置于空气轻微流动的桌面上——电路板温度 32℃; 案例2:周围环境23℃,板子裸置于空气不流动的桌面上——电路板温度 41℃; 案例3:周围环境23℃,安装在Time Domain 公司标配外壳内——电路板温 度47℃。
实际应用中的测量距离会受到多种因素影响,包括天线离地高度、各类干扰、 菲涅尔效应的相长干涉与相消干涉等。例如在空旷地面,菲涅尔地面反弹会使信 号强度增加从而增加了整个测距范围。当PII 调整至8 并且天线离地2.5m 时, 模块所能测得最大距离可达600m。图34 展示了一个例子。也有例外的情况,例 如,如果天线安置在理想位置或者地面拓扑结构提供了显著的天线增益,所测距 离可达1000m。曾有一位用户在隧道内(并非完全视距)测得3000m 的距离。
有时候菲涅尔相消干涉也会成为主导因子,看图34 中100m 处的极小值。
在这个点菲涅尔取消处在最大值。而如果系统此刻工作在低很多的PII 上,接收
**的信噪比SNR 会降低,甚至到某一点信噪比SNR 过低导致测距失败。**请注意在
图30 中当SNR 降低至15dB 以下后模块无法正常工作。作为论证的基础我们不
妨假设模块工作的SNR 界限在24dB 处(事实上这一降幅可以通过将PII 从8 调
整至5 来完成),用黑色虚线代表这一限值。于是我们可以看出,模块在090m
以及120210m 处可以正常工作,但是在90~120m 却不能,其原因是噪比SNR
低于接收机工作所要求的22dB 的门槛
若想测量长距离,必须将菲涅尔效应考虑在内。如果测距环境中菲涅尔效应既无助益也非阻碍,那么测距操作将被设为使用自由空间传播模型;如果菲涅尔 效应既有助益也存在阻碍,假定菲涅尔取消没有深到导致问题,那么最大测距距 离取决于菲涅尔增强。 环境中射频噪音的大小也是一个限制因素。在图34 中,蓝色线表示测得的 噪音大小,它是接收端位置的函数。若该参数比图中数值高9dB,那么接收端接 收的信号SNR 会降低9dB。在这种情况下,图34 所示的相应最大测距距离为 200m 左右,并且在90~120m 区间内有缺口。若环境中存在超强的带外发射机或 者与P440 同一频带的发射机时,噪音会增加。 如果假设环境中不存在噪音等因素,那么一个配有标配天线的标准版P440 的测距范围如表4 所示,分为自由空间和开阔地面两类性能栏。开阔地面性能栏 内的数据得益于地面反射造成的菲涅尔相长干涉,自由空间性能栏则是因为地面 反射不是一个因素。自由空间的例子包括在两架远离地面并且相互距离很短 (<70m)的无人机之间的测距操作,在这种情况下,菲涅尔增益不太显著。 自由空间数据是用两个相距1m 的模块计算出来的,环境内噪音低,并置有 固定衰减器提供距离衰减。这种情况下的最大测距距离意味着在这个距离上测量 成功率超过98%。如果进一步增加距离,那么成功率就会降低。如果可以接受成 功率为50%,那么最大测距距离可提高20%。开阔地面数据是将模块置于实际 的开放区域内通过实验获取的。
视距条件下的测距精密度和准确度规格,是基于一个庞大测距项目获取的。 项目进行了20000 测量,测量环境为空旷地面,实际距离从2 英尺到300 英尺, **PII 从4 到8,传输增益从0 设置到63,接收信号包括线性的和被压缩的。**所引 用值是所有测量值的综合计算结果,包括部分在设置不合理情况下的测量值,例 如在最短距离上采用最大发射功率进行测距。此结果可作为系统测距精密度和准 确度的保守估计。 测距精度可通过多次取均值来提高,测量6 次一般可把准确度提高一倍左 **右,超过6 次测量取平均精度只有边际改善。**本项测量活动在2011 年实施,我们之后对测距算法进行了多次重大改进。总精度(包括精密度和偏值)已被勘察级激光验证。虽然测试是在有限的范围内,结果表明,整体的测量精度大大优于在本规范中引用的值。测试结果是在开阔地面统计出的,总精度接近1cm。虽然测试的规模很有限,不足以在已发布的规范确认这些改善,但用户应该可以期待和我们测试类似的结果,特别是在类似的环境下进行的测试。 如果把操作限制到一个较窄的应用领域,用户已经取得了更高的性能表现。 一个用户报告的精度为0.5 厘米,而另一份报告则为2 毫米的精度
Time Domain 并未给出在非视距环境下的规格数据,是因为这类条件包含太
多不确定性。比如在木结构和石膏墙的建筑物内进行测量,所得结果虽然不如在 视距条件下那么好,但比较接近。这是因为木材和石膏板没有使P440 频率的射 **频信号明显衰减或分散。**另一个射频传播谱的极端是在金属船舱内进行测试。由 于金属阻挡射频传播,所以测距的范围受限于房间的大小。在非视距条件下操作 必须凭经验确定。不得不说的是,我们周期性地测量我们办公空间的一侧到另一侧的距离(大约30 米,不仅是非视距环境还有大量的金属遮挡),测距精度优 于±1 米。
TW-TOF 的精密度(标准偏差)和准确度(偏移误差)在6.1 的表3 中已列 出,在6.4.1 中有讨论。 需要注意的是偏置测量时使用的是标准Broadspec 天线和90 度SMA 接口。 P440 在出厂时的偏值将被降至几厘米,这确保用户在做测量时,所得结果与 使用激光测距仪的结果接近。上述结果假定是在理想视距条件下,未受压缩,未 受菲涅尔取消或者菲涅尔放大的影响,满足了这些条件,大部分用户都会对测量 结果满意。此外,测距结果在工作温度范围内都不会有实质性的改变。 有时需要使用不同的电缆、连接器或者天线,此时偏置会变化。此外在有些 应用中对归零调整的精度要求比通常出厂设置还高。在这些情况下均需针对单个 P440 进行偏置调整。应用说明320-0327 Distributed Calibration of Time Domain UWB Radios 描述了这个过程。用户一旦算出了需要校准的厘米数后,需要将这 一数值转化为皮秒数,通过API 指令RCM_Set_Config_Request 或者RangeNet RET 界面中的配置标签进行操作。转化公式如下: 0.2993mm 延迟=1 皮秒 换句话说,如果你在天线端口与天线之间加入一根1m 长的电缆线,那么需 要将对应于那个天线端口的天线延迟(antenna delay)值提高3341ps。
UWB 雷达的侦测范围主要受以下几个因素影响:天线、周围环境、杂波、 目标大小以及目标移动特征,以及用户开发的信号处理算法的鲁棒性。本文档引 用的探测范围已有用户实测证实,代表了接近迄今为止未使用复杂处理算法的最 大探测范围。受限于合法最大发射功率的用户以及无法改动天线的用户应将表3 中的数据大小减半。 如需进行深入的了解,Time Domain 官网有一个已被验证的P440 雷达探测 范围公式
P440 具有5 种指示灯,图14 标出了它们的具体位置。以下是对这些指示灯 功能的说明。
网口灯(在RJ45 插槽背面):
- 绿色灯:灯亮表明传输速率为100Mbps,灯灭表明传输速率为10Mbps。
- 黄色灯:灯亮表明连接有效,闪烁表明处于工作状态,灯灭表明无连接。
UWB 指示灯(在RJ45 插槽侧面):
-
蓝色灯(自检灯):低速闪烁(约0.5Hz)表明模块工作正常,高速闪烁 (约10Hz)或者持续亮或者不亮表明自检失败,模块出现问题。(出现高速闪烁蓝灯,则把UWB电源线重新拔插一下,直到闪烁较慢时,说明UWB模块正常工作)
-
绿色灯(超宽带工作状态):按如下方式进行亮灭切换: 测距或者组网初始化请求数据包传送;
测距或者组网初始化响应数据包传送; 测距或者组网初始化传送数据包; 初始化组网发送信标; 初始化CAT 数据包发射; 初始化CAT 数据包接收; 完成一次MRM 单基站雷达扫描;
FPGA 灯(与UWB 指示灯在模块同一侧,位于对面边缘):
- 绿色灯:闪烁表明FPGA 装载完毕,可作为基带使用,准备好发射或者接 收信号;灯灭表明FPGA 有问题或者在低功耗睡眠模式。
- 以下是关于模块接通电源后指示灯状态的描述。当接入电源后,FPGA 指示 灯会以2Hz 的频率闪烁,同时UWB 指示灯的绿色灯不亮而蓝色灯亮。蓝色灯亮 持续约5 秒,这段时间是模块启动的时间。启动完成后蓝色灯约每2 秒闪烁1 次,而绿色灯则会在模块每发送1 个数据包时闪烁1 次。任何不包含在上述过程 内的亮灯情况均可视为模块错误或者故障。
- 串口连接直接用USB接口连接
查看320-0328手册
The following steps configure the unused NIC to serve as the connection to the P440.
- Log in to the computer by using the Administrator account.
- On the taskbar at the bottom of the screen, right-click on the network icon in the right corner.
- Click Open Network and Sharing Center and then click Change Adapter Settings.
- Right-click Local Area Connection and then click Properties from the drop-down menu (Figure 1).
- The Local Area Connection Properties dialog box will open. In the box labeled “This connection uses the following items,” select Internet Protocol Version 4 (TCP/IPv4), and then click Properties.
- When the Internet Protocol (TCP/IP) Properties dialog box appears, select Use the following IP address (Figure 2).
- Enter the following information in the appropriate fields and click OK: • IP address: 192.168.1.1 • Subnet mask: 255.255.255.0
注意:注意,这里是设置自己电脑的IP地址为192.168.1.1,不能设置和P440的IP地址一样,P440的初始IP地址为192.168.1.101
,否则不能够ping通过
-
If the NIC used for communicating with the radio is also part of an established network, contact the network administrator to obtain a list of valid IP addresses for your network.
-
在MRM下测试
A simple test will confirm that the NIC is configured properly, that the Ethernet cabling is correct, and that the PC is connected to an operational P440.
- Click Start and type “cmd” (no quotation marks) in the search box to open a command window.
- Type “ping 192.168.1.101” (the IP address of the radio, no quotation marks) and hit Enter.If the connection is good and the IP address of your PC was configured correctly, you will receive a confirmation that the number of packets sent equals the number of packets received. This is shown in Figure 3.
- 安装PIU:The program will install as “piu” and when complete, the icon shown in Figure 4 will appear on your desktop.
- Changing the Static IP Address of a P440:For example, assume that you wish to change the P440 IP address from 192.168.1.101 to 192.168.1.126 using the Ethernet connection.
piu -i 192.168.1.101
- 利用网络连接:
piu -i 192.168.1.101
- At this point you can exit the exit the program or change the IP address or set communications to DHCP.
- 利用网络连接:
piu -i 192.168.1.101
- At this point you can exit the exit the program or change the IP address or set communications to DHCP.
- Answering “y” to the subsequent prompt will complete operation
- 利用网络连接:
piu -i 192.168.1.101
- At this point you can exit the exit the program or change the IP address or set communications to DHCP.
- Answering “n” to the subsequent prompt will complete operation
IP address: 192.168.1.xxx (where 0 < x < 255) Netmask: 255.255.255.0 Gateway: 192.168.1.1
基础概念
我赶紧打开Wireshark,找到以太网(有线网)接口,输入一个过滤规则:arp,然后开始捕获。接着看到了如下情景:
Source这个列就是消息的发送方,Raspberr_17就是我的树莓派机器;
Destination这个列就是消息的接收方,Broadcast表示向整个局域网广播。
Info这个列就是消息的内容。可以看到,我的树莓派就像一个无助的孩子,不停地向黑漆漆的局域网大声呼喊:“谁知道192.168.191.1这个主机?请告诉我(169.254.100.95)!”,“谁知道114.114.114.114这个主机?请告诉我(169.254.100.95)!”。它问的这两个主机,一个是网关、一个是DNS,我知道但我不告诉它。
who has xx后是设备IP地址,Tell XXX后是主机IP地址
点击设置按钮
选择到直连盒子的网口(根据自己实际情况来选)
然后就会显示很多IP 因为本机是182······, 所以直连设备的IP就是172.17.10.216(发现一直在刷新数据,代表网口有数据输出,Who has后面的ip就是设备IP)
以本人UWB为例,找到UWB地址为:192.168.4.104
,192.168.4.1
为UWB呼叫的本地IP,所以默认为4.1
,这里需要将192.168.1.1
改为同网段IP192.168.4.1
才能构建通讯
- 利用COM口连接
- 先插入电源,能够让蓝色灯稳定0.5HZ频率闪烁
- 利用wireshark查看是否有timeDomain的输出的"who has xxx, tell xxx",然后利用who has 后的IP,进入RangeNet,然后进入PIU修改IP地址
- 若2无法查看有timeDomain输出的端口号,将UWB静置3min左右,让其能够稳定运行,从
192.168.1.100-192.168.1.110
逐一在RangeNet中尝试,看能否接通,若能够接通,则进入PIU中修改IP地址 - 若2,3均失败,则利用COM口连接,直接查看IP地址
- 若2,3,4均失败,则换台电脑,利用重复执行2,3,4步骤,逐一排查错误。
注意事項1:本机IP和设备IP不同
- 设置本机的IP地址为
192.168.1.1
- 通过wireshark得到了UWB的地址为:
192.168.4.104
, 且可以ping通192.168.4.104
和192.168.1.1
地址
- 注意:要看
TimeDomain_00:13:21
,**他Broadcast的ARP信息才是正确的IP地址所在的信息,**其他的不要看
- 打开PulsON IP Util Console,点击
piu -i 192.168.4.104
无法找到设备!
问题分析:由于此时本机IP地址为``192.168.1.1和UWB设置的IP地址
192.168.4.104`不在同一个网段,所以虽然能够ping通,但是无法通过PIU找到UWB,即无法UWB建立和本机的通讯,所以一定要保证UWB和本机在同一网段且末尾的数字不同!。通过设置本机IP为`192.168.4.1`, 再次点击`piu -i 192.168.4.104`能够找到设备!
- 打开PulsON IP Util Console,修改UWB的IP地址为
192.168.1.105
代表为第5个UWB的设备,完成UWB地址重置。192.168.1.1
为网关
Radio Operations
Checking Radio at 192.168.4.104............. OK
Retrieving the Radio Type................... P440
Setting the Sleep and Op Modes.............. OK
Retrieving the Current Configuration........ ID 104
Retrieving the Current IP Config............ DHCP Disabled
IP Address............ 192.168.4.104
Netmask............ 255.255.255.0
Gateway............ 192.168.4.1
Enable DHCP? (y/n): n
Enter new IP Address [press ENTER to use current value]: 192.168.1.105
Enter new Netmask [press ENTER to use current value]: 255.255.255.0
Enter new Gateway [press ENTER to use current value]: 192.168.1.1
- 将本机IP地址切换到和修改后的UWB IP地址为同网段IP:
192.168.1.1
要注意:当本机IP和UWB IP都能够PING通,且能进入RangNET,但是不能够进入piu时,一定要多尝试几次,才能够进入piu地址
注释事项2:本机IP和设备IP相同但是无法进入PIU
若用wireshark抓取显示:Who has 192.168.1.113? Tell 192.168.1.1
,则说明设备IP为192.168.1.1
,而此时piu -i 192.168.1.1
失败,说明本机IP和设备IP相同或者不在同一网段,此时需要修改本机IP和设备IP在同一网段且IP末尾数不同,否则能PING通,但是无法连接UWB
注意事项3:没有出现who has xxx怎么办?
- 当没有出现who has XX从而无法判断目标设备的IP时,将本机IP设置为0 IP地址,即
192.168.1.0
或者192.168.1.1
,重新连接设备和wireshark重新打开,初始得到的WHO HAS就是目标设备的IP地址
注释事项4:UWB为动态IP地址怎么办?
- arp -a查看端口IP:192.168.1.105为动态IP地址
对于node 100,打开RangeNet在
192.168.1.100
192.168.1.101
192.168.1.102
192.168.1.103
192.168.1.104
192.168.1.105
192.168.1.106
中逐个尝试,直到能够成功进入系统
- 先插入电源,让蓝灯稳定显示,然后插入网线
- 拔掉网线和电源,重新插入尝试
规律:
- 子网掩码
在了解ip地址的网段之前,我们先来了解子网掩码,很多对网络了解不深的朋友都对子网掩码有些迷惑, 不了解它是用来干什么的?
子网掩码不能单独存在,它必须结合IP地址一起使用。子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分。
说的通俗的话,就是用来分割子网和区分那些ip是同一个网段的,那些不是同一网段的。
例如,两个人都叫张三,但一个张三是张家村的,另一个张三是张村的,那么如何区分这两个张三分别是属于那个村的呢?得让村长来区分,就可以准确的把各自的张三领回村,那么子网掩码就相当于村长,它就是用来区分ip该ip地址是属于那个网段的。
在实际项目中,我们通常会遇到这样的ip地址。参考IP地址二进制转换
ip地址:192.168.1.1 子网掩码:255.255.255.0
ip地址:192.168.1.2 子网掩码:255.255.255.0
我们可以直接的判断,他们是同属于一个网段的ip地址。
那么对于下面这样的呢?
ip地址:192.168.1.1 子网掩码:255.255.255.0
ip地址:192.168.1.2 子网掩码:255.255.0.0
这两个ip地址虽然在不看掩码的情况下,比较像,但他们并不是同一个网段内的。
这个可以从子网掩码来判断,
192.168.1.1 255.255.255.0是属于192.168.1.0网段的。
而192.168.1.2 255.255.0.0是属于192.168.0.0网段。
2. 如何根据掩码来确定ip地址网段?
上面我们已经举例了解了子网掩码的作用,接下来我们再来了解如何确定子网掩码和判断ip地址的网段。
通常我们在划分vlan的时候会使用以下例子:
例1:
创建vlan1:ip地址:192.168.1.1 子网掩码:255.255.255.0
创建vlan2: ip地址:192.168.2.1 子网掩码:255.255.255.0
**那么他们是不是在同一个网段呢?**平时配置ip地址较多的朋友,可以直观的判断,他们并不是属于同一个网段,那么如何计算呢?要想判断两个ip地址是不是在同一个网段,只需将ip地址与子网掩码做与运算,如果得出的结果一样,则这两个ip地址是同一个子网当中。
详细计算
将ip地址192.168.1.1转换为二进制
11000000 10101000 00000001 00000001
将子网掩码255.255.255.0转换成二进制
11111111.11111111.11111111.00000000
然后将两者相“与(and)"运算:
11000000 10101000 00000001 00000001
11111111.11111111.11111111.00000000
然后得到:
11000000 10101000 00000001 00000000
转换成网络号就是:192.168.1.0
将ip地址192.168.2.1转换为二进制
11000000 10101000 00000010 00000001
将子网掩码255.255.255.0转换成二进制
11111111.11111111.11111111.00000000
然后将两者相“与(and)"运算:
11000000 10101000 00000010 00000001
11111111.11111111.11111111.00000000
然后得到:
11000000 10101000 00000010 00000000
转换成网络号就是:192.168.2.0
很明显,二者的结果是不一样的,一个是网段192.168.1.0,一个是网段192.168.2.0,所以不是一个网段。
例2
ip地址1:192.168.1.1 子网掩码:255.255.252.0
ip地址2:192.168.2.1 子网掩码:255.255.252.0
很明显,我们这个和上面例1的ip地址是一样的,只是子网掩码不一样,如果不看子网掩码,首先可能就判断他们不是同一个网段。
这里面和上面例1中唯一变化就是子网掩码从255.255.255.0换成了255.255.252.0了,那我们来看下,他们是否属于同一个网段。
详细计算
将ip地址192.168.1.1转换为二进制
11000000 10101000 00000001 00000001
将子网掩码255.255.252.0转换成二进制
11111111.11111111.11111100.00000000
然后将两者相“与(and)"运算:
11000000 10101000 00000001 00000001
11111111.11111111.11111100.00000000
然后得到:
11000000 10101000 00000000 00000000
转换成网络号就是:192.168.0.0
将ip地址192.168.2.1转换为二进制
11000000 10101000 00000010 00000001
将子网掩码255.255.252.0转换成二进制
11111111.11111111.11111100.00000000
然后将两者相“与(and)"运算:
11000000 10101000 00000010 00000001
11111111.11111111.11111100.00000000
然后得到:
11000000 10101000 00000000 00000000
转换成网络号就是:192.168.0.0
很明显,二者的结果是一样的,都是属于192.168.0.0网段,所以他们是同属于一个网段。
当然,如果对子网较熟了就不需要经过这些运算了,大部分的网段可以通过分析子网掩码与ip地址就可以判断出来是否属于网一网段,但前提是你需要熟悉网段的原理与运算的方法。
3. 如何根据ip地址推算子网掩码?
确定ip地址子网掩码
大部分的情况下,我们网络中只要不超过254台主机的的话,子网掩码都可以设置成255.255.255.0。那么超过了254台主机的话怎么办呢?
可以划分vlan,也可以设置成一个大网段,划分vlan我们就不说了,上面有例子,设置成一个大网段就有一个难点,如何确定这个大网段里面的子网掩码呢?
ping 192.168.1.105
ping 192.168.1.255
ping 224.0.0.22
ping 224.0.0.251
ping 224.0.0.252
ping 239.192.152.143
ping 239.255.255.250
接口: 192.168.1.1 --- 0xe
Internet 地址 物理地址 类型
192.168.1.255 ff-ff-ff-ff-ff-ff 静态
224.0.0.2 01-00-5e-00-00-02 静态
224.0.0.22 01-00-5e-00-00-16 静态
224.0.0.251 01-00-5e-00-00-fb 静态
224.0.0.252 01-00-5e-00-00-fc 静态
239.255.255.250 01-00-5e-7f-ff-fa 静态
255.255.255.255 ff-ff-ff-ff-ff-ff 静态
piu -i 192.168.1.105
piu -i 192.168.1.255
piu -i 224.0.0.22
piu -i 224.0.0.251
piu -i 192.168.1.255
piu -i 224.0.0.252
piu -i 239.192.152.143
piu -i 239.255.255.250
- 设置103为发布者(网线连接),104为接受者,两者都用A天线链接
- 进入RangeNet设置103,如图1和图2所示,图1中,NodeID為103,Code channel為0,Pulse Int Index為7-128,天綫模式為A;在圖2中,設置RangeRequest為104(接收者),設置Macro-Repeat-Continous-Delay 為 100
- 进入RangeNet设置104,如图3和图4所示,图3中,NodeID為104,Code channel為0,Pulse Int Index為7-128,天綫模式為A(除了NodeID, 其他的和103保持一致);在圖2中,設置RangeRequest為103(接收者),設置Macro-Repeat-Continous-Delay 為 100
- 如圖4所示,點擊Send就可以完成測距
图1
图2
图3(這裏應該是103,截圖弄錯了)
图4
注意:要保證能夠測距成功,必須要保證:
- 2個UWB都能夠和電腦以及電源能夠成功連接,藍燈0.5HZ閃爍;2個UWB的配置界面必須正確
- USB线不能接触不良
- UWB之间的距离不能隔得太近否则也得不到距离信息
- 在RangeNet配置好了100-103和104的接受和发布的ID但是仍然不能够成功跑通的问题:换一个稳定点的数据线,可能是数据线接触不良导致测距无法成功
- 正常测距的状态:正常测距状态下,104为移动节点,103为锚节点,他们的正常测距的状态是
- Enable the reporting of waveforms by clicking on the Configuration Tab and changing the Scans drop-down from None to either Scan or Full Scan. Then click Set.
-
Now initiate the taking of range measurements. Click on the Ranging Tab, confirm that Repeat is checked, and click Send.
-
If you click the Scans button at the bottom of the display, the waveform captured for each range measurement will be displayed. See the example shown in Figure 12. The green line indicates the leading edge of the waveform and the gray line indicates the zero crossing to which the radio has synchronized. The scales can be changed by holding the left or right mouse buttons down while moving the mouse up or down.
-
It should be noted that waveforms taken at such short ranges are compressed and clipped. They can be taken out of compression either by increasing the distance between the units or inserting attenuation between the P440 RF port and the antenna.
The process to collect ranging data using the RangeNet GUI is simple.
- Click the Configuration Tab.
- You will need to specify a location where the collected ranging data can be stored. In the Logging block, use the browser to select or create a target directory for the logfile. The RangeNet GUI will provide a default but this example assumes that you have created a directory on your desktop called 2.1 release\logs and defaults. The directory can be created either through Windows or through the browser.
- You will need to specify a file name for the logfile. A default will be provided in the field called Logfile Prefix, but this example assumes that you have entered the file name Ranging Logs. Click Start Logging. The message “Logging to File: Ranging Logs000.csv” will appear.
- Select the Ranging Tab. In the Macro section, check the box marked “Repeat” and select “Count.” Enter a value for the count (e.g., 100).
- Click Send. The status will scroll while the ranges are being measured.
- Open your ranging data destination folder. You should see a text document titled “Ranging Logs000.csv.” This is your logfile. (Each successive logfile with this filename will be numbered sequentially.)
- Click the logging Stop button and open the logfile. An example is shown in Figure 13. Each row contains data from one message that was sent from the Host to the P440 or from the P440 to the Host. There are several different message types. Each time a new type of message is entered, it will be preceded by a message that contains header information describing each column. (For details on the exact format of all messages, review the 320-0313 RangeNet API Specification and 320-0320 RangeNet User Guide).
注意事项
- 常规调试情况要看指示灯的亮灭,判断测距是否在正常状态(蓝色低速闪烁,绿灯高速闪烁(非测距状态常亮),右边的绿灯高速闪烁(非测距状态高速闪烁)
- 若无法在组网情况下无法出现range消息的问题
执行步骤
- 进入networking模式
- 在configuration中设置为组网模式,然后set
- 在networking部分,从100-104所有的5个节点都要按照下图来配置,并保存set
- 退出重新进入rangenet,看配置是否和原来的保持一致(务必确保进入TDMA模式)
- 在100-103重复执行1-4的所有步骤,完成所有UWB模块的配置
- 在Ranging 模式中,设置100-103的Responder均为104,设置完并保存,每保存一次都要重新进入rangenet看保存的配置是否生效
- 进入104的Ranging模式,从100-103测试,测试104-(100-103)是否成功
- 进入104的Networking模式,点击opmodes下的networking,看是否能够成功接受数据,若成功,则:
组网成功时的设备状态
- 大端字节序(Big Endian):最高有效字节(MSB)存储在最低地址处。
- 小端字节序(Little Endian):最低有效字节(LSB)存储在最低地址处。
-
htons
:将16位无符号整数从主机字节序转换为网络字节序(大端)。 -
ntohs
:将16位无符号整数从网络字节序转换为主机字节序。 -
htonl
:将32位无符号整数从主机字节序转换为网络字节序(大端)。 -
ntohl
:将32位无符号整数从网络字节序转换为主机字节序。 -
ntohs 簡述:
將一個無符號短整形數從網絡字節順序轉換為主機字節順序。
#include
u_short PASCAL FAR ntohs( u_short netshort);
netshort:一個以網絡字節順序表達的16位數。
註釋: 本函數將一個16位數由網絡字節順序轉換為主機字節順序。 返回值:ntohs()返回一個以主機字節順序表達的數。
- htons 簡述:
將主機的無符號短整形數轉換成網絡字節順序。
#include
u_short PASCAL FAR htons( u_short hostshort);
hostshort:主機字節順序表達的16位數。
註釋: 本函數將一個16位數從主機字節順序轉換成網絡字節順序。 返回值: htons()返回一個網絡字節順序的值。
为什么需要这些函数: 在网络通信中,不同的计算机系统可能使用不同的字节序。为了确保数据在不同系统之间正确传输,需要将数据转换为统一的字节序(网络字节序,即大端字节序)。这些函数可以帮助开发者轻松地进行字节序转换,从而避免数据传输错误。
htons
和ntohs
#include <iostream>
#include <arpa/inet.h> // 包含网络字节序转换函数
int main() {
uint16_t hostShort = 0x1234; // 主机字节序
uint16_t networkShort = htons(hostShort); // 转换为主机字节序到网络字节序
std::cout << "Host short: " << std::hex << hostShort << std::endl;
std::cout << "Network short: " << std::hex << networkShort << std::endl;
uint16_t convertedBack = ntohs(networkShort); // 转换回主机字节序
std::cout << "Converted back: " << std::hex << convertedBack << std::endl;
return 0;
}
- htonl和ntohl
#include <iostream>
#include <arpa/inet.h> // 包含网络字节序转换函数
int main() {
uint32_t hostLong = 0x12345678; // 主机字节序
uint32_t networkLong = htonl(hostLong); // 转换为主机字节序到网络字节序
std::cout << "Host long: " << std::hex << hostLong << std::endl;
std::cout << "Network long: " << std::hex << networkLong << std::endl;
uint32_t convertedBack = ntohl(networkLong); // 转换回主机字节序
std::cout << "Converted back: " << std::hex << convertedBack << std::endl;
return 0;
}
htons
和 ntohs
htons(hostShort)
将16位无符号整数从主机字节序转换为网络字节序。ntohs(networkShort)
将16位无符号整数从网络字节序转换回主机字节序。
htonl
和 ntohl
htonl(hostLong)
将32位无符号整数从主机字节序转换为网络字节序。ntohl(networkLong)
将32位无符号整数从网络字节序转换回主机字节序。
- 如何在网络字节序和主机字节序之间进行转换。
#include <iostream>
#include <stdio.h>
#include <arpa/inet.h> // 包含网络字节序转换函数
#include <netinet/in.h> // 包含in_addr结构体
int main(int argc, char* argv[]) {
struct in_addr addr1, addr2;
unsigned long l1, l2;
// 将点分十进制IP地址转换为网络字节序的32位无符号整数
l1 = inet_addr("192.168.0.74");
l2 = inet_addr("211.100.21.179");
// 将32位无符号整数转换为in_addr结构体
memcpy(&addr1, &l1, 4);
memcpy(&addr2, &l2, 4);
// 输出原始IP地址
printf("Original IP addresses:\n");
printf("%s : %s \n", inet_ntoa(addr1), inet_ntoa(addr2));
// 将32位无符号整数从主机字节序转换为网络字节序
l1 = htonl(l1);
l2 = htonl(l2);
// 将32位无符号整数转换为in_addr结构体
memcpy(&addr1, &l1, 4);
memcpy(&addr2, &l2, 4);
// 输出转换后的IP地址(应该与原始IP地址相同,因为inet_addr已经返回网络字节序)
printf("IP addresses after htonl (should be the same):\n");
printf("%s : %s \n", inet_ntoa(addr1), inet_ntoa(addr2));
// 将32位无符号整数从网络字节序转换回主机字节序
l1 = ntohl(l1);
l2 = ntohl(l2);
// 将32位无符号整数转换为in_addr结构体
memcpy(&addr1, &l1, 4);
memcpy(&addr2, &l2, 4);
// 输出转换回主机字节序后的IP地址(应该与原始IP地址相同)
printf("IP addresses after ntohl (should be the same):\n");
printf("%s : %s \n", inet_ntoa(addr1), inet_ntoa(addr2));
return 0;
}
net_ntoa
是一个用于将32位无符号整数(网络字节序)转换为点分十进制形式的IP地址字符串的函数。它的功能是从 in_addr
结构体中提取IP地址,并将其转换为人类可读的形式(即点分十进制形式)。
in
:一个in_addr
结构体,包含一个32位无符号整数形式的IP地址。
- 返回一个指向点分十进制形式的IP地址字符串的指针。注意,这个指针指向的内存是静态分配的,每次调用
inet_ntoa
都会覆盖之前的值。
#include <iostream>
#include <stdio.h>
#include <arpa/inet.h> // 包含inet_ntoa函数
#include <netinet/in.h> // 包含in_addr结构体
int main() {
struct in_addr addr;
unsigned long ip = inet_addr("192.168.0.1"); // 将点分十进制IP地址转换为32位无符号整数
// 将32位无符号整数复制到in_addr结构体
memcpy(&addr, &ip, 4);
// 使用inet_ntoa将in_addr结构体转换为点分十进制形式的IP地址字符串
char *ip_str = inet_ntoa(addr);
// 输出点分十进制形式的IP地址
printf("IP Address: %s\n", ip_str);
return 0;
}
由于 inet_ntoa
返回的指针指向的是静态分配的内存,多次调用 inet_ntoa
会导致前一次的结果被覆盖。因此,如果需要保存多个IP地址的字符串形式,需要手动复制这些字符串。
#include <iostream>
#include <stdio.h>
#include <arpa/inet.h> // 包含inet_ntoa函数
#include <netinet/in.h> // 包含in_addr结构体
#include <string.h> // 包含strcpy函数
int main() {
struct in_addr addr1, addr2;
unsigned long ip1 = inet_addr("192.168.0.1");
unsigned long ip2 = inet_addr("211.100.21.179");
// 将32位无符号整数复制到in_addr结构体
memcpy(&addr1, &ip1, 4);
memcpy(&addr2, &ip2, 4);
// 使用inet_ntoa将in_addr结构体转换为点分十进制形式的IP地址字符串
char *ip_str1 = inet_ntoa(addr1);
char *ip_str2 = inet_ntoa(addr2);
// 由于inet_ntoa返回的指针指向的是静态分配的内存,需要手动复制这些字符串
char ip1_str[16];
char ip2_str[16];
strcpy(ip1_str, ip_str1);
strcpy(ip2_str, ip_str2);
// 输出点分十进制形式的IP地址
printf("IP Address 1: %s\n", ip1_str);
printf("IP Address 2: %s\n", ip2_str);
return 0;
}
- 静态内存:
inet_ntoa
返回的指针指向的是静态分配的内存,因此每次调用inet_ntoa
都会覆盖前一次的结果。如果需要保存多个IP地址的字符串形式,需要手动复制这些字符串。 - 线程安全:
inet_ntoa
不是线程安全的。在多线程环境中,建议使用inet_ntop
函数,它返回一个动态分配的字符串,可以避免线程安全问题。
inet_ntop
是一个更现代的替代函数,支持IPv4和IPv6,并且返回一个动态分配的字符串,适用于多线程环境。
#include <iostream>
#include <stdio.h>
#include <arpa/inet.h> // 包含inet_ntop函数
#include <netinet/in.h> // 包含in_addr结构体
int main() {
struct in_addr addr;
unsigned long ip = inet_addr("192.168.0.1"); // 将点分十进制IP地址转换为32位无符号整数
// 将32位无符号整数复制到in_addr结构体
memcpy(&addr, &ip, 4);
// 定义一个缓冲区来存储点分十进制形式的IP地址
char ip_str[INET_ADDRSTRLEN];
// 使用inet_ntop将in_addr结构体转换为点分十进制形式的IP地址字符串
if (inet_ntop(AF_INET, &addr, ip_str, INET_ADDRSTRLEN) != NULL) {
// 输出点分十进制形式的IP地址
printf("IP Address: %s\n", ip_str);
} else {
perror("inet_ntop");
}
return 0;
}
组网部分
- rnTdmaConfigSet
- rnTdmaConfigGet
- rnConfigSet
注意: 使用下面这些命令前需要安装
sudo apt install net-tools
sudo apt install ifdownup
sudo apt install network-scripts
查看网卡型号 lspci -k | grep -i -A2 net 查看网卡设备信息,查看网卡生产商,型号。
lspci | grep -i net 查看Ubuntu 中,通常有线网卡为eth0,无线网卡则为wlan0,后续增加的以此类推(可能某些无线网卡型号命名为eth1,而非wlan0)。
可以看到网卡型号是8125 (rev 05)
lspci -k | grep -i -A2 net
04:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. Device 8125 (rev 05)
Subsystem: Gigabyte Technology Co., Ltd Device e000
Kernel modules: r8169
查看系统网卡信息
ifconfig
ifconfig 是一个用来查看、配置、启用或禁用网络接口的工具。
查看信息 $ifconfig
激活/禁用网卡 $sudo ifconfig 网卡设备名 up/down
查看网卡信息 $sudo ifconfig 网卡设备名
启用/禁用网络 sudo /etc/init.d/networking start (service network start)
iwconfig 用于查看无线连接情况 $ iwconfig
查看USB网卡 $ lsusb
- 连接网线,打开ifconfig, 发现enpxxx网口
- 输入
lspci -k | grep -i -A2 net
查看网卡型号为r8125
> lspci -k | grep -i -A2 net
04:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. Device 8125 (rev 05)
Subsystem: Gigabyte Technology Co., Ltd Device e000
Kernel modules: r8169
- 在google中搜索r8125,找到 r8125
-
下载后,将其复制到主目录下,命令解压
r8125-9.011.01.tar.bz2
然后会在主目录下生成相应文件夹,读入
cd r8125-9.006.04
打开终端输入
sudo sh ./autorun.sh
- 再次连接网线,并配置IP端口为windows中p440 104模块的端口,保证IP地址一致
检测连接不到uwb模块,需要:sudo chmod 777 /dev/serial/by-id/usb-1027_Time_Domain_P440_104-if00
ros::init(argc, argv, "uwb_driver");
ros::NodeHandle uwbDriverNodeHandle("~");
//Collect the nodes IDs(接收nodesId)
if(uwbDriverNodeHandle.getParam("nodesId", nodesId)) //搜索id号,网络中有几个节点,std::vector<int> nodesId;是一个vector类型
{
nodesTotal = nodesId.size();//node个数
printf(KBLU "Retrieved %d nodes IDs: ", nodesTotal);//ID个数
for (int i = 0; i < nodesTotal; i++)
printf("%d\t", nodesId[i]);//打印ID
printf("\n" RESET);
}
else
{
printf(KRED "Failed to collect nodes IDs, terminating program!\n" RESET);
return 0;
}
# interfaces(5) file used by ifup(8) and ifdown(8)
auto lo
iface lo inet loopback