Overview
RadTrac is a system for detecting and tracking radioactive dirty bombs that could potentially be employed by terrorists. It was developed using at Argonne National Lab using Department of Energy funding. The system is built on sophisticated proprietary sensors, a networked camera, commercially available networking equipment, and a central computer for processing. The system is capable of tracking a shielded radioactive source, displaying it on a 2D map, and showing the source on a camera video feed.
Description
My primary role was lead programmer. I was responsible for over 90% of the code base for RadTrac. In addition, I had several other roles on the project including purchasing hardware and performing lab testing. The program provided an end-to-end solution for tracking radioactive sources. Some of the major features of the code are highlighted below.
I was responsible for creating the primary data collection system. This covered a utility for setting up, configuring, and locating the various sensors. The sensors were interfaced to the primary computer over an Ethernet network. I wrote all of the code for collecting the data. This included support for two different sensor types. One type was a documented commercial system that used USB (encapsulated and forwarded over TCP/IP). The other system was a proprietary DOE serial detector that was undocumented. I reverse engineered that sensor and developed a number of special modifications to the program so that both sensors could be used in an interchangeable and transparent fashion while leveraging their separate advantages.
I also developed the camera tracking system. The camera video feed was displayed in an embeddable ActiveX object that I developed. The object retrieved and displayed a motion JPEG stream. I developed two methods of camera tracking. The first method took as an input the location of the radioactive source from the signal processing algorithms and rotated the camera to point at that location. The second method did not move the camera but instead drew a crosshairs on the screen to point at the specific location of the radioactive source. I also developed and implemented a brute force search algorithm to automatically detect the camera position. The algorithm took as inputs the positions of three sensors (already known to the program) and the associated pan and tilt info when the camera was pointed at those sensors. The output was the 3D coordinate of the camera.
I developed the code for tracking the radioactive sources. This code linked the input data to the tracking algorithms. The tracking algorithms were required to execute within a one-second interval. In order to accomplish this they were multi-threaded. The C++ code allowed for the tracking algorithms to be written in Matlab. The C++ code interfaced inputs and outputs to the Matlab code and ran the Matlab scripts in parallel. The support for Matlab code allowed for rapid prototyping by engineers not familiar with C++ and the use of offline testing.
Technology
- Code base in C++ with Microsoft MFC for graphical interface
- High performance multi-threading to enable real time detection and tracking
- Cutting edge signal processing algorithms for source tracking and camera setup
- Matlab with C++ interface for signal processing
- Interface code to support two detector types (USB and RS 232 over Ethernet)
- Sockets for camera control and video streaming
- National Instruments visualization library