czech english

MDEK1001

DevKit pro Decawave DW1000 čip (UWB)

MDEK1001 (Module Development & Evaluation Kit) je další příklad zařízení s Decawave DW1000 čipem, který pomocí UWB (Ultra Wide Band) technologie umožnuje lokalizaci a komunikaci. Cena je zhruba 200USD, což vychází cca 5x levněji než Pozyx. Co je lepší? Blog update: 17/3/2022 — Bridge node, panid a IoT data

MDEK1001 (zdroj Mouser.com)
MDEK1001 (zdroj Mouser.com)
Toto je vlastně druhý článek věnovaný UWB technologii. První část najdete v blogu o Pozyxu.

Obsah



Blog

9. březen 2022 — Balíček dorazil

MDEK1001 jsme si koupili s Jirkou přes Mouser (ještě tam mají 184 sad, tj. za týden zhruba podobné číslo prodali). Není to úplně levné (s posláním z USA, daněma a clem to stálo 6 576,55Kč (na webu 5 480,46 Kč), ale stále je to řádově levnější než Pozyx (1,050.00 EUR+doprava). V čem se tady obě sady liší? Častečnou odpověď jsme dostali před časem od Pozyx podpory, kde k jednotlivým bodům se budeme postupně vracet.
První pozorování je, že Pozyx krabiček je 10 (oprava 9) 5x kotva/anchor a 4x tag (ty jsem po pravdě ještě moc nepoužíval). MDEK1001 obsahuje 12 krabiček bez rolišení role. Pozyx tagy mají na sobě ještě IMU (9-axis inertial measurement unit), kotvy nemají nic. MDEK1001 by měl mít všude akcelerometry, pro detekci pohybu, a Bluetooth pro konfiguraci. Pozyx má krabičky pouze pro tagy, MDEK1001 je má pro všech 12 zařízení.
MDEK1001 Quick Start Guide doporučuje zapojit 4 kotvy v jedné rovině do obdélníka na zdroje, tag na baterku nebo USB powerbanku, stáhnout si Android aplikaci a můžete začít konfigurovat přes Bluetooth. Zatímco Pozyx s kabely fakt nešetří (5 zdrojů s kabely, 3 malé powerbanky, extra komunikační USB kabel), tak MDEK1001 obsahuje jediný USB kabel, 4x L-kové propojky a to je vše. S Pozyxem si tedy můžete začít hrát hned, ale pro MDEK1001 potřebujete ještě „zajít do obchodu” nebo „znárodnit” Pozyx.
Co se stane, když nebudu postupovat podle návodu a prostě tím jediným kabelem na flashování firmware DMW1001C modul zapnu? Vidim disco čtyř LEDek a dmesg říká:
[131295.467222] usb 1-6: new full-speed USB device number 13 using xhci_hcd
[131295.619237] usb 1-6: New USB device found, idVendor=1366, idProduct=0105, bcdDevice= 1.00
[131295.619243] usb 1-6: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[131295.619246] usb 1-6: Product: J-Link
[131295.619249] usb 1-6: Manufacturer: SEGGER
[131295.619251] usb 1-6: SerialNumber: 000760154093
[131295.626959] cdc_acm 1-6:1.0: ttyACM0: USB ACM device
A teď kde je (sakra) ten příklad s terminálem pro komunikaci přes USB? Toto vypadá užitečně i když je to článek z roku 2018: minicom -D /dev/ttyACM0
… i když se to se mnou začalo rozumně bavit až když jsem dal Hangup … a nebo to nějakou dobu nabíhá, nevím … ale na druhé straně je chatbot se kterým se dá pokecat.
dwm> si
[001155.990 INF] sys: fw2 fw_ver=x01030001 cfg_ver=x00010700
[001155.990 INF] uwb0: panid=x0000 addr=xDECAB827E225DC19
[001156.000 INF] mode: tn (pasv,twr,np,le)
[001156.000 INF] uwbmac: disconnected
[001156.000 INF] uwbmac: bh disconnected
[001156.010 INF] cfg: sync=0 fwup=0 ble=1 leds=1 le=1 lp=0 stat_det=1 (sens=1) mode=0
  upd_rate_norm=1 upd_rate_stat=100 label=DWDC19
[001156.020 INF] enc: off
[001156.020 INF] ble: addr=EF:24:D0:2E:0F:B3

dwm> ut
[001294.240 INF] uptime: 00:21:34.240 0 days (1294240 ms)

dwm> av
acc: x = -1776, y = 4160, z = 6608

dwm> utpg
utpg: pg_delay=xB5 tx_power=x456585A5 (pg_delay=xB8 tx_power=x446484A4)

dwm> nmg
mode: tn (pasv,twr,np,le)
Možná vhodný okamžik první iteraci přerušit.
p.s. jo jo, je tam příkaz help nebo jen ?, který vypíše asi 20+ příkazů „na hraní”

11. březen 2022 — Android a Bluetooth

Potvrzuji, že začátky s MDEK1001 úplně hladké nejsou. Rozhodl jsem se tedy postupovat podle návodu, věřte nevěřte. Stáhl jsem si tedy DRTLS_Manager_R2.apk (z Google Play byla odstraněna) a pokusil se to nainstalovat na starší Android telefon: There was a problem parsing the package. Hmm. Povolil jsem instalaci z jiných zdrojů, ale výsledek stejný.
Pak jsem si včera hrál s Bluetooth (jak z konzole přes USB nastavit tag/kotvu jsem úplně nepochopil a přes BT by to jít mělo). Existuje několik wrapperů jako decawave-ble, ale tam instalace skončila ERROR: Failed building wheel for bluepy.
Tak jsem přešel na nápovědu od Jirky: K tématu Bluetooth & Python: https://github.com/hbldh/bleak a https://github.com/pybluez/pybluez Jiné možnosti dost možná ani nejsou. Rozhodující nejspíš bude, co ti bude fungovat na Windows. Teoreticky obojí, prakticky možná ani jedno. Když jsem to zkoumal kolem Vánoc, vyšlo mi, tuším, "radši Bleak." Argumenty si úplně nepamatuji. Něco kolem API a něco kolem pybluez "not being maintained" a se souvistlostí se zastaralými tooly (hcitool).
Bleak opravdu vypadal „živější”, příklad fungoval, jen jsem pro UUID používal kódy z decawave_ble init tabulky.
import asyncio
from bleak import BleakScanner

async def main():
    devices = await BleakScanner.discover()
    for d in devices:
        print(d)

asyncio.run(main())
při zapnutém jednom zařízení ukázal:
5C:FB:7C:C6:B2:13: JBL Flip 4
24:FC:E5:6F:B2:C7: 24-FC-E5-6F-B2-C7
D6:DC:77:A5:C8:61: DW4D37
8C:79:F5:10:A5:E5: [TV] Samsung 7 Series (43)
53:62:1A:F4:32:35: 53-62-1A-F4-32-35
05:84:BC:18:E2:FB: 05-84-BC-18-E2-FB
F0:27:F0:09:B0:B8: F0-27-F0-09-B0-B8
6B:76:00:1B:A4:E6: 6B-76-00-1B-A4-E6
78:BD:BC:40:5B:BD: 78-BD-BC-40-5B-BD
jj, skoro to vypadá, že bych mohl sousedům vypnout televizi. A ano, to co hledáme, je DW4D37. Zatím asi nejzajímavější zpráva byla Device Info: bytearray(b'7M3\xfb\x08\xf3\xca\xde*\x00\xca\xde\x00\x00\x03\x01\x01\x00\x03\x01>\x97pQ\t\x1e\xaf\xce\x00') což v HEX vypadá lepší a prvních 8 bajtů je Node ID = 374d 33fb 08f3 cade. Nějaké indicie? Vypadá to na malé „indiány” a spodní/první bajty odpovídají identifikaci zařízení. Ale o moc dále jsem se nedostal.
A teď „Androidí rozuzlení” — oni to vlastně je v tom MDEK1001 Quick Start Guide:
No můj starší telefon je Android 4.4, žena měla 5.0 a poslední na testování UWB má verzi 12. Tak úplně není divu, že s nabízenou verzi 6 a 7 to nemá žádný průnik …

Update 11-03-2022 9:53pm (Jirka)

Na mém když-to-funguje-tak-to-neupdatuj tabletu ta aplikace pustit jde.
První poznatek je, že Auto Positioning kotev při dvou kotvách nefunguje. Ta aplikace to ale neví, takže jí několik minut trvá, než vytimeoutuje. Naštěstí je tam i Cancel.
Druhý poznatek je, že při třech kotvách to trvá více než půl minuty.
Třetí poznatek je, že při třech kotvách v trojúhelníku se stranou lehce nad dva metry jsou vzdálenosti z Auto Positioning o deset až patnáct centimetrů špatně. To je na výstavní systém přímo od zdroje, s kalibrovanými zpožděními na anténách, podle mě docela slabota. Na druhou stranu, bylo to o několik týdnů rychlejší, než moje hrátky s BU01.
Na ovládání z tabletu přes Bluetooth, bez natahování propojovacích kablíků z konvertoru USB<->sériák, bych si taky zvykl docela rychle. Vlastně asi úplně nejvíc by se mi líbilo, kdyby ten DW1000 byl přímo v noteboku a měl bych k němu nízkoúrovňový přístup. Pak bych nemusel řešit ani kabely, ani dvě souběžné bezdrátové sítě vysávající baterky.

13. březen 2022 — uwg, uwt, uwi a les

Včera mne Jirka motivoval to zase zkusit, když jemu to vše hned fungovalo. Ty tajemné zkratky z názvu jsou skoro všechny příkazy ze skupiny UWBMAC a pokud je použijete, tak konzole začne vypisovat vzdálenost dvou krabiček.
Ale postupně. Nejprve přehled nápovědy z konzolové aplikace (nevím, zda už jsem zmiňoval, že je třeba pro přepnutí 2x po sobě stisknout Enter, viz dokumentace), sekce UWBMAC:
** Command group: UWBMAC **
nmg: Get node mode
nmp: Set UWB mode to passive
nmo: Set UWB mode to off
nma: Set mode to AN
nmi: Set mode to ANI
nmt: Set mode to TN
nmtl: Set mode to TN-LP
nmb: Set mode to BN
la: Show AN list
lb: Show BN list
nis: Set Network ID
nls: Set node label
udi: Show incoming IoT data
uui: Send IoT data
stg: Get stats
stc: Clear stats
nmg už jsem zmiňoval v prvním příspěvku, kde všechny krabičky vracely mode: tn (pasv,twr,np,le). Ne že bych tomu rozumněl, ale pasv zní dost pasivně, twr by mohlo být Two Way Ranging, zbytek netuším. Také to tn něco znamená a na tn.cz to asi nenajdete.
Teorie byla taková, že když doporučený postup přes Android a Bluetooth nakonfiguruje nejprve kotvy (AN bude nejspíše Anchor Node, takže to TN bude Tag Node, konec „záhady”), tak pak je možné lokalizovat tag vůči kotvám. To I my přišlo jako inicializační, jako kdo diriguje všechny kotvy v dané podsíti … ale to si budu muset znova nastudovat ať vás nematu. V každém případě po nmt se změnil stav na tn (act,twr,np,le) (aktivní tag?) a u druhé krabičky nmi byla odpověď ani (act,real). Pokud jsem tag znova zapojil do USB a napsal les (les: Show meas. and pos.) tak jsem získal tento výpis:
dwm> les
dwm> 4D37[0.00,0.00,0.00]=0.54
4D37[0.00,0.00,0.00]=0.49
4D37[0.00,0.00,0.00]=0.44
4D37[0.00,0.00,0.00]=0.56
4D37[0.00,0.00,0.00]=0.48
4D37[0.00,0.00,0.00]=0.49
4D37[0.00,0.00,0.00]=0.52
4D37[0.00,0.00,0.00]=0.42
Také la (výpis kotev) už něco začal dělat:
dwm> la
[000034.780 INF] AN: cnt=1 seq=x01
[000034.780 INF]    0) id=0000000000004D37 seat=0 seens=98 map=0000 pos=0.00:0.00:0.00
[000034.790 INF]
A ano, potvrzuji Jirkovu „předtuchu”, že se Pozyx s MDEK1001 nebude chtít vůbec bavit, minimálně zapnutou Pozyx kotvu to nevypisuje (i když si myslím, že po startu oba systémy používaji kanál 5 a preambuli velikosti 64) … ale to možná někdy později.
Mohl bych sem alespoň doplnit první fotky z rozbalování Qorvo (fakt se to čte kurvo?)
p.s. ještě jsem měl říci, že to nastavení tag/kotva/init zůstává platné i po vypnutí napájení
p.s.2 potvrzuji, že v tom návodu (quick start) vidím:
  • All RTLS units will initially appear as tags in "passive" UWB mode
  • Set "UWB" to "Active"
  • For any one of the anchors, check the "Initiator" box (there must always be one initiator in the network)

17. březen 2022 — Bridge node, panid a IoT data

V rámci včerejšího robotického callu jsme se trošku posunuli, resp. mne zase Jirka kousek poposunul. Sice výsledek je částečně z kategorie „Cimrmanovského foukání tabákového dýmu do vody”, ve smyslu „tudy ne přátelé”, ale uvidíme.
Pro mne první objev byl, co je to: B-node z nápovědy:
nmb: Set mode to BN
lb: Show BN list
Je k tomu totiž potřeba novější dokumentace (DWM1001_Gateway_Quick_Deployment_Guide.pdf), kde zmiňují nový typ nodu/uzlu a to bridge node. Je to krabička, která by měla umožnit napojení UWB sítě na klasický internet.
Bohužel se to nedá úplně snadno vyzkoušet, protože je k tomu třeba RaspberryPi3 a DWM1001 modul je třeba připojit přes piny. Nakonfigurovat ale node jako bridge node pomocí nmb jde a pak se objeví i při výpisu pomocí lb. Divné ale je, že tento výpis funguje pouze pro kotvy ale už ne pro tagy a přitom převzatý obrázek zmiňuje UWB link s tagem …
Možná jsem měl začít motivací, jak jsem se k tomu vůbec dostal? No chtěl jsem poslat pár bajtů z jedné krabičky do druhé a příkazy:
udi: Show incoming IoT data
uui: Send IoT data
vypadaly zprvu nadějně. Nikde o nich nebyla zmínka, tak znova Google a ta novější dokumentace:
Adding a gateway to a PANS network enables the possibility to exchange data other than location between gateways and nodes within the systems. This non-location data is called "IoT Data". From the web-manager, it is possible to send IoT data to a node under the node properties window, in the "messages" tab. The data sent to the tag can be observed on the UART shell after using the "udi" command. Data is sent as hexadecimal.
Tady si Jirka všiml klíčového slova tag (prostě pro anchors to nejspíše fungovat ani nemá). Bohužel z různých diskuzí (Receiving Tag position using a bridge, Bridge node and web manager) to vypadá, že bez HW úpravy bridge node nic poslat nepůjde.
Jirka našel ještě PANS R2: Some questions on the Gateway application of DWM1001 a How to communicate with listener (without using raspberry), tj. možná cesta existuje, ale bude poměrně trnitá …
A na závěr bych ještě zmínil tu panid (Personal Area Network ID), které lze nastavit pomocí příkazu nis a je součástí si (system info):
dwm> si
[000116.510 INF] sys: fw2 fw_ver=x01030001 cfg_ver=x00010700
[000116.510 INF] uwb0: panid=x0000 addr=xDECA2B75F6248207
[000116.520 INF] mode: tn (pasv,twr,np,le)
[000116.520 INF] uwbmac: disconnected
[000116.520 INF] uwbmac: bh disconnected
[000116.530 INF] cfg: sync=0 fwup=0 ble=1 leds=1 le=1 lp=0 stat_det=1
                 (sens=1) mode=0 upd_rate_norm=1 upd_rate_stat=100 label=DW8207
[000116.540 INF] enc: off
[000116.540 INF] ble: addr=E2:47:07:28:12:6E
… tj. zatím se držím defaultu=0.