33 void CRaePID::loadConfig_sensorSpecific(
    35     const std::string& iniSection)
    39         configSource.
read_string(iniSection, 
"COM_port_PID", 
"COM1", 
true);
    42         configSource.
read_string(iniSection, 
"COM_port_PID", 
"/dev/tty0", 
true);
    45     com_bauds = configSource.
read_int(iniSection, 
"baudRate", 9600, 
false);
    47     pose_x = configSource.
read_float(iniSection, 
"pose_x", 0, 
true);
    48     pose_y = configSource.
read_float(iniSection, 
"pose_y", 0, 
true);
    49     pose_z = configSource.
read_float(iniSection, 
"pose_z", 0, 
true);
    50     pose_roll = configSource.
read_float(iniSection, 
"pose_roll", 0, 
true);
    51     pose_pitch = configSource.
read_float(iniSection, 
"pose_pitch", 0, 
true);
    52     pose_yaw = configSource.
read_float(iniSection, 
"pose_yaw", 0, 
true);
    58 bool CRaePID::tryToOpenTheCOM()
    60     if (COM.isOpen()) 
return true;  
    63         cout << 
"[CRaePID] Opening " << com_port << 
" @ " << com_bauds << endl;
    69         COM.setConfig(com_bauds, 0, 8, 1);
    71         COM.setTimeouts(50, 1, 100, 1, 20);
    78     catch (
const std::exception& e)
    80         std::cerr << 
"[CRaePID::tryToOpenTheCOM] Error opening or configuring "    89         std::cerr << 
"[CRaePID::tryToOpenTheCOM] Error opening or configuring "   100 void CRaePID::doProcess()
   103     if (!tryToOpenTheCOM())
   109     bool have_reading = 
false;
   110     std::string power_reading;
   111     bool time_out = 
false;
   113     while (!have_reading)
   120         power_reading = COM.ReadString(500, &time_out);
   125             std::this_thread::sleep_for(10ms);
   135     const float readnum = atof(power_reading.c_str());
   136     const float val_ppm = readnum / 1000;
   151 std::string CRaePID::getFirmware()
   154     cout << 
"Firmware version: " << endl;
   156     size_t B_written = COM.Write(
"F", 1);
   157     if (!B_written) 
return std::string(
"COMMS.ERROR");
   160     bool time_out = 
false;
   161     std::string s_read = COM.ReadString(2000, &time_out);
   162     if (time_out) s_read = 
"Time_out";
   166 std::string CRaePID::getModel()
   173     return COM.ReadString();
   176 std::string CRaePID::getSerialNumber()
   183     return COM.ReadString();
   186 std::string CRaePID::getName()
   193     return COM.ReadString();
   196 bool CRaePID::switchPower()
   204     reading = COM.ReadString();
   206     if (strcmp(reading.c_str(), 
"Sleep...") == 0)
   220     reading = COM.ReadString();
   225     std::stringstream readings_str(reading);
   229     std::istream_iterator<std::string> it(readings_str);
   230     std::istream_iterator<std::string> endit;
   231     std::vector<std::string> measurements_text(it, endit);
   237     for (
auto& k : measurements_text)
   239         const float readnum = atof(k.c_str());
   240         const float val_ppm = readnum / 1000.f;
   253 bool CRaePID::errorStatus(std::string& errorString)
   261     reading = COM.ReadString();
   266     std::stringstream readings_str(reading);
   270     std::istream_iterator<std::string> it(readings_str);
   271     std::istream_iterator<std::string> endit;
   272     std::vector<std::string> errors_text(it, endit);
   275     if ((strcmp(errors_text[0].c_str(), 
"0") == 0) &&
   276         (strcmp(errors_text[1].c_str(), 
"0") == 0))  
   285         errorString = reading;
   290 void CRaePID::getLimits(
float& min, 
float& max)
   298     reading = COM.ReadString();
   303     std::stringstream readings_str(reading);
   307     std::istream_iterator<std::string> it(readings_str);
   308     std::istream_iterator<std::string> endit;
   309     std::vector<std::string> readings_text(it, endit);
   312     max = atof(readings_text[0].c_str());
   313     min = atof(readings_text[1].c_str());
 std::string read_string(const std::string §ion, const std::string &name, const std::string &defaultValue, bool failIfNotFound=false) const
 
#define THROW_EXCEPTION(msg)
 
This class implements a driver for the RAE Systems gas PhotoIonization Detector (PID) (Tested on a Mi...
 
mrpt::system::TTimeStamp now()
A shortcut for system::getCurrentTime. 
 
Contains classes for various device interfaces. 
 
float read_float(const std::string §ion, const std::string &name, float defaultValue, bool failIfNotFound=false) const
 
The structure for each e-nose. 
 
int read_int(const std::string §ion, const std::string &name, int defaultValue, bool failIfNotFound=false) const
 
This class allows loading and storing values and vectors of different types from a configuration text...
 
std::vector< int > sensorTypes
The kind of sensors in the array (size of "sensorTypes" is the same that the size of "readingsVoltage...
 
Declares a class derived from "CObservation" that represents a set of readings from gas sensors...
 
#define IMPLEMENTS_GENERIC_SENSOR(class_name, NameSpace)
This must be inserted in all CGenericSensor classes implementation files: 
 
std::string sensorLabel
An arbitrary label that can be used to identify the sensor. 
 
mrpt::system::TTimeStamp timestamp
The associated UTC time-stamp. 
 
std::vector< TObservationENose > m_readings
One entry per e-nose on the robot. 
 
std::vector< float > readingsVoltage
The set of readings (in volts) from the array of sensors (size of "sensorTypes" is the same that the ...
 
static Ptr Create(Args &&... args)