MonitoringStrategy
Revision 0:7b63a9dd265c, committed 2021-05-07
- 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
diff -r 000000000000 -r 7b63a9dd265c if/monitoringStrategyIf.h --- /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
diff -r 000000000000 -r 7b63a9dd265c inc/circleMonitoringStrategy.h --- /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
diff -r 000000000000 -r 7b63a9dd265c inc/monitoringContext.h --- /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
diff -r 000000000000 -r 7b63a9dd265c inc/squareMonitoringStrategy.h --- /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
diff -r 000000000000 -r 7b63a9dd265c src/circleMonitoringStrategy.cpp --- /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; +} +
diff -r 000000000000 -r 7b63a9dd265c src/monitoringContext.cpp --- /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; +} +
diff -r 000000000000 -r 7b63a9dd265c src/squareMonitoringStrategy.cpp --- /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; +}