Monocular Visual Odometry for a Rover [Question]

Hey folks,

I have been working on a personal project and am stuck. I was hoping you may be able to offer some insight. The goal is to provide visual odometry from a single camera feed and process it on a raspberry pi 3 with no additional sensors. Here is some pertinant information:

  1. The only sensor available is a Raspberry Pi camera V2

  2. The rover is a 4 wheeled, tank drive via PWM. (This means I have access to open loop velocity commands to the motors)

  3. The vehicle will be driving on a known, closed track with sufficient noise on the ground to pick out features but not too much to where it would drown out the features

  4. The camera is fixed in a known position, pointing forward with a slight angle down

  5. I have no means of taking direct measurements while the rover is driving (which means I can’t take ground truth measurements to train a machine learning model)

Attempts at a solution:

  • Using ROS with some form of Visual SLAM such as ORB SLAM. Unfortunately, these methods run too slowly on the Pi as far as I can tell.

  • Using SVO 2.0. This technique also seems to suffer from much computational complexity.

  • Using OpenCV as outlined here. This method requires absolute scale information from an outside source. I am hoping that the additional constraints put on my application allow me to accurately estimate this scale information but I have yet to figure anything out.

  • An idea I have had but not yet been able to implement is to perform a perspective transformation to make the video feed look like it is facing the ground. I could then use techniques used by optical mice to predict my velocity.

The end goal is to accurately estimate the robot’s position and direction on the known track.

Thank you for your time!

submitted by /u/thingythangabang
[link] [comments]