slam-cv 0.1.3

Simple CV traits for VO (SLAM).
Documentation
use super::ba::*;
use super::world::*;
use crate::feature::*;
use crate::frame::*;
use crate::number::Number;
use crate::solver::NoOptimize;

use image::GenericImageView;

#[cfg(feature = "podo")]
use podo_core_driver::Driver;

#[cfg(not(feature = "podo"))]
pub trait Driver {}

pub trait VisualSlam
where
    Self: Driver,
{
    type Number: 'static + Number;

    type KeyPoint: 'static + KeyPoint<Number = Self::Number>;
    type Descriptor: 'static + KeyPoint<Number = Self::Number> + Descriptor<Number = Self::Number>;
    type Landmark: 'static + Landmark<Number = Self::Number>;

    type Image: 'static + GenericImageView;

    type Detector: 'static
        + Detector<Number = Self::Number, KeyPoint = Self::KeyPoint, Image = Self::Image>;
    type Extractor: 'static
        + Extractor<Number = Self::Number, Feature = Self::KeyPoint, Descriptor = Self::Descriptor>;

    type KeyFrame: 'static + KeyFrame<Number = Self::Number, Feature = Self::Landmark>;

    type World: 'static
        + World<Number = Self::Number, Landmark = Self::Landmark, KeyFrame = Self::KeyFrame>;
    type Relocalizer: 'static + Relocalizer<World = Self::World>;

    type PoseEstimator: 'static + PoseEstimator = NoOptimize;
    type LoopCloser: 'static + LoopCloser = NoOptimize;
    type BundleAdjuster: 'static + BundleAdjuster = NoOptimize;

    fn start(&self);

    fn stop(&self);

    fn pause(&self);

    fn resume(&self);

    #[cfg(feature = "serde")]
    fn load(&self);

    #[cfg(feature = "serde")]
    fn save(&self);
}