/* ---------------------------------------------------------------------------- * GTSAM Copyright 2010, Georgia Tech Research Corporation, * Atlanta, Georgia 30332-0415 * All Rights Reserved * Authors: Frank Dellaert, et al. (see THANKS for the full author list) * See LICENSE for the license information * -------------------------------------------------------------------------- */ /** * @file TOAFactor.h * @brief "Time of Arrival" factor * @author Frank Dellaert * @author Jay Chakravarty * @date December 2014 */ #pragma once #include #include namespace gtsam { /// A "Time of Arrival" factor - so little code seems hardly worth it :-) class TOAFactor : public ExpressionFactor { typedef Expression Double_; public: /** * Most general constructor with two expressions * @param eventExpression expression yielding an event * @param sensorExpression expression yielding a sensor location * @param toaMeasurement time of arrival at sensor * @param model noise model * @param speed optional speed of signal, in m/sec */ TOAFactor(const Expression& eventExpression, const Expression& sensorExpression, double toaMeasurement, const SharedNoiseModel& model, double speed = 330) : ExpressionFactor( model, toaMeasurement, Double_(TimeOfArrival(speed), eventExpression, sensorExpression)) {} /** * Constructor with fixed sensor * @param eventExpression expression yielding an event * @param sensor a known sensor location * @param toaMeasurement time of arrival at sensor * @param model noise model * @param toa optional time of arrival functor */ TOAFactor(const Expression& eventExpression, const Point3& sensor, double toaMeasurement, const SharedNoiseModel& model, double speed = 330) : TOAFactor(eventExpression, Expression(sensor), toaMeasurement, model, speed) {} static void InsertEvent(Key key, const Event& event, std::shared_ptr values) { values->insert(key, event); } }; } // namespace gtsam