How my summer with QLM and Spin Up Science changed my perspective of internships
Manan Vaswani describes the opportunity he received to apply his computing knowledge in the real world.
The word ‘internship’ used to conjure visions of long monotonous days, working for large companies on projects to which my only contribution would be slogging out the most mundane of tasks. This perception, however, was flipped upside-down after Spin Up Science arranged for me to carry out an internship with the science startup, QLM Technology.
QLM Technology is currently in the process of developing a solution to the global problem of natural gas leaks from pipelines and well-heads. The solution comes in the form of a world-first, specialised natural-gas detector mounted onto an unmanned aerial drone - it’s as cool as it sounds.
One of the vital features of the drone is the ability to keep track of its current position whilst navigating its environment. A robust and efficient way to achieve this is implementing a Simultaneous Localization and Mapping (SLAM) algorithm based on the fusion of vision data and Inertial Measurement Unit (IMU) data. The aim of my internship was to implement this algorithm on their drone, to support the engineering team at QLM.
The first few days were spent understanding the goals of the project and integrating into the workflow of the team. The fantastic thing about working within a startup was the agency I was afforded in tackling problems. Having the freedom to decide how I would approach the task meant that I had to learn to gauge the project as accurately as possible from the start to prevent potential setbacks in the future. Of real benefit here was the mentorship and technical guidance from the QLM and Spin Up team. They guided me through the delivery of the work, assisted in the troubleshooting process, and ensured the continual development of my technical and professional skills.
After a few days of thought, I decided to implement the development in C++; I had a decent amount of experience using this language for projects at University, and I found that the required documentation was widely available. The specific library I would be using was OpenCV, which is a library built for computer vision. Over the subsequent 48 hours, I began to grasp which open-source resources were available and proceeded to test some module myself.
Phase one was to write a program to carry out the detection and tracking of feature points in a live video using a webcam. This method identifies fixed points in the visual field that can be used later to interpolate the movements of the camera relative to its environment. However, I quickly found that using a webcam to debug the code proved to be highly impractical and time-consuming. Instead, I switched to pre-recorded videos from the open-source KITTI dataset which has videos taken from an autonomous vehicle driving around a mid-sized town.
The OpenCV library already has built-in implementations for various feature detection and tracking algorithms which made the first step fairly straightforward. Following that was the more crucial part of implementing the algorithm: the estimation of position and orientation of the camera taking the video. This step used the feature points extracted in the previous stage in order to calculate the trajectory of the camera between two consecutive frames. In addition to calculating and displaying the trajectory, I also added in a visual to display the Euler angles which describe the orientation of the camera. This was useful for debugging the code when there were unexpected changes in the trajectory.
After obtaining accurate results for the videos from a few open-source datasets, I worked on the real-time webcam version of the code. This involved analysing the code and the results it produced, and subsequently trying different techniques to fix the errors. An additional, highly important step was calibrating the camera. This was necessary to remove distortions around the edge of the image, which are common in regular cameras. After several days, I finally had a working model that showed a trajectory in real-time, as well as the orientation represented by the Euler angles.
As my summer internship position came to a close, I worked on the visualisation of the feature points as a three-dimensional point cloud. This used an innovative technique which required data from just two consecutive frames and information about the change in position and orientation between them. Applying this, I was able to obtain a partially accurate result for a scene from one of the sample videos. With more time, this solution could be worked up to recreate the surrounding environment in an optical field in 3D.
The internship was an extremely interesting and highly rewarding experience. Working in a professional environment with a team consisting of people from a wide array of disciplinary backgrounds was a great learning experience that I did not expect to encounter while at university. As the company was still an early start up just taking on it’s first employees, I had the chance to learn about how startups work to transform their ideas into a reality. The internship gave me an opportunity to apply my knowledge about programming and software to real-world applications, with results that would potentially be used on a much larger scale. Consequently, my time with QLM was massively fulfilling and my affinity for entrepreneurship is now greater than ever. Thank you to both the QLM and Spin Up teams for supporting me through a fantastically interesting summer!