Пример #1
0
void EpicNavCorePlugin::initialize(std::string name, costmap_2d::Costmap2DROS *costmap_ros)
{
    if (name.length() == 0 || costmap_ros == nullptr) {
        ROS_ERROR("Error[EpicNavCorePlugin::initialize]: Costmap2DROS object is not initialized.");
        return;
    }

    uninitialize();

    costmap = costmap_ros->getCostmap();

    harmonic.n = 2;
    harmonic.m = new unsigned int[2];
    harmonic.m[0] = costmap->getSizeInCellsY();
    harmonic.m[1] = costmap->getSizeInCellsX();

    harmonic.u = new float[costmap->getSizeInCellsX() * costmap->getSizeInCellsY()];
    harmonic.locked = new unsigned int[costmap->getSizeInCellsX() * costmap->getSizeInCellsY()];

    setCellsFromCostmap();
    setBoundariesAsObstacles();

    ros::NodeHandle privateNodeHandle("~/" + name);
    pub_plan = privateNodeHandle.advertise<nav_msgs::Path>("plan", 1);
    //pub_potential = privateNodeHandle.advertise<nav_msgs::OccupancyGrid>("potential", 1);

    initialized = true;
}
/**
 * \brief Load the configuration from file.
 * @param configurationPrefix The entry node inside the configuration YAML file.
 * @return The complete image provider configuration.
 */
ImageProviderConfiguration::ConstPtr getImageProviderConfiguration () {
    ImageProviderConfiguration::Ptr configuration = boost::make_shared<ImageProviderConfiguration>();
    // private parameters
    ros::NodeHandle privateNodeHandle ("~");
    std::string configurationPrefix;
    privateNodeHandle.param("cfgprefix", configurationPrefix, std::string("configuration"));
    privateNodeHandle.param("startpos", configuration->startPos, 0);
    privateNodeHandle.param("length", configuration->length, -1);
    privateNodeHandle.param("rate", configuration->rate, 1);
    privateNodeHandle.param("loop", configuration->loop, false);
    privateNodeHandle.param("topicprefix", configuration->topicPrefix, std::string("cameras"));
    ros::NodeHandle configNodeHandle (privateNodeHandle, configurationPrefix);
    // configuration parameters (supposed to be loaded via YAML file)
    if (!configNodeHandle.getParam("srcdir", configuration->sourceDir)) {
        configuration->sourceDir = ".";
    }
    if (!configNodeHandle.getParam("filepattern", configuration->filePattern)) {
        throw ImageProviderException("Parameter 'filepattern' not found");
    }
    try {
        XmlRpc::XmlRpcValue cameraNames;
        if (configNodeHandle.getParam("cameras", cameraNames)) {
            std::map<std::string, XmlRpc::XmlRpcValue>::iterator nameIterator;
            for (nameIterator = cameraNames.begin(); nameIterator != cameraNames.end(); ++nameIterator) {
                std::string cameraName = nameIterator->first;
                ROS_INFO_STREAM("Reading camera configuration for camera: " << cameraName);
                CameraConfigEntry::ConstPtr cameraConfig = getCameraConfigurationEntry(configNodeHandle, cameraName);
                configuration->cameraConfigs.push_back(cameraConfig);
            }
        }
    }
    catch (XmlRpc::XmlRpcException& e) {
        throw ImageProviderException(std::string("Failed to retrieve camera names: ") + std::string(e.getMessage()));
    }
    return configuration;
}