Home

Awesome

VersaVIS -- An Open Versatile Multi-Camera Visual-Inertial Sensor Suite

Build Test

<a href="https://youtu.be/bsvSZJq76Mc"> <img src="https://user-images.githubusercontent.com/17647950/133631034-f633df6b-7ce7-4851-8cd3-f67c0bbec67a.jpg" alt="https://youtu.be/bsvSZJq76Mc" width="600"> </a>

VersaVIS provides a complete, open-source hardware, firmware and software bundle to perform time synchronization of multiple cameras with an IMU featuring exposure compensation, host clock translation and independent and stereo camera triggering.

News

Supported camera drivers

Citing

Please cite the following paper when using VersaVIS for your research:

@article{Tschopp2020,
author = {Tschopp, Florian and Riner, Michael and Fehr, Marius and Bernreiter, Lukas and Furrer, Fadri and Novkovic, Tonci and Pfrunder, Andreas and Cadena, Cesar and Siegwart, Roland and Nieto, Juan},
doi = {10.3390/s20051439},
journal = {Sensors},
number = {5},
pages = {1439},
publisher = {Multidisciplinary Digital Publishing Institute},
title = {{VersaVIS—An Open Versatile Multi-Camera Visual-Inertial Sensor Suite}},
url = {https://www.mdpi.com/1424-8220/20/5/1439},
volume = {20},
year = {2020}
}

Additional information can be found here.

Install

Clone and build

cd ~/catkin_ws/src/
git clone git@github.com:ethz-asl/versavis.git --recursive
catkin build versavis
cd versavis/firmware
./setup.sh

Setup udev rule

Add yourself to dialout group

sudo adduser <username> dialout

Copy udev rule file to your system:

sudo cp firmware/98-versa-vis.rules /etc/udev/rules.d/98-versa-vis.rules

Afterwards, use the following commands to reload the rules

sudo udevadm control --reload-rules
sudo udevadm trigger
sudo ldconfig

Note: You might have to reboot your computer for this to take effect. You can check by see whether a /dev/versavis is available and pointing to the correct device.

Configure

Adapt the configuration file to your setup needs. Also check the datasheet for how to configure the hardware switches.

Flash firmware on the VersaVIS board

Calibration

Typically, a VI Setup needs to be carefully calibrated for camera intrinsics and camera-camera extrinsics and camera-imu extrinsics. Refer to Kalibr for a good calibration framework. Note: To enable a good calibration, a high-quality calibration target needs to be available. Furthermore, a good and uniform light source is needed in order to reduce motion blur, especially during camera-imu calibration.

Usage

roslaunch versavis run_versavis.launch

Troubleshooting

My sensor is stuck at initialization

Main symptoms are:

Troubleshooting steps:

The board is not doing what I expect / How can I enter debug mode

Easiest way to debug is to enable DEBUG mode in firmware/libraries/versavis/versavis_configuration.h and check the debug output using the Arduino Serial Monitor or screen /dev/versavis. Note: In debug mode, ROS/rosserial communication is deactivated!

I don't get any IMU messages on /versavis/imu

This is normal during initialization as no IMU messages are published. Check Inintialization issues for further info.

After uploading a new firmware, I am unable to communicate with the VersaVIS board

This is most likely due to an infinite loop in the code in an error case. Reset the board by double clicking the reset button and upload your code in DEBUG mode. Then check your debug output.

IMU shows strange data or spikes

To decrease the bandwidth between VersaVIS and host but keep all information, only the IMu raw data is transferred and later scaled. If there is a scale offset, adapt the scale/sensitivity parameters in your launch file.

Depending on the IMU, recursive data grabbing is implemented with a CRC or temperature check. If this fails multiple time, the latest message is used. Check your IMU if this persists.

It looks like my exposure time is not correctly compensated

Check whether your board can correctly detect your exposure time in the debug output. Troubleshooting steps:

I receive errors on the host computer

Time candidate overflow

[ WARN] [1619791310.834852014]: /versavis/camO/tmage_raw: Time candidates buffer overflow at 1025.
...

Means that the synchronizer receives more timestamps than images. Double check if the camera is actually triggering with every pulse it receives. A typical problem is when the exposure time is higher than the measurement period.

Image candidate overflow

[ WARN] [1619791310.834852014]: /versavis/camO/tmage_raw: Image candidates buffer overflow at 1025.
...

Means that the synchronizer receives more iamges than timestamps. Double check if the camera is actually triggering and not free running.