pose_estimation: Visual odometry for omnidirectional camera
Visual odometry for omnidirectional multicamera rig that can be approximated by spherical camera model.
First, we provide a brief overview of packages that are distributed with our visual odometry system. This is because this is the main package of our visual odometry system, and because ROS stacks have been deprecated (so we dont want to make this a stack). We divide the packages in two groups. The first group contains packages that are already present in ROS, but we duplicated them because we require diferent versions than those available in ROS Fuerte. The second group are special libraries that are used by this package:
- "opencv24_local" This is local version of OpenCV.
- "cv_bridge_local" Local version of cv_bridge. The localization is necessiated by the fact that that the original version depends on opencv and we do not want opencv to be pulled into the dependances of 'pose_estimation'.
- "eigen_local" Local version of 'eigen3'.
- "g2o_local" Local version of G2O (A General Framework for Graph Optimization), which is available at http://www.openslam.org/.
- "li_hartley_5pt_6p" 5-point algorithm. Implementation of a method for estimationg essential matrix from 5 pairs of corresponding image points.
- "odometry_adaptor" Logging and data exploration tools for the outputs of this package.
- "sophus" A rigid body tranform library.
- "omnivo_doc" A documentation for our visual odometry packages that has hyperlinks across packages.
XXX this is the section where the specification and design/architecture should be detailed. While the original specification may be done on the wiki, it should be transferred here once your package starts to take shape. You can then link to this documentation page from the Wiki.
ROS API
This package contains most of our functionality of the visual odometry system. There are two nodes vor visual odometry --- one for visual odometry on reqular images, and one for simulation of visual odometry on predefined trajectory:
Node omnivo
This node utilizes omnidirectional panoramic image messages to produce visual odometry and outputs standard ROS odometry message without covariance. The node is single-threaded program that can process the inputs on standard desktop (as of year 2012) at the rate of approximately 2Hz.
Usage
See Section Command-line tools.
ROS topics
Subscribes to:
- "/viz/pano_vodom/image": [sensor_msgs/Image] Panoramic camera images for visual odometry. See Internal Coordinate System for precise specs of the constraints on mapping of rays to panoramic image coordinates.
Publishes to:
- "visual_odom": [nav_msgs/Odometry] Standart ROS odometry message without covariance matrix.
ROS parameters
Reads the following parameters from the parameter server:
- "~debug_images" : [bool] generate debugging images?
- "~trajectory_file" : [bool] deprecated.
- "~odometry_frame_id" : [string] String that is filled into Odometry massage's frame_id field.
- "~image_mask_file" : [string] absolute path to the file that determines areas in the input images that are not used.
- "~image_sample_file" : [string] absolute path to the file that is used by the code that produces debugging images as a background image when input images are not available or have been discarded.
- "~debug_output_dir" : [string] absolute path to the directory that will contain all debugging files that are produced.
Sets the following parameters on the parameter server:
- "~graph_size" : [int] Number of nodes in the pose-graph.
ROS services
This node does not provide any ROS services.
Node omnivosim
This node has same functionality as Node omnivo, except that instead taking real images to produce odometry, it generates its own input based on predefined trajectory.
Usage
See Section Command-line tools.
ROS topics
This node does not subscribe to any topic.
Publishes to:
- "visual_odom": [nav_msgs/Odometry] Standart ROS odometry message without covariance matrix.
ROS parameters
Reads the following parameters from the parameter server:
- "~debug_images" : [bool] generate debugging images?
- "~odometry_frame_id" : [string] String that is filled into Odometry massage's frame_id field.
- "~image_mask_file" : [string] absolute path to the file that determines areas in the input images that are not used.
- "~image_sample_file" : [string] absolute path to the file that is used by the code that produces debugging images as a background image when input images are not available or have been discarded.
- "~debug_output_dir" : [string] absolute path to the directory that will contain all debugging files that are produced.
Sets the following parameters on the parameter server:
- "~graph_size" : [int] Number of nodes in the pose-graph.
ROS services
This node does not provide any ROS services.
Command-line tools
This package provides several '.launch' files that are intended as:
- samples with sensible default ROS parameter values set-up.
- parametrizable launch file to be used with more sophisticated logging aparatus, which resides in package 'odometry_adaptor'
For advanced logging and analysis of the visual odometry results, it is recommanded to use package 'odometry_adaptor'.
In the following, we briefly describe available '.launch' files. More details can be found in their comments.
vo.launch
Launches Node omnivo with sensible defaults. Some stuff is configurable through '.launch' file's parameters.
vosim.launch
Equivalent of vo.launch for the node Node omnivosim.
play_bag.launch
Launches Node omnivo on a bag file which publishes '/viz/pano_vodom/image' topic.
play_pano_bag.launch
Launches Node omnivo on a bag file which has image topics in such a format that package 'omnicam' can produce from them the panoramic image topic required by Node omnivo. 'omnicam' is external ROS package that is not distributed with our visual odometry packages.
- Example
- The following command lauches Node omnivo with ros parameters set up using the lauch file vo.launch.
$ roslaunch pose_estimation vo.launch