34     m_sensorLabel = 
"EnoseModular";
    41 void CEnoseModular::loadConfig_sensorSpecific(
    43     const std::string& iniSection)
    48         configSource.
read_string(iniSection, 
"USB_serialname", 
"", 
false);
    51     m_COM_port = configSource.
read_string(iniSection, 
"COM_port_WIN", 
"COM1");
    54         configSource.
read_string(iniSection, 
"COM_port_LIN", m_COM_port);
    57         configSource.
read_uint64_t(iniSection, 
"COM_baudRate", m_COM_baud);
    65 CStream* CEnoseModular::checkConnectionAndConnect()
    68     if (!m_stream_FTDI && !m_stream_SERIAL)
    70         if (!m_COM_port.empty())
    71             m_stream_SERIAL = std::make_unique<mrpt::comms::CSerialPort>();
    73             m_stream_FTDI = std::make_unique<mrpt::comms::CInterfaceFTDI>();
    78         if (m_stream_FTDI->isOpen()) 
return m_stream_FTDI.get();
    81             m_stream_FTDI->OpenBySerialNumber(m_usbSerialNumber);
    82             std::this_thread::sleep_for(10ms);
    83             m_stream_FTDI->Purge();
    84             std::this_thread::sleep_for(10ms);
    85             m_stream_FTDI->SetLatencyTimer(1);
    86             m_stream_FTDI->SetTimeouts(10, 100);
    87             return m_stream_FTDI.get();
    91             m_stream_FTDI->Close();
    98         if (m_stream_SERIAL->isOpen()) 
return m_stream_SERIAL.get();
   101             m_stream_SERIAL->open(m_COM_port);
   102             m_stream_SERIAL->setConfig(m_COM_baud);
   104             m_stream_SERIAL->setTimeouts(50, 1, 100, 1, 20);
   105             std::this_thread::sleep_for(10ms);
   106             m_stream_SERIAL->purgeBuffers();
   107             std::this_thread::sleep_for(10ms);
   108             return m_stream_SERIAL.get();
   112             m_stream_SERIAL->close();
   130             cout << 
"ERORR: Problem connecting to Device." << endl;
   145         bool time_out = 
false;
   147         double time_out_val = 1;  
   151         while (!arch.receiveMessage(msg) && !time_out)
   160             cout << 
"[CEnoseModular - getObservation] measurement Timed-Out"   170             size_t numSensors = (msg.
content.size() - 1) / 3;
   179             if (enose_poses_x.size() != 0)
   182                     enose_poses_x[0], enose_poses_y[0], enose_poses_z[0],
   183                     enose_poses_yaw[0], enose_poses_pitch[0],
   184                     enose_poses_roll[0]);
   193             for (
size_t idx = 0; idx < numSensors; idx++)
   196                 int sensorType_temp = 0;
   200                     &sensorType_temp, &msg.
content[idx * 3 + 1],
   202                 int sensorType = sensorType_temp << (8);
   204                     &sensorType, &msg.
content[idx * 3 + 2],
   212                     (msg.
content[idx * 3 + 3] * 0.6f) / 255.0f);
   226             cout << 
"Message was empty" << endl;
   232         cerr << 
"[CEnoseModular::getObservation] Returning false due to "   235         cerr << e.what() << endl;
   252 void CEnoseModular::doProcess()
   255         std::make_shared<CObservationGasSensors>();
   260         appendObservation(obs);
   265         cout << 
"No observation received from the USB board!" << endl;
   273 void CEnoseModular::purgeBuffers()
   275     if (!checkConnectionAndConnect()) 
return;
   279         m_stream_FTDI->Purge();
   283         m_stream_SERIAL->purgeBuffers();
 
std::string read_string(const std::string §ion, const std::string &name, const std::string &defaultValue, bool failIfNotFound=false) const
 
mrpt::system::TTimeStamp getCurrentTime()
Returns the current (UTC) system time. 
 
float temperature
Sensed temperature in Celcius (valid if hasTemperature=true only) 
 
mrpt::system::TTimeStamp now()
A shortcut for system::getCurrentTime. 
 
Contains classes for various device interfaces. 
 
The structure for each e-nose. 
 
This base class is used to provide a unified interface to files,memory buffers,..Please see the deriv...
 
CArchiveStreamBase< STREAM > archiveFrom(STREAM &s)
Helper function to create a templatized wrapper CArchive object for a: MRPT's CStream, std::istream, std::ostream, std::stringstream. 
 
#define ASSERT_(f)
Defines an assertion mechanism. 
 
mrpt::Clock::time_point TTimeStamp
A system independent time type, it holds the the number of 100-nanosecond intervals since January 1...
 
This class allows loading and storing values and vectors of different types from a configuration text...
 
This base provides a set of functions for maths stuff. 
 
math::TPose3D eNosePoseOnTheRobot
The pose of the sensors on the robot. 
 
std::vector< int > sensorTypes
The kind of sensors in the array (size of "sensorTypes" is the same that the size of "readingsVoltage...
 
bool hasTemperature
Must be true for "temperature" to contain a valid measurement. 
 
This namespace contains representation of robot actions and observations. 
 
uint64_t read_uint64_t(const std::string §ion, const std::string &name, uint64_t defaultValue, bool failIfNotFound=false) const
 
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: 
 
Classes for 2D/3D geometry representation, both of single values and probability density distribution...
 
std::string sensorLabel
An arbitrary label that can be used to identify the sensor. 
 
bool isActive
True if the input to this chamber/enose is poluted air, False if clean air. 
 
mrpt::system::TTimeStamp timestamp
The associated UTC time-stamp. 
 
A class that contain generic messages, that can be sent and received from a "CClientTCPSocket" object...
 
std::vector< TObservationENose > m_readings
One entry per e-nose on the robot. 
 
OBSERVATION_T::Ptr getObservation(mrpt::obs::CSensoryFrame::Ptr &observations, mrpt::obs::CObservation::Ptr &observation, bool priority_to_sf=true)
Given an mrpt::obs::CSensoryFrame and a mrpt::obs::CObservation pointer if a OBSERVATION_T type obser...
 
Lightweight 3D pose (three spatial coordinates, plus three angular coordinates). 
 
std::vector< uint8_t > content
The contents of the message (memory is automatically handled by the std::vector object) ...
 
double timeDifference(const mrpt::system::TTimeStamp t_first, const mrpt::system::TTimeStamp t_later)
Returns the time difference from t1 to t2 (positive if t2 is posterior to t1), in seconds...
 
std::vector< float > readingsVoltage
The set of readings (in volts) from the array of sensors (size of "sensorTypes" is the same that the ...
 
A class for interfacing an e-NoseModular via a FTDI USB link. 
 
void memcpy(void *dest, size_t destSize, const void *src, size_t copyCount) noexcept
An OS and compiler independent version of "memcpy".