mirror of
https://github.com/30hours/blah2.git
synced 2024-11-18 12:33:58 +00:00
Tracker skeleton complete but still intermittant segfault
This commit is contained in:
parent
1dfd25e0ed
commit
955e6b366f
4 changed files with 22 additions and 13 deletions
|
@ -185,13 +185,14 @@ int main(int argc, char **argv)
|
||||||
|
|
||||||
// setup process tracker
|
// setup process tracker
|
||||||
uint8_t m, n, nDelete;
|
uint8_t m, n, nDelete;
|
||||||
double maxAcc;
|
double maxAcc, rangeRes;
|
||||||
std::string smooth;
|
std::string smooth;
|
||||||
tree["process"]["tracker"]["initiate"]["M"] >> m;
|
tree["process"]["tracker"]["initiate"]["M"] >> m;
|
||||||
tree["process"]["tracker"]["initiate"]["N"] >> n;
|
tree["process"]["tracker"]["initiate"]["N"] >> n;
|
||||||
tree["process"]["tracker"]["delete"] >> nDelete;
|
tree["process"]["tracker"]["delete"] >> nDelete;
|
||||||
tree["process"]["tracker"]["initiate"]["maxAcc"] >> maxAcc;
|
tree["process"]["tracker"]["initiate"]["maxAcc"] >> maxAcc;
|
||||||
Tracker *tracker = new Tracker(m, n, nDelete, tCpi, maxAcc);
|
rangeRes = 299792458.0/fs;
|
||||||
|
Tracker *tracker = new Tracker(m, n, nDelete, tCpi, maxAcc, rangeRes);
|
||||||
|
|
||||||
// setup process spectrum analyser
|
// setup process spectrum analyser
|
||||||
double spectrumBandwidth = 2000;
|
double spectrumBandwidth = 2000;
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
/// @details The ID is 4 digit hexadecimal with 16^4 = 65536 combinations.
|
/// @details The ID is 4 digit hexadecimal with 16^4 = 65536 combinations.
|
||||||
/// @details The state can be TENTATIVE, ASSOCIATED, ACTIVE or COASTING.
|
/// @details The state can be TENTATIVE, ASSOCIATED, ACTIVE or COASTING.
|
||||||
/// @details Associated detections use null detections when no updates.
|
/// @details Associated detections use null detections when no updates.
|
||||||
|
/// @details Current is seperated from associated for smoothing.
|
||||||
/// @author 30hours
|
/// @author 30hours
|
||||||
/// @todo I feel promote() should be implemented in the tracker.
|
/// @todo I feel promote() should be implemented in the tracker.
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
// constructor
|
// constructor
|
||||||
Tracker::Tracker(uint32_t _m, uint32_t _n, uint32_t _nDelete, double _cpi, double _maxAccInit)
|
Tracker::Tracker(uint32_t _m, uint32_t _n, uint32_t _nDelete, double _cpi, double _maxAccInit, double _rangeRes)
|
||||||
{
|
{
|
||||||
m = _m;
|
m = _m;
|
||||||
n = _n;
|
n = _n;
|
||||||
|
@ -10,8 +10,9 @@ Tracker::Tracker(uint32_t _m, uint32_t _n, uint32_t _nDelete, double _cpi, doubl
|
||||||
cpi = _cpi;
|
cpi = _cpi;
|
||||||
maxAccInit = _maxAccInit;
|
maxAccInit = _maxAccInit;
|
||||||
timestamp = 0;
|
timestamp = 0;
|
||||||
|
rangeRes = _rangeRes;
|
||||||
|
|
||||||
double resolutionAcc = 1 * (1/(cpi*cpi));
|
double resolutionAcc = 1/(cpi*cpi);
|
||||||
uint16_t nAcc = (int)maxAccInit/resolutionAcc;
|
uint16_t nAcc = (int)maxAccInit/resolutionAcc;
|
||||||
for (int i = 0; i < 2*nAcc+1; i++)
|
for (int i = 0; i < 2*nAcc+1; i++)
|
||||||
{
|
{
|
||||||
|
@ -27,7 +28,6 @@ Tracker::~Tracker()
|
||||||
|
|
||||||
Track *Tracker::process(Detection *detection, uint64_t currentTime)
|
Track *Tracker::process(Detection *detection, uint64_t currentTime)
|
||||||
{
|
{
|
||||||
timestamp = currentTime;
|
|
||||||
doNotInitiate.clear();
|
doNotInitiate.clear();
|
||||||
for (size_t i = 0; i < detection->get_nDetections(); i++)
|
for (size_t i = 0; i < detection->get_nDetections(); i++)
|
||||||
{
|
{
|
||||||
|
@ -36,7 +36,11 @@ Track *Tracker::process(Detection *detection, uint64_t currentTime)
|
||||||
|
|
||||||
if (track.get_n() > 0)
|
if (track.get_n() > 0)
|
||||||
{
|
{
|
||||||
update(detection, timestamp);
|
update(detection, currentTime);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
timestamp = currentTime;
|
||||||
}
|
}
|
||||||
initiate(detection);
|
initiate(detection);
|
||||||
|
|
||||||
|
@ -50,13 +54,13 @@ void Tracker::update(Detection *detection, uint64_t current)
|
||||||
std::vector<double> snr = detection->get_snr();
|
std::vector<double> snr = detection->get_snr();
|
||||||
|
|
||||||
// init
|
// init
|
||||||
double delayPredict, dopplerPredict;
|
double delayPredict, dopplerPredict, acc;
|
||||||
double acc;
|
|
||||||
uint32_t nRemove = 0;
|
uint32_t nRemove = 0;
|
||||||
std::string state;
|
std::string state;
|
||||||
|
|
||||||
// get time between detections
|
// get time between detections
|
||||||
double T = (double) current - timestamp;
|
double T = ((double)(current - timestamp))/1000;
|
||||||
|
timestamp = current;
|
||||||
|
|
||||||
// loop over each track
|
// loop over each track
|
||||||
for (int i = 0; i < track.get_n(); i++)
|
for (int i = 0; i < track.get_n(); i++)
|
||||||
|
@ -66,10 +70,10 @@ void Tracker::update(Detection *detection, uint64_t current)
|
||||||
double delayTrack = detectionCurrent.get_delay().front();
|
double delayTrack = detectionCurrent.get_delay().front();
|
||||||
double dopplerTrack = detectionCurrent.get_doppler().front();
|
double dopplerTrack = detectionCurrent.get_doppler().front();
|
||||||
acc = track.get_acceleration(i);
|
acc = track.get_acceleration(i);
|
||||||
delayPredict = delayTrack+(1/(2*3.14))*(dopplerTrack+0.5*acc*T*T);
|
delayPredict = delayTrack+((dopplerTrack*T)+(0.5*acc*T*T))/rangeRes;
|
||||||
dopplerPredict = dopplerTrack+acc*T;
|
dopplerPredict = dopplerTrack+(acc*T);
|
||||||
Detection prediction(delayPredict, dopplerPredict, 0);
|
Detection prediction(delayPredict, dopplerPredict, 0);
|
||||||
|
|
||||||
// loop over detections to associate
|
// loop over detections to associate
|
||||||
for (size_t j = 0; j < detection->get_nDetections(); j++)
|
for (size_t j = 0; j < detection->get_nDetections(); j++)
|
||||||
{
|
{
|
||||||
|
|
|
@ -32,6 +32,9 @@ private:
|
||||||
/// @brief Maximum acceleration to initiate track (Hz/s).
|
/// @brief Maximum acceleration to initiate track (Hz/s).
|
||||||
double maxAccInit;
|
double maxAccInit;
|
||||||
|
|
||||||
|
/// @brief Range resolution for kinematics equations (m).
|
||||||
|
double rangeRes;
|
||||||
|
|
||||||
/// @brief Acceleration values to initiate track (Hz/s).
|
/// @brief Acceleration values to initiate track (Hz/s).
|
||||||
std::vector<double> accInit;
|
std::vector<double> accInit;
|
||||||
|
|
||||||
|
@ -50,7 +53,7 @@ public:
|
||||||
/// @param delayMax Maximum clutter filter delay (bins).
|
/// @param delayMax Maximum clutter filter delay (bins).
|
||||||
/// @param nSamples Number of samples per CPI.
|
/// @param nSamples Number of samples per CPI.
|
||||||
/// @return The object.
|
/// @return The object.
|
||||||
Tracker(uint32_t m, uint32_t n, uint32_t nDelete, double cpi, double maxAccInit);
|
Tracker(uint32_t m, uint32_t n, uint32_t nDelete, double cpi, double maxAccInit, double rangeRes);
|
||||||
|
|
||||||
/// @brief Destructor.
|
/// @brief Destructor.
|
||||||
/// @return Void.
|
/// @return Void.
|
||||||
|
|
Loading…
Reference in a new issue