31 const RobotUnitDataStreaming::DataStreamingDescription&
description)
33 arondto::Exteroception
dto;
34 dto.iterationID =
data.iterationId;
37 const std::size_t singleDimSize =
static_cast<std::size_t
>(std::sqrt(properties_.tofSize));
41 for (
const auto&
id : {
"Left",
"Right"})
44 dto.tof[id].depth.resize(singleDimSize, singleDimSize);
45 dto.tof[id].depth.setConstant(-1);
48 dto.tof[id].sigma.resize(singleDimSize, singleDimSize);
49 dto.tof[id].sigma.setConstant(-1);
52 dto.tof[id].targetDetected.resize(singleDimSize, singleDimSize);
53 dto.tof[id].targetDetected.setConstant(-1);
57 for (
const auto& [dataEntryName, dataEntry] :
description.entries)
66 std::vector<std::string> keysToRemove;
67 for (
const auto& [
id,
data] :
dto.tof)
70 if (lastData.count(
id) == 0)
72 lastData.emplace(
id,
data);
77 keysToRemove.push_back(
id);
84 if (
data == lastData.at(
id))
86 keysToRemove.push_back(
id);
94 for (
const auto& key : keysToRemove)
126 const std::string& entryName,
129 const std::vector<std::string>
split = simox::alg::split(entryName,
".",
false,
false);
131 const std::set<size_t> acceptedSizes{3, 4, 5};
133 <<
"Data entry name could not be parsed (exected 3 or 4 or 5 components between '.'): "
134 <<
"\n- split: '" <<
split <<
"'";
136 const std::string& category =
split.at(0);
138 const std::string& field =
split.at(2);
141 if (simox::alg::contains(field,
"tofDepth"))
144 processToFDepthEntry(
dto.tof,
split, value);
147 if (simox::alg::contains(field,
"tofSigma"))
150 processToFSigmaEntry(
dto.tof,
split, value);
153 if (simox::alg::contains(field,
"tofTargetDetected"))
156 processToFTargetDetectedEntry(
dto.tof,
split, value);
161 ArmarDEConverter::processToFDepthEntry(
162 std::map<std::string, armarx::armem::exteroception::arondto::ToF>& tofs,
163 const std::vector<std::string>&
split,
171 const std::string& name =
split.at(1);
176 const std::map<std::string, std::string> sidePrefixMap{{
"LeftHand",
"Left"},
177 {
"RightHand",
"Right"}};
179 auto it = sidePrefixMap.find(name);
182 const std::string& side = it->second;
183 processToFDepthEntry(tofs[side],
split, value);
187 ArmarDEConverter::processToFDepthEntry(armarx::armem::exteroception::arondto::ToF& tof,
188 const std::vector<std::string>&
split,
189 const ConverterValue& value)
192 const std::vector<std::string> elements = simox::alg::split(
split.back(),
"_");
195 const int idx = std::stoi(elements.at(1));
209 ArmarDEConverter::processToFSigmaEntry(
210 std::map<std::string, armarx::armem::exteroception::arondto::ToF>& tofs,
211 const std::vector<std::string>&
split,
212 const ConverterValue& value)
219 const std::string& name =
split.at(1);
224 const std::map<std::string, std::string> sidePrefixMap{{
"LeftHand",
"Left"},
225 {
"RightHand",
"Right"}};
227 auto it = sidePrefixMap.find(name);
230 const std::string& side = it->second;
231 processToFSigmaEntry(tofs[side],
split, value);
235 ArmarDEConverter::processToFSigmaEntry(armarx::armem::exteroception::arondto::ToF& tof,
236 const std::vector<std::string>&
split,
240 const std::vector<std::string> elements = simox::alg::split(
split.back(),
"_");
243 const int idx = std::stoi(elements.at(1));
257 ArmarDEConverter::processToFTargetDetectedEntry(
258 std::map<std::string, armarx::armem::exteroception::arondto::ToF>& tofs,
259 const std::vector<std::string>&
split,
267 const std::string& name =
split.at(1);
272 const std::map<std::string, std::string> sidePrefixMap{{
"LeftHand",
"Left"},
273 {
"RightHand",
"Right"}};
275 auto it = sidePrefixMap.find(name);
278 const std::string& side = it->second;
279 processToFTargetDetectedEntry(tofs[side],
split, value);
283 ArmarDEConverter::processToFTargetDetectedEntry(armarx::armem::exteroception::arondto::ToF& tof,
284 const std::vector<std::string>&
split,
288 const std::vector<std::string> elements = simox::alg::split(
split.back(),
"_");
291 const int idx = std::stoi(elements.at(1));