From ceb1af00d4c32892bb01e2d442021b0ccc2669e4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Joan=20Sol=C3=A0?= <jsola@iri.upc.edu>
Date: Wed, 31 Jul 2019 21:37:28 +0200
Subject: [PATCH] New macro for createAutoConf()

---
 include/core/sensor/sensor_base.h | 28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)

diff --git a/include/core/sensor/sensor_base.h b/include/core/sensor/sensor_base.h
index 653447cd7..d31326fc2 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.
-- 
GitLab