FeatureDetectorUtilities.hh
Go to the documentation of this file.
1 
37 #ifndef __FEATURE_DETECTOR_UTILITIES_H__
38 #define __FEATURE_DETECTOR_UTILITIES_H__
39 
42 #include "FeatureDetectorConfig.hh"
43 
44 using namespace crl::multisense;
45 using namespace crl::multisense::details;
46 
48 {
49 
56 
61 
63 
64  private:
65 
67 
68  public:
74  uint32_t numberOfFeatures() const { return mConfigItems.numberOfFeatures; };
75 
81  bool grouping() const { return mConfigItems.grouping; };
82 
88  bool motion() const { return mConfigItems.motion; };
89 
90  uint32_t options() const { return mConfigItems.options; };
91 
101  void setNumberOfFeatures(const uint32_t &numberOfFeatures) {
102 
103  if (numberOfFeatures > RECOMMENDED_MAX_FEATURES_FULL_RES)
104  {
105  std::cout << "WARNING: The number of features requested is above recommended level!" << '\n';
106  std::cout << "If a performance impact is noticed reduce number of features and/or framerate of camera" << '\n';
107  std::cout << "The recommended maximum camera settings when using the feature detector is:" << '\n';
108  std::cout << "Quarter Res: 15FPS and 1500 Features" << '\n';
109  std::cout << "Full Res: 5FPS and 5000 Features" << '\n';
110  }
111 
112  mConfigItems.numberOfFeatures = numberOfFeatures;
113 
114  };
115 
121  void setGrouping(const bool &g) {
122  mConfigItems.grouping = g;
123  }
124 
132  void setMotion(const uint32_t &m) {
133  mConfigItems.motion = m;
134  }
135 
136  void setOptions(const uint32_t &opt)
137  {
138  mConfigItems.options = opt;
139  }
140 
143  {
145  mConfigItems.grouping = true;
146  mConfigItems.motion = 1;
147  mConfigItems.options = 0;
148  };
149 
150  void serialize( void )
151  {
152  memcpy(data, &mConfigItems, sizeof(mConfigItems));
153  dataLength = sizeof(mConfigItems);
154  }
155 
156 };
157 
158 #pragma pack(push,1)
159 
160 struct Feature {
161  uint16_t x;
162  uint16_t y;
163  uint8_t angle;
164  uint8_t resp;
165  uint8_t octave;
166  uint8_t descriptor;
167 };
168 
169 struct Descriptor {
170  uint32_t d[8]; //Descriptor is 32 bytes
171 };
172 
173 #pragma pack(pop)
174 
175 class Header : public HeaderBase {
176 
177 public:
178 
180  int64_t frameId;
181  uint32_t timeSeconds;
182  uint32_t timeNanoSeconds;
183  int64_t ptpNanoSeconds;
184  uint16_t octaveWidth;
185  uint16_t octaveHeight;
186  uint16_t numOctaves;
187  uint16_t scaleFactor;
188  uint16_t motionStatus;
189  uint16_t averageXMotion;
190  uint16_t averageYMotion;
191  uint16_t numFeatures;
192  uint16_t numDescriptors;
193  uint16_t observerStatus;
194  uint16_t observerNum;
195  uint16_t observerIndex;
196  int16_t observerDy;
197  int16_t observerTheta;
198  uint16_t affineCalCount;
199  std::vector<Feature> * features;
200  std::vector<Descriptor> * descriptors;
201 
203  {
204  features = new std::vector<Feature>;
205  descriptors = new std::vector<Descriptor>;
206  }
207 
209  {
210  delete features;
211  delete descriptors;
212  }
213 };
214 
215 
228 {
229  using namespace crl::multisense::details;
230 
231  utility::BufferStreamReader stream(reinterpret_cast<const uint8_t*>(orig.secondaryAppDataP), orig.secondaryAppDataLength);
232  FeatureDetector featureDetector(stream, FeatureDetector::VERSION);
233 
234  utility::BufferStreamReader metaStream(reinterpret_cast<const uint8_t *>(orig.secondaryAppMetadataP), orig.secondaryAppMetadataLength);
236 
237 
238  header.source = featureDetector.source;
239  header.frameId = _meta.frameId;
240  header.timeSeconds = _meta.timeSeconds;
241  header.timeNanoSeconds= _meta.timeNanoSeconds;
242  header.ptpNanoSeconds = _meta.ptpNanoSeconds;
243  header.octaveWidth = _meta.octaveWidth;
244  header.octaveHeight = _meta.octaveHeight;
245  header.numOctaves = _meta.numOctaves;
246  header.scaleFactor = _meta.scaleFactor;
247  header.motionStatus = _meta.motionStatus;
248  header.averageXMotion = _meta.averageXMotion;
249  header.averageYMotion = _meta.averageYMotion;
250  header.observerStatus = _meta.observerStatus;
251  header.observerNum = _meta.observerNum;
252  header.observerIndex = _meta.observerIndex;
253  header.observerDy = _meta.observerDy;
254  header.observerTheta = _meta.observerTheta;
255  header.affineCalCount = _meta.affineCalCount;
256  header.numFeatures = featureDetector.numFeatures;
257  header.numDescriptors = featureDetector.numDescriptors;
258 
259  const size_t startDescriptor=featureDetector.numFeatures*sizeof(Feature);
260 
261  uint8_t * dataP = reinterpret_cast<uint8_t *>(featureDetector.dataP);
262  for (size_t i = 0; i < featureDetector.numFeatures; i++) {
263  feature_detector::Feature f = *reinterpret_cast<feature_detector::Feature *>(dataP + (i * sizeof(Feature)));
264  header.features->push_back(f);
265  }
266 
267  for (size_t j = 0;j < featureDetector.numDescriptors; j++) {
268  feature_detector::Descriptor d = *reinterpret_cast<feature_detector::Descriptor *>(dataP + (startDescriptor + (j * sizeof(Descriptor))));
269  header.descriptors->push_back(d);
270  }
271 
272  return Status_Ok;
273 }
274 
275 } // namespace util
276 
277 
278 #endif /* end of include guard: __FEATURE_DETECTOR_UTILITIES_H__ */
FeatureDetectorMetaHeader::observerIndex
uint16_t observerIndex
Definition: FeatureDetectorMetaMessage.hh:72
feature_detector::Source_Feature_Left
static CRL_CONSTEXPR DataSource Source_Feature_Left
Definition: FeatureDetectorUtilities.hh:50
crl::multisense::Status_Ok
static CRL_CONSTEXPR Status Status_Ok
Definition: Legacy/include/MultiSense/MultiSenseTypes.hh:99
feature_detector::secondaryAppDataExtract
Status secondaryAppDataExtract(feature_detector::Header &header, const secondary_app::Header &orig)
Definition: FeatureDetectorUtilities.hh:227
crl::multisense::details
Definition: Legacy/details/channel.cc:63
feature_detector::Header::octaveWidth
uint16_t octaveWidth
Definition: FeatureDetectorUtilities.hh:184
feature_detector::Header::source
DataSource source
Definition: FeatureDetectorUtilities.hh:179
feature_detector::Header
Definition: FeatureDetectorUtilities.hh:175
crl::multisense::Source_Secondary_App_Data_0
static CRL_CONSTEXPR DataSource Source_Secondary_App_Data_0
Definition: Legacy/include/MultiSense/MultiSenseTypes.hh:151
feature_detector::Header::timeSeconds
uint32_t timeSeconds
Definition: FeatureDetectorUtilities.hh:181
crl::multisense::secondary_app::Header::secondaryAppMetadataP
const void * secondaryAppMetadataP
Definition: Legacy/include/MultiSense/MultiSenseTypes.hh:3048
crl::multisense::secondary_app::Header::secondaryAppMetadataLength
uint32_t secondaryAppMetadataLength
Definition: Legacy/include/MultiSense/MultiSenseTypes.hh:3046
FeatureDetectorMetaHeader::octaveWidth
uint16_t octaveWidth
Definition: FeatureDetectorMetaMessage.hh:58
FeatureDetectorMetaHeader::observerNum
uint16_t observerNum
Definition: FeatureDetectorMetaMessage.hh:71
feature_detector::Header::ptpNanoSeconds
int64_t ptpNanoSeconds
Definition: FeatureDetectorUtilities.hh:183
FeatureDetectorHeader::VERSION
static CRL_CONSTEXPR wire::VersionType VERSION
Definition: FeatureDetectorMessage.hh:72
FeatureDetectorMetaHeader::numOctaves
uint16_t numOctaves
Definition: FeatureDetectorMetaMessage.hh:60
FeatureDetectorHeader::numDescriptors
uint16_t numDescriptors
Definition: FeatureDetectorMessage.hh:77
feature_detector::Header::numFeatures
uint16_t numFeatures
Definition: FeatureDetectorUtilities.hh:191
FeatureDetectorMetaHeader::observerDy
int16_t observerDy
Definition: FeatureDetectorMetaMessage.hh:73
FeatureDetectorMetaHeader::timeNanoSeconds
uint32_t timeNanoSeconds
Definition: FeatureDetectorMetaMessage.hh:56
feature_detector
Definition: FeatureDetectorUtilities.hh:47
feature_detector::Header::scaleFactor
uint16_t scaleFactor
Definition: FeatureDetectorUtilities.hh:187
FeatureDetectorMetaHeader::observerStatus
uint16_t observerStatus
Definition: FeatureDetectorMetaMessage.hh:70
FeatureDetectorMetaHeader::octaveHeight
uint16_t octaveHeight
Definition: FeatureDetectorMetaMessage.hh:59
FeatureDetectorHeader::source
uint64_t source
Definition: FeatureDetectorMessage.hh:74
crl::multisense::Source_Secondary_App_Data_3
static CRL_CONSTEXPR DataSource Source_Secondary_App_Data_3
Definition: Legacy/include/MultiSense/MultiSenseTypes.hh:154
CRL_CONSTEXPR
#define CRL_CONSTEXPR
Definition: Legacy/include/MultiSense/details/utility/Portability.hh:49
feature_detector::Header::affineCalCount
uint16_t affineCalCount
Definition: FeatureDetectorUtilities.hh:198
feature_detector::FeatureDetectorConfig::serialize
void serialize(void)
Definition: FeatureDetectorUtilities.hh:150
feature_detector::FeatureDetectorConfig::grouping
bool grouping() const
Definition: FeatureDetectorUtilities.hh:81
feature_detector::Feature::resp
uint8_t resp
Definition: FeatureDetectorUtilities.hh:164
FeatureDetectorConfigParams::options
uint32_t options
Definition: FeatureDetectorConfig.hh:81
feature_detector::Descriptor
Definition: FeatureDetectorUtilities.hh:169
FeatureDetectorMetaHeader::affineCalCount
uint16_t affineCalCount
Definition: FeatureDetectorMetaMessage.hh:75
feature_detector::FeatureDetectorConfig::setMotion
void setMotion(const uint32_t &m)
Definition: FeatureDetectorUtilities.hh:132
feature_detector::FeatureDetectorConfig::numberOfFeatures
uint32_t numberOfFeatures() const
Definition: FeatureDetectorUtilities.hh:74
f
f
FeatureDetectorMetaHeader::ptpNanoSeconds
int64_t ptpNanoSeconds
Definition: FeatureDetectorMetaMessage.hh:57
FeatureDetector
Definition: FeatureDetectorMessage.hh:91
FeatureDetectorMetaHeader::VERSION
static CRL_CONSTEXPR wire::VersionType VERSION
Definition: FeatureDetectorMetaMessage.hh:50
feature_detector::Source_Feature_Rectified_Aux
static CRL_CONSTEXPR DataSource Source_Feature_Rectified_Aux
Definition: FeatureDetectorUtilities.hh:55
feature_detector::Header::observerStatus
uint16_t observerStatus
Definition: FeatureDetectorUtilities.hh:193
crl::multisense::secondary_app::Header::secondaryAppDataP
const void * secondaryAppDataP
Definition: Legacy/include/MultiSense/MultiSenseTypes.hh:3044
feature_detector::Source_Feature_Rectified_Left
static CRL_CONSTEXPR DataSource Source_Feature_Rectified_Left
Definition: FeatureDetectorUtilities.hh:53
FeatureDetectorMetaMessage.hh
feature_detector::FeatureDetectorConfig
Definition: FeatureDetectorUtilities.hh:62
feature_detector::Header::Header
Header()
Definition: FeatureDetectorUtilities.hh:202
feature_detector::Source_Feature_Right
static CRL_CONSTEXPR DataSource Source_Feature_Right
Definition: FeatureDetectorUtilities.hh:51
crl::multisense::DataSource
uint64_t DataSource
Definition: Legacy/include/MultiSense/MultiSenseTypes.hh:115
FeatureDetectorConfigParams::numberOfFeatures
uint32_t numberOfFeatures
Definition: FeatureDetectorConfig.hh:67
FeatureDetectorMessage.hh
crl::multisense::Source_Secondary_App_Data_5
static CRL_CONSTEXPR DataSource Source_Secondary_App_Data_5
Definition: Legacy/include/MultiSense/MultiSenseTypes.hh:156
feature_detector::Header::features
std::vector< Feature > * features
Definition: FeatureDetectorUtilities.hh:199
feature_detector::Source_Feature_Aux
static CRL_CONSTEXPR DataSource Source_Feature_Aux
Definition: FeatureDetectorUtilities.hh:52
feature_detector::Header::octaveHeight
uint16_t octaveHeight
Definition: FeatureDetectorUtilities.hh:185
crl::multisense::HeaderBase
Definition: Legacy/include/MultiSense/MultiSenseTypes.hh:286
crl::multisense::system::SecondaryAppConfig
Definition: Legacy/include/MultiSense/MultiSenseTypes.hh:4040
FeatureDetectorHeader::numFeatures
uint16_t numFeatures
Definition: FeatureDetectorMessage.hh:76
crl::multisense::Source_Secondary_App_Data_2
static CRL_CONSTEXPR DataSource Source_Secondary_App_Data_2
Definition: Legacy/include/MultiSense/MultiSenseTypes.hh:153
FeatureDetectorMetaHeader::motionStatus
uint16_t motionStatus
Definition: FeatureDetectorMetaMessage.hh:62
feature_detector::Header::~Header
~Header()
Definition: FeatureDetectorUtilities.hh:208
d
d
feature_detector::FeatureDetectorConfig::setGrouping
void setGrouping(const bool &g)
Definition: FeatureDetectorUtilities.hh:121
crl::multisense::Source_Secondary_App_Data_4
static CRL_CONSTEXPR DataSource Source_Secondary_App_Data_4
Definition: Legacy/include/MultiSense/MultiSenseTypes.hh:155
FeatureDetectorConfigParams::grouping
bool grouping
Definition: FeatureDetectorConfig.hh:71
feature_detector::Header::observerIndex
uint16_t observerIndex
Definition: FeatureDetectorUtilities.hh:195
feature_detector::Header::observerDy
int16_t observerDy
Definition: FeatureDetectorUtilities.hh:196
feature_detector::Header::observerTheta
int16_t observerTheta
Definition: FeatureDetectorUtilities.hh:197
feature_detector::RECOMMENDED_MAX_FEATURES_FULL_RES
static CRL_CONSTEXPR int RECOMMENDED_MAX_FEATURES_FULL_RES
Definition: FeatureDetectorUtilities.hh:58
FeatureDetectorMetaHeader::timeSeconds
uint32_t timeSeconds
Definition: FeatureDetectorMetaMessage.hh:55
feature_detector::Header::averageYMotion
uint16_t averageYMotion
Definition: FeatureDetectorUtilities.hh:190
crl::multisense::secondary_app::Header
Definition: Legacy/include/MultiSense/MultiSenseTypes.hh:3028
FeatureDetectorMetaHeader::observerTheta
int16_t observerTheta
Definition: FeatureDetectorMetaMessage.hh:74
FeatureDetectorMeta
Definition: FeatureDetectorMetaMessage.hh:106
crl::multisense::Status
int32_t Status
Definition: Legacy/include/MultiSense/MultiSenseTypes.hh:94
FeatureDetectorConfigParams
Definition: FeatureDetectorConfig.hh:49
feature_detector::Header::descriptors
std::vector< Descriptor > * descriptors
Definition: FeatureDetectorUtilities.hh:200
feature_detector::Header::frameId
int64_t frameId
Definition: FeatureDetectorUtilities.hh:180
FeatureDetectorMetaHeader::scaleFactor
uint16_t scaleFactor
Definition: FeatureDetectorMetaMessage.hh:61
feature_detector::Feature::octave
uint8_t octave
Definition: FeatureDetectorUtilities.hh:165
header
std_msgs::Header const * header(const M &m)
feature_detector::FeatureDetectorConfig::setNumberOfFeatures
void setNumberOfFeatures(const uint32_t &numberOfFeatures)
Definition: FeatureDetectorUtilities.hh:101
feature_detector::Feature::descriptor
uint8_t descriptor
Definition: FeatureDetectorUtilities.hh:166
feature_detector::FeatureDetectorConfig::motion
bool motion() const
Definition: FeatureDetectorUtilities.hh:88
crl::multisense::secondary_app::Header::secondaryAppDataLength
uint32_t secondaryAppDataLength
Definition: Legacy/include/MultiSense/MultiSenseTypes.hh:3042
FeatureDetectorMetaHeader::averageYMotion
uint16_t averageYMotion
Definition: FeatureDetectorMetaMessage.hh:64
feature_detector::Header::observerNum
uint16_t observerNum
Definition: FeatureDetectorUtilities.hh:194
feature_detector::FeatureDetectorConfig::mConfigItems
FeatureDetectorConfigParams mConfigItems
Definition: FeatureDetectorUtilities.hh:66
feature_detector::Header::timeNanoSeconds
uint32_t timeNanoSeconds
Definition: FeatureDetectorUtilities.hh:182
crl::multisense
Definition: Legacy/details/channel.cc:62
feature_detector::Header::motionStatus
uint16_t motionStatus
Definition: FeatureDetectorUtilities.hh:188
feature_detector::Header::averageXMotion
uint16_t averageXMotion
Definition: FeatureDetectorUtilities.hh:189
feature_detector::Feature::x
uint16_t x
Definition: FeatureDetectorUtilities.hh:161
feature_detector::Feature::y
uint16_t y
Definition: FeatureDetectorUtilities.hh:162
crl::multisense::details::utility::BufferStreamReader
Definition: BufferStream.hh:192
FeatureDetectorConfig.hh
feature_detector::Feature::angle
uint8_t angle
Definition: FeatureDetectorUtilities.hh:163
feature_detector::Feature
Definition: FeatureDetectorUtilities.hh:160
FeatureDetector::dataP
void * dataP
Definition: FeatureDetectorMessage.hh:94
FeatureDetectorConfigParams::motion
uint32_t motion
Definition: FeatureDetectorConfig.hh:78
FeatureDetectorMetaHeader::averageXMotion
uint16_t averageXMotion
Definition: FeatureDetectorMetaMessage.hh:63
feature_detector::Source_Feature_Rectified_Right
static CRL_CONSTEXPR DataSource Source_Feature_Rectified_Right
Definition: FeatureDetectorUtilities.hh:54
FeatureDetectorMetaHeader::frameId
int64_t frameId
Definition: FeatureDetectorMetaMessage.hh:54
crl::multisense::Source_Secondary_App_Data_1
static CRL_CONSTEXPR DataSource Source_Secondary_App_Data_1
Definition: Legacy/include/MultiSense/MultiSenseTypes.hh:152
feature_detector::FeatureDetectorConfig::FeatureDetectorConfig
FeatureDetectorConfig()
Definition: FeatureDetectorUtilities.hh:142
feature_detector::Header::numDescriptors
uint16_t numDescriptors
Definition: FeatureDetectorUtilities.hh:192
feature_detector::Header::numOctaves
uint16_t numOctaves
Definition: FeatureDetectorUtilities.hh:186
feature_detector::FeatureDetectorConfig::setOptions
void setOptions(const uint32_t &opt)
Definition: FeatureDetectorUtilities.hh:136
feature_detector::FeatureDetectorConfig::options
uint32_t options() const
Definition: FeatureDetectorUtilities.hh:90
feature_detector::RECOMMENDED_MAX_FEATURES_QUARTER_RES
static CRL_CONSTEXPR int RECOMMENDED_MAX_FEATURES_QUARTER_RES
Definition: FeatureDetectorUtilities.hh:60


multisense_lib
Author(s):
autogenerated on Thu Apr 17 2025 02:49:08