ethz-asl / rovio

Other
1.12k stars 504 forks source link

Configuration for Odroid XU4 #200

Open odinhr opened 5 years ago

odinhr commented 5 years ago

Hi all!

I'm testing now Rovio for Odroid and my output is about 2 Hz. With the same configuration on PC I get about 20-25 Hz. Can anyone says me a better configuration for Odroid?

Thank you.

Odín.

ZacharyTaylor commented 5 years ago

Getting real time on an Odroid is going to be hard. The thing that will make the biggest difference is to go into the cmake file and drop the number of tracked features from 25 to something like 10.

odinhr commented 5 years ago

Thanks for quick answer @ZacharyTaylor. I've done that you say and I improve my output rate. Now I've some problems with the stability. Standing at the same place my position is always changing. I think it is lost.

When I was trying it on computer I solved a similar problem with a modification in the depthType in the rovio.info but now I don't see anything in the screen and I don't know if it is the same problem. What do you think about it ? Have anyone the same problem?

I'm sure it should be work on Odroid because this video (https://www.youtube.com/watch?v=ymI3FmwU9AY) an its relative paper say it.

Thank you.

ZacharyTaylor commented 5 years ago

If it detects movement when you are standing still your IMU parameters are probably incorrect. How did you generate your calibration and what sensor setup are you using?

odinhr commented 5 years ago

Thank you @ZacharyTaylor , I'm trying to use Rovio in a MAV. My configuration is Raspberry Pi 3 model B + Navio2 as autopilot connected to Odroid XU4 via Ethernet for image processing. I connect my camera (Matrix Vision MLC200WG, Global Shutter) to Odroid via USB 3.0. The IMU data is sending trought ethernet via socket from one of the IMU's of the Navio2 shield (MPU9250 concretely) to Odroid like a struct for filling the IMU topic on it with a ROS publisher. It works proccessing the images on my PC.

Sincerely thank you.

chutsu commented 5 years ago

You didn't mention anything about calibration. Calibration is vital for VIO to work. Would highly recommend you use Kalibr to obtain the calibration between camera and imu as well as camera intrinsics.

Further, the fact you're using ethernet to pass data around incurs time delays, if I'm right I don't think ROVIO fixes the time delay between images and imu so that could be another source of errors. In summary, I would say you have to synchronize your camera and imu properly in order do VIO, I believe this applies to all SLAM / VIO algorithms unless they explicitly estimate time delays as well. So in short your current hardware setup is not ideal for ROVIO in my opinion.

odinhr commented 5 years ago

Hi @chutsu,

I've calibrated my configuration with kalibr. (View attached document) I've made a socket for "solving" the time delay which the MutlipleMachines ROS util could create via MAVROS.

For time synchronizing, I've tried with --time-calibration flag of Kalibr and with the ROS message filters function, but it can't improve. In my personal laptop, it works well sometimes, but I think it doesn't work on odroid with the same configuration due to bad computation power. Maybe someone has a low computation cost configuration. Any help is welcome.

Sorry for my english and thank you so much.

odinhr commented 5 years ago

rovio.txt

chutsu commented 5 years ago

I'm not convince things like "MultipleMachines ROS util" (not sure what that is) will fix your issue in terms of time delays between sensors. One of the not so obvious things about SLAM for a beginner is that when papers mention synchronization they mean all cameras and inertial sensors are captured at the exact same moment (down to the same millisecond), relying on software to trigger while using Ubuntu (non-real time OS) is not going to guarantee that, you have to use hardware triggering. More often than not only expensive industrial cameras such as PointGrey, Ximea ... have hardware triggering capabilities so you can't just use a USB webcam. Intel RealSense D435i (which just came out) is probably your best bet in terms of ease of use if you don't want to bother with custom cameras / imu.

Would suggest you look at the ETH ViSensor paper and UPenn's Stereo MSCKF for hardware inspiration:

Or even this blog post for ideas:

Lastly we know nothing about your hardware configuration, how it is setup. The configuration file you uploaded does not tell us your calibration quality. e.g. For camera intrinsics we use reprojection error as a metric to say how accurate the calibration is. A RMSE reprojection error of 0.3px for a single camera is excellent, 0.5 average. For stereo pair RMSE of 1.0px is typical. etc... Would highly recommend you understand calibration because it is vital to SLAM / VIO success.