Experiment with Visual Odometry - ROVIO - part 2

Chapter two: Onboard Tuning & Testing a Monocular Visual Odometry System

This is the second part of my experiments with ROVIO, ; Experiment with Visual Odometry - ROVIO , we will now discuss the details of on-board integration and test phases, like the Static test, Walk Test, Initial test and the Autonomous flight…

Once the lab tests are complete and the operational envelope is defined, this is the time to test in real life on a flying vehicle. My test quadcopter is a Q450 (or 500 depending on the supplier) with 2412 type engines turning 10 1/2’’ propellers powered by 4,000mA - 3S packs.

The total weight of the configuration is 1.55 Kg without battery and 1,86Kg with the pack, making it quite heavy for a nylon frame. The experiments being accomplished in my garage, I don’t plan to get a bigger frame as this configuration is intended to be a technological demonstrator and not a fully functional solution.


This picture is from first blog
I have distributed the weight on the longitudinal axis and used the battery pack for balance. The AAEON pico-apl3 Pentium board and the 12 V 5 A Step Up-Down regulator are mounted on corrugated board that is sliding along the 10 mm tubes attached to the frame. The Battery holder is attached to the same tubes and can slide to adjust for a “0” CoG.

Static test

The camera was mounted on a tilt adjustable holder but that proved to be a source of vibration that got ROVIO loosing track. You can see this problem on the following video of a static test.

Note: Once the system is drifting there is a possibility to reset it using a python script (look @ 1:00)

The solution is to mount the camera on a damping platform that isolates the camera and particularly the IMU sensor from the vehicle vibrations.

The walk test

Once all the signal are optimal and the system start OK, it is time to simulate a flight by ‘‘walking’’ the quadcopter.
Here is the sequence:
Computer A -
Windows with Mission planner connected to vehicle as a standard GCS

Computer B -
Linux system connected to CC (passing through Beaglebone on ssh remote)
Loading 3 remote session:
a) roslaunch rovio rovio_full.launch
b) roslaunch mavros apm.launch fcu_url:=udp://
c) python rovio_reset.py

Once Mavros is started you will receive message ‘‘gps glitch clear’’ confirming that the ROVIO system localisation signal is recognized by the system. Then you can go on Mission Planner and right click on the map to set EKF HOME. You will see the quad icon on the screen showing that EKF is doing its job.

Now, take the Quadcopter, hold it about 1 meter and do a circle, square, figure 8 or any pattern you like. The vehicle on the map should move accordingly without too much distortion or overshoot.
This is what I am doing on the first 20 seconds on the first video above.

Initial test

As explained above, we need to confirm the system work OK before powering the quadcopter.
Once this is confirmed, I prefer to takeoff in stabilize to make sure the quadcopter is stable at 1 Meter facing the targets and then I switch to Al-Hold just to adjust the correct power for level flight (you can actually see the overloaded Q450 oscillation @ 0:30). As the prototype is so heavy, altitude is holding at above average power level so I prefer having it stabilized before switching to loiter. Then you take a look at Mission Planner Map , for a confirmation that ROVIO is still tracking and then you switch Loiter, getting ready to switch back to Att-Hold if the Quadcopter acts like a Psychotic Wasp.

Here is a snapshot of the log showing how well the system tracks compared to IMU:

And RangeFinder ( with the altitude variation when switching to Alt_hold @ 0:30)


That completes what is reasonably possible to accomplish with a Q450 autonomously fling in my Garage , aka the ThunderDrone. The next steps will involve outdoor testing, but it will take a few more weeks as it is still snowing outside…

I just hope that this blog was helpful in explaining how you can build , test and fly a Monocular Robust Visual Intertial Odometry system.


Amazing work, Patrick. Looking forward to the next chapter.

As a side note, have you tried any other visual odometry system such as any Intel Realsense camera? I saw you over on this other thread talking about the new T265 which is about to be relased.

Thank you for sharing your progress.

1 Like

Hello, Thanks

As for the T265, I shoud receive it soon, already work to add a Realsense 435 as an obstacle avoidance as a complementary system. So many toys, not enough time… :wink:

1 Like

How many fps does rovio run in Pentium board could you explain does it reach 30fps.

All these details are in part one of this blog

Hello ppoirier, trying to build my own DIY, would love to reach out and discuss with you, please let me know how to contact you.

Hello ,

You can ask questions here :slight_smile:

I was hoping for a dialogue. Can you jump on a call?

Have you flown it outdoors? What were your impressions?

What are the limits to its outdoor use, such as altitude? Would the camera need to have the ground in its line of sight always? - I assume if the camera is pointing towards a clear blue sky during a steep pitch, for example, will it lose its position? Thanks

Indoor only, and short range.
For outdoor you would need semantic slam or map trained ML pipelines