Atka SPOT
Atka SPOT
Goal
Observing Emperor Penguins in Antarctica is a challenging and time-consuming task as the interesting huddling behaviour can only be observed during the harsh weather conditions of the Antarctic winter.
Wherefore, we build a remote controlled penguin observatory (Single Penguin Obervation and Tracking: SPOT) to record footage of penguins without the need to be there on the ice in Atka Bay. Using a satellite link and a Wi-Fi bridge the observatory can be controlled out of our lab in Germany.
Challenges
I arrived to the project when the base infrastructure of connecting the hardware and having small services running to query the images from the cameras and a rudimentary web interface to control the observatory. But the interfaces was very simple and unreliable as loading an image over a slow connection can lead to errors when the underling live images is already replaced by a new version before the last one loaded.
I first needed to understand how the complex interaction between two servers works, one in the observatory running on battery with low power and the other running in the Research station 8km away connected with a Wi-Fi bridge. Then I needed to design a new system that integrates as smoothly as possible into the old infrastructure without risk of breaking anything, as fixing a bug later in the season when the observatory is active but not accessible due to the weather conditions.
It felt a bit like launching software to run in spaces as you need to make sure everything is as fail proof as possible because later fixes are very hard.
I opted for a Flask backend as the team was familiar with Python and kept the frontend as simple as possible using mainly vanilla javascript to prevent additional complexity for the team. This also ensured that there was no build process needed to deploy the interface.
Implementation
My task was mainly to implement the web-based interface to control the observatory. The challenging part here was that it should work robust even with an unstable and slow internet connection. Furthermore, the code should be as simple as possible to ensure stability and future maintainability, as debugging during the season is extremely difficult due to the high latencies.
Interface
The backend is made using a python flask server that connects to the cameras of the observatory. The observatory consists of 7 surveillance cameras that together give a panoramic overview over the bay and one high resolution camera on a pan-and-tilt unit with video capabilities.
The frontend written mainly in vanilla JS to keep the complexity down, shows the current pictures form the surveillance cameras and allows to select a position on one of their images to move the high-resolution camera with the pan-and-tilt unit to the target location.