Table of Contents
- 1. Introduction
- 2. Prerequisites
- 3. Demos and Examples
- 4. Antenna Array Accuracy
- 4.1. Environment 1 (4 locators, 3 tag, static measurement)
- 4.2. Environment 2 (4 locators, 9 tag, static measurement)
- 4.3. Environment 3 (4 locators, 3 tag, static measurement)
- 4.4. Environment 4 (4 locators, 9 tag, static measurement)
- 4.5. Environment 5 (5 locators, 10 tag, static measurement)
- 4.6. Environment 6 (5 locators, 1 tag, static measurement)
- 4.7. Environment 7 (5 locators, 5 tag, static measurement)
- 4.8. Environment 8 (5 locators, 10 tag, static measurement)
- 4.9. Environment 9 (5 locators, 10 tag, static measurement)
- 4.10. Environment 10 (5 locators, 10 tag, static measurement)
- 4.11. Environment 11 (5 locators, 10 tags, static measurement)
- 4.12. Environment 12 (5 locators, 10 tag, static measurement, angle constraint support)
- 5. Development and Code Walk Through
- 6. Conclusion
Bluetooth Angle of Arrival (AoA) and Angle of Departure (AoD) are new technologies that establish a standardized framework for indoor positioning. With these technologies, the fundamental problem of positioning comes down to solving the arrival and departure angles of radio frequency signals.
Beginning with this Bluetooth SDK 3.1.0.0 GA release, the Bluetooth stack supports Bluetooth 5.1 AoA and AoD features. The SDK provides some example applications for evaluating the AoA functionality, and the AoD is also supported at the Bluetooth stack level.
SiliconLabs has the UG103.18: Bluetooth® Direction Finding Fundamentals to explain the basic of the AoA and AoD technology, and has AN1296: Application Development with Silicon Labs’ RTL Library and AN1297: Custom Direction-Finding Solutions using the Silicon Labs Bluetooth Stack to explain how develop the direction finding (DF) applications using the Silicon Labs Bluetooth LE stack and the Real Time Locating Library (RTL lib).
Please note that all of these three documentations are the fundament to understand the basic of Bluetooth Direction Finding as well as the Silicon Labs solution for it. It's supposed that you've read them.
We got some proposal to create a reference design for the AoD solution. Some of our customer are very interested in the AoD solution, and the initial idea is that we can use the AoD solution for sharing bicycle parking management.
The Bluetooth SDK doesn't come with AoD example application, this article will show you how to build a AoD application with Silicon Labs Bluetooth LE stack and the RTL Lib. This documentation walks through the steps to help anyone get stared with AoD solution.
Running the demo requires the following devices:
- Thunderboard BG22 (SLTB010A) x 10
- BRD4185A antenna array board with a WSTK x 5
- A PC running Simplicity Studio 5 with Gecko SDK Suite v3.2 or later
- A Raspberry Pi
- soc_aod_beacon should be built in Studio, and flashed to the EFR32BG22 Direction Finding Radio Board (BRD4185A). This will act as a beacon (CTE transmitter)
- ncp_aod_asset should be built in Studio and flashed to a Thunderboard BG22. This will act as the asset, that receives the CTE and wants to determine its position.
- soc_aod_asset should be built in Studio and flashed to Tunderboard BG22, it is the SoC mode aod asset that do the I/Q sample and transfer it to the gateway via bluetooth connection. Due to the limited resource, it cannot do any angle estimation or position calculation locally.
- aod_locator is the host sample app running on the host demonstrates the CTE Receiver feature and the usage of the angle estimation feature of the RTL library. The hose example should be used with the ncp_aod_asset together.
- aod_gateway is similar as aod_locator but it collects the I/Q sample from the SoC mode aod asset tag via bluetooth connection. And calculate the angle and position accordingly.
- aod_gui is a python based script that can subscribe the MQTT topic published by aod_gateway that contains the position information of the tags, and show the position information of the tag with GUI. And the python script can also record all of the angle and position information for each tag and save them into excel files.
There are two kind of system structure for the multi-transmitter AoD demo. Customer can choose anyone of them depends on their own system design.
In the first case, the AoD tag asset will work in NCP mode for I/Q sample, the host application aod_locator runs on the host MCU or PC will receive the I/Q sample result from the tag via BGAPI interface, and calculate the angle and position according to the I/Q data.
In the second case, the AoD tag asset work in SoC mode for I/Q sample, after finishing the sampling it will transmit the I/Q sample data to the aod gateway via Bluetooth connection. After receiving the I/Q sample from each AoD tag, the gateway runs aod_gateway application will calculate the angle and position.
For getting start with these two kind of multi-transmitter AoD demos, please follow the steps below.
- Please flash a bootloader to each of your boards
- Please build and flash the soc_aod_beacon.sls project to your antenna array boards. You can also find the prebuilt image now for your convenience.
- Please build and flash the ncp_aod_asset.sls project to your Thunderboard. You can also find the prebuilt image now for your convenience.
- Please copy the attached aod_locator project into the following folder:
C:\SiliconLabs\SimplicityStudio\v5\developer\sdks\gecko_sdk_suite\v3.x\app\bluetooth\example_host - Start MSYS2 MinGW 64-bit, navigate to the aod_locator folder, and build the project simply by running
make ANGLE=1
(there will be some warnings, neglect them) - Navigate to the config folder, and change the multilocator_config.json file according to your setup (change the addresses, position and orientation of your antenna array boards)
- Navigate to the exe folder, and start the project like this (change the COM port to the one used by the Thunderboard BG22):
./aod_locator.exe -u COM49 -c ../config/multilocator_config.json
Below is the system block diagram for the case of AoD tag asset works in NCP mode.
- Build the soc_aod_beacon project and flash the image to the antenna array boards. Please make sure that a bootloader is also flashed before.
- Build the soc_aod_asset project and flash the image to the Thunderboard BG22.
- Flash NCP - Empty Demo to a BG22 radio board which acts as the gateway combine with the Raspberry Pi or your PC runs the aod_gateway host application.
- Copy the aod_gateway project to the folder
C:\SiliconLabs\SimplicityStudio\v5\developer\sdks\gecko_sdk_suite\v3.x\app\bluetooth\example_host
- Open MSYS2 MinGW 64 bit, browse to the aod_gateway folder and run
make ANGLE=1
- Make sure mqtt broker is running
- start the aod_gateway app like this:
./exe/aod_gateway.exe -c xxx.jason -u COM8
Where the COM port should be the COM port of the BG22 board programmed with NCP empty demo image. - start mqtt explorer, and check if you can see the angles calculated for each locator
- Execute the python script aod_gui, it will subscribe the MQTT topic for receiving the position and angle data of each tag, and show the tag in GUI.
python3 app.py -c ../aod_gateway/config/multilocator_config.json
Note: The multilocator configuration file should be exactly the same for aod_gateway program.
Below is the system block diagram for the case of AoD tag asset works in SoC mode.
Direction finding accuracy depends strongly on the amount of different phase information in the receiver. The number of channels/antennas affects the overall angle accuracy. However, increasing the number of antennas requires more and more memory for the calculations and increases PCB size as well.
The 4x4 array was chosen as the reference based on the most optimal system performance for smallest array size.
We has performed real environment testing on the 4x4 array with the following results. The measurements were performed using Gecko SDK 3.2 and RTL library API: SL_RTL_AOX_MODE_REAL_TIME_BASIC.
The following devices were used for all antenna array accuracy measurements in this section:
• Locator: BRD4185A Rev A01
• Tag: BRD4184A Rev A02
- Location: Office environment, open space
- Locator height from floor: 0.0 m
- Tag height from floor: 0.75 m
- Testing range: 3.8x3.9m2
There are total 4 locators and 3 tags in the 3.8x3.9 area, all of the locators are on ground with height 0m, and tags have a fixed 0.75m height.
Locator ID | X | Y | Z |
---|---|---|---|
#1 ble-pd-588E81A54222 | 3.80 | 3.90 | 0.00 |
#2 ble-pd-588E8166AF43 | 0.00 | 0.00 | 0.00 |
#3 ble-pd-84FD27EEE4FF | 3.80 | 0.00 | 0.00 |
#4 ble-pd-588E81A5421C | 0.00 | 3.90 | 0.00 |
Tag ID | X | Y | Z |
---|---|---|---|
ble-pd-60A423C96825 | 2.00 | 2.90 | 0.75 |
ble-pd-60A423C96B3C | 2.00 | 2.10 | 0.75 |
ble-pd-60A423C96746 | 2.00 | 1.30 | 0.75 |
Below is the estimated position of these three tags. We collected all of the position and angle data for each tag, the curve below reflects the X/Y/Z axis value for each tag in 5mins.
- Location: Office environment, open space
- Locator height from floor: 0.0 m
- Tag height from floor: 0.75 m
- Testing range: 3.8x3.9m2
Similar as test environment 1, we increase the tag number from 3 to 9 for the test.
Locator ID | X | Y | Z |
---|---|---|---|
#1 ble-pd-588E81A54222 | 3.80 | 3.90 | 0.00 |
#2 ble-pd-588E8166AF43 | 0.00 | 0.00 | 0.00 |
#3 ble-pd-84FD27EEE4FF | 3.80 | 0.00 | 0.00 |
#4 ble-pd-588E81A5421C | 0.00 | 3.90 | 0.00 |
Tag ID | X | Y | Z |
---|---|---|---|
ble-pd-60A423C96B13 | 2.00 | 3.20 | 0.75 |
ble-pd-60A423C96896 | 2.00 | 2.90 | 0.75 |
ble-pd-60A423C96AB5 | 2.00 | 2.60 | 0.75 |
ble-pd-60A423C96721 | 2.00 | 2.30 | 0.75 |
ble-pd-60A423C96B3C | 2.00 | 2.00 | 0.75 |
ble-pd-60A423C96825 | 2.00 | 1.70 | 0.75 |
ble-pd-60A423C968C6 | 2.00 | 1.40 | 0.75 |
ble-pd-60A423C96FC6 | 2.00 | 1.10 | 0.75 |
ble-pd-60A423C96746 | 2.00 | 0.80 | 0.75 |
Below is the estimated position shown in GUI, and we can monitor the value with the MQTT Explorer.
Also we collected all of the position and angle data for each tag, the curve below reflects the X/Y/Z axis value for each tag in 5mins.
- Location: Office environment, open space
- Locator height from floor: 0.0 m
- Tag height from floor: 0.75 m
- Testing range: 2x9m2
Generally, the e-fence for the sharing bicycle is a rectangle, and we did some test with this case.
Locator ID | X | Y | Z | Orientation |
---|---|---|---|---|
#1 ble-pd-588E81A54222 | 2.00 | 9.00 | 0.00 | (0, 0, 0) |
#2 ble-pd-588E8166AF43 | 0.00 | 3.00 | 0.00 | (0, 0, 0) |
#3 ble-pd-84FD27EEE4FF | 2.00 | 0.00 | 0.00 | (0, 0, 0) |
#4 ble-pd-588E81A5421C | 0.00 | 6.00 | 0.00 | (0, 0, 0) |
Tag ID | X | Y | Z |
---|---|---|---|
ble-pd-60A423C96825 | 1.40 | 5.30 | 0.75 |
ble-pd-60A423C96746 | 1.40 | 4.50 | 0.75 |
ble-pd-60A423C96B3C | 1.40 | 3.70 | 0.75 |
Below is the estimated position of these three tags. We collected all of the position and angle data for each tag, the curve below reflects the X/Y/Z axis value for each tag in 5mins.
ble-pd-60A423C96825
ble-pd-60A423C96746
ble-pd-60A423C96B3C
- Location: Office environment, open space
- Locator height from floor: 0.0 m
- Tag height from floor: 0.75 m
- Testing range: 2x9m2
Locator ID | X | Y | Z | Orientation |
---|---|---|---|---|
#1 ble-pd-588E81A54222 | 2.00 | 9.00 | 0.00 | (0, 0, 0) |
#2 ble-pd-588E8166AF43 | 0.00 | 3.00 | 0.00 | (0, 0, 90) |
#3 ble-pd-84FD27EEE4FF | 2.00 | 0.00 | 0.00 | (0, 0, 90) |
#4 ble-pd-588E81A5421C | 0.00 | 6.00 | 0.00 | (0, 0, 0) |
Tag ID | X | Y | Z |
---|---|---|---|
ble-pd-60A423C96B13 | 1.40 | 5.70 | 0.75 |
ble-pd-60A423C96896 | 1.40 | 5.40 | 0.75 |
ble-pd-60A423C96AB5 | 1.40 | 5.10 | 0.75 |
ble-pd-60A423C96721 | 1.40 | 4.80 | 0.75 |
ble-pd-60A423C96B3C | 1.40 | 4.50 | 0.75 |
ble-pd-60A423C96825 | 1.40 | 4.20 | 0.75 |
ble-pd-60A423C968C6 | 1.40 | 3.90 | 0.75 |
ble-pd-60A423C96FC6 | 1.40 | 3.60 | 0.75 |
ble-pd-60A423C96746 | 1.40 | 3.30 | 0.75 |
Below is the estimated position of these 9 tags. We collected all of the position and angle data for each tag, the curve below reflects the X/Y/Z axis value for each tag in 5mins.
- Location: Office environment, open space
- Locator height from floor: 0.0 m
- Tag height from floor: 0.75 m
- Testing range: 2x10m2
Locator ID | X | Y | Z | Orientation |
---|---|---|---|---|
#1 ble-pd-588E81A54222 | 2.00 | 10.00 | 0.00 | (0, 0, 90) |
#2 ble-pd-588E8166AF43 | 0.00 | 2.50 | 0.00 | (0, 0, 180) |
#3 ble-pd-84FD27EEE4FF | 2.00 | 0.00 | 0.00 | (0, 0, 270) |
#4 ble-pd-588E81A5421C | 0.00 | 7.50 | 0.00 | (0, 0, 180) |
#5 ble-pd-588E8166AFD7 | 2.00 | 5.00 | 0.00 | (0, 0, 0) |
Tag ID | X | Y | Z |
---|---|---|---|
ble-pd-60A423C96896 | 1.40 | 8.60 | 0.75 |
ble-pd-60A423C9689C | 1.40 | 7.80 | 0.75 |
ble-pd-60A423C96B13 | 1.40 | 7.00 | 0.75 |
ble-pd-60A423C96AB5 | 1.40 | 6.20 | 0.75 |
ble-pd-60A423C96721 | 1.40 | 5.40 | 0.75 |
ble-pd-60A423C96B3C | 1.40 | 4.60 | 0.75 |
ble-pd-60A423C96825 | 1.40 | 3.80 | 0.75 |
ble-pd-60A423C968C6 | 1.40 | 3.00 | 0.75 |
ble-pd-60A423C96746 | 1.40 | 2.20 | 0.75 |
ble-pd-60A423C96FC6 | 1.40 | 1.40 | 0.75 |
Below is the estimated position of these ten tags. We collected all of the position and angle data for each tag, the curve for each tag below reflects the X/Y/Z axis value for each tag in 5mins.
- Location: Outdoor environment, sharing bicycle parking area.
- Locator height from floor: 0.0 m
- Tag height from floor: 0.6 m
- Testing environment: 2x10m2 area with only 1 bicycle has a tag mounted.
- Location estimation mode, Two-dimensional high accuracy mode
Below is the picture of the sharing bicycle parking area, there is only 1 bicycle in the 2x10m area.
And we attached the tag on the locker of the sharing bicycle during the test as below.
Locator ID | X | Y | Z | Orientation |
---|---|---|---|---|
#1 ble-pd-588E81A54222 | 2.00 | 10.00 | 0.00 | (0, 0, 90) |
#2 ble-pd-588E8166AF43 | 0.00 | 2.50 | 0.00 | (0, 0, 180) |
#3 ble-pd-84FD27EEE4FF | 2.00 | 0.00 | 0.00 | (0, 0, 270) |
#4 ble-pd-588E81A5421C | 0.00 | 7.50 | 0.00 | (0, 0, 180) |
#5 ble-pd-588E8166AFD7 | 2.00 | 5.00 | 0.00 | (0, 0, 0) |
Tag ID | X | Y | Z |
---|---|---|---|
ble-pd-60A423C96721 | 1.00 | 5.40 | 0.6 |
Below is the estimated position of the only 1 tag. We collected all of the position and angle data for each tag, the curve for the tag below reflects the X/Y axis value for it in 5mins.
- Location: Outdoor environment, sharing bicycle parking area.
- Locator height from floor: 0.0 m
- Tag height from floor: 0.6 m
- Testing environment: 2x10m2 area with only 5 bicycles have tag mounted.
- Location estimation mode, Two-dimensional high accuracy mode
Below is the picture of the sharing bicycle parking area, there are total 5 bicycles in the 2x10m area.
And we attached the tag on the locker of the sharing bicycle as what we did before.
Locator ID | X | Y | Z | Orientation |
---|---|---|---|---|
#1 ble-pd-588E81A54222 | 2.00 | 10.00 | 0.00 | (0, 0, 90) |
#2 ble-pd-588E8166AF43 | 0.00 | 2.50 | 0.00 | (0, 0, 180) |
#3 ble-pd-84FD27EEE4FF | 2.00 | 0.00 | 0.00 | (0, 0, 270) |
#4 ble-pd-588E81A5421C | 0.00 | 7.50 | 0.00 | (0, 0, 180) |
#5 ble-pd-588E8166AFD7 | 2.00 | 5.00 | 0.00 | (0, 0, 0) |
Tag ID | X | Y | Z |
---|---|---|---|
ble-pd-60A423C96B13 | 1.00 | 7.80 | 0.6 |
ble-pd-60A423C96721 | 1.00 | 6.00 | 0.6 |
ble-pd-60A423C96746 | 1.00 | 4.20 | 0.6 |
ble-pd-60A423C96825 | 1.00 | 2.40 | 0.6 |
ble-pd-60A423C968C6 | 1.00 | 0.60 | 0.6 |
Below is the estimated position of the 5 tag. We collected all of the position and angle data for each tag, the curve for the tag below reflects the X/Y axis value for it in 5mins.
- Location: Outdoor environment, sharing bicycle parking area.
- Locator height from floor: 0.0 m
- Tag height from floor: 0.6 m
- Testing environment: 2x10m2 area with only 10 bicycles have tag mounted.
- Location estimation mode, Two-dimensional high accuracy mode
Below is the picture of the sharing bicycle parking area, there are total 10 sharing bicycle in the 2x10m area.
And we attached all of the tags on the locker of the sharing bicycle during the test as what we did before.
Locator ID | X | Y | Z | Orientation |
---|---|---|---|---|
#1 ble-pd-588E81A54222 | 2.00 | 10.00 | 0.00 | (0, 0, 90) |
#2 ble-pd-588E8166AF43 | 0.00 | 2.50 | 0.00 | (0, 0, 180) |
#3 ble-pd-84FD27EEE4FF | 2.00 | 0.00 | 0.00 | (0, 0, 270) |
#4 ble-pd-588E81A5421C | 0.00 | 7.50 | 0.00 | (0, 0, 180) |
#5 ble-pd-588E8166AFD7 | 2.00 | 5.00 | 0.00 | (0, 0, 0) |
Tag ID | X | Y | Z |
---|---|---|---|
ble-pd-60A423C96896 | 1.00 | 8.70 | 0.60 |
ble-pd-60A423C96B13 | 1.00 | 7.80 | 0.60 |
ble-pd-60A423C96AB5 | 1.00 | 6.90 | 0.60 |
ble-pd-60A423C96721 | 1.00 | 6.00 | 0.60 |
ble-pd-60A423C96B3C | 1.00 | 5.10 | 0.60 |
ble-pd-60A423C96746 | 1.00 | 4.20 | 0.60 |
ble-pd-60A423C9689C | 1.00 | 3.30 | 0.60 |
ble-pd-60A423C96825 | 1.00 | 2.40 | 0.60 |
ble-pd-60A423C96FC6 | 1.00 | 1.50 | 0.60 |
ble-pd-60A423C968C6 | 1.00 | 0.60 | 0.60 |
Below is the estimated position of these ten tags. We collected all of the position and angle data for each tag, the curve for each tag below reflects the X/Y/Z axis value for each tag in 5mins.
- Location: Outdoor environment, sharing bicycle parking area.
- Locator height from floor: 0.0 m
- Tag height from floor: 0.6 m
- Testing environment: 2x10m2 area with 10 out of 25 bicycles have tag mounted.
- Location estimation mode, Two-dimensional high accuracy mode
Below is the picture of the sharing bicycle parking area, there are around 25 sharing bicycle in the 2x10m area.
And we attached all of the tags on the locker of the sharing bicycle during the test as below.
Locator ID | X | Y | Z | Orientation |
---|---|---|---|---|
#1 ble-pd-588E81A54222 | 2.00 | 10.00 | 0.00 | (0, 0, 90) |
#2 ble-pd-588E8166AF43 | 0.00 | 2.50 | 0.00 | (0, 0, 180) |
#3 ble-pd-84FD27EEE4FF | 2.00 | 0.00 | 0.00 | (0, 0, 270) |
#4 ble-pd-588E81A5421C | 0.00 | 7.50 | 0.00 | (0, 0, 180) |
#5 ble-pd-588E8166AFD7 | 2.00 | 5.00 | 0.00 | (0, 0, 0) |
Tag ID | X | Y | Z |
---|---|---|---|
ble-pd-60A423C968C6 | 1.00 | 8.60 | 0.60 |
ble-pd-60A423C96896 | 1.00 | 7.80 | 0.60 |
ble-pd-60A423C96B13 | 1.00 | 7.00 | 0.60 |
ble-pd-60A423C96AB5 | 1.00 | 6.20 | 0.60 |
ble-pd-60A423C96721 | 1.00 | 5.40 | 0.60 |
ble-pd-60A423C96B3C | 1.00 | 4.60 | 0.60 |
ble-pd-60A423C96746 | 1.00 | 3.80 | 0.60 |
ble-pd-60A423C9689C | 1.00 | 3.00 | 0.60 |
ble-pd-60A423C96825 | 1.00 | 2.20 | 0.60 |
ble-pd-60A423C96FC6 | 1.00 | 1.40 | 0.60 |
Below is the estimated position of these ten tags. We collected all of the position and angle data for each tag, the curve for each tag below reflects the X/Y/Z axis value for each tag in 5mins.
- Location: Outdoor environment, sharing bicycle parking area.
- Locator height from floor: 1.5 m
- Tag height from floor: 0.6 m
- Testing environment: 2x10m2 area with 10 out of 25 bicycles have tag mounted.
- Location estimation mode, Two-dimensional high accuracy mode
Below is the picture of the sharing bicycle parking area, there are around 25 sharing bicycle in the 2x10m area. And all of the 5 locators are installed on the tripods which are 1.5m height.
And we attached all of the tags on the locker of the sharing bicycle during the test as what we did before.
Locator ID | X | Y | Z | Orientation |
---|---|---|---|---|
#1 ble-pd-588E81A54222 | 2.00 | 10.00 | 1.50 | (180, 0, 90) |
#2 ble-pd-588E8166AF43 | 0.00 | 2.50 | 1.50 | (180, 0, 180) |
#3 ble-pd-84FD27EEE4FF | 2.00 | 0.00 | 1.50 | (180, 0, -90) |
#4 ble-pd-588E81A5421C | 0.00 | 7.50 | 1.50 | (180, 0, 180) |
#5 ble-pd-588E8166AFD7 | 2.00 | 5.00 | 1.50 | (180, 0, 0) |
Tag ID | X | Y | Z |
---|---|---|---|
ble-pd-60A423C96896 | 1.00 | 8.60 | 0.60 |
ble-pd-60A423C96B13 | 1.00 | 7.80 | 0.60 |
ble-pd-60A423C96AB5 | 1.00 | 7.00 | 0.60 |
ble-pd-60A423C96721 | 1.00 | 6.20 | 0.60 |
ble-pd-60A423C96B3C | 1.00 | 5.40 | 0.60 |
ble-pd-60A423C96746 | 1.00 | 4.60 | 0.60 |
ble-pd-60A423C9689C | 1.00 | 3.80 | 0.60 |
ble-pd-60A423C96825 | 1.00 | 3.00 | 0.60 |
ble-pd-60A423C96FC6 | 1.00 | 2.20 | 0.60 |
ble-pd-60A423C968C6 | 1.00 | 1.40 | 0.60 |
Below is the estimated position of these ten tags. We collected all of the position and angle data for each tag, the curve for each tag below reflects the X/Y/Z axis value for each tag in 5mins.
- Location: Outdoor environment, sharing bicycle parking area.
- Locator height from floor: 2 locators on ground and 3 on tripods, the height of the tripod is 1.5 m
- Tag height from floor: 0.6 m
- Testing environment: 2x10m2 area with 10 out of 25 bicycles have tag mounted.
- Location estimation mode, Two-dimensional high accuracy mode
There are around 25 sharing bicycle in the 2x10m area. 3 locators are installed on the tripods which are 1.5m height, and the other 2 locators are on the ground. And we attached all of the tags on the locker of the sharing bicycle during the test as what we did before.
Locator ID | X | Y | Z | Orientation |
---|---|---|---|---|
#1 ble-pd-588E81A54222 | 2.00 | 10.00 | 1.50 | (180, 0, 90) |
#2 ble-pd-588E8166AF43 | 0.00 | 2.50 | 0.00 | (0, 0, 180) |
#3 ble-pd-84FD27EEE4FF | 2.00 | 0.00 | 1.50 | (180, 0, -90) |
#4 ble-pd-588E81A5421C | 0.00 | 7.50 | 0.00 | (0, 0, 180) |
#5 ble-pd-588E8166AFD7 | 2.00 | 5.00 | 1.50 | (180, 0, 0) |
Tag ID | X | Y | Z |
---|---|---|---|
ble-pd-60A423C968C6 | 1.00 | 8.60 | 0.60 |
ble-pd-60A423C96896 | 1.00 | 7.80 | 0.60 |
ble-pd-60A423C96B13 | 1.00 | 7.00 | 0.60 |
ble-pd-60A423C96AB5 | 1.00 | 6.20 | 0.60 |
ble-pd-60A423C96721 | 1.00 | 5.40 | 0.60 |
ble-pd-60A423C96B3C | 1.00 | 4.60 | 0.60 |
ble-pd-60A423C96746 | 1.00 | 3.80 | 0.60 |
ble-pd-60A423C9689C | 1.00 | 3.00 | 0.60 |
ble-pd-60A423C96825 | 1.00 | 2.20 | 0.60 |
ble-pd-60A423C96FC6 | 1.00 | 1.40 | 0.60 |
Below is the estimated position of these ten tags. We collected all of the position and angle data for each tag, the curve for each tag below reflects the X/Y/Z axis value for each tag in 5mins.
- Location: Outdoor environment, sharing bicycle parking area.
- Locator height from floor: 0.0 m
- Tag height from floor: 0.6 m
- Testing environment: 2x10m2 area with 10 out of 25 bicycles have tag mounted.
- Location estimation mode, Two-dimensional high accuracy mode, angle constraint support
Similar as the test environment 4.9, there are around 25 sharing bicycle in the 2x10m area. And we attached all of the tags on the locker of the sharing bicycle during the test as below.
Locator ID | X | Y | Z | Orientation |
---|---|---|---|---|
#1 ble-pd-588E81A54222 | 2.00 | 10.00 | 0.00 | (0, 0, 90) |
#2 ble-pd-588E8166AF43 | 0.00 | 2.50 | 0.00 | (0, 0, 180) |
#3 ble-pd-84FD27EEE4FF | 2.00 | 0.00 | 0.00 | (0, 0, 270) |
#4 ble-pd-588E81A5421C | 0.00 | 7.50 | 0.00 | (0, 0, 180) |
#5 ble-pd-588E8166AFD7 | 2.00 | 5.00 | 0.00 | (0, 0, 0) |
Tag ID | X | Y | Z |
---|---|---|---|
ble-pd-60A423C968C6 | 1.00 | 8.60 | 0.60 |
ble-pd-60A423C96896 | 1.00 | 7.80 | 0.60 |
ble-pd-60A423C96B13 | 1.00 | 7.00 | 0.60 |
ble-pd-60A423C96AB5 | 1.00 | 6.20 | 0.60 |
ble-pd-60A423C96721 | 1.00 | 5.40 | 0.60 |
ble-pd-60A423C96B3C | 1.00 | 4.60 | 0.60 |
ble-pd-60A423C96746 | 1.00 | 3.80 | 0.60 |
ble-pd-60A423C9689C | 1.00 | 3.00 | 0.60 |
ble-pd-60A423C96825 | 1.00 | 2.20 | 0.60 |
ble-pd-60A423C96FC6 | 1.00 | 1.40 | 0.60 |
Below is the estimated position of these ten tags. We collected all of the position and angle data for each tag, the curve for each tag below reflects the X/Y/Z axis value for each tag in 5mins.
The section below guide you how to implement the AoD projects with SiliconLabs Bluetooth SDK as well as the example projects come with the SDK.
Create a soc-empty project, and then install the components below.
- RAIL Utility, AoX (Utility to aid with Angle of Arrival/Departure (AoX) Configuration)
- AoA Transmitter (Bluetooth AoA CTE transmission feature)
And then set advertising data and start extended advertising, the CTE will be appended on the extended advertising package. Below is the code snippet.
uint8_t data[3] = {0x02, 0x01, 0x06};
sl_bt_advertiser_set_data(advertising_set_handle, 0, sizeof(data), data);
app_assert_status(sc);
/* Turn off legacy PDU flag. */
sl_bt_advertiser_clear_configuration(advertising_set_handle,1);
app_assert_status(sc);
// Start general advertising and enable connections.
sc = sl_bt_advertiser_start(
advertising_set_handle,
advertiser_user_data,
advertiser_non_connectable);
app_assert_status(sc);
sl_power_manager_add_em_requirement(SL_POWER_MANAGER_EM1);
/* Add CTE to extended advertisements in AoD mode */
sl_bt_cte_transmitter_enable_silabs_cte(advertising_set_handle, CTE_LENGTH, CTE_TYPE, CTE_COUNT, sizeof(antenna_array), antenna_array);
The CTE length and slot size is defined as below.
#define CTE_LENGTH 20 // 160ms
#define CTE_TYPE 1 // AoD with 1us slots
#define CTE_COUNT 1 // 1 per interval
Create a ncp-empty project, and install the components below.
- RAIL Utility, AoX (Utility to aid with Angle of Arrival/Departure (AoX) Configuration)
- AoA Receiver (Bluetooth AoA CTE receiving feature)
For the RAIL Utility, AoX component, please configure the Number of AoX Antenna Pins as 4, and configure the SL_RAIL_UTIL_AOX_ANTENNA_PIN0-SL_RAIL_UTIL_AOX_ANTENNA_PIN3 as PC04-PC07 respectively.
With the v3.2.0 Bluetooth SDK release, there is AoA Analyzer tool which is a Java based application, built into Simplicity Studio 5, that showcases the angle estimation skills of the RTL library in a graphical user interface.
For how to get started with AoA Analyzer Tool, please see the section "2.1.3 Start the AoA Analyzer Tool", and similar as the previous release, the is a c based host sample app "aoa_locator" which can run on the host demonstrates the CTE Receiver feature and the use of the angle estimation feature of the RTL library. It uses the same application logic as the AoA Analyzer used in the demo setup.
For how to build the host sample "AoA Locator", please see the section "3.2.1 Building a Single AoA Locator Host Sample Application" of AN12960 for step by step instructions.
Please note that the single AoA locator can be detached from the RTL library and thus does not have to calculate angle values. Instead, it can publish IQ reports directly to the MQTT broker. This can be done using the ANGLE make variable.
make APP_MODE=silabs ANGLE=0
If want to calculate and expose the calculated angle information in the single AoA locator, it can be done with the ANGLE make variable as below.
make APP_MODE=silabs ANGLE=1
在v3.2.0中,AoA_Locator可以支持两种模式,直接publish IQ sample数据,或者publish计算得出的angle数据。
Copy the aod_locator project to the folder below, and build with the command "make APP_MODE=silabs ANGLE=1".
Create a soc-empty project, and install the components below.
- RAIL Utility, AoX (Utility to aid with Angle of Arrival/Departure (AoX) Configuration)
- AoA Receiver (Bluetooth AoA CTE receiving feature)
For the RAIL Utility, AoX component, please configure the Number of AoX Antenna Pins as 4, and configure the SL_RAIL_UTIL_AOX_ANTENNA_PIN0-SL_RAIL_UTIL_AOX_ANTENNA_PIN3 as PC04-PC07 respectively.
For the soc mode AoD tag, it will send the IQ sample data to the gateway device via bluetooth connection, and the gateway is responsible for angle calculation.
TBD