Important milestones are marked via git tags.
Short Description: This project is an exercise in realtime embedded engineering. An embedded computer connected to a camera periodically takes pictures of a ticking clock and saves them to persistent memory (Flash). The program outputs one image each second, each showing a still image of the seconds hand in one stationary position. (or one image each 1/10th of a second if the clock displays 1/10ths of a second). In order to achieve that, the process of taking/picking pictures needs to be carefully synchronized with the external clock.
Keywords:
- Synchronome
- Machine Vision
- Realtime
- Embedded Systems
- Concurrent Programming
- Camera
- V4L2
- Raspberry Pi
This project is the fourth part of the Realtime Embedded Systems Specialization by the University of Colorado Boulder via Coursera. According to the course description successful completion of this project proofs advanced level applied knowledge about realtime embedded engineering.
For details about grading and requirements for passing this course, see ./doc/0_requirements.md
.
The System has been demonstrated to run successful in case of the external clock being a 1Hz analog clock as well as the eternal clock being a 10Hz stopwatch with a digital display. See ./doc/example_output/.
Extended documentation:
Final documentation in PDF format
Generate/update .PDF documentation:
$ ./scripts/create_doc.fish
$ ls doc/pdf/
$ ./scripts/build.fish
$ ./scripts/run_synchronome.fish [--help]
$ ./scripts/run_statistics.fish
Prerequisit: install the check test framework
$ ./scripts/test.fish
$ ./scripts/upload.fish
The script will cd into to the uploaded dir on the REMOTE. You may now build and run the program there.
Remark: create ./local/config/remote.conf
on first run and edit accordingly:
$ mkdir --parents local/config
$ cp .example-remote.conf ./local/config/remote.conf
Example output and presentation videos.
In order for the documentation and diagrams to be generated, ./local/example_output
must contain a file named synchronome.log
, which can be obtained from the example output data (eg from the 10Hz test run).
Auto run tests before every commit:
$ git config core.hooksPath hooks
Recommended integrated linter/autocompletion config for vim/neovim: