Monocular Camera based Velocity Measurment


An estimate of a SUAVs (Small Unmanned Aerial Vehicle) velocity is paramount for precise maneuvering. However, IMU-based measurements lead to drift, and GPS data differentiation is inaccurate and numerically unstable.

For this reason, the GOAl of this project was to measure a SUAVs velocity using a monocular camera (that most SUAVS already possess) as well as a sonar sensor.


There are several algorithms capable of estimating the velocity of a camera relative to a static plane. However, in the real world, there are some complications which are illustrated in the picture below. TD4sijIg

A typically structured environment of several planes at different heights (pictured in blue, yellow, orange, and red) also features multiple moving objects such as cars or pedestrians (also shown red). Reflections (pictured in purple) present another much more subtle problem.


I not only implemented an optical-flow-based algorithm to estimate the velocity of an SUAV relative to the ground. I addressed the problem above by developing several measures which compare the movement of features in the images with the current velocity estimate of the SUAV. To quantify the covariance of this new method, I performed an extensive error calculation.

To validate the results, I build a Hexacopter using a custom 3d printed undercarriage.



The extensive error calculation showed that optical flow algorithms necessarily produce a constant bias that has yet to be addressed in the literature as of the time of this project. Its effect can be seen below. Here the estimated velocity is plotted as a function of the error in the feature position. The actual velocity of the SUAV, in this case, is always [1,1,1] m/s!


The experimental results show that the algorithm can filter out moving objects and ground planes at differing heights better than current algorithms at the time.

However, these results were only verified inside a simulation and recorded traffic videos. Due to timing constraints, no sufficient experimental validation could be conducted (though the first experiments looked promising)

For more information about the project, visit this repo

What I learned

This project was my first foray into working with actual hardware. As such, it taught me many of the practical considerations often ignored in simulations. Examples include the necessity for vibration proofing sensors and possible computational performance drops if a system’s motors draw too much current.