Delivery

Hardware

Fig. 1 - Original 3D "Single Unit" Design

The design of the assembly went through a substantial process of trial and error. Initially, we were going to have all components not connected to the SDR as a part of a single unit that had the upper and lower servos combined in a single unit. With the goal of avoiding twisting wires. However, due to concerns with mass as well as stability, we changed the design to something more lightweight.

Mounting the servos directly to one another decreases the rotational inertia, preventing vibrations that may cause the direction of the antenna to wobble around its target position.

IMG_1637.MOV

Fig.  2 - Demonstration of Full Hardware Unit

3D design of the antenna bracket also required testing. Use of a dielectric material such as PLA was optimal for avoiding alterations to the directional antenna pattern. As well, the bracket needed to make as much contact with the antenna as possible without obstructing its main element. Preliminary testing revealed some alterations in its directionality, however, they turned out to be relatively inconsequential. Keeping the center of mass close to the axis of rotation was also key, but leaving enough room for the coaxial cable to connect without damaging sheer stress was also important. After a few rounds of printing, we obtained the bracket as seen in figure 2.

Additionally, calibration of the PWM (Pulse Width Modulation) signals sent to the servos was necessary in order to define the range of motion, as well as the target positions in degrees that is streamed to our data processing software. This was a process of using a protractor to measure and record the angles corresponding to each pulse width, and use a linear regression to create a function to map angle positions to PWM signals to operate the servos.

We then had to calibrate the delay time between servo set positions. Too long and the motion of the antenna would be slow and jumpy and cause the antenna to wobble around its set point. Too short and the motion of the antenna would be smooth, but it wouldn't ever reach its target position, and the position data would become unreliable. Using the "Slo-mo" feature of our phone's camera, we could record the motion of the servo arm to find an optimal value for the wait time within milliseconds.

Data Processing

Data processing for our hardware requires the synchronization of the data streams, implementation of interpolation for the angular positions of power samples received between servo target positions, and development of a framework to continuously update the polar power plot associated with each module. Using Python's multiprocessing libraries, we have been able to concurrently stream data from the Arduino serial monitor and a UDP connection from GNU Radio, however, synchronization remains an issue. To address this, we considered the implementation of a PPS signal from a GPS module to timestamp the metadata from each device, however, due to difficulties with running distinct concurrent processes with an Arduino, we have decided to do a manual calibration in Python. Data is shipped out in packets to a different program which updates an array for the polar power data, and in that same program, a different process feeds this array into an algorithm to extract the 3D positions. These are then sent to the GUI. For our group, due to our lack of experience, this has been a distinctly challenging area.

Visualization

The change from indoor visualization to enhanced outdoor visualization is in part due to the failure of the indoor visualization testing. It was important to our team to evaluate our customer's needs as well as our bandwidth for the most successful outcome for the Flock Force project. This has ultimately been a very fruitful decision and has allowed us to make a superior product.

The updated tests for our enhanced 3D visualization have become:

The new Cesium Ion based system allows many of these tasks to be reached faster and support many platforms, allowing our users more freedom. The below images demonstrate the success of many of these tests. 

Fig. 1. Screenshot of the Cesium Ion-based 3D GUI demonstrating a variety of signal points from a saved log file. One of the signals is selected with its information displayed to the side.

Fig. 2. Screenshot of a JSON log file enabling the user to parse data manually and upload it to other systems.

GUI

The process for implementing the GUI has followed a relatively straight path. Earlier into the development process, the team had to consult with potential customers to determine aspects that customers would like to see in the finalized GUI. Of course, it was crucial to include the original aspects that we had planned to implement, such as the 3D movability of the GUI.

To successfully deliver the GUI, it was necessary to show a proof of concept by using a 2D mapping process. The final tests necessary to deliver this GUI are listed below:

The most difficult part of this GUI implementation was the conversion from the 2D map to the 3D map. It was during this conversion that we had to ensure that the Frequency and Power buttons worked correctly and could work correctly in a 3D space.