void setSensorConfigurationFromFile()

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());
            }

        }