/*------------------------------------------------------------- loadExclusionAreas -------------------------------------------------------------*/ void C2DRangeFinderAbstract::loadCommonParams( const mrpt::utils::CConfigFileBase &configSource, const std::string &iniSection ) { // Params: m_showPreview = configSource.read_bool(iniSection, "preview", false ); // Load exclusion areas: m_lstExclusionPolys.clear(); m_lstExclusionAngles.clear(); unsigned int N = 1; for(;;) { vector<double> x,y, z_range; configSource.read_vector( iniSection, format("exclusionZone%u_x",N), vector<double>(0), x); configSource.read_vector( iniSection, format("exclusionZone%u_y",N), vector<double>(0), y); configSource.read_vector( iniSection, format("exclusionZone%u_z",N++), vector<double>(0), z_range); if (!x.empty() && !y.empty()) { ASSERT_(x.size()==y.size()) CObservation2DRangeScan::TListExclusionAreasWithRanges::value_type dat; dat.first.setAllVertices(x,y); if (z_range.empty()) { dat.second.first = -std::numeric_limits<double>::max(); dat.second.second = std::numeric_limits<double>::max(); } else { ASSERTMSG_(z_range.size()==2,"exclusionZone%u_z must be a range [z_min z_max]"); ASSERT_(z_range[0]<=z_range[1]); dat.second.first = z_range[0]; dat.second.second = z_range[1]; } m_lstExclusionPolys.push_back(dat); } else break; } // Load forbiden angles; N = 1; for(;;) { const double ini = DEG2RAD( configSource.read_double( iniSection, format("exclusionAngles%u_ini",N), -1000 ) ); const double end = DEG2RAD( configSource.read_double( iniSection, format("exclusionAngles%u_end",N++), -1000 ) ); if (ini>-M_PI && end>-M_PI) m_lstExclusionAngles.push_back(make_pair(ini,end)); else break; } }
/* ----------------------------------------------------- loadConfig_sensorSpecific ----------------------------------------------------- */ void CGPSInterface::loadConfig_sensorSpecific( const mrpt::utils::CConfigFileBase &configSource, const std::string &iniSection ) { #ifdef MRPT_OS_WINDOWS m_COMname = configSource.read_string(iniSection, "COM_port_WIN", m_COMname, true ); #else m_COMname = configSource.read_string(iniSection, "COM_port_LIN", m_COMname, true ); #endif m_COMbauds = configSource.read_int( iniSection, "baudRate",m_COMbauds, true ); m_customInit = configSource.read_string( iniSection, "customInit", m_customInit, false ); m_sensorPose.x( configSource.read_float( iniSection, "pose_x",0, false ) ); m_sensorPose.y( configSource.read_float( iniSection, "pose_y",0, false ) ); m_sensorPose.z( configSource.read_float( iniSection, "pose_z",0, false ) ); m_JAVAD_rtk_src_port = configSource.read_string(iniSection, "JAVAD_rtk_src_port",m_JAVAD_rtk_src_port ); m_JAVAD_rtk_src_baud = configSource.read_int(iniSection, "JAVAD_rtk_src_baud",m_JAVAD_rtk_src_baud ); m_JAVAD_rtk_format = configSource.read_string(iniSection,"JAVAD_rtk_format", m_JAVAD_rtk_format ); m_useAIMMode = configSource.read_bool( iniSection,"JAVAD_useAIMMode", m_useAIMMode ); m_data_period = 1.0/configSource.read_double( iniSection,"outputRate", m_data_period ); }
void CRandomFieldGridMap3D::TInsertionOptions::loadFromConfigFile( const mrpt::utils::CConfigFileBase &iniFile, const std::string §ion) { GMRF_lambdaPrior = iniFile.read_double(section.c_str(), "GMRF_lambdaPrior", GMRF_lambdaPrior); GMRF_skip_variance = iniFile.read_bool(section.c_str(),"GMRF_skip_variance", GMRF_skip_variance); }
void CPTG_RobotShape_Polygonal::loadShapeFromConfigFile( const mrpt::utils::CConfigFileBase& cfg, const std::string& sSection) { bool any_pt = false; const double BADNUM = std::numeric_limits<double>::max(); for (unsigned int nPt = 0;; ++nPt) { const std::string sPtx = mrpt::format("shape_x%u", nPt); const std::string sPty = mrpt::format("shape_y%u", nPt); const double ptx = cfg.read_double(sSection, sPtx, BADNUM, false); const double pty = cfg.read_double(sSection, sPty, BADNUM, false); if (ptx == BADNUM && pty == BADNUM) break; ASSERTMSG_( (ptx != BADNUM && pty != BADNUM), "Error: mismatch between number of pts in {x,y} defining robot " "shape"); if (!any_pt) { m_robotShape.clear(); any_pt = true; } m_robotShape.AddVertex(ptx, pty); } if (any_pt) internal_processNewRobotShape(); }
void CReactiveNavigationSystem::loadConfigFile( const mrpt::utils::CConfigFileBase& c) { MRPT_START // 1st: load my own params; at the end, call parent's overriden method: const std::string sectCfg = "CReactiveNavigationSystem"; this->params_reactive_nav.loadFromConfigFile(c, sectCfg); unsigned int PTG_COUNT = c.read_int(sectCfg, "PTG_COUNT", 0, true); // Load robot shape: 1/2 polygon // --------------------------------------------- vector<float> xs, ys; c.read_vector( sectCfg, "RobotModel_shape2D_xs", vector<float>(0), xs, false); c.read_vector( sectCfg, "RobotModel_shape2D_ys", vector<float>(0), ys, false); ASSERTMSG_( xs.size() == ys.size(), "Config parameters `RobotModel_shape2D_xs` and `RobotModel_shape2D_ys` " "must have the same length!"); if (!xs.empty()) { math::CPolygon shape; for (size_t i = 0; i < xs.size(); i++) shape.AddVertex(xs[i], ys[i]); changeRobotShape(shape); } // Load robot shape: 2/2 circle // --------------------------------------------- const double robot_shape_radius = c.read_double(sectCfg, "RobotModel_circular_shape_radius", .0, false); ASSERT_(robot_shape_radius >= .0); if (robot_shape_radius != .0) { changeRobotCircularShapeRadius(robot_shape_radius); } // Load PTGs from file: // --------------------------------------------- // Free previous PTGs: for (size_t i = 0; i < PTGs.size(); i++) delete PTGs[i]; PTGs.assign(PTG_COUNT, nullptr); for (unsigned int n = 0; n < PTG_COUNT; n++) { // Factory: const std::string sPTGName = c.read_string(sectCfg, format("PTG%u_Type", n), "", true); PTGs[n] = CParameterizedTrajectoryGenerator::CreatePTG( sPTGName, c, sectCfg, format("PTG%u_", n)); } CAbstractPTGBasedReactive::loadConfigFile( c); // call parent's overriden method: MRPT_END }
/* ----------------------------------------------------- loadConfig_sensorSpecific ----------------------------------------------------- */ void CGPSInterface::loadConfig_sensorSpecific( const mrpt::utils::CConfigFileBase &configSource, const std::string &iniSection ) { m_parser = configSource.read_enum<CGPSInterface::PARSERS>(iniSection,"parser",m_parser,false /*Allow default values*/); m_raw_dump_file_prefix = configSource.read_string(iniSection,"raw_dump_file_prefix",m_raw_dump_file_prefix,false /*Allow default values*/); #ifdef MRPT_OS_WINDOWS m_COMname = configSource.read_string(iniSection, "COM_port_WIN", m_COMname, true ); #else m_COMname = configSource.read_string(iniSection, "COM_port_LIN", m_COMname, true ); #endif m_COMbauds = configSource.read_int( iniSection, "baudRate",m_COMbauds, true ); // legacy custom cmds: m_customInit = configSource.read_string( iniSection, "customInit", m_customInit, false ); // new custom cmds: m_custom_cmds_delay = configSource.read_float( iniSection, "custom_cmds_delay",m_custom_cmds_delay ); m_custom_cmds_append_CRLF = configSource.read_bool( iniSection, "custom_cmds_append_CRLF",m_custom_cmds_append_CRLF); // Load as many strings as found on the way: m_setup_cmds.clear(); for (int i=1; true; i++) { std::string sLine = configSource.read_string(iniSection, mrpt::format("setup_cmd%i",i),std::string() ); sLine = mrpt::system::trim( sLine ); if (sLine.empty()) break; m_setup_cmds.push_back(sLine); } m_shutdown_cmds.clear(); for (int i=1; true; i++) { std::string sLine = configSource.read_string(iniSection, mrpt::format("shutdown_cmd%i",i),std::string() ); sLine = mrpt::system::trim( sLine ); if (sLine.empty()) break; m_shutdown_cmds.push_back(sLine); } m_sensorPose.setFromValues( configSource.read_float(iniSection,"pose_x",0), configSource.read_float(iniSection,"pose_y",0), configSource.read_float(iniSection,"pose_z",0), DEG2RAD( configSource.read_float(iniSection,"pose_yaw",0) ), DEG2RAD( configSource.read_float(iniSection,"pose_pitch",0) ), DEG2RAD( configSource.read_float(iniSection,"pose_roll",0) ) ); m_JAVAD_rtk_src_port = configSource.read_string(iniSection, "JAVAD_rtk_src_port",m_JAVAD_rtk_src_port ); m_JAVAD_rtk_src_baud = configSource.read_int(iniSection, "JAVAD_rtk_src_baud",m_JAVAD_rtk_src_baud ); m_JAVAD_rtk_format = configSource.read_string(iniSection,"JAVAD_rtk_format", m_JAVAD_rtk_format ); m_topcon_useAIMMode = configSource.read_bool( iniSection,"JAVAD_useAIMMode", m_topcon_useAIMMode ); m_topcon_data_period = 1.0/configSource.read_double( iniSection,"outputRate", m_topcon_data_period ); }
/** Load all the params from a config source, in the format described in saveToConfigFile() */ void TMultiResDescOptions::loadFromConfigFile( const mrpt::utils::CConfigFileBase &cfg, const std::string §ion ) { basePSize = cfg.read_double(section,"basePSize", 23, false ); comLScl = cfg.read_int(section,"comLScl", 0, false ); comHScl = cfg.read_int(section,"comHScl", 6, false ); sg1 = cfg.read_double(section,"sg1", 0.5, false ); sg2 = cfg.read_double(section,"sg2", 7.5, false ); sg3 = cfg.read_double(section,"sg3", 8.0, false ); computeDepth = cfg.read_bool(section,"computeDepth", true, false ); blurImage = cfg.read_bool(section,"blurImage", true, false ); fx = cfg.read_double(section,"fx",0.0, false); cx = cfg.read_double(section,"cx",0.0, false); cy = cfg.read_double(section,"cy",0.0, false); baseline = cfg.read_double(section,"baseline",0.0, false); computeHashCoeffs = cfg.read_bool(section,"computeHashCoeffs", false, false ); cfg.read_vector(section,"scales",vector<double>(),scales,false); if(scales.size() < 1) { scales.resize(7); scales[0] = 0.5; scales[1] = 0.8; scales[2] = 1.0; scales[3] = 1.2; scales[4] = 1.5; scales[5] = 1.8; scales[6] = 2.0; } // end-if }
/** Load all the params from a config source, in the format described in saveToConfigFile() */ void TMultiResDescMatchOptions::loadFromConfigFile( const mrpt::utils::CConfigFileBase &cfg, const std::string §ion ) { useOriFilter = cfg.read_bool(section,"useOriFilter",true,false); oriThreshold = cfg.read_double(section,"oriThreshold",0.2,false); lastSeenThreshold = cfg.read_int(section,"lastSeenThreshold",10,false); timesSeenThreshold = cfg.read_int(section,"timesSeenThreshold",5,false); minFeaturesToFind = cfg.read_int(section,"minFeaturesToFind",5,false); minFeaturesToBeLost = cfg.read_int(section,"minFeaturesToBeLost",5,false); useDepthFilter = cfg.read_bool(section,"useDepthFilter",true,false); matchingThreshold = cfg.read_double(section,"matchingThreshold",1e4,false); matchingRatioThreshold = cfg.read_double(section,"matchingRatioThreshold",0.5,false); lowScl1 = cfg.read_int(section,"lowScl1",0,false); lowScl2 = cfg.read_int(section,"lowScl1",0,false); highScl1 = cfg.read_int(section,"highScl1",6,false); highScl2 = cfg.read_int(section,"highScl2",6,false); searchAreaSize = cfg.read_double(section,"searchAreaSize",20,false); }
/** Loads the generic settings common to any sensor (See CGenericSensor), then call to "loadConfig_sensorSpecific" * \exception This method throws an exception with a descriptive message if some critical parameter is missing or has an invalid value. */ void CGenericSensor::loadConfig( const mrpt::utils::CConfigFileBase &cfg, const std::string § ) { MRPT_START m_process_rate = cfg.read_double(sect,"process_rate",0 ); // Leave it to 0 so rawlog-grabber can detect if it's not set by the user. m_max_queue_len = static_cast<size_t>(cfg.read_int(sect,"max_queue_len",int(m_max_queue_len))); m_grab_decimation = static_cast<size_t>(cfg.read_int(sect,"grab_decimation",int(m_grab_decimation))); m_sensorLabel = cfg.read_string( sect, "sensorLabel", m_sensorLabel ); m_grab_decimation_counter = 0; loadConfig_sensorSpecific(cfg,sect); MRPT_END }
/*------------------------------------------------------------- loadConfig -------------------------------------------------------------*/ void CActivMediaRobotBase::loadConfig_sensorSpecific( const mrpt::utils::CConfigFileBase &configSource, const std::string &iniSection ) { #ifdef MRPT_OS_WINDOWS m_com_port = configSource.read_string(iniSection,"robotPort_WIN",m_com_port,true); #else m_com_port = configSource.read_string(iniSection,"robotPort_LIN",m_com_port,true); #endif m_robotBaud = configSource.read_int(iniSection, "robotBaud", m_robotBaud, true ); m_enableSonars = configSource.read_bool(iniSection, "enableSonars", m_enableSonars ); m_enableJoyControl = configSource.read_bool(iniSection, "joystick_control", m_enableJoyControl ); m_joy_max_v = configSource.read_float(iniSection, "joystick_max_v", m_joy_max_v ); m_joy_max_w = DEG2RAD( configSource.read_float(iniSection, "joystick_max_w_degps", RAD2DEG(m_joy_max_w) ) ); m_capture_rate = configSource.read_double(iniSection, "capture_rate", m_capture_rate ); }
void CCascadeClassifierDetection::init(const mrpt::utils::CConfigFileBase &config) { #if MRPT_HAS_OPENCV && MRPT_OPENCV_VERSION_NUM>=0x200 // load configuration values m_options.cascadeFileName = config.read_string("CascadeClassifier","cascadeFilename",""); m_options.scaleFactor = config.read_double("DetectionOptions","scaleFactor",1.1); m_options.minNeighbors = config.read_int("DetectionOptions","minNeighbors",3); m_options.flags = config.read_int("DetectionOptions","flags",0); m_options.minSize = config.read_int("DetectionOptions","minSize",30); m_cascade = new CascadeClassifier(); // Load cascade classifier from file CASCADE->load( m_options.cascadeFileName ); // Check if cascade is empty if ( CASCADE->empty() ) throw std::runtime_error("Incorrect cascade file."); #endif }
void Camera::loadConfig_sensorSpecific(const mrpt::utils::CConfigFileBase & config, const std::string & sectionName) { LOG_CAMERA(DEBUG3) << "Reading config file..." << endl; GRID_SIZE = config.read_int(sectionName, "grid_size", 10); PERCENT_FILLED = config.read_double(sectionName, "percent_filled", .3); THRESHOLD = config.read_int(sectionName, "threshold", 20); ERODE_AMOUNT = config.read_int(sectionName, "erode_amount", 2); HSV_VECTOR = config.read_int(sectionName, "hsv_vector", 1); LOG_CAMERA(DEBUG3) << "Grid size: " << GRID_SIZE << endl; LOG_CAMERA(DEBUG3) << "Percent filled: " << PERCENT_FILLED << endl; LOG_CAMERA(DEBUG3) << "Threshold: " << THRESHOLD << endl; LOG_CAMERA(DEBUG3) << "Erode amount: " << ERODE_AMOUNT << endl; LOG_CAMERA(DEBUG3) << "HSV vector: " << HSV_VECTOR << endl; if(GRID_SIZE <= 0) LOG_CAMERA(FATAL) << "Grid size is negative or zero" << endl; if(PERCENT_FILLED <= 0) LOG_CAMERA(FATAL) << "Percent filled is negative or 0" << endl; if(PERCENT_FILLED > 1.0) LOG_CAMERA(FATAL) << "Percent filled is greater than 1" << endl; if(THRESHOLD < 0) LOG_CAMERA(FATAL) << "Threshold is negative, must be between 0 and 255" << endl; if(THRESHOLD > 255) LOG_CAMERA(FATAL) << "Threshold is too high, must be between 0 and 255" << endl; if(ERODE_AMOUNT < 0) LOG_CAMERA(FATAL) << "Erode amount must be greater than 0" << endl; if(HSV_VECTOR < 0) LOG_CAMERA(FATAL) << "hsv vector is negative, must be between 0 and 3" << endl; if(HSV_VECTOR > 3) LOG_CAMERA(FATAL) << "hsv vector is too high, must be between 0 and 3" << endl; }