ROSELINE Quality of Time (QoT) Stack
The QoT stack is divided into a number of loosely-coupled components. At the core of the stack is a QoT kernel module, which interacts with hardware timers to accurately time stamp events (such as incoming and outgoing network packets) or to generate external interrupts, viz. triggering a camera. The timers are driven by on-board oscillators, or an external oscillator source (eg. radio, GPS or disciplined VCXO). Network interface drivers use the SO_TIMESTAMPING socket option to pass time stamps (hardware or software) to user-space, along with the packets.
A PTP client uses RX and TX time stamps to selectively discipline clock sources, which are exposed to user-space. A QoT Application Programmer Interface allows user-space applications to associate networked devices along a single timeline, and specify timing requirements in a straightforward manner. The declaration of a timeline results in a PTP multicast group, and a new disciplined clock at every device on the timeline.
The QoT system service maintains the clocks by (a) building a routing table, (b) selecting the best master clock for the group, (c) instantiating a local PTP clock source at each client representing their common timeline, (d) configuring a PTP synchronization frequency to obtain the desired accuracy, and (e) adapting to any network failures.
The stack also includes a Google Go QoT scheduler that provides real-time, synchronous routine execution over a network, and a Sensing and Control QoT API for streaming time-stamped sensor measurements and control. There are two hardware projects running in parallel -- one for providing low power clocks with a fast start time, and the other providing a FPGA-based solution to disciplining a hardware oscillator.
- BeagleBone Black - click here
- 8GB MicroSD card - click here
- FTDI 3.3v cable - click here
- 5v 2A power supply - click here
- Mini-USB cable - Any PC store
- Ethernet cable - Any PC store
Make sure that you are able to write to the MicroSD card from your PC. This might involve a MicroSD to SD adapter, or a USB-based adapter. Also make sure that your laptop has an Ethernet port, with auto-crossover support (most modern adapters will). If not, you will also need a network switch.
Installation and usage
The project currently targets the BeagleBone Black as a platform, along with an Atmel AT86RF233 radio. In the first instance, many parts of the stack depend on this platform. All tutorials assume a "host" PC running Ubuntu Linux 14.04+. While it is quite possible to work from other desktop systems, we will only provide support for Ubuntu. If you use a Mac or Windows, then we recommend installing a virtual instance of Ubuntu either using VMWare or VirtualBox.
- Tutorial 1 - Booting the QoT Stack (easy)
- Tutorial 2 - Compiling applications on the platform (easy)
- Tutorial 3 - Cross-compiling applications for the platform (medium)
- Tutorial 4 - Working with the Robotics Operating System (advanced)
- Tutorial 5 - Cross-compiling a kernel, modules and device tree (advanced)
- Tutorial 6 - Network booting slave platforms (advanced)
- Tutorial 7 - Writing drivers for new peripheral devices (advanced)
- Tutorial 8 - Working with the QoT stack (advanced)
- Tutorial 9 - Setting time on BBB with ntpdate (easy)
- Tutorial 10 - Developer guide (medium)
- Tutorial 11 - Running synchronization protocol (easy)
For those at UCLA, here is some information about using the test bed.
Support / Questions
Bugs: if you are confident that you've found a bug and have a solid fix, feel free to push it straight to the master branch. If you are less confident then submit a fix to a new branch, and log an issue referencing your fixed branch. If you have no clue how to go about fixing the problem, submit an issue through the Issue tracker.
Questions can be directed to Andrew Symington (firstname.lastname@example.org).