Main MRPT website > C++ reference for MRPT 1.9.9
CEnoseModular.h
Go to the documentation of this file.
1 /* +------------------------------------------------------------------------+
2  | Mobile Robot Programming Toolkit (MRPT) |
3  | http://www.mrpt.org/ |
4  | |
5  | Copyright (c) 2005-2017, Individual contributors, see AUTHORS file |
6  | See: http://www.mrpt.org/Authors - All rights reserved. |
7  | Released under BSD License. See details in http://www.mrpt.org/License |
8  +------------------------------------------------------------------------+ */
9 
10 #ifndef CEnoseModular_H
11 #define CEnoseModular_H
12 
14 #include <mrpt/comms/CSerialPort.h>
18 #include <memory> // unique_ptr
19 
20 namespace mrpt
21 {
22 namespace hwdrivers
23 {
24 /** A class for interfacing an e-NoseModular via a FTDI USB link.
25  * Implemented for the Mdular board v1.0 designed by 2013 @ MAPIR (University
26  * of Malaga).
27  *
28  * \code
29  * PARAMETERS IN THE ".INI"-LIKE CONFIGURATION STRINGS:
30  * -------------------------------------------------------
31  * [supplied_section_name]
32  * USB_serialname=ENOSE001 // USB FTDI pipe: will open only if COM_port_*
33  * are not set or empty
34  *
35  * COM_port_WIN = COM1 // Serial port to connect to.
36  * COM_port_LIN = ttyS0
37  *
38  * COM_baudRate = 115200
39  *
40  * ; 3D position (in meters) of the master +slave eNoses
41  * enose_poses_x=<MASTER X> <SLAVE#1 X> <SLAVE#2 X> <SLAVE#3 X>...
42  * enose_poses_y=<MASTER Y> <SLAVE#1 Y> <SLAVE#2 Y> <SLAVE#3 Y>...
43  * enose_poses_z=<MASTER Z> <SLAVE#1 Z> <SLAVE#2 Z> <SLAVE#3 Z>...
44  *
45  * ; 3D pose angles (in degrees) of the master +slave eNoses
46  * enose_poses_yaw=<MASTER YAW> <SLAVE#1 YAW> <SLAVE#2 YAW> <SLAVE#3 YAW>...
47  * enose_poses_pitch=<MASTER PITCH> <SLAVE#1 PITCH> <SLAVE#2 PITCH> <SLAVE#3
48  * PITCH>...
49  * enose_poses_roll=<MASTER ROLL> <SLAVE#1 ROLL> <SLAVE#2 ROLL> <SLAVE#3
50  * ROLL>...
51  *
52  * \endcode
53  *
54  * \ingroup mrpt_hwdrivers_grp
55  */
57 {
59 
60  protected:
61  /** A copy of the device serial number (to open the USB FTDI chip)
62  */
66 
67  /** If not an empty string (default), will open that serial port, otherwise
68  * will try to open USB FTDI device "m_usbSerialNumber" */
70  /** Default=115200 */
71  unsigned int m_COM_baud;
72 
73  // Only one of these two streams will be !=nullptr and open for each
74  // specific eNose board!
75  /** FTDI comms pipe (when not in serial port mode) */
76  std::unique_ptr<mrpt::comms::CInterfaceFTDI> m_stream_FTDI;
77  /** Serial port comms */
78  std::unique_ptr<mrpt::comms::CSerialPort> m_stream_SERIAL;
79 
80  /** The 3D pose of the master + N slave eNoses on the robot (meters &
81  * radians) */
84 
85  /** Tries to connect to the USB device (if disconnected).
86  * \return nullptr on error, otherwise a stream to be used for comms.
87  */
89 
90  /** See the class documentation at the top for expected parameters */
92  const mrpt::utils::CConfigFileBase& configSource,
93  const std::string& section);
94 
95  /** Purge the Serial/FTDI buffer */
96  void purgeBuffers();
97 
98  public:
99  /** Constructor
100  * \param serialNumberUSBdevice The serial number (text) of the device to
101  * open.
102  * The constructor will try to open the device. You can check if it failed
103  * calling "isOpen()".
104  */
105  CEnoseModular();
106 
107  /** Request the master eNose the latest readings from all the eNoses.
108  * The output observation contains a valid timestamp and 3D positions if
109  * "loadConfig" has been called previously.
110  * \return true if OK, false if there were any error.
111  */
113 
114  // See docs in parent class
115  void doProcess();
116 
117  /** If not an empty string, will open that serial port, otherwise will try
118  * to open USB FTDI device "m_usbSerialNumber"
119  * The default is an empty string. Example strings: "COM1", "ttyUSB0", ...
120  */
121  inline void setSerialPort(const std::string& port) { m_COM_port = port; }
122  inline std::string getSerialPort() const { return m_COM_port; }
123  /** Set the serial port baud rate (default: 115200) */
124  inline void setSerialPortBaud(unsigned int baud) { m_COM_baud = baud; }
125  inline unsigned int getSerialPortBaud() const { return m_COM_baud; }
126 }; // end of class
127 } // end of namespace
128 } // end of namespace
129 
130 #endif
A generic interface for a wide-variety of sensors designed to be used in the application RawLogGrabbe...
uint64_t TTimeStamp
A system independent time type, it holds the the number of 100-nanosecond intervals since January 1...
Definition: datetime.h:32
std::vector< float > enose_poses_z
Definition: CEnoseModular.h:82
void doProcess()
This method should be called periodically (at least at 1Hz to capture ALL the real-time data) It is t...
std::vector< float > enose_poses_roll
Definition: CEnoseModular.h:82
void purgeBuffers()
Purge the Serial/FTDI buffer.
void setSerialPort(const std::string &port)
If not an empty string, will open that serial port, otherwise will try to open USB FTDI device "m_usb...
std::string getSerialPort() const
std::vector< float > enose_poses_yaw
Definition: CEnoseModular.h:82
void loadConfig_sensorSpecific(const mrpt::utils::CConfigFileBase &configSource, const std::string &section)
See the class documentation at the top for expected parameters.
This class allows loading and storing values and vectors of different types from a configuration text...
This base class is used to provide a unified interface to files,memory buffers,..Please see the deriv...
Definition: CStream.h:41
std::vector< float > enose_poses_pitch
Definition: CEnoseModular.h:82
void setSerialPortBaud(unsigned int baud)
Set the serial port baud rate (default: 115200)
mrpt::system::TTimeStamp initial_timestamp
Definition: CEnoseModular.h:64
std::string m_usbSerialNumber
A copy of the device serial number (to open the USB FTDI chip)
Definition: CEnoseModular.h:63
std::vector< float > enose_poses_x
The 3D pose of the master + N slave eNoses on the robot (meters & radians)
Definition: CEnoseModular.h:82
std::unique_ptr< mrpt::comms::CSerialPort > m_stream_SERIAL
Serial port comms.
Definition: CEnoseModular.h:78
Declares a class derived from "CObservation" that represents a set of readings from gas sensors...
std::string m_COM_port
If not an empty string (default), will open that serial port, otherwise will try to open USB FTDI dev...
Definition: CEnoseModular.h:69
GLsizei const GLchar ** string
Definition: glext.h:4101
std::vector< float > enose_poses_y
Definition: CEnoseModular.h:82
mrpt::utils::CStream * checkConnectionAndConnect()
Tries to connect to the USB device (if disconnected).
#define DEFINE_GENERIC_SENSOR(class_name)
This declaration must be inserted in all CGenericSensor classes definition, within the class declarat...
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.
unsigned int getSerialPortBaud() const
bool getObservation(mrpt::obs::CObservationGasSensors &outObservation)
Request the master eNose the latest readings from all the eNoses.
unsigned int m_COM_baud
Default=115200.
Definition: CEnoseModular.h:71
std::unique_ptr< mrpt::comms::CInterfaceFTDI > m_stream_FTDI
FTDI comms pipe (when not in serial port mode)
Definition: CEnoseModular.h:76
A class for interfacing an e-NoseModular via a FTDI USB link.
Definition: CEnoseModular.h:56



Page generated by Doxygen 1.8.14 for MRPT 1.9.9 Git: ae4571287 Thu Nov 23 00:06:53 2017 +0100 at dom oct 27 23:51:55 CET 2019