UWB 目前比较火热,不论国内还是国外目前都掀起一股热潮。 但是实际工程代码很少,开源代码更少。

目前代码主要有

1 DecaWave Release的定位源码,代码基于TWR,一个非常大的状态机。 之前在博客进行过分析,对于初学者来说门槛太高。

2 淘宝商家Release的定位源码,大多基于官方基本例程去修改,实现测距,进而实现定位,这样的代码通常涉及的东西dwm1000 功能较少,在实际工程中应用比较困。

这里开源一个uwb 框架,姑且命名为51uwb_base,介于二者之间,作为一个工程的base code,希望uwb 工程开发者少走一些弯路。base code 并非实际工程完整代码,只是进行模块化,功能化的一个框架,可以实现UWB无线收发。 开发者可以基于此代码进行测距,传输甚至实现TDOA定位。base code 为项目工程提供,不适合初学者以及学生。base code 本身是从完整工程中提取,去掉了项目细节。

51uwb_base 特点:

A . 代码模块化

  将代码根据功能不同,进行模块化区分,不同模块尽量放置不同文件或函数(项目代码基本要求)

B 帧过滤功能

  多节点工程必然给每个模块分配地址,基于dwm1000 实现配置帧过滤功能

C dwm1000 硬件中断

  使用dwm1000 中断信号,可以提供更高的实时性。同时后期可以根据空闲状态情况进入低功耗休眠

D 移植目前我已知最为牛X的串口代码。

部分代码:

int main(void)
{
peripherals_init();
BPhero_UWB_Message_Init();
BPhero_UWB_Init();
tx_main();
//rx_main();
}
void BPhero_UWB_Message_Init(void)
{
//set frame type (0-2), SEC (3), Pending (4), ACK (5), PanIDcomp(6)
msg_f_send.frameCtrl[0] = 0x1 /*frame type 0x1 == data*/ | 0x40 /*PID comp*/|0x20/* ACK request*/;
//source/dest addressing modes and frame version
//msg_f.frameCtrl[0] = 0x41;
msg_f_send.frameCtrl[1] = 0x8 /*dest extended address (16bits)*/ | 0x80 /*src extended address (16bits)*/;
msg_f_send.panID[0] = 0xF0;
msg_f_send.panID[1] = 0xF0; msg_f_send.seqNum = 0;
msg_f_send.messageData[POLL_RNUM] = 3; //copy new range number
msg_f_send.messageData[FCODE] = RTLS_DEMO_MSG_ANCH_POLL; //message function code (specifies if message is a poll, response or other...)
psduLength = (TAG_POLL_MSG_LEN + FRAME_CRTL_AND_ADDRESS_S + FRAME_CRC); msg_f_send.seqNum = 0; //copy sequence number and then increment
msg_f_send.sourceAddr[0] = SHORT_ADDR & 0xFF; //copy the address
msg_f_send.sourceAddr[1] =(SHORT_ADDR>>8)& 0xFF; //copy the address msg_f_send.destAddr[0] = 0x01; //set the destination address (broadcast == 0xffff)
msg_f_send.destAddr[1] = 0x01; //set the destination address (broadcast == 0xffff)
}

  

51uwb_base code使用说明:

1 框架完成数据收发,有TX 节点和 RX节点,通过main函数选择,如下代码为TX节点,反之为RX节点。

int main(void)
{
peripherals_init();
BPhero_UWB_Message_Init();
BPhero_UWB_Init();
tx_main();
//rx_main();
}

2 每个节点需要配置不同短地址,在bphero_uwb.h中指定

#ifndef SHORT_ADDR
#define SHORT_ADDR 0x0032
#endif

配置以上两步编译下载即可。  

注意:

1由于嵌入式代码与硬件有着天然紧密联系,我的代码基于蓝点无限开发板,如果使用其它开发板,需要进行底层匹配,主要代码在port.c中,主要修改dwm1000 与主控的连线引脚配置以及主控的串口配置。

2代码中目前TX发送信息,对应接收信息RX节点地址为TX节点地址+1,故设置RX节点时需要考虑这个不然无法实现测试功能。

void BPhero_Distance_Measure_Specail_TAG(void)
{
// dest address = SHORT_ADDR+1,only for test!!
msg_f_send.destAddr[0] =(SHORT_ADDR+1) &0xFF;
msg_f_send.destAddr[1] = ((SHORT_ADDR+1)>>8) &0xFF;

  

 项目开源位置:www.51uwb.cn

UWB DWM1000 开源项目框架的更多相关文章

  1. UWB DWM1000 开源项目框架 之 温度采集

    在之前博文开源一套uwb 框架,后面几篇博文会基于这个开源框架进行简单开发. 让uwb使用者更清楚了解基于这个basecode 开发工作. 这里所做内容是,采集dwm1000 温度,并发送到另一个节点 ...

  2. android开源项目框架大全:

    android开源项目框架大全: 1.多页切换TabHost9 高仿网易云音乐客户端的Home页面切换Tabhost 高仿网易云音乐客户端的Home页面切换Tabhost,并且三角形是透明的,实现方式 ...

  3. Android非常实用的开源项目框架

    我将文章中所描述的项目都集成在一个apk中,可以直接运行查看效果,2.2以上的机器都可以运行.因为不让直接上传apk文件,我压缩成了zip包 1. Universal-Image-Loader 实现异 ...

  4. 0_MVC+EF+Autofac(dbfirst)轻型项目框架_基本框架

    前言 原来一直使用他人的开源项目框架,异常的定位会很麻烦,甚至不知道这个异常来自我的代码还是这个框架本身.他人的框架有一定的制约性,也有可能是我对那些框架并没深入了解,因为这些开源框架在网上也很难找到 ...

  5. .NET平台开源项目速览(13)机器学习组件Accord.NET框架功能介绍

    Accord.NET Framework是在AForge.NET项目的基础上封装和进一步开发而来.因为AForge.NET更注重与一些底层和广度,而Accord.NET Framework更注重与机器 ...

  6. android开源项目和框架(转)

    特效: http://www.androidviews.net/ http://www.theultimateandroidlibrary.com/ 常用效果: 1. https://github.c ...

  7. android开源项目和框架

    特效: http://www.androidviews.net/ http://www.theultimateandroidlibrary.com/ 常用效果: 1. https://github.c ...

  8. Facebook开源项目:我们为什么要用Fresco框架?

    (Facebook开源项目)Fresco:一个新的Android图像处理类库 在Facebook的Android客户端上快速高效的显示图片是非常重要的.然而多年来,我们遇到了很多如何高效存储图片的问题 ...

  9. 【转】android开源项目和框架

      特效: http://www.androidviews.net/ http://www.theultimateandroidlibrary.com/ 常用效果: 1. https://github ...

随机推荐

  1. C++基础(静态数据成员和静态成员函数)

    [简介] 1.静态数据成员在类中声明,在源文件中定义并初始化: 2.静态成员函数没有this指针,只能访问静态数据成员: 3.调用静态成员函数:(1)对象.(2)直接调用: 4.静态成员函数的地址可用 ...

  2. 剑指offer54:字符流中第一个不重复的字符

    1 题目描述 请实现一个函数用来找出字符流中第一个只出现一次的字符.例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g".当从该字符流中 ...

  3. C++_向函数传递对象

    向函数传递对象 1. 使用对象作为函数参数 对象可以作为参数传递给函数,其方法与传递其他类型的数据相同. 在向函数传递对象时,是通过传值调用传递给函数的. 因此,函数中对对象的任何修改均不影响调用该函 ...

  4. Linux基础-11-rpm管理软件包

    1. 使用RPM安装及移除软件 1) RPM的定义:RPM就是Red Hat Package Manger(红帽软件包管理工具)的缩写. 2) rpm的文件名分为5部分,其中: 第1部分是name,表 ...

  5. 委托、Action泛型委托、Func泛型委托、Predicate泛型委托的用法

    一.举一委托场景:天气很热,二狗子想去买瓶冰镇可乐,但是二狗子很懒,于是他想找个人代他去,于是要有个代理人. 创建代理人之前先定义委托:public delegate string BuyColaDe ...

  6. 写在NOIP2018后

    退役学了一周文化课,感觉还行吧 在周四就有学弟跟我说用我的源代码测329,当时还是出乎意料的. 本来期望是100+50+55+100+50+44=399,结果测得是100+55+50+100+20+4 ...

  7. java使用AES-256-ECB(PKCS7Padding)解密——微信支付退款通知接口指定解密方式

    1.场景 在做微信支付退款通知接口时,微信对通知的内容做了加密,并且指定用 AES256 解密,官方指定的解密方式如下: 2.导包 <!-- https://mvnrepository.com/ ...

  8. Scrapy 安装与使用

    Scrapy的安装: 当前环境win10,python_3.6.4,64bit.在命令提示符窗口运行pip install Scrapy,出现以下结果: building 'twisted.test. ...

  9. Java 之 字节流

    一.一切皆为字节 一切文件数据(文本.图片.视频等)在存储时,都是以二进制数字的形式保存,都一个一个的字节,那么传输时一样如此.所以,字节流可以传输任意文件数据.在操作流的时候,我们要时刻明确,无论使 ...

  10. jmeter学习笔记(三)配置元件之HTTP信息头管理

    使用jmeter模拟发送http请求时,有些请求是需要带上HTTP请求头里面的信息.比如页面需要登录信息的,那个就需要用户登录信息authorization.这个时候是需要使用到HTTP信息头管理器. ...