ParseMeasurementData.cpp
Go to the documentation of this file.
1 // this is for emacs file handling -*- mode: c++; indent-tabs-mode: nil -*-
2 
3 // -- BEGIN LICENSE BLOCK ----------------------------------------------
4 
24 // -- END LICENSE BLOCK ------------------------------------------------
25 
26 //----------------------------------------------------------------------
33 //----------------------------------------------------------------------
34 
36 
37 namespace sick {
38 namespace data_processing {
39 
41 {
42  m_reader_ptr = std::make_shared<sick::data_processing::ReadWriteHelper>();
43 }
44 
47  datastructure::Data& data)
48 {
49  datastructure::MeasurementData measurement_data;
50  if (!checkIfPreconditionsAreMet(data))
51  {
52  measurement_data.setIsEmpty(true);
53  return measurement_data;
54  }
55  const uint8_t* data_ptr(buffer.getBuffer().data() +
56  data.getDataHeaderPtr()->getMeasurementDataBlockOffset());
57 
59  setDataInMeasurementData(data_ptr, measurement_data);
60  return measurement_data;
61 }
62 
64 {
66  {
67  return false;
68  }
70  {
71  return false;
72  }
73  return true;
74 }
75 
77 {
78  if (data.getDataHeaderPtr()->getMeasurementDataBlockOffset() == 0 &&
79  data.getDataHeaderPtr()->getMeasurementDataBlockSize() == 0)
80  {
81  return false;
82  }
83  return true;
84 }
85 
87  const datastructure::Data& data) const
88 {
89  if (data.getDataHeaderPtr()->isEmpty())
90  {
91  return false;
92  }
93  if (data.getDerivedValuesPtr()->isEmpty())
94  {
95  return false;
96  }
97  return true;
98 }
99 
100 
102  const uint8_t*& data_ptr, datastructure::MeasurementData& measurement_data)
103 {
104  setNumberOfBeamsInMeasurementData(data_ptr, measurement_data);
105  setScanPointsInMeasurementData(data_ptr, measurement_data);
106 }
107 
109  const uint8_t*& data_ptr, datastructure::MeasurementData& measurement_data) const
110 {
111  measurement_data.setNumberOfBeams(m_reader_ptr->readuint32_tLittleEndian(data_ptr, 0));
112 }
113 
115 {
116  m_angle = data.getDerivedValuesPtr()->getStartAngle();
117  m_angle_delta = data.getDerivedValuesPtr()->getAngularBeamResolution();
118 }
119 
121  const uint8_t*& data_ptr, datastructure::MeasurementData& measurement_data)
122 {
123  for (size_t i = 0; i < measurement_data.getNumberOfBeams(); i++)
124  {
125  addScanPointToMeasurementData(i, data_ptr, measurement_data);
127  }
128 }
129 
131  const uint16_t offset,
132  const uint8_t*& data_ptr,
133  datastructure::MeasurementData& measurement_data) const
134 {
135  int16_t distance = m_reader_ptr->readuint16_tLittleEndian(data_ptr, (4 + offset * 4));
136  uint8_t reflectivity = m_reader_ptr->readuint8_tLittleEndian(data_ptr, (6 + offset * 4));
137  uint8_t status = m_reader_ptr->readuint8_tLittleEndian(data_ptr, (7 + offset * 4));
138  bool valid = status & (0x01 << 0);
139  bool infinite = status & (0x01 << 1);
140  bool glare = status & (0x01 << 2);
141  bool reflector = status & (0x01 << 3);
142  bool contamination = status & (0x01 << 4);
143  bool contamination_warning = status & (0x01 << 5);
145  distance,
146  reflectivity,
147  valid,
148  infinite,
149  glare,
150  reflector,
151  contamination,
152  contamination_warning));
153 }
154 
155 } // namespace data_processing
156 } // namespace sick
bool checkIfPreconditionsAreMet(const datastructure::Data &data) const
bool checkIfDataContainsNeededParsedBlocks(const datastructure::Data &data) const
A packetbuffer for the raw data from the sensor.
Definition: PacketBuffer.h:61
bool checkIfMeasurementDataIsPublished(const datastructure::Data &data) const
void setNumberOfBeamsInMeasurementData(const uint8_t *&data_ptr, datastructure::MeasurementData &measurement_data) const
Class containing the data of a single scan point.
Definition: ScanPoint.h:46
uint32_t getNumberOfBeams() const
Getter for the number of beams.
void setScanPointsInMeasurementData(const uint8_t *&data_ptr, datastructure::MeasurementData &measurement_data)
The data class containing all data blocks of a measurement.
Definition: Data.h:55
void setIsEmpty(bool is_empty)
Set if measurement data is enabled.
const VectorBuffer & getBuffer() const
Getter to return the VectorBuffer saved in the PacketBuffer.
void addScanPointToMeasurementData(uint16_t offset, const uint8_t *&data_ptr, datastructure::MeasurementData &measurement_data) const
void setStartAngleAndDelta(const datastructure::Data &data)
void setNumberOfBeams(const uint32_t &number_of_beams)
Setter for the number of beams.
Class containing all scanpoints of a single measurement.
void setDataInMeasurementData(const uint8_t *&data_ptr, datastructure::MeasurementData &measurement_data)
datastructure::MeasurementData parseUDPSequence(const datastructure::PacketBuffer &buffer, datastructure::Data &data)
Parses the measurement data if it is enabled.
std::shared_ptr< DataHeader > getDataHeaderPtr() const
Gets the data header.
Definition: Data.cpp:42
void addScanPoint(ScanPoint scan_point)
Add a single scanpoint to the vector of scanpoints.
std::shared_ptr< sick::data_processing::ReadWriteHelper > m_reader_ptr
std::shared_ptr< DerivedValues > getDerivedValuesPtr() const
Gets the derived values.
Definition: Data.cpp:64


sick_safetyscanners
Author(s): Lennart Puck
autogenerated on Thu May 9 2019 02:41:08