00001
00002 #ifndef _BASE_SLAM_HPP_
00003 #define _BASE_SLAM_HPP_
00004
00005 #include <vector>
00006 #include <list>
00007 #include <jmath/jblas.hpp>
00008 #include <slam/slamEvents.hpp>
00009
00010 namespace jafar {
00011 namespace geom {
00012 class T3DEuler;
00013 }
00014 namespace slam {
00015 class BaseRobot;
00016 class Observation;
00017 class SlamEventListener;
00022 class BaseSlam {
00023 public:
00024 virtual ~BaseSlam();
00025 virtual void addRobot( BaseRobot* ) = 0;
00026 virtual void addRobot( BaseRobot*, const jblas::vec& _robotState, const jblas::sym_mat& _robotStateCov ) = 0;
00027 virtual void predict(unsigned int _robotId, jblas::vec const& u) = 0;
00028 virtual bool hasFeature(unsigned int id, unsigned int robotId_ = 0) const = 0;
00029 virtual void getRobotPose(jafar::geom::T3DEuler& pose, unsigned int _robotId = 0) const = 0;
00030 virtual void removeFeature(unsigned int id) = 0;
00031 virtual void addEventListener(slam::SlamEventListener& listener) = 0;
00032 virtual void removeEventListener(slam::SlamEventListener& listener) = 0;
00033 virtual void processObservations(unsigned int frameIndex_,
00034 std::list<Observation*> const& knownObs,
00035 std::list<Observation*> const& newObs, unsigned int robotId_ = 0, int events_ = slam::SlamEventListener::ALL ) = 0;
00036 virtual void processObservations(unsigned int frameIndex_,
00037 std::vector<Observation*> const& knownObs,
00038 std::vector<Observation*> const& newObs, unsigned int robotId_ = 0, int events_ = slam::SlamEventListener::ALL ) = 0;
00039
00040 };
00041 }
00042 }
00043
00044 #endif // _BASE_SLAM_HPP_