Index: trunk/include/FlairCore/FrameworkManager.h
===================================================================
--- trunk/include/FlairCore/FrameworkManager.h	(revision 42)
+++ trunk/include/FlairCore/FrameworkManager.h	(revision 44)
@@ -121,4 +121,14 @@
   */
   void AddDeviceToLog(IODevice *device);
+	
+	/*!
+  * \brief Is device logged
+  *
+  * Check if AddDeviceToLog was called for an IODevice
+  *
+  * \param device IODevice to check
+  * \return true if AddDeviceToLog was called for this IODevice
+  */
+  bool IsDeviceLogged(const IODevice *device) const;
 
   /*!
Index: trunk/include/FlairCore/IODevice.h
===================================================================
--- trunk/include/FlairCore/IODevice.h	(revision 42)
+++ trunk/include/FlairCore/IODevice.h	(revision 44)
@@ -115,5 +115,4 @@
   virtual DataType const &GetOutputDataType() const;
 
-            Time lastUpdate;
         protected:
             /*!
Index: trunk/include/FlairMeta/HdsX8.h
===================================================================
--- trunk/include/FlairMeta/HdsX8.h	(revision 42)
+++ trunk/include/FlairMeta/HdsX8.h	(revision 44)
@@ -24,8 +24,9 @@
 class HdsX8 : public Uav {
 public:
-  HdsX8(core::FrameworkManager *parent, std::string uav_name,
+  HdsX8(std::string name,
         filter::UavMultiplex *multiplex = NULL);
   ~HdsX8();
   void StartSensors(void);
+	std::string GetDefaultVrpnAddress(void) const{return "192.168.147.197:3883";}
 
 private:
Index: trunk/include/FlairMeta/MetaVrpnObject.h
===================================================================
--- trunk/include/FlairMeta/MetaVrpnObject.h	(revision 42)
+++ trunk/include/FlairMeta/MetaVrpnObject.h	(revision 44)
@@ -18,20 +18,17 @@
 
 namespace flair {
-namespace core {
-class Vector3D;
-class FloatType;
-}
-namespace gui {
-class DataPlot1D;
-class DataPlot2D;
-class Tab;
-}
-namespace filter {
-class EulerDerivative;
-class LowPassFilter;
-}
-namespace sensor {
-class VrpnClient;
-}
+	namespace core {
+		class Vector3D;
+		class FloatType;
+	}
+	namespace gui {
+		class DataPlot1D;
+		class DataPlot2D;
+		class Tab;
+	}
+	namespace filter {
+		class EulerDerivative;
+		class LowPassFilter;
+	}
 }
 
@@ -47,7 +44,6 @@
 class MetaVrpnObject : public sensor::VrpnObject {
 public:
-  MetaVrpnObject(const sensor::VrpnClient *parent, std::string name);
-  MetaVrpnObject(const sensor::VrpnClient *parent, std::string name,
-                 uint8_t id);
+  MetaVrpnObject(std::string name);
+  MetaVrpnObject(std::string name,uint8_t id);
   ~MetaVrpnObject();
   gui::DataPlot1D *VxPlot(void) const; // 1,0
@@ -58,5 +54,5 @@
 
 private:
-  void ConstructorCommon(const sensor::VrpnClient *parent, std::string name);
+  void ConstructorCommon(std::string name);
   filter::LowPassFilter *pbas;
   filter::EulerDerivative *euler;
Index: trunk/include/FlairMeta/SimuX4.h
===================================================================
--- trunk/include/FlairMeta/SimuX4.h	(revision 42)
+++ trunk/include/FlairMeta/SimuX4.h	(revision 44)
@@ -26,9 +26,8 @@
   // simu_id: 0 if simulating only one UAV
   //>0 otherwise
-  SimuX4(core::FrameworkManager *parent, std::string uav_name, int simu_id = 0,
+  SimuX4(std::string name, int simu_id = 0,
          filter::UavMultiplex *multiplex = NULL);
   ~SimuX4();
   void StartSensors(void);
-  void SetupVRPNAutoIP(std::string name);
 };
 } // end namespace meta
Index: trunk/include/FlairMeta/SimuX8.h
===================================================================
--- trunk/include/FlairMeta/SimuX8.h	(revision 42)
+++ trunk/include/FlairMeta/SimuX8.h	(revision 44)
@@ -26,9 +26,8 @@
   // simu_id: 0 if simulating only one UAV
   //>0 otherwise
-  SimuX8(core::FrameworkManager *parent, std::string uav_name, int simu_id = 0,
+  SimuX8(std::string name, int simu_id = 0,
          filter::UavMultiplex *multiplex = NULL);
   ~SimuX8();
   void StartSensors(void);
-  void SetupVRPNAutoIP(std::string name);
 };
 } // end namespace meta
Index: trunk/include/FlairMeta/Uav.h
===================================================================
--- trunk/include/FlairMeta/Uav.h	(revision 42)
+++ trunk/include/FlairMeta/Uav.h	(revision 44)
@@ -17,21 +17,17 @@
 
 namespace flair {
-namespace core {
-class FrameworkManager;
-}
-namespace filter {
-class Ahrs;
-class UavMultiplex;
-}
-namespace actuator {
-class Bldc;
-}
-namespace sensor {
-class UsRangeFinder;
-class BatteryMonitor;
-class VrpnClient;
-class Imu;
-class Camera;
-}
+	namespace filter {
+		class Ahrs;
+		class UavMultiplex;
+	}
+	namespace actuator {
+		class Bldc;
+	}
+	namespace sensor {
+		class UsRangeFinder;
+		class BatteryMonitor;
+		class Imu;
+		class Camera;
+	}
 }
 
@@ -39,32 +35,20 @@
 namespace meta {
 class MetaUsRangeFinder;
-class MetaVrpnObject;
 
 /*! \class Uav
 *
-* \brief Base class to construct sensors/actuators depending on uav type
+* \brief Base class to construct sensors/actuators depending on uav type.
+* The Object is created with 
+*  the FrameworkManager as parent. FrameworkManager must be created before.
+* Only one instance of this class is allowed by program.
 */
 class Uav : public core::Object {
 public:
-  /*
-      typedef enum {
-          None,
-          Auto,//rt serial if hds x4 ou x8, auto ip sinon
-          AutoIP,
-          UserDefinedIP,
-          AutoSerialPort,
-          } VRPNType_t;
-*/
-  // uav_name: for optitrack
-  Uav(core::FrameworkManager *parent, std::string name,
+
+  Uav(std::string name,
       filter::UavMultiplex *multiplex = NULL);
   ~Uav();
-  void SetupVRPN(std::string optitrack_address, std::string name);
-  // vrpn serial: broken, need to add serial port in uav specific code
-  // void SetupVRPNSerial(core::SerialPort *vrpn_port,std::string name,int
-  // VRPNSerialObjectId);
-  virtual void SetupVRPNAutoIP(std::string name);
 
-  virtual void StartSensors(void);
+  virtual void StartSensors(void)=0;
   void UseDefaultPlot(void);
   actuator::Bldc *GetBldc(void) const;
@@ -75,7 +59,7 @@
   sensor::UsRangeFinder *GetUsRangeFinder(void) const;
   sensor::BatteryMonitor *GetBatteryMonitor(void) const;
-  sensor::VrpnClient *GetVrpnClient(void) const;
-  meta::MetaVrpnObject *GetVrpnObject(void) const;
   sensor::Camera *GetVerticalCamera(void) const;
+  sensor::Camera *GetHorizontalCamera(void) const;
+	virtual std::string GetDefaultVrpnAddress(void) const{return "127.0.0.1:3883";}
 
 protected:
@@ -86,4 +70,5 @@
   void SetBatteryMonitor(const sensor::BatteryMonitor *battery);
   void SetVerticalCamera(const sensor::Camera *verticalCamera);
+  void SetHorizontalCamera(const sensor::Camera *verticalCamera);
 
 private:
@@ -94,9 +79,15 @@
   sensor::UsRangeFinder *us;
   MetaUsRangeFinder *meta_us;
-  sensor::VrpnClient *vrpnclient;
-  MetaVrpnObject *uav_vrpn;
   sensor::BatteryMonitor *battery;
-  sensor::Camera *verticalCamera;
+  sensor::Camera *verticalCamera,*horizontalCamera;
 };
+
+/*!
+* \brief get Uav
+*
+* \return the Uav
+*/
+Uav *GetUav(void);
+
 } // end namespace meta
 } // end namespace flair
Index: trunk/include/FlairMeta/UavFactory.h
===================================================================
--- trunk/include/FlairMeta/UavFactory.h	(revision 42)
+++ trunk/include/FlairMeta/UavFactory.h	(revision 44)
@@ -21,10 +21,8 @@
 #include <Uav.h>
 
-flair::meta::Uav *CreateUav(flair::core::FrameworkManager *parent,
-                            std::string uav_name, std::string uav_type,
+flair::meta::Uav *CreateUav(std::string name, std::string type,
                             flair::filter::UavMultiplex *multiplex = NULL);
 
-void RegisterUavCreator(flair::meta::Uav*(*func)(flair::core::FrameworkManager *parent,
-                                   std::string uav_name, std::string uav_type,
+void RegisterUavCreator(flair::meta::Uav*(*func)(std::string name, std::string type,
                                    flair::filter::UavMultiplex *multiplex));
 #endif // UAVFACTORY
Index: trunk/include/FlairMeta/UavStateMachine.h
===================================================================
--- trunk/include/FlairMeta/UavStateMachine.h	(revision 42)
+++ trunk/include/FlairMeta/UavStateMachine.h	(revision 44)
@@ -59,7 +59,8 @@
 *
 * \brief State machine for UAV
-*
-* thread synchronized with ahrs, unless a period is set with SetPeriodUS or
-*SetPeriodMS
+*  The Thread is created with 
+*  the FrameworkManager as parent. FrameworkManager must be created before.
+* The Thread is synchronized with Ahrs, unless a period is set with SetPeriodUS or
+* SetPeriodMS
 */
 
@@ -101,5 +102,5 @@
   };
 
-        UavStateMachine(meta::Uav* uav, sensor::TargetController* controller);
+        UavStateMachine(sensor::TargetController* controller);
         ~UavStateMachine();
 
@@ -107,6 +108,4 @@
 
   const core::Vector3D &GetCurrentAngularSpeed(void) const;
-
-  const meta::Uav *GetUav(void) const;
 
         void Land(void);
Index: trunk/include/FlairMeta/XAir.h
===================================================================
--- trunk/include/FlairMeta/XAir.h	(revision 42)
+++ trunk/include/FlairMeta/XAir.h	(revision 44)
@@ -24,8 +24,9 @@
 class XAir : public Uav {
 public:
-  XAir(core::FrameworkManager *parent, std::string uav_name,
+  XAir(std::string name,
        filter::UavMultiplex *multiplex = NULL);
   ~XAir();
   void StartSensors(void);
+	std::string GetDefaultVrpnAddress(void) const{return "192.168.147.197:3883";}
 
 private:
Index: trunk/include/FlairSensorActuator/Camera.h
===================================================================
--- trunk/include/FlairSensorActuator/Camera.h	(revision 42)
+++ trunk/include/FlairSensorActuator/Camera.h	(revision 44)
@@ -19,11 +19,11 @@
 
 namespace flair {
-namespace gui {
-class GroupBox;
-class Tab;
-class TabWidget;
-class Picture;
-class GridLayout;
-}
+	namespace gui {
+		class GroupBox;
+		class Tab;
+		class TabWidget;
+		class Picture;
+		class GridLayout;
+	}
 }
 
@@ -122,5 +122,26 @@
 
   core::DataType const &GetOutputDataType() const;
-
+	
+	/*!
+	\enum LogFormat
+	\brief log formats
+	*/
+	enum class LogFormat {
+		NONE, /*!< by default, no logging */
+		RAW, /*!< raw format */
+		JPG, /*!< jpg format */
+	};
+	
+	/*!
+	* \brief Set log format
+	*
+	* Set the log format. \n
+	* Logging of the camera will be disabled if this method is not called. \n
+	* Calling this method enables logging of camera.
+	*
+	* \param LogFormat log format
+	*/
+  void SetLogFormat(LogFormat logFormat);
+void ProcessUpdate(core::io_data* data);
 protected:
   /*!
@@ -138,4 +159,5 @@
   gui::GroupBox *setup_groupbox;
   gui::GridLayout *setup_layout;
+	LogFormat logFormat;
 };
 } // end namespace sensor
Index: trunk/include/FlairSensorActuator/VrpnClient.h
===================================================================
--- trunk/include/FlairSensorActuator/VrpnClient.h	(revision 42)
+++ trunk/include/FlairSensorActuator/VrpnClient.h	(revision 44)
@@ -18,12 +18,11 @@
 
 namespace flair {
-namespace core {
-class FrameworkManager;
-class SerialPort;
-}
-namespace gui {
-class TabWidget;
-class Layout;
-}
+	namespace core {
+		class SerialPort;
+	}
+	namespace gui {
+		class TabWidget;
+		class Layout;
+	}
 }
 
@@ -35,5 +34,7 @@
 /*! \class VrpnClient
 *
-* \brief Class to connect to a Vrpn server
+* \brief Class to connect to a Vrpn server. The Thread is created with 
+*  the FrameworkManager as parent. FrameworkManager must be created before.
+* Only one instance of this class is allowed by program.
 */
 class VrpnClient : public core::Thread {
@@ -46,5 +47,4 @@
   * Construct a VrpnClient. Connection is done by IP.
   *
-  * \param parent parent
   * \param name name
   * \param address server address
@@ -52,5 +52,5 @@
   * \param priority priority of the Thread
   */
-  VrpnClient(const core::FrameworkManager *parent, std::string name,
+  VrpnClient(std::string name,
              std::string address, uint16_t us_period, uint8_t priority);
 
@@ -60,5 +60,4 @@
   * Construct a VrpnClient. Connection is done by XBee modem.
   *
-  * \param parent parent
   * \param name name
   * \param serialport SerialPort for XBee modem
@@ -66,5 +65,5 @@
   * \param priority priority of the Thread
   */
-  VrpnClient(const core::FrameworkManager *parent, std::string name,
+  VrpnClient(std::string name,
              core::SerialPort *serialport, uint16_t us_period,
              uint8_t priority);
@@ -108,4 +107,12 @@
   class VrpnClient_impl *pimpl_;
 };
+
+/*!
+* \brief get VrpnClient
+*
+* \return the VrpnClient
+*/
+VrpnClient *GetVrpnClient(void);
+
 } // end namespace sensor
 } // end namespace flair
Index: trunk/include/FlairSensorActuator/VrpnObject.h
===================================================================
--- trunk/include/FlairSensorActuator/VrpnObject.h	(revision 42)
+++ trunk/include/FlairSensorActuator/VrpnObject.h	(revision 44)
@@ -19,15 +19,15 @@
 
 namespace flair {
-namespace core {
-class cvmatrix;
-class Vector3D;
-class Euler;
-class Quaternion;
-}
-namespace gui {
-class TabWidget;
-class Tab;
-class DataPlot1D;
-}
+	namespace core {
+		class cvmatrix;
+		class Vector3D;
+		class Euler;
+		class Quaternion;
+	}
+	namespace gui {
+		class TabWidget;
+		class Tab;
+		class DataPlot1D;
+	}
 }
 
@@ -41,5 +41,6 @@
 /*! \class VrpnObject
 *
-* \brief Class for VRPN object
+* \brief Class for VRPN object. The IODevice is created with 
+*  the VrpnClient as parent. VrpnClient must be created before.
 */
 class VrpnObject : public core::IODevice {
@@ -53,9 +54,8 @@
   * Construct a VrpnObject. Connection is done by IP.
   *
-  * \param parent parent
   * \param name VRPN object name, should be the same as defined in the server
   * \param tab Tab for the user interface
   */
-  VrpnObject(const VrpnClient *parent, std::string name,
+  VrpnObject(std::string name,
              const gui::TabWidget *tab);
 
@@ -65,10 +65,9 @@
   * Construct a VrpnObject. Connection is done by IP.
   *
-  * \param parent parent
   * \param name name
   * \param id VRPN object id, should be the same as defined in the server
   * \param tab Tab for the user interface
   */
-  VrpnObject(const VrpnClient *parent, std::string name, uint8_t id,
+  VrpnObject(std::string name, uint8_t id,
              const gui::TabWidget *tab);
 
Index: trunk/include/FlairSimulator/FixedCamera.h
===================================================================
--- trunk/include/FlairSimulator/FixedCamera.h	(revision 42)
+++ trunk/include/FlairSimulator/FixedCamera.h	(revision 44)
@@ -26,5 +26,5 @@
 class FixedCamera : public VisualizationCamera {
 public:
-  FixedCamera(std::string name,core::Vector3D position,core::Vector3D lookat=core::Vector3D(0,0,0),float rotateSpeed = -500.0f, float zoomSpeed = .05f);
+  FixedCamera(std::string name,core::Vector3D position,core::Vector3D lookat=core::Vector3D(0,0,0),float rotateSpeed = -3.0f, float zoomSpeed = .05f);
   ~FixedCamera();
 
@@ -32,12 +32,10 @@
 
 private:
-  float sat(float value);
   irr::core::position2df RotateStart;
-  irr::core::vector3df rotation,target;
   bool Rotating;
   float rotateSpeed;
   float zoomSpeed;
   float fov;
-  bool init;
+  irr::core::vector3df target,cameraAxeY;
 };
 
Index: trunk/include/FlairVisionFilter/CvtColor.h
===================================================================
--- trunk/include/FlairVisionFilter/CvtColor.h	(revision 44)
+++ trunk/include/FlairVisionFilter/CvtColor.h	(revision 44)
@@ -0,0 +1,89 @@
+/*!
+ * \file CvtColor.h
+ * \brief Image color conversion
+ * \author Guillaume Sanahuja, Copyright Heudiasyc UMR UTC/CNRS 7253
+ * \date 2014/07/17
+ * \version 4.0
+ */
+
+
+#ifndef CVTCOLOR_H
+#define CVTCOLOR_H
+
+#include <IODevice.h>
+
+namespace flair
+{
+    namespace core
+    {
+        class cvimage;
+    }
+}
+
+namespace flair
+{
+namespace filter
+{
+    /*! \class CvtColor
+    *
+    * \brief Image color conversion
+    *
+    * The conversion is done using the DSP of the DM3730.
+    */
+    class CvtColor : public core::IODevice
+    {
+        public:
+            /*!
+            \enum Conversion_t
+            \brief Conversion formats
+            */
+            enum class Conversion_t {
+                BGR,/*!< BGR 24 bits */
+                GRAY,/*!< gray 8 bits */
+                } ;
+
+            /*!
+            * \brief Constructor
+            *
+            * Construct an Ahrs.
+            *
+            * \param parent parent
+            * \param name name
+            * \param conversion conversion format
+            */
+            CvtColor(const core::IODevice* parent,std::string name,Conversion_t conversion);
+
+            /*!
+            * \brief Destructor
+            *
+            */
+            ~CvtColor();
+
+            /*!
+            * \brief Output image
+            *
+            * Output matrix is of the same size as declared in constructor. \n
+            * Its type depends of the conversion type.
+            *
+            * \return the output image
+            */
+            core::cvimage* Output(void);
+
+            core::DataType const &GetOutputDataType() const;
+
+        private:
+            /*!
+            * \brief Update using provided datas
+            *
+            * Reimplemented from IODevice.
+            *
+            * \param data data from the parent to process
+            */
+            void UpdateFrom(const core::io_data *data);
+
+            core::cvimage *output;
+            Conversion_t conversion;
+    };
+} // end namespace filter
+} // end namespace flair
+#endif // CVTCOLOR_H
Index: trunk/include/FlairVisionFilter/HoughLines.h
===================================================================
--- trunk/include/FlairVisionFilter/HoughLines.h	(revision 44)
+++ trunk/include/FlairVisionFilter/HoughLines.h	(revision 44)
@@ -0,0 +1,75 @@
+/*!
+ * \file HoughLines.h
+ * \brief HoughLines algorithm
+ * \author Guillaume Sanahuja, Copyright Heudiasyc UMR UTC/CNRS 7253
+ * \date 2015/10/07
+ * \version 4.0
+ */
+
+
+#ifndef HOUGHLINES_H
+#define HOUGHLINES_H
+
+#include <IODevice.h>
+#include <cv.h>
+
+namespace flair {
+    namespace core {
+        class cvimage;
+        class cvmatrix;
+    }
+    namespace gui {
+        class LayoutPosition;
+        class SpinBox;
+        class DoubleSpinBox;
+    }
+}
+
+namespace flair { namespace filter {
+    /*! \class HoughLines
+    *
+    * \brief HoughLines algorithm
+    *
+    * HoughLines is done using the DSP of the DM3730.
+    */
+    class HoughLines : public core::IODevice {
+        public:
+            /*!
+            * \brief Constructor
+            *
+            * Construct an OpticalFlow filter at given position. \n
+            * After calling this function, position will be deleted as it is no longer usefull. \n
+            *
+            * \param parent parent
+            * \param position position
+            * \param name name
+            */
+            HoughLines(const core::IODevice* parent,const gui::LayoutPosition* position,std::string name);
+
+            /*!
+            * \brief Destructor
+            *
+            */
+            ~HoughLines();
+
+            bool isLineDetected(void) const;
+            float GetOrientation(void) const;
+            float GetDistance(void) const;
+            core::cvmatrix *Output(void) const;
+
+        private:
+            void UpdateFrom(const core::io_data *data);
+            gui::SpinBox *fullRhoStep,*trackingRhoStep,*nbPoints;
+            gui::DoubleSpinBox *fullThetaStep,*trackingThetaStep,*trackingDeltaTheta;
+            bool isTracking,lostLine,initLine,noLine;
+            int nbLines;
+            float yawMean,prevYawMean;
+            float prevRhoMean,rhoMean;
+            float prevThetaMean,thetaMean;
+            float distance,orientation;
+            CvMat* linesStorage;
+            core::cvmatrix *output;
+    };
+} // end namespace filter
+} // end namespace flair
+#endif // HOUGHLINES_H
Index: trunk/include/FlairVisionFilter/ImgThreshold.h
===================================================================
--- trunk/include/FlairVisionFilter/ImgThreshold.h	(revision 44)
+++ trunk/include/FlairVisionFilter/ImgThreshold.h	(revision 44)
@@ -0,0 +1,71 @@
+/*!
+ * \file ImgThreshold.h
+ * \brief ImgThreshold algorithm
+ * \author Guillaume Sanahuja, Copyright Heudiasyc UMR UTC/CNRS 7253
+ * \date 2015/10/07
+ * \version 4.0
+ */
+
+
+#ifndef IMGTHRESHOLD_H
+#define IMGTHRESHOLD_H
+
+#include <IODevice.h>
+#include <cv.h>
+
+namespace flair {
+    namespace core {
+        class cvimage;
+    }
+    namespace gui {
+        class LayoutPosition;
+        class SpinBox;
+    }
+}
+
+namespace flair { namespace filter {
+    /*! \class ImgThreshold
+    *
+    * \brief ImgThreshold algorithm
+    *
+    * ImgThreshold is done using the DSP of the DM3730.
+    */
+    class ImgThreshold : public core::IODevice {
+        public:
+            /*!
+            * \brief Constructor
+            *
+            * Construct an OpticalFlow filter at given position. \n
+            * After calling this function, position will be deleted as it is no longer usefull. \n
+            *
+            * \param parent parent
+            * \param position position
+            * \param name name
+            */
+            ImgThreshold(const core::IODevice* parent,const gui::LayoutPosition* position,std::string name);
+
+            /*!
+            * \brief Destructor
+            *
+            */
+            ~ImgThreshold();
+
+            /*!
+            * \brief Output image
+            *
+            * Output matrix is of the same size as the input image. \n
+            *
+            * \return the output image
+            */
+            core::cvimage* Output(void);
+
+            core::DataType const &GetOutputDataType() const;
+
+        private:
+            void UpdateFrom(const core::io_data *data);
+            core::cvimage *output;
+            gui::SpinBox *threshold;
+    };
+} // end namespace filter
+} // end namespace flair
+#endif // IMGTHRESHOLD_H
Index: trunk/include/FlairVisionFilter/OpticalFlow.h
===================================================================
--- trunk/include/FlairVisionFilter/OpticalFlow.h	(revision 44)
+++ trunk/include/FlairVisionFilter/OpticalFlow.h	(revision 44)
@@ -0,0 +1,82 @@
+/*!
+ * \file OpticalFlow.h
+ * \brief Lucas and Kanade optical flow algorithm
+ * \author Guillaume Sanahuja, Copyright Heudiasyc UMR UTC/CNRS 7253
+ * \date 2012/04/12
+ * \version 4.0
+ */
+
+
+#ifndef OPTICALFLOW_H
+#define OPTICALFLOW_H
+
+#include <IODevice.h>
+#include <cv.h>
+
+namespace flair
+{
+    namespace core
+    {
+        class cvimage;
+        class OneAxisRotation;
+    }
+    namespace gui
+    {
+        class LayoutPosition;
+        class SpinBox;
+    }
+    namespace filter
+    {
+        class OpticalFlowData;
+    }
+}
+
+namespace flair
+{
+namespace filter
+{
+    /*! \class OpticalFlow
+    *
+    * \brief Lucas and Kanade optical flow algorithm
+    *
+    * Optical flow is done using the DSP of the DM3730.
+    */
+    class OpticalFlow : public core::IODevice
+    {
+
+        public:
+            /*!
+            * \brief Constructor
+            *
+            * Construct an OpticalFlow filter at given position. \n
+            * After calling this function, position will be deleted as it is no longer usefull. \n
+            *
+            * \param parent parent
+            * \param position position
+            * \param name name
+            */
+            OpticalFlow(const core::IODevice* parent,const gui::LayoutPosition* position,std::string name);
+
+            /*!
+            * \brief Destructor
+            *
+            */
+            ~OpticalFlow();
+
+        private:
+            void UpdateFrom(const core::io_data *data);
+            OpticalFlowData *output;
+            gui::SpinBox *max_features;
+            core::OneAxisRotation* rotation;
+
+            CvPoint* pointsA;
+            CvPoint* pointsB;
+            char *found_feature;
+            unsigned int *feature_error;
+            IplImage *pyr,*pyr_old;
+
+            bool is_init;
+    };
+} // end namespace filter
+} // end namespace flair
+#endif // OPTICALFLOW_H
Index: trunk/include/FlairVisionFilter/OpticalFlowData.h
===================================================================
--- trunk/include/FlairVisionFilter/OpticalFlowData.h	(revision 44)
+++ trunk/include/FlairVisionFilter/OpticalFlowData.h	(revision 44)
@@ -0,0 +1,144 @@
+/*!
+ * \file OpticalFlowData.h
+ * \brief Class defining pptical flow datas
+ * \author Guillaume Sanahuja, Copyright Heudiasyc UMR UTC/CNRS 7253
+ * \date 2012/04/12
+ * \version 4.0
+ */
+
+#ifndef OPTICALFLOWDATA_H
+#define OPTICALFLOWDATA_H
+
+#include <cxcore.h>
+#include <io_data.h>
+
+namespace flair { namespace filter {
+    /*! \class OpticalFlowData
+    *
+    * \brief Class defining optical flow datas
+    *
+    * Optical flow datas are composed of the following: \n
+    * PointsA: tracked points on first image
+    * PointsB: tracked points on second image
+    * FoundFeature: array representing if a point on first image is found on second image
+    * FeatureError: array representing correlation error for each point (confidence)
+    */
+    class OpticalFlowData: public core::io_data {
+    public:
+        class Type: public core::DataType {
+            size_t GetSize() const {return 0;} //TODO
+            std::string GetDescription() const {return "optical flow";}
+        };
+
+        /*!
+        * \brief Constructor
+        *
+        * Construct OpticalFlowData.
+        *
+        * \param parent parent
+        * \param max_features maximum number of features to track
+        * \param name name
+        * \param n number of samples for the io_data
+        */
+        OpticalFlowData(const core::Object* parent,uint32_t max_features,std::string name="",uint32_t n=1);
+
+        /*!
+        * \brief Destructor
+        *
+        */
+        ~OpticalFlowData();
+
+        /*!
+        * \brief Points on first image
+        *
+    */
+        CvPoint* PointsA(void) const;
+
+        /*!
+        * \brief Points on second image
+        *
+        */
+        CvPoint2D32f* PointsB(void) const;
+
+        /*!
+        * \brief Features found
+        *
+        * value of the array is one if feature is found
+        */
+        char *FoundFeature(void) const;
+
+        /*!
+        * \brief Correlation error
+        *
+        */
+        uint32_t *FeatureError(void) const;
+
+        /*!
+        * \brief Set points of interest of frst image
+        *
+        * \param points points
+        */
+        void SetPointsA(const CvPoint *points);
+
+        /*!
+        * \brief Set points of interest of second image
+        *
+        * \param points points
+        */
+        void SetPointsB(const CvPoint2D32f *points);
+
+        /*!
+        * \brief Set found features
+        *
+        * \param found_features found features
+        */
+        void SetFoundFeature(const char *found_features);
+
+        /*!
+        * \brief Set features error
+        *
+        * \param features_error features error
+        */
+        void SetFeatureError(const unsigned int *features_error);
+
+        /*!
+        * \brief Number of maximum features
+        *
+        */
+        uint32_t MaxFeatures(void) const;
+
+        /*!
+        * \brief Number of tracked features
+        *
+        */
+        uint32_t NbFeatures(void) const;
+
+        /*!
+        * \brief Set number of tracked features
+        *
+        * \param value number of tracked features
+        */
+        void SetNbFeatures(uint32_t value);
+
+        /*!
+        * \brief Change number of maximum features
+        *
+        * \param value new number of maximum tracked features
+        */
+        void Resize(uint32_t value);
+
+        OpticalFlowData::Type const &GetDataType() const {return dataType;}
+
+    private:
+        uint32_t max_features;
+        uint32_t nb_features;
+        CvPoint* pointsA;
+        CvPoint2D32f* pointsB;
+        char *found_features;
+        uint32_t *features_error;
+        void CopyDatas(char* dst) const;
+        Type dataType;
+    };
+} // end namespace filter
+} // end namespace flair
+#endif // OPTICALFLOWDATA_H
Index: trunk/include/FlairVisionFilter/OpticalFlowSpeed.h
===================================================================
--- trunk/include/FlairVisionFilter/OpticalFlowSpeed.h	(revision 44)
+++ trunk/include/FlairVisionFilter/OpticalFlowSpeed.h	(revision 44)
@@ -0,0 +1,89 @@
+/*!
+ * \file OpticalFlowSpeed.h
+ * \brief Optical flow speed calculation
+ * \author Guillaume Sanahuja, Copyright Heudiasyc UMR UTC/CNRS 7253
+ * \date 2012/04/12
+ * \version 4.0
+ */
+
+
+#ifndef OPTICALFLOWSPEED_H
+#define OPTICALFLOWSPEED_H
+
+#include <IODevice.h>
+
+namespace flair
+{
+    namespace core
+    {
+        class cvmatrix;
+    }
+}
+
+namespace flair
+{
+namespace filter
+{
+    class OpticalFlow;
+
+    /*! \class OpticalFlowSpeed
+    *
+    * \brief Optical flow speed calculation
+    *
+    * Speed is the mean of all optical flow values.
+    */
+    class OpticalFlowSpeed : public core::IODevice
+    {
+        public:
+            /*!
+            * \brief Constructor
+            *
+            * Construct OpticalFlowSpeed.
+            *
+            * \param parent parent
+            * \param name name
+            */
+            OpticalFlowSpeed(const core::IODevice* parent,std::string name);
+
+            /*!
+            * \brief Destructor
+            *
+            */
+            ~OpticalFlowSpeed();
+
+            /*!
+            * \brief Speed along x axis
+            *
+            */
+            float Vx(void) const;
+
+            /*!
+            * \brief Speed along y axis
+            *
+            */
+            float Vy(void) const;
+
+            /*!
+            * \brief Output matrix
+            *
+            * Matrix is of sze (2,1). \n
+            * First line is speed along x axis. \n
+            * Second line is speed along y axis. \n
+            */
+            core::cvmatrix *Output() const;
+
+        private:
+            /*!
+            * \brief Update using provided datas
+            *
+            * Reimplemented from IODevice.
+            *
+            * \param data data from the parent to process
+            */
+            void UpdateFrom(const core::io_data *data);
+
+            core::cvmatrix *output;
+    };
+} // end namespace filter
+} // end namespace flair
+#endif // OPTICALFLOWSPEED_H
Index: trunk/include/FlairVisionFilter/Sobel.h
===================================================================
--- trunk/include/FlairVisionFilter/Sobel.h	(revision 44)
+++ trunk/include/FlairVisionFilter/Sobel.h	(revision 44)
@@ -0,0 +1,72 @@
+/*!
+ * \file Sobel.h
+ * \brief Sobel algorithm
+ * \author Gildas Bayard, Copyright Heudiasyc UMR UTC/CNRS 7253
+ * \date 2015/10/07
+ * \version 4.0
+ */
+
+
+#ifndef SOBEL_H
+#define SOBEL_H
+
+#include <IODevice.h>
+#include <cv.h>
+
+namespace flair {
+    namespace core {
+        class cvimage;
+    }
+    namespace gui {
+        class LayoutPosition;
+        class SpinBox;
+    }
+}
+
+namespace flair { namespace filter {
+    /*! \class Sobel
+    *
+    * \brief Sobel algorithm
+    *
+    * Sobel is done using the DSP of the DM3730.
+    */
+    class Sobel : public core::IODevice {
+        public:
+            /*!
+            * \brief Constructor
+            *
+            * Construct an OpticalFlow filter at given position. \n
+            * After calling this function, position will be deleted as it is no longer usefull. \n
+            *
+            * \param parent parent
+            * \param position position
+            * \param name name
+            */
+            Sobel(const core::IODevice* parent,const gui::LayoutPosition* position,std::string name);
+
+            /*!
+            * \brief Destructor
+            *
+            */
+            ~Sobel();
+
+            /*!
+            * \brief Output image
+            *
+            * Output matrix is of the same size as the input image. \n
+            *
+            * \return the output image
+            */
+            core::cvimage* Output(void);
+
+            core::DataType const &GetOutputDataType() const;
+
+        private:
+            void UpdateFrom(const core::io_data *data);
+            core::cvimage *output;
+            gui::SpinBox *dx;
+            gui::SpinBox *dy;
+    };
+} // end namespace filter
+} // end namespace flair
+#endif // SOBEL_H
Index: trunk/include/FlairVisionFilter/init.h
===================================================================
--- trunk/include/FlairVisionFilter/init.h	(revision 44)
+++ trunk/include/FlairVisionFilter/init.h	(revision 44)
@@ -0,0 +1,16 @@
+#include <string>
+
+/*!
+* \brief DSP setup
+*
+* Setup DSP executable file. \n
+* If this method is not called, no DSP processing will be available. \n
+*
+* \param file DSP executable file
+* \param globalTimeoutMs timeout for all DSP functions, in ms (timeout is only
+* used to display a warning. -1 to disable timeout
+*/
+void SetupDSP(std::string file,int globalTimeoutMs=-1);
+
+
+void CloseDSP(void);
