最近關注DWM1000 定位,一方面在看DWM1000 官方提供的代碼,也在四處網上找資料看資料。 其中比較好的一份開源源代碼是bitcaze的lps-node-firmwar,github直接共享,bitcraze 做的是四軸無人機,還有定位上位機軟件,全部都開源。 國內很多模塊現在使用或者使用bitcraze 改版程序。
lps-node-firmware是基於FREERTOS的,準備分析完官方源碼後接着分析這份源碼,bitcaze同時提供了模塊的原理圖,設計比較簡單,準備自己打樣一版試試,12月份全部搞定,come on!!
附上bitcraze 官網:https://www.bitcraze.io/
bitcraze開源項目github:https://github.com/bitcraze
lps-node-firmware:https://github.com/bitcraze/lps-node-firmware
最好通過git 命令clone 代碼,如果值通過網頁下載,裏面的三個庫是不包括其中的。 clone 命令:
git clone --recursive https://github.com/bitcraze/lps-node-firmware.git
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的串口代碼。
部分代碼:
1 2 3 4 5 6 7 8 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
|
51uwb_base code使用說明:
1 框架完成數據收發,有TX 節點和 RX節點,通過main函數選擇,如下代碼爲TX節點,反之爲RX節點。
1 2 3 4 5 6 7 8 |
|
2 每個節點需要配置不同短地址,在bphero_uwb.h中指定
1 2 3 |
|
配置以上兩步編譯下載即可。
注意:
1由於嵌入式代碼與硬件有着天然緊密聯繫,我的代碼基於藍點無限開發板,如果使用其它開發板,需要進行底層匹配,主要代碼在port.c中,主要修改dwm1000 與主控的連線引腳配置以及主控的串口配置。
2代碼中目前TX發送信息,對應接收信息RX節點地址爲TX節點地址+1,故設置RX節點時需要考慮這個不然無法實現測試功能。
1 2 3 4 5 |
|
項目開源位置:www.51uwb.cn
DW1000 官網 https://www.decawave.com/support