MRPT  1.9.9
CBoardENoses.h
Go to the documentation of this file.
1 /* +------------------------------------------------------------------------+
2  | Mobile Robot Programming Toolkit (MRPT) |
3  | https://www.mrpt.org/ |
4  | |
5  | Copyright (c) 2005-2020, Individual contributors, see AUTHORS file |
6  | See: https://www.mrpt.org/Authors - All rights reserved. |
7  | Released under BSD License. See: https://www.mrpt.org/License |
8  +------------------------------------------------------------------------+ */
9 
10 #pragma once
11 
13 #include <mrpt/comms/CSerialPort.h>
15 
18 #include <memory> // unique_ptr
19 
20 namespace mrpt::hwdrivers
21 {
22 /** A class for interfacing an e-Noses via a FTDI USB link.
23  * Implemented for the board v1.0 designed by 2007 @ ISA (University of
24  * Malaga).
25  *
26  * \code
27  * PARAMETERS IN THE ".INI"-LIKE CONFIGURATION STRINGS:
28  * -------------------------------------------------------
29  * [supplied_section_name]
30  * USB_serialname=ENOSE001 // USB FTDI pipe: will open only if COM_port_*
31  * are not set or empty
32  *
33  * COM_port_WIN = COM1 // Serial port to connect to.
34  * COM_port_LIN = ttyS0
35  *
36  * COM_baudRate = 115200
37  *
38  * ; 3D position (in meters) of the master +slave eNoses
39  * enose_poses_x=<MASTER X> <SLAVE#1 X> <SLAVE#2 X> <SLAVE#3 X>...
40  * enose_poses_y=<MASTER Y> <SLAVE#1 Y> <SLAVE#2 Y> <SLAVE#3 Y>...
41  * enose_poses_z=<MASTER Z> <SLAVE#1 Z> <SLAVE#2 Z> <SLAVE#3 Z>...
42  *
43  * ; 3D pose angles (in degrees) of the master +slave eNoses
44  * enose_poses_yaw=<MASTER YAW> <SLAVE#1 YAW> <SLAVE#2 YAW> <SLAVE#3 YAW>...
45  * enose_poses_pitch=<MASTER PITCH> <SLAVE#1 PITCH> <SLAVE#2 PITCH> <SLAVE#3
46  * PITCH>...
47  * enose_poses_roll=<MASTER ROLL> <SLAVE#1 ROLL> <SLAVE#2 ROLL> <SLAVE#3
48  * ROLL>...
49  *
50  * \endcode
51  *
52  * \ingroup mrpt_hwdrivers_grp
53  */
55 {
57 
58  protected:
59  /** A copy of the device serial number (to open the USB FTDI chip)
60  */
61  std::string m_usbSerialNumber;
64 
65  /** If not an empty string (default), will open that serial port, otherwise
66  * will try to open USB FTDI device "m_usbSerialNumber" */
67  std::string m_COM_port;
68  /** Default=115200 */
69  unsigned int m_COM_baud{115200};
70 
71  // Only one of these two streams will be !=nullptr and open for each
72  // specific eNose board!
73  /** FTDI comms pipe (when not in serial port mode) */
74  std::unique_ptr<mrpt::comms::CInterfaceFTDI> m_stream_FTDI;
75  /** Serial port comms */
76  std::unique_ptr<mrpt::comms::CSerialPort> m_stream_SERIAL;
77 
78  /** The 3D pose of the master + N slave eNoses on the robot (meters &
79  * radians) */
82 
83  /** Tries to connect to the USB device (if disconnected).
84  * \return nullptr on error, otherwise a stream to be used for comms.
85  */
87 
88  /** See the class documentation at the top for expected parameters */
90  const mrpt::config::CConfigFileBase& configSource,
91  const std::string& section) override;
92 
93  public:
94  /** Constructor
95  * \param serialNumberUSBdevice The serial number (text) of the device to
96  * open.
97  * The constructor will try to open the device. You can check if it failed
98  * calling "isOpen()".
99  */
100  CBoardENoses();
101 
102  /** Set the active chamber (afected by poluted air) on the device
103  * \return true on success, false on communications errors or device not
104  * found.
105  */
106  bool setActiveChamber(unsigned char chamber);
107 
108  /** Query the firmware version on the device (can be used to test
109  * communications).
110  * \return true on success, false on communications errors or device not
111  * found.
112  */
113  bool queryFirmwareVersion(std::string& out_firmwareVersion);
114 
115  /** Request the master eNose the latest readings from all the eNoses.
116  * The output observation contains a valid timestamp and 3D positions if
117  * "loadConfig" has been called previously.
118  * \return true if OK, false if there were any error.
119  */
121 
122  // See docs in parent class
123  void doProcess() override;
124 
125  /** Tries to open the camera, after setting all the parameters with a call
126  * to loadConfig.
127  * \exception This method must throw an exception with a descriptive
128  * message if some critical error is found.
129  */
130  void initialize() override;
131 
132  /** If not an empty string, will open that serial port, otherwise will try
133  * to open USB FTDI device "m_usbSerialNumber"
134  * The default is an empty string. Example strings: "COM1", "ttyUSB0", ...
135  */
136  inline void setSerialPort(const std::string& port) { m_COM_port = port; }
137  inline std::string getSerialPort() const { return m_COM_port; }
138  /** Set the serial port baud rate (default: 115200) */
139  inline void setSerialPortBaud(unsigned int baud) { m_COM_baud = baud; }
140  inline unsigned int getSerialPortBaud() const { return m_COM_baud; }
141 }; // end of class
142 } // namespace mrpt::hwdrivers
A generic interface for a wide-variety of sensors designed to be used in the application RawLogGrabbe...
std::chrono::duration< rep, period > duration
Definition: Clock.h:24
void initialize() override
Tries to open the camera, after setting all the parameters with a call to loadConfig.
std::vector< float > enose_poses_z
Definition: CBoardENoses.h:80
void loadConfig_sensorSpecific(const mrpt::config::CConfigFileBase &configSource, const std::string &section) override
See the class documentation at the top for expected parameters.
std::unique_ptr< mrpt::comms::CInterfaceFTDI > m_stream_FTDI
FTDI comms pipe (when not in serial port mode)
Definition: CBoardENoses.h:74
void setSerialPortBaud(unsigned int baud)
Set the serial port baud rate (default: 115200)
Definition: CBoardENoses.h:139
Contains classes for various device interfaces.
std::string getSerialPort() const
Definition: CBoardENoses.h:137
This base class is used to provide a unified interface to files,memory buffers,..Please see the deriv...
Definition: io/CStream.h:28
bool getObservation(mrpt::obs::CObservationGasSensors &outObservation)
Request the master eNose the latest readings from all the eNoses.
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...
Definition: CBoardENoses.h:136
std::vector< float > enose_poses_yaw
Definition: CBoardENoses.h:80
This class allows loading and storing values and vectors of different types from a configuration text...
A class for interfacing an e-Noses via a FTDI USB link.
Definition: CBoardENoses.h:54
std::unique_ptr< mrpt::comms::CSerialPort > m_stream_SERIAL
Serial port comms.
Definition: CBoardENoses.h:76
Declares a class derived from "CObservation" that represents a set of readings from gas sensors...
mrpt::io::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...
std::vector< float > enose_poses_y
Definition: CBoardENoses.h:80
std::string m_usbSerialNumber
A copy of the device serial number (to open the USB FTDI chip)
Definition: CBoardENoses.h:61
unsigned int getSerialPortBaud() const
Definition: CBoardENoses.h:140
mrpt::Clock::duration initial_timestamp
Definition: CBoardENoses.h:62
std::vector< float > enose_poses_pitch
Definition: CBoardENoses.h:80
std::vector< float > enose_poses_roll
Definition: CBoardENoses.h:80
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: CBoardENoses.h:67
unsigned int m_COM_baud
Default=115200.
Definition: CBoardENoses.h:69
void doProcess() override
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_x
The 3D pose of the master + N slave eNoses on the robot (meters & radians)
Definition: CBoardENoses.h:80
bool setActiveChamber(unsigned char chamber)
Set the active chamber (afected by poluted air) on the device.
bool queryFirmwareVersion(std::string &out_firmwareVersion)
Query the firmware version on the device (can be used to test communications).



Page generated by Doxygen 1.8.14 for MRPT 1.9.9 Git: c7a3bec24 Sun Mar 29 18:33:13 2020 +0200 at dom mar 29 18:50:38 CEST 2020