diff --git a/include/core/sensor/sensor_base.h b/include/core/sensor/sensor_base.h index 653447cd77b01361e57f79e130a5d4da63390b2d..d31326fc27e724d6a3e81e34ae1a3bdd85e06494 100644 --- a/include/core/sensor/sensor_base.h +++ b/include/core/sensor/sensor_base.h @@ -18,6 +18,34 @@ class StateBlock; namespace wolf { + +/* + * Macro for defining Autoconf sensor creator. + * + * In order to use this macro, the derived sensor class, SensorClass, must have a constructor available like so: + * + * SensorClass(const VectorXs & _extrinsics, const IntrinsicsClassPtr _intrinsics); + * + */ +#define WOLF_CREATE_SENSOR_AUTO(SensorClass, IntrinsicsClass, ExtrinsicsSize) \ +static SensorBasePtr createAutoConf(const std::string& _unique_name, const ParamsServer& _server) \ +{ \ + Eigen::VectorXs extrinsics = _server.template getParam<Eigen::VectorXs>(_unique_name + "/extrinsic/pose"); \ + \ + assert(extrinsics.size() == ExtrinsicsSize && "Bad extrinsics vector length."); \ + \ + IntrinsicsClass##Ptr params = std::make_shared<IntrinsicsClass>(_unique_name, _server); \ + \ + SensorClass##Ptr sensor = std::make_shared<SensorClass>(extrinsics, params); \ + \ + sensor ->setName(_unique_name); \ + \ + return sensor; \ +} + + + + /** \brief base struct for intrinsic sensor parameters * * Derive from this struct to create structs of sensor intrinsic parameters.