This file defines the non-inline member functions and static data members of the lobot::TTIEstimator class. More...
#include "Robots/LoBot/tti/LoTTIEstimator.H"
#include "Robots/LoBot/config/LoConfigHelpers.H"
#include "Robots/LoBot/util/LoGL.H"
#include "Robots/LoBot/util/LoString.H"
#include "Robots/LoBot/util/LoMath.H"
#include "Robots/LoBot/misc/LoExcept.H"
#include "Robots/LoBot/misc/singleton.hh"
#include "Robots/LoBot/util/range.hh"
#include "Robots/LoBot/util/triple.hh"
#include <GL/glu.h>
#include <GL/gl.h>
#include <iomanip>
#include <sstream>
#include <numeric>
#include <algorithm>
#include <functional>
#include <iterator>
Go to the source code of this file.
Classes | |
class | lobot::add_uniform_distribution |
Typedefs | |
typedef std::deque< float > | lobot::History |
Enumerations | |
enum | RenderMode |
Functions | |
static std::string | lobot::phase_label (int lgmd_phase) |
static std::string | lobot::tti_label (float tti) |
static std::string | lobot::tti_label (float tti, float confidence) |
static std::string | lobot::distance_label (int distance) |
static std::string | lobot::error_label (float actual, float predicted) |
static void | lobot::draw_history (const History &history) |
static void | lobot::draw_history (const History &actual, const History &predicted) |
This file defines the non-inline member functions and static data members of the lobot::TTIEstimator class.
Definition in file LoTTIEstimator.C.
float m_confidence_threshold |
Once we have a time-to-impact estimate for each locust, we can combine that estimate with the robot's current motion to determine the distances to obstacles in each locust's direction, thus, converting a vision sensor to a range sensor.
As mentioned earlier, the time-to-impact estimates are made on the basis of a Bayesian state estimation model that works by continually updating a probability distribution that specifies the likelihood of each TTI value. The TTI with the maximum likelihood is used to compute the corresponding distance.
However, we only want to use TTI values when their likelihoods are significant. That is, if the maximum likelihood in the entire probability distribution is really low (e.g., 1%), then it might not be a good thing to use that TTI estimate to try and determine the corresponding distance. Instead, we want to wait until the confidence level of the most likely time-to-impact is a reasonably high value before using it.
This setting specifies the minimum confidence we expect to see before a TTI estimate will be used to generate distance readings. It should be a number between zero and one.
Definition at line 176 of file LoTTIEstimator.C.
range<float> m_distance_range |
This setting specifies the min and max bounds for the distance "readings" computed by the Bayesian time-to-impact estimator. The units for this setting is mm.
Definition at line 181 of file LoTTIEstimator.C.
bool m_render_labels |
The labels used to show the current TTI and other relevant info can clutter the visualization quite a bit (especially when the locust model drawables are small). This flag can be used to turn these labels on/off. By default, the labels are off.
Definition at line 211 of file LoTTIEstimator.C.
RenderMode m_render_mode |
There are three visualization modes for the time-to-impact estimator. In the first mode, the estimator renders its current belief, i.e., the posterior probability distribution computed in each iteration of the Bayesian state update loop.
In the second mode, the estimator shows the history of recent time-to-impact values predicted by the Bayesian state update. To help gauge how well the Bayes filter is doing, the estimator will also render the actual TTI values.
In the third mode, the estimator shows the history of recent distance "readings" computed using the predicted times-to-impact and the actual distances to approaching obstacles (as reported by the laser range finder).
This setting specifies which of the above render modes to use. The value of this setting should be a string. As described above, the currently supported modes are: off ==> don't perform any rendering bel ==> render current belief tti ==> render time-to-impact histories dis ==> render distance histories
Definition at line 205 of file LoTTIEstimator.C.
float m_rising_threshold |
As mentioned above, the LGMD signal is partitioned into two phases, viz., LOOMING and BLANKING. We recognize transitions from LOOMING to BLANKING using the second derivative of the LGMD input signal and a spike rate threshold for the rising portion of the TTI-LGMD curve.
To recognize the transition from BLANKING back to LOOMING, we wait for the LGMD signal to fall below some empirically determined threshold firing rate rather than relying on higher-order derivatives of the input signal.
These two settings specify the above-mentioned firing rate thresholds for recognizing transitions from LOOMING to BLANKING and then back to LOOMING.
Definition at line 152 of file LoTTIEstimator.C.
The LGMD spike rate is a function of an approaching object's time-to-impact. When the object is far away, the LGMD's spike rate will be fairly low. As it approaches, the LGMD starts firing very rapidly. Shortly before impact, the LGMD firing rate reaches a peak and then drops off sharply until impact.
The peak described above "partitions" the LGMD firing rate vs. time-to-impact curve into two distinct "phases." We refer to the first phase, wherein the curve rises to its peak, as LOOMING because the object is looming large in the LGMD's field of view. The second phase, we call BLANKING because feedforward inhibition kicks in after the peak to shutdown the LGMD right before impact.
To recognize the transition from LOOMING to BLANKING, we monitor the second derivative of the LGMD signal to find the inflection point where the curve becomes concave down (thus indicating a local maximum near the signal's peak). Since the derivatives of a signal can be quite noisy, it would be best to filter the second derivative.
This setting specifies the size of the low-pass filter used to filter the second derivative of the LGMD input signal. For example, if this value is 10, then the previous ten readings will be used to smooth the second derivative of the input signal. To disable this filtering (not recommended), use a filter size of one.
Definition at line 136 of file LoTTIEstimator.C.