+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++ ADVERTISEMENT ++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
The set-up of this github page is still work in progress.
Stay tuned and do not miss further developments.
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
This repository contains the ROS implementation of two Visual Odometry (VO) strategies tailored for the underwater domain developed by Team ERGO, the underwater robotics reasearch group of Department of Information Engineering at University of Pisa, which is part of the Interuniversity Center of Integrated Systems for the Marine Environment (ISME).
This strategy exploits a single camera together with range information to solve the scale ambiguity issue. The strategy is feature-based and switches between essential and homography matrix for relative motion estimation. The estimated motion is used to triangulate matched features, which are then compared to scene distance information (available from an additional sensor) to retrieve the scale factor.
This solution exploits a stereo VO approach, following a 3D-to-2D method that allows to recover the motion between two consecutive camera views from the visual feedback of a stereo camera.
In both cases, the input is a sequence of distorted and compressed images (sensor_msgs/CompressedImage). The monocular strategy takes as additional input the range observations from a distance sensor (sensor_msgs/Range), necessary to recover the scale factor at each iteration. Instead, the provided output is composed of:
- the relative motion between previous and current camera views in terms of linear velocity expressed with respect to the camera frame (geometry_msgs/Vector3Stamped);
- validity flag to assess the successfulness of the current motion estimate (std_msgs/Bool).
The ROS diagram of the two UVO nodes including their input and output topics is shown below.
The content of the uvo folder is the following:
-
bags folder containing the bag file that can be used to test the mono UVO node.
-
config folder containing the configuration files that are exploited to set all the parameters of the two nodes. It includes the calibration files and parameter files used within the two UVO nodes.
-
include folder providing the visual odometry class needed to utilise the two UVO nodes.
-
launch folder with the launch file to use to run the two UVO nodes using ROS framework.
-
src folder containing the ROS node implemented for the two UVO strategies.
UVO has been tested on Ubuntu 18.04 with ROS melodic and OpenCV 4.5 libraries.
The VO nodes have been developed within ROS framework to share sensor messages between nodes.
To install the Full-Desktop version of ROS Melodic: http://wiki.ros.org/melodic/Installation/Ubuntu
OpenCV libraries (http://opencv.org/) are used to elaborate images and estimate camera motion.
Note: OpenCV extra modules are required to use SURF detector and descriptor.
Dowload and installation instructions of OpenCV with extra modules can be found at: https://github.com/opencv/opencv_contrib
Run the .launch file contained in the launch folder to test the mono UVO node using the .bag file provided by the authors. To download the .bag file, please follow this link: https://131.114.50.130/index.php/s/8NJTp2FYWRi5xKS Once the .bag file is downloaded, please put it inside the dedicated bag folder.
The following steps are necessary to execute the code with your own data:
-
Insert the intrinsic parameters of your camera within the corresponding configuration file. It should include the radial and tangential distortion coefficients.
-
Execute the .launch file by selecting the specific visual_odometry_node to be used (either mono or stereo) and specifying the camera_name as indicated in the intrinsic parameters file.
The UVO source code is released under a GPLv3 license. This is a research code, any fitness for a particular purpose is disclaimed.
If you use UVO in an academic context, please cite the following publications:
- Monocular UVO
@article{ruscio2022visual,
title={Visual-based Navigation Strategy for Autonomous Underwater Vehicles in Monitoring Scenarios},
author={Ruscio, F and Tani, S and Bresciani, M and Caiti, A and Costanzi, R},
journal={IFAC-PapersOnLine},
volume={55},
number={31},
pages={369--374},
year={2022},
publisher={Elsevier}
}
- Stereo UVO
@article{tani2023stereo,
title={Development and testing of a navigation solution for Autonomous Underwater Vehicles based on stereo vision},
author={Tani, S and Ruscio, F and Bresciani, M and Nordfeldt, B M and Bonin-Font, F and Costanzi, R},
journal={Ocean Engineering},
volume={280},
pages={114757},
year={2023},
publisher={Elsevier}
}