Separated out perceived object
This commit is contained in:
parent
5e09a4d454
commit
63726b0663
@ -43,6 +43,7 @@ include_directories(
|
||||
add_library(RoboidControl STATIC
|
||||
"Roboid.cpp"
|
||||
"Perception.cpp"
|
||||
"PerceivedObject.cpp"
|
||||
"Propulsion.cpp"
|
||||
"Motor.cpp"
|
||||
"DifferentialDrive.cpp"
|
||||
|
@ -55,8 +55,8 @@ Polar DifferentialDrive::GetVelocity() {
|
||||
float leftSpeed = leftMotor->GetSpeed();
|
||||
float rightSpeed = rightMotor->GetSpeed();
|
||||
float speed = (leftSpeed + rightSpeed) / 2;
|
||||
float direction = speed >= 0 ? 0 : 180;
|
||||
float distance = abs(speed);
|
||||
float direction = speed >= 0 ? 0.0F : 180.0F;
|
||||
float distance = fabsf(speed);
|
||||
Polar velocity = Polar(direction, distance);
|
||||
return velocity;
|
||||
}
|
||||
|
54
PerceivedObject.cpp
Normal file
54
PerceivedObject.cpp
Normal file
@ -0,0 +1,54 @@
|
||||
#include "PerceivedObject.h"
|
||||
|
||||
#include <math.h>
|
||||
|
||||
/***
|
||||
* Oject perception
|
||||
***/
|
||||
|
||||
PerceivedObject::PerceivedObject() {
|
||||
this->id = 0;
|
||||
this->confidence = maxConfidence;
|
||||
this->position = Polar(0, INFINITY);
|
||||
this->radius = INFINITY;
|
||||
}
|
||||
|
||||
PerceivedObject::PerceivedObject(Sensor *sensor, Polar position, float radius)
|
||||
: PerceivedObject() {
|
||||
this->sensor = sensor;
|
||||
this->position = position;
|
||||
this->radius = radius;
|
||||
}
|
||||
|
||||
bool PerceivedObject::IsTheSameAs(PerceivedObject *otherObj) {
|
||||
if (id != 0 && id == otherObj->id)
|
||||
return true;
|
||||
if (fabsf(position.distance - otherObj->position.distance) > equalityDistance)
|
||||
return false;
|
||||
if (fabsf(position.angle - otherObj->position.angle) > equalityAngle)
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool PerceivedObject::DegradeConfidence(float deltaTime) {
|
||||
unsigned char confidenceDrop =
|
||||
(unsigned char)((float)confidenceDropSpeed * deltaTime);
|
||||
// Make sure the confidence always drops
|
||||
if (confidenceDrop == 0)
|
||||
confidenceDrop = 1;
|
||||
|
||||
if (confidence <= confidenceDrop) {
|
||||
// object is dead
|
||||
confidence = 0;
|
||||
return false;
|
||||
} else {
|
||||
confidence -= confidenceDrop;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
void PerceivedObject::Refresh(Polar position, float radius) {
|
||||
this->position = position;
|
||||
this->radius = radius;
|
||||
this->confidence = maxConfidence;
|
||||
}
|
26
PerceivedObject.h
Normal file
26
PerceivedObject.h
Normal file
@ -0,0 +1,26 @@
|
||||
#pragma once
|
||||
|
||||
#include "Polar.h"
|
||||
#include "Sensor.h"
|
||||
|
||||
class PerceivedObject {
|
||||
public:
|
||||
PerceivedObject();
|
||||
PerceivedObject(Sensor *sensor, Polar position, float radius = 0.1F);
|
||||
|
||||
static constexpr float equalityDistance = 0.3F;
|
||||
static constexpr float equalityAngle = 5.0F;
|
||||
bool IsTheSameAs(PerceivedObject *otherObj);
|
||||
|
||||
char id;
|
||||
|
||||
Polar position = Polar::zero;
|
||||
float radius;
|
||||
Sensor *sensor = nullptr;
|
||||
|
||||
static constexpr char maxConfidence = 255;
|
||||
static constexpr char confidenceDropSpeed = 2;
|
||||
char confidence;
|
||||
bool DegradeConfidence(float deltaTime);
|
||||
void Refresh(Polar position, float radius);
|
||||
};
|
@ -95,56 +95,6 @@ bool Perception::ObjectNearby(float direction, float range) {
|
||||
return false;
|
||||
}
|
||||
|
||||
/***
|
||||
* Oject perception
|
||||
***/
|
||||
|
||||
PerceivedObject::PerceivedObject() {
|
||||
this->id = 0;
|
||||
this->confidence = maxConfidence;
|
||||
this->position = Polar(0, INFINITY);
|
||||
this->radius = INFINITY;
|
||||
}
|
||||
|
||||
PerceivedObject::PerceivedObject(Sensor *sensor, Polar position, float radius)
|
||||
: PerceivedObject() {
|
||||
this->sensor = sensor;
|
||||
this->position = position;
|
||||
this->radius = radius;
|
||||
}
|
||||
|
||||
bool PerceivedObject::IsTheSameAs(PerceivedObject *otherObj) {
|
||||
if (id != 0 && id == otherObj->id)
|
||||
return true;
|
||||
if (abs(position.distance - otherObj->position.distance) > equalityDistance)
|
||||
return false;
|
||||
if (abs(position.angle - otherObj->position.angle) > equalityAngle)
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool PerceivedObject::DegradeConfidence(float deltaTime) {
|
||||
unsigned char confidenceDrop =
|
||||
(unsigned char)((float)confidenceDropSpeed * deltaTime);
|
||||
// Make sure the confidence always drops
|
||||
if (confidenceDrop == 0)
|
||||
confidenceDrop = 1;
|
||||
|
||||
if (confidence <= confidenceDrop) {
|
||||
// object is dead
|
||||
confidence = 0;
|
||||
return false;
|
||||
} else {
|
||||
confidence -= confidenceDrop;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
void PerceivedObject::Refresh(Polar position, float radius) {
|
||||
this->position = position;
|
||||
this->radius = radius;
|
||||
this->confidence = maxConfidence;
|
||||
}
|
||||
|
||||
void Perception::AddPerceivedObject(Sensor *sensor, Polar position) {
|
||||
// int objCount = PerceivedObjectCount();
|
||||
|
23
Perception.h
23
Perception.h
@ -1,5 +1,6 @@
|
||||
#pragma once
|
||||
|
||||
#include "PerceivedObject.h"
|
||||
#include "Placement.h"
|
||||
#include "Polar.h"
|
||||
#include "Quaternion.h"
|
||||
@ -10,28 +11,6 @@ namespace RoboidControl {
|
||||
|
||||
class Roboid;
|
||||
|
||||
class PerceivedObject {
|
||||
public:
|
||||
PerceivedObject();
|
||||
PerceivedObject(Sensor *sensor, Polar position, float radius = 0.1F);
|
||||
|
||||
static constexpr float equalityDistance = 0.3F;
|
||||
static constexpr float equalityAngle = 5.0F;
|
||||
bool IsTheSameAs(PerceivedObject *otherObj);
|
||||
|
||||
char id;
|
||||
|
||||
Polar position = Polar::zero;
|
||||
float radius;
|
||||
Sensor *sensor = nullptr;
|
||||
|
||||
static constexpr char maxConfidence = 255;
|
||||
static constexpr char confidenceDropSpeed = 2;
|
||||
char confidence;
|
||||
bool DegradeConfidence(float deltaTime);
|
||||
void Refresh(Polar position, float radius);
|
||||
};
|
||||
|
||||
/// @brief Module to which keeps track of objects around the roboid
|
||||
class Perception {
|
||||
public:
|
||||
|
Loading…
x
Reference in New Issue
Block a user