diff --git a/README.md b/README.md index bfcef5b..87ab140 100644 --- a/README.md +++ b/README.md @@ -63,7 +63,7 @@ If you use this work in an academic context, please cite the following publicati 8. Only a udev rule is needed to run the DVS driver. An installation script is provided in the package `libcaer_catkin`. `$ roscd libcaer_catkin` (need to source your setup.bash file first, or just do `$ cd libcaer_catkin`) `$ sudo ./install.sh` - + 9. You can test the installation by running a provided launch file. It starts the driver (DVS or DAVIS) and the renderer (an image viewer). 1. First, build the renderer: `$ catkin build dvs_renderer` @@ -84,81 +84,20 @@ If you use this work in an academic context, please cite the following publicati 4. In another terminal, launch the DVS/DAVIS renderer: `$ roslaunch dvs_renderer renderer_mono.launch` You should see a movie with images like this: - + ![slider_depth_renderer](https://cloud.githubusercontent.com/assets/8024432/25312371/9afd4180-2817-11e7-9e33-cdaa8af1e6ed.png) - + 11. Optional: in the case of a **live stream** from the DAVIS (i.e., not a recorded file) you may adjust the DVS/DAVIS parameters to your needs using the dynamic reconfigure GUI. Run `$ rosrun rqt_reconfigure rqt_reconfigure` and a window will appear. Select the `davis_ros_driver` (on the left panel) and you should get the following GUI that allows you to modify the parameters of the sensor. - + ![davis_ros_driver_rqt_reconfigure](https://cloud.githubusercontent.com/assets/8024432/25172274/c1267b8a-24f0-11e7-8130-af551a8a958d.png) - + A guide on how to modify the parameters in the bottom half of the GUI (biases) can be found here: https://inilabs.com/support/hardware/biasing/ -# DVS Calibration -The calibration of a DVS is a two-stage procedure. -First, the focus must be adjusted. -Then, the intrinsic camera parameters are estimated. - -## Focus Adjustment -Adjust the focus of the DVS. One way of achieving this is using a special pattern, e.g. the [Back Focus Pattern](https://github.com/uzh-rpg/rpg_dvs_ros/blob/master/dvs_calibration/pdf/backfocus.pdf). - -## Instrisic Parameters -To run the intrinsic camera calibration, we use a 5x5 LED board that is blinking at 500Hz. -The calibration procedure is then started using -`$ roslaunch dvs_calibration dvs_intrinsic.launch` -You will see an RQT interface with all necessary information. -Top left is the calibration GUI, which displays the amount of detected patterns. -**Currently, pattern detection does not seem to work indoors. Try close to a window.** -Collect at least 30 samples before starting the calibration. -**This can take up to a few minutes** and freezes your RQT GUI. -Once done, the calibration parameters are shown and can be saved. -The camera parameters will be stored in `~/.ros/camera_info`. -When you plug that DVS again, this calibration file will be loaded and published as `/dvs/camera_info`. - -The image viewers below show the following: - -1. Accumulated DVS renderings: you should see the blinking LEDs and the gradients in the scene -2. Detected blinking: black regions mean more detections. Once the pattern is detected, the counter in the calibration GUI should increment. The detected pattern is also visualized for a short moment. -3. Rectified DVS rendering: once the calibration is done, you can see how well it turned out. Check if straight lines are still straight, especially in the border of the image. - - -# Stereo DVS Calibration - -## Setup -Connect the two DVS from OUT (master) to IN (slave). -GND must not be connected if both DVS are connected over USB to the same computer, to avoid ground loops. -Time synchronization is performed automatically in the driver software. -Since each DVS has a separate driver, the ROS messages might arrive at different times. -However, the timestamps within the messages are synchronized. - -## Calibration -1. Calibrate each DVS independently -2. Use `$ roslaunch dvs_calibration dvs_stereo.launch` -3. Use the same checkerboard with blinking LEDs and make sure it is visible in both cameras. Collect at least 30 samples. -4. Start the calibration and check the reprojection error. Then save it (this will extend your intrinsic camera info files with the stereo information). - - -# Calibration Details and Parameters -The calibration requires a board with a regular grid of blinking LEDs. -In our case we have a 5x5 grid with a 0.05m distance between the LEDs. -One of the rows can be turned off (to make a 5x4 grid) to avoid confusion in the stereo case. -The following parameters can be tuned using ROS parameters: -* `dots_w`, `dots_h` (default: 5) is the number of rows and columns in the grid of LEDs -* `dot_distance` (default: 0.05) is the distance in **meters** between the LEDs - -If you have your own LED board with different LEDs or blinking frequencies, you might want to tweak these parameters as well: -* `blinking_time_us` (default: 1000) is the blinking time in **micro**-seconds -* `blinking_time_tolerance_us` (default: 500) is the tolerance in **micro**-seconds to still count the transition -* `enough_transitions_threshold` (default: 200) is the minimum number of transitions before searching the LEDs -* `minimum_transitions_threshold` (default: 10) is the minimum number of transitions required to be considered in the LED search -* `minimum_led_mass` (default: 50) is the minimum "mass" of an LED blob, i.e., the sum of transitions in this blop -* `pattern_search_timeout` (default: 2.0) is the timeout in **seconds** when the transition map is reset (it is also reset when the LED grid was found) - - -# DAVIS Calibration -We recommend to use the frames for intrinsic calibration for the DAVIS. -More details can be found here for [monocular](http://wiki.ros.org/camera_calibration/Tutorials/MonocularCalibration) and [stereo](http://wiki.ros.org/camera_calibration/Tutorials/StereoCalibration). + +# Calibration +For intrinsic or stereo calibration of the DVS and DAVIS, please have a look at the following [document](dvs_calibration/README.md). # Troubleshooting diff --git a/dvs_calibration/README.md b/dvs_calibration/README.md new file mode 100644 index 0000000..0842474 --- /dev/null +++ b/dvs_calibration/README.md @@ -0,0 +1,63 @@ +# DAVIS Calibration +We recommend to use the frames for intrinsic calibration for the DAVIS. +More details can be found here for [monocular](http://wiki.ros.org/camera_calibration/Tutorials/MonocularCalibration) and [stereo](http://wiki.ros.org/camera_calibration/Tutorials/StereoCalibration). + +# DVS Calibration +The calibration of a DVS is a two-stage procedure. +First, the focus must be adjusted. +Then, the intrinsic camera parameters are estimated. + +## Focus Adjustment +Adjust the focus of the DVS. One way of achieving this is using a special pattern, e.g. the [Back Focus Pattern](https://github.com/uzh-rpg/rpg_dvs_ros/blob/master/dvs_calibration/pdf/backfocus.pdf). + +## Intrinsic Parameters +To run the intrinsic camera calibration, we use a 5x5 LED board that is blinking at 500Hz. +The calibration procedure is then started using +`$ roslaunch dvs_calibration dvs_intrinsic.launch` +You will see an RQT interface with all necessary information. +Top left is the calibration GUI, which displays the amount of detected patterns. +**Currently, pattern detection does not seem to work indoors. Try close to a window.** +Collect at least 30 samples before starting the calibration. +**This can take up to a few minutes** and freezes your RQT GUI. +Once done, the calibration parameters are shown and can be saved. +The camera parameters will be stored in `~/.ros/camera_info`. +When you plug that DVS again, this calibration file will be loaded and published as `/dvs/camera_info`. + +The image viewers below show the following: + +1. Accumulated DVS renderings: you should see the blinking LEDs and the gradients in the scene +2. Detected blinking: black regions mean more detections. Once the pattern is detected, the counter in the calibration GUI should increment. The detected pattern is also visualized for a short moment. +3. Rectified DVS rendering: once the calibration is done, you can see how well it turned out. Check if straight lines are still straight, especially in the border of the image. + + +# Stereo DVS Calibration + +## Setup +Connect the two DVS from OUT (master) to IN (slave). +GND must not be connected if both DVS are connected over USB to the same computer, to avoid ground loops. +Time synchronization is performed automatically in the driver software. +Since each DVS has a separate driver, the ROS messages might arrive at different times. +However, the timestamps within the messages are synchronized. + +## Calibration +1. Calibrate each DVS independently +2. Use `$ roslaunch dvs_calibration dvs_stereo.launch` +3. Use the same checkerboard with blinking LEDs and make sure it is visible in both cameras. Collect at least 30 samples. +4. Start the calibration and check the reprojection error. Then save it (this will extend your intrinsic camera info files with the stereo information). + + +# Calibration Details and Parameters +The calibration requires a board with a regular grid of blinking LEDs. +In our case we have a 5x5 grid with a 0.05m distance between the LEDs. +One of the rows can be turned off (to make a 5x4 grid) to avoid confusion in the stereo case. +The following parameters can be tuned using ROS parameters: +* `dots_w`, `dots_h` (default: 5) is the number of rows and columns in the grid of LEDs +* `dot_distance` (default: 0.05) is the distance in **meters** between the LEDs + +If you have your own LED board with different LEDs or blinking frequencies, you might want to tweak these parameters as well: +* `blinking_time_us` (default: 1000) is the blinking time in **micro**-seconds +* `blinking_time_tolerance_us` (default: 500) is the tolerance in **micro**-seconds to still count the transition +* `enough_transitions_threshold` (default: 200) is the minimum number of transitions before searching the LEDs +* `minimum_transitions_threshold` (default: 10) is the minimum number of transitions required to be considered in the LED search +* `minimum_led_mass` (default: 50) is the minimum "mass" of an LED blob, i.e., the sum of transitions in this blop +* `pattern_search_timeout` (default: 2.0) is the timeout in **seconds** when the transition map is reset (it is also reset when the LED grid was found)