MDEK1001 - Custom location solver algorithm

Hello everyone.

We purchased the MDEK1001 kit and got the documentations regarding its components. I quote from the DWM1001_Firmware_User_Guide_ver11.pdf, [color=#000000][size=medium][font=Calibri, Helvetica, sans-serif, serif, EmojiFont]“2.3.8 TWR solver / Location Engine” paragraph:[/font][/size][/color]

[color=#000000][size=medium][font=Calibri, Helvetica, sans-serif, serif, EmojiFont]“The TWR solver / Location Engine in the tags calculates tag’s x, y and z, coordinates is implemented on the DWM1001 module. TWR results between the tag and the relative anchors are sent to the solver for the calculation of tag’s position. The TWR results are accessible through the APIs. The internal location engine can be disable and user customised location calculation performed instead, e.g. adding extra filtering of change LE/solver algorithms.”[/font][/size][/color]

[color=#000000][size=medium][font=Calibri, Helvetica, sans-serif, serif, EmojiFont]We’ve seen the option to disable a tag’s location engine from the Android Application but we haven’t found any API or method in general to implement a custom made location solver algorithm on the specific kit.[/font][/size][/color]

[color=#000000][size=medium][font=Calibri, Helvetica, sans-serif, serif, EmojiFont]How can that be done? Actually is it even possible? Because from what we’ve gathered, that part of the firmware is embedded in the DWM1001 device along with the devices UWB networking protocol. The DW1000 API has the C code we could utilize but the source code we purchased only gives access to the PANS API source code and tool chain.[/font][/size][/color]

[color=#000000][size=medium][font=Calibri, Helvetica, sans-serif, serif, EmojiFont]Thank you in advance.[/font][/size][/color]

Hello QnQ,

PANS offers user thread in which it is possible to develop a custom application.

If you disable the location engine, you still get the measured range and can determine a position out of those ranges. To do so, you would have to implement your own trilateration algorithm within the user app space.

The DW1000 api is not meant to be used when working with PANS as it can corrupt the normal function of the DW1001 under PANS.

Maybe take a look at the section 4 of the firmware application user guide as it introduces the User application space.

Let me know how it goes,
Thank you,
Best regards

Thank you for the quick reply. We had seen in the PANS API the dwm_loc_get command that returns the last distances to the anchors and the associated position, so we guess this is what gets printed in the log when we disable the tag’s location engine.
Since you say that the DW1000 api is not meant to be used in the MDEK1001 kit, then we can’t have access to the raw data used to estimate those distances, correct?

Well I guess you have access to the ranges using the PANS (dwm1001 api) dwm_loc_get as you said. This should provide raw ranges when the location engine is disabled.

The data you could get from the DW1000 api would be the timestamp. But yeah this API is not meant to be used.


Well then, for the purposes of our goals, we would like to use the DW1000 API to take advantage of its functions. As a first step then, is there any advice on which DecaWave product to purchase to run our custom code by utilizing the DW1000 API functions, or how to reprogram the MDEK1001 devices we purchased?

On the GIT repository below you can find some examples targetting dwm1001 hardware (MDEK) and using the dw1000 api.

Please note this software is very low level and as a consequence the application is much more simple than the full RTLS stack delivered with MDEK.

Thank you,

That seems a lot more promising than anything else we had found, so thank you very much.

So we succesfully flashed the TWR initiator example into our DWM1001-DEV board, or so we think, because we saw in the comments of the ss_init_main.c that “this example application works out a value for the time-of-flight over-the-air and, thus, the estimated distance between the two devices, which it writes to the LCD”.

The thing is though that the DWM1001-DEV boards do not have an LCD screen… But we don’t see any code for sending messages to any screen in the code anyway, at least in the mains.

So, since we programmed the single sided twr initiator and another device as the single sided twr responder, we’d appreciate any help to guide us through reading any ranges the initiator is calculating.