in sensor_fusion_pkg/src/sensor_fusion_node.cpp [483:531]
void setSensorConfigurationFromFile(std::unordered_map<std::string, std::unordered_map<std::string, float>> &sensorConfiguration,
const std::string &filePath) {
try {
Json::Value sensorConfigJsonValue;
Json::Reader reader;
std::ifstream ifs(filePath);
if (!reader.parse(ifs, sensorConfigJsonValue)) {
RCLCPP_ERROR(this->get_logger(), "Error parsing sensor_configuration.json");
return;
}
if (!sensorConfigJsonValue.isMember(LIDAR_KEY) || !sensorConfigJsonValue.isMember(LIDAR_OVERLAY_KEY)) {
RCLCPP_ERROR(this->get_logger(), "Sensor Configuration file error: Missing servo type");
return;
}
auto populateMap = [&](auto &map, const auto &configType) {
for (auto &sensorConfigMap : map) {
if (sensorConfigJsonValue[configType].isMember(sensorConfigMap.first)) {
sensorConfigMap.second = sensorConfigJsonValue[configType][sensorConfigMap.first].asFloat();
}
else {
RCLCPP_ERROR(this->get_logger(), "Sensor Configuration file error:%s missing: %s", configType.c_str(), sensorConfigMap.first.c_str());
return false;
}
}
return true;
};
auto tmpMap = sensorConfiguration;
auto itLidarConfig = tmpMap.find(LIDAR_KEY);
auto itLidarOverlayConfig = tmpMap.find(LIDAR_OVERLAY_KEY);
if (itLidarConfig != tmpMap.end() && itLidarOverlayConfig != tmpMap.end()) {
if (!populateMap(itLidarConfig->second, LIDAR_KEY) || !populateMap(itLidarOverlayConfig->second, LIDAR_OVERLAY_KEY)) {
return;
}
}
else {
RCLCPP_ERROR(this->get_logger(), "Invalid sensor configuration map");
return;
}
sensorConfiguration = tmpMap;
}
catch (const std::exception &ex) {
RCLCPP_ERROR(this->get_logger(), "setSensorConfigurationFromFile failed: %s", ex.what());
}
}