MonitoringStrategy

Files at this revision

API Documentation at this revision

Comitter:
lmarketin
Date:
Fri May 07 13:49:51 2021 +0000
Commit message:
AreaMonitoring app uz pomoc ultrazvocnog senzora projerava dali se u nadziranom podrucju nalazi neki objekt. Upravljenje je moguce izvesti manualno, te je moguce podesiti i automatsko izvodenje.

Changed in this revision

if/monitoringStrategyIf.h Show annotated file Show diff for this revision Revisions of this file
inc/circleMonitoringStrategy.h Show annotated file Show diff for this revision Revisions of this file
inc/monitoringContext.h Show annotated file Show diff for this revision Revisions of this file
inc/squareMonitoringStrategy.h Show annotated file Show diff for this revision Revisions of this file
src/circleMonitoringStrategy.cpp Show annotated file Show diff for this revision Revisions of this file
src/monitoringContext.cpp Show annotated file Show diff for this revision Revisions of this file
src/squareMonitoringStrategy.cpp Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/if/monitoringStrategyIf.h	Fri May 07 13:49:51 2021 +0000
@@ -0,0 +1,23 @@
+#ifndef MONITORINGSTRATEGYIF_H
+#define MONITORINGSTRATEGYIF_H
+
+#include<map>
+#include "configuration.h"
+#include "objectPosition.h"
+
+/*
+* This class is Monitoring Strategy interface and declares operations common to all monitoring strategies
+*/
+class MonitoringStrategyIf
+{
+public:
+    virtual bool presenceCheck(const std::map<float, float>& distancesMap, ObjectPosition* objectPosition) = 0;
+    void setConfiguration(Configuration* config)
+    {
+        m_config = config;
+    }
+
+protected:
+    Configuration* m_config;
+};
+#endif
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/circleMonitoringStrategy.h	Fri May 07 13:49:51 2021 +0000
@@ -0,0 +1,21 @@
+#ifndef CIRCLEMONITORINGSTRATEGY_H
+#define CIRCLEMONITORINGSTRATEGY_H
+
+#include "monitoringStrategyIf.h"
+
+/*
+* This class is implemntation of monitoringStrategIf for Circle monitoring. Class is used to find nearest object in monitoring area
+*/
+class CircleMonitoringStrategy : public MonitoringStrategyIf
+{
+public:
+    CircleMonitoringStrategy(Configuration* config);
+    ~CircleMonitoringStrategy();
+    
+    /**Checking objects pressence in monitoring area by comparing  objects distance from senzor and minimum allowed distrance. 
+    * If any object within the restricted area returns true. If more objects within the restricted area, postion of nearest 
+    * is stored in objectPosition.
+    */
+    bool presenceCheck(const std::map<float, float>& distancesMap, ObjectPosition* objectPosition);
+};
+#endif
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/monitoringContext.h	Fri May 07 13:49:51 2021 +0000
@@ -0,0 +1,27 @@
+#ifndef MONITORINGCONTEXT_H
+#define MONITORINGCONTEXT_H
+
+#include "configuration.h"
+#include "objectPosition.h"
+#include "monitoringStrategyIf.h"
+
+/*
+* This class is used as Context for Monitoring Strategy for providing to client methods of interest
+*/
+class MonitoringContext
+{
+public:
+    MonitoringContext(MonitoringStrategyIf* strategy);
+    ~MonitoringContext();
+
+    /**Executes algorithm for presence check*/
+    bool executePresenceCheck(const std::map<float, float>& distancesMap, ObjectPosition* objectPosition);
+    
+    /**Setting new monitoring strategy into run time*/
+    void setMonitoringStrategy(MonitoringStrategyIf* strategy);
+
+private:
+    MonitoringStrategyIf* m_strategy;
+
+};
+#endif
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/squareMonitoringStrategy.h	Fri May 07 13:49:51 2021 +0000
@@ -0,0 +1,24 @@
+#ifndef SQUEREMONITORINGSTRATEGY_H
+#define SQUEREMONITORINGSTRATEGY_H
+
+#include "monitoringStrategyIf.h"
+
+/*
+* This class is implemntation of monitoringStrategIf for Square monitoring. Class is used to find nearest object in monitoring area
+*/
+class SquereMonitoringStrategy : public MonitoringStrategyIf
+{
+public:
+    SquereMonitoringStrategy(Configuration* config);
+    ~SquereMonitoringStrategy();
+    bool presenceCheck(const std::map<float, float>& distancesMap, ObjectPosition* objectPosition);
+    
+    private:
+    bool checkIsObjectUnderSquere(ObjectPosition tmpObjectPosition);
+    
+    int m_x;
+    int m_y;
+    const static double PI  =3.141592653589793238463;
+
+};
+#endif
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/circleMonitoringStrategy.cpp	Fri May 07 13:49:51 2021 +0000
@@ -0,0 +1,34 @@
+#include "circleMonitoringStrategy.h"
+#include "mbed.h"
+
+CircleMonitoringStrategy::CircleMonitoringStrategy(Configuration* config)
+{
+    m_config = config;
+}
+
+CircleMonitoringStrategy::~CircleMonitoringStrategy()
+{
+}
+
+bool CircleMonitoringStrategy::presenceCheck(const std::map<float, float>& distancesMap, ObjectPosition* objectPosition)
+{
+    Serial pc(USBTX, USBRX);
+    float minDist = m_config->getDistance();
+    float angle;
+    std::map<float, float>::iterator it = distancesMap.begin();
+        while (it != distancesMap.end()) {
+            if(it->second < minDist) {
+                minDist = it->second;
+                angle = it->first;
+            }
+            it++;
+        }
+    if(minDist != m_config->getDistance()) {
+        objectPosition->setAngle(angle);
+        objectPosition->setDistance(minDist);
+        //poppraviti i za squere
+        return true;
+    }
+    return false;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/monitoringContext.cpp	Fri May 07 13:49:51 2021 +0000
@@ -0,0 +1,26 @@
+#include "monitoringContext.h"
+
+MonitoringContext::MonitoringContext(MonitoringStrategyIf* strategy)
+{
+    m_strategy = strategy;
+}
+
+MonitoringContext::~MonitoringContext()
+{
+    delete[] m_strategy;
+}
+
+bool MonitoringContext::executePresenceCheck(const std:: map<float, float>& distancesMap, ObjectPosition* objectPosition)
+{
+    if(this->m_strategy->presenceCheck(distancesMap, objectPosition)) {
+        return true;
+    }
+    return false;
+}
+
+void MonitoringContext::setMonitoringStrategy(MonitoringStrategyIf* strategy)
+{
+    delete this->m_strategy;
+    this->m_strategy = m_strategy;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/squareMonitoringStrategy.cpp	Fri May 07 13:49:51 2021 +0000
@@ -0,0 +1,43 @@
+#include "squareMonitoringStrategy.h"
+#include <math.h>
+
+SquereMonitoringStrategy::SquereMonitoringStrategy(Configuration* config)
+{
+    m_config = config;
+    m_x = cos(PI/4) * m_config->getDistance();
+    m_y = sin(PI/4) * m_config->getDistance();
+}
+
+SquereMonitoringStrategy::~SquereMonitoringStrategy()
+{
+}
+
+bool SquereMonitoringStrategy::presenceCheck(const std::map<float, float>& distancesMap, ObjectPosition* objectPosition)
+{
+    float minDist = m_config->getDistance();
+    float angle;
+    std::map<float, float>::iterator it = distancesMap.begin();
+        while (it != distancesMap.end()) {
+            if(it->second < minDist) {
+                ObjectPosition tmpObjectPosition(it->first, it->second);
+                if(checkIsObjectUnderSquere(tmpObjectPosition)){
+                    minDist = it->second;
+                    angle = it->first;
+                    }
+            }
+            it++;
+        }
+    if(minDist != m_config->getDistance()) {
+        objectPosition->setAngle(angle);
+        objectPosition->setDistance(minDist);
+        return true;
+    }
+    return false;
+}
+
+bool SquereMonitoringStrategy::checkIsObjectUnderSquere(ObjectPosition tmpObjectPosition){
+    if((tmpObjectPosition.getXCoordinate() < m_x) && (tmpObjectPosition.getYCoordinate() < m_y)){
+        return true;
+        }
+    return false;
+}