|
11 | 11 |
|
12 | 12 | void Sensorizer::readSensorsFromConfig(const YAML::Node & config)
|
13 | 13 | {
|
| 14 | + m_config = config; |
14 | 15 | if (!config["sensors"].IsDefined())
|
15 | 16 | return;
|
16 | 17 |
|
@@ -102,25 +103,32 @@ void Sensorizer::readFTSensorsFromConfig(const YAML::Node& config)
|
102 | 103 |
|
103 | 104 | }
|
104 | 105 |
|
105 |
| -void Sensorizer::assignTransformToFTSensor(const std::map<std::string, LinkInfo>& link_info_map, const std::map<std::string, JointInfo>& joint_info_map, const std::array<double, 3> scale) |
| 106 | +void Sensorizer::assignTransformToFTSensor(const std::map<std::string, ExportedFrameInfo>& exported_frame_info_map,const std::map<std::string, LinkInfo>& link_info_map, const std::map<std::string, JointInfo>& joint_info_map, const std::array<double, 3> scale) |
106 | 107 | {
|
107 | 108 | // Iterate over all sensors
|
108 | 109 | for (auto& f : ft_sensors)
|
109 | 110 | {
|
110 |
| - JointInfo j_info = joint_info_map.at(f.second.frameName); |
| 111 | + if (exported_frame_info_map.find(f.second.frameName) != exported_frame_info_map.end()) |
| 112 | + { |
| 113 | + // If the frame used is in the exported frames map, use the transform from there |
| 114 | + f.second.child_link_H_sensor = exported_frame_info_map.at(f.second.frameName).linkFrame_H_additionalFrame * exported_frame_info_map.at(f.second.frameName).additionalTransformation; |
| 115 | + } |
| 116 | + else { |
| 117 | + JointInfo j_info = joint_info_map.at(f.second.frameName); |
111 | 118 |
|
112 |
| - LinkInfo parent_l_info = link_info_map.at(j_info.parent_link_name); |
113 |
| - LinkInfo child_l_info = link_info_map.at(j_info.child_link_name); |
| 119 | + LinkInfo parent_l_info = link_info_map.at(j_info.parent_link_name); |
| 120 | + LinkInfo child_l_info = link_info_map.at(j_info.child_link_name); |
114 | 121 |
|
115 |
| - auto parent_csys_H_sensor = (getTransformFromPart(parent_l_info.modelhdl, f.second.frameName, scale)).second; |
116 |
| - auto parent_csys_H_parent_link = (getTransformFromPart(parent_l_info.modelhdl, parent_l_info.link_frame_name, scale)).second; |
117 |
| - // This transform is used for exporting the ft frame |
118 |
| - f.second.parent_link_H_sensor = parent_csys_H_parent_link.inverse() * parent_csys_H_sensor; |
| 122 | + auto parent_csys_H_sensor = (getTransformFromPart(parent_l_info.modelhdl, f.second.frameName, scale)).second; |
| 123 | + auto parent_csys_H_parent_link = (getTransformFromPart(parent_l_info.modelhdl, parent_l_info.link_frame_name, scale)).second; |
| 124 | + // This transform is used for exporting the ft frame |
| 125 | + f.second.parent_link_H_sensor = parent_csys_H_parent_link.inverse() * parent_csys_H_sensor; |
119 | 126 |
|
120 |
| - auto child_csys_H_sensor = (getTransformFromPart(child_l_info.modelhdl, f.second.frameName, scale)).second; |
121 |
| - auto child_csys_H_child_link = (getTransformFromPart(child_l_info.modelhdl, child_l_info.link_frame_name, scale)).second; |
122 |
| - // This transform is used for defining the pose of the ft sensor |
123 |
| - f.second.child_link_H_sensor = child_csys_H_child_link.inverse() * child_csys_H_sensor; |
| 127 | + auto child_csys_H_sensor = (getTransformFromPart(child_l_info.modelhdl, f.second.frameName, scale)).second; |
| 128 | + auto child_csys_H_child_link = (getTransformFromPart(child_l_info.modelhdl, child_l_info.link_frame_name, scale)).second; |
| 129 | + // This transform is used for defining the pose of the ft sensor |
| 130 | + f.second.child_link_H_sensor = child_csys_H_child_link.inverse() * child_csys_H_sensor; |
| 131 | + } |
124 | 132 | }
|
125 | 133 | }
|
126 | 134 |
|
@@ -218,18 +226,46 @@ std::vector<std::string> Sensorizer::buildFTXMLBlobs()
|
218 | 226 | return ft_xml_blobs;
|
219 | 227 | }
|
220 | 228 |
|
221 |
| -void Sensorizer::assignTransformToSensors(const std::map<std::string, ExportedFrameInfo>& exported_frame_info_map) |
| 229 | +void Sensorizer::assignTransformToSensors(const std::map<std::string, ExportedFrameInfo>& exported_frame_info_map, const std::map<std::string, LinkInfo>& link_info_map, const std::array<double, 3> scale) |
222 | 230 | {
|
223 | 231 | for (auto& s : sensors)
|
224 | 232 | {
|
225 |
| - |
226 | 233 | if (exported_frame_info_map.find(s.frameName) != exported_frame_info_map.end())
|
227 | 234 | {
|
228 |
| - s.transform = exported_frame_info_map.at(s.frameName).linkFrame_H_additionalFrame; |
| 235 | + // If the frame used is in the exported frames map, use the transform from there |
| 236 | + s.transform = exported_frame_info_map.at(s.frameName).linkFrame_H_additionalFrame * exported_frame_info_map.at(s.frameName).additionalTransformation; |
229 | 237 | }
|
230 | 238 | else
|
231 | 239 | {
|
232 |
| - printToMessageWindow(s.sensorName + ": " + s.frameName + " was not found", c2uLogLevel::WARN); |
| 240 | + // Otherwise let's try to compute the transform |
| 241 | + bool ret = false; |
| 242 | + iDynTree::Transform csys_H_additionalFrame{ iDynTree::Transform::Identity() }; |
| 243 | + iDynTree::Transform csys_H_linkFrame{ iDynTree::Transform::Identity() }; |
| 244 | + iDynTree::Transform linkFrame_H_additionalFrame{ iDynTree::Transform::Identity() }; |
| 245 | + std::string cad_link_name = ""; |
| 246 | + for (auto& rename : m_config["rename"]) |
| 247 | + { |
| 248 | + if (rename.second.Scalar() == s.linkName) |
| 249 | + { |
| 250 | + cad_link_name = rename.first.Scalar(); |
| 251 | + break; |
| 252 | + } |
| 253 | + } |
| 254 | + auto link_info = link_info_map.at(cad_link_name); |
| 255 | + std::tie(ret, csys_H_additionalFrame) = getTransformFromPart(link_info.modelhdl, s.frameName, scale); |
| 256 | + if (!ret) |
| 257 | + { |
| 258 | + printToMessageWindow("Unable to get the transform for " + s.frameName, c2uLogLevel::WARN); |
| 259 | + continue; |
| 260 | + } |
| 261 | + std::tie(ret, csys_H_linkFrame) = getTransformFromPart(link_info.modelhdl, link_info.link_frame_name, scale); |
| 262 | + if (!ret) |
| 263 | + { |
| 264 | + printToMessageWindow("Unable to get the transform for " + link_info.link_frame_name, c2uLogLevel::WARN); |
| 265 | + continue; |
| 266 | + } |
| 267 | + linkFrame_H_additionalFrame = csys_H_linkFrame.inverse() * csys_H_additionalFrame; |
| 268 | + s.transform = linkFrame_H_additionalFrame; |
233 | 269 | }
|
234 | 270 | }
|
235 | 271 | }
|
|
0 commit comments