19 #include <phidget21.h> 38 m_carteInterfaceKit =
new CPhidgetInterfaceKitHandle;
39 *((CPhidgetInterfaceKitHandle*)m_carteInterfaceKit) = 0;
40 m_sensorLabel =
"PhidgetInterfaceKit";
42 m_sensorIsPlugged.assign(8,
false);
43 m_minRange.assign(8, 0.1f);
44 m_maxRange.assign(8, 0.8f);
45 m_sensorPoses.resize(8);
49 THROW_EXCEPTION(
"MRPT Was compiled without the CPhidget support. Recompile MRPT to use this class")
65 m_process_rate = configSource.
read_int(iniSection,
string(
"process_rate"), 50);
66 m_serialNumber = configSource.
read_int(iniSection,
string(
"serialNumber"), -1);
67 bool display = configSource.
read_bool(iniSection,
string(
"displayRecapitulativeInformations"),
false);
71 for(
int i = 1 ; i <= 8 ; i++)
73 string sensorNKeyName =
format(
"sensor%d", i);
74 string sensorType = configSource.
read_string(iniSection, sensorNKeyName,
string(
"UNPLUGGED"));
75 if(sensorType !=
string(
"UNPLUGGED"))
79 if(sensorType ==
string(
"EZ1"))
81 m_sensorType[i-1] =
EZ1;
82 m_minRange[i-1] = 0.15;
83 m_maxRange[i-1] = 6.45;
84 }
else if(sensorType ==
string(
"SHARP-30cm"))
87 m_minRange[i-1] = 0.04;
88 m_maxRange[i-1] = 0.3;
89 }
else if(sensorType ==
string(
"SHARP-80cm"))
92 m_minRange[i-1] = 0.06;
93 m_maxRange[i-1] = 0.8;
96 string err =
format(
"Type of sensor %d is not supported", i);
100 m_sensorIsPlugged[i-1] =
true;
102 string sensorNPoseX =
format(
"pose%d_x", i);
103 string sensorNPoseY =
format(
"pose%d_y", i);
104 string sensorNPoseZ =
format(
"pose%d_z", i);
105 string sensorNPoseYaw =
format(
"pose%d_yaw", i);
106 string sensorNPosePitch =
format(
"pose%d_pitch", i);
107 string sensorNPoseRoll =
format(
"pose%d_roll", i);
109 float x = configSource.
read_float(iniSection, sensorNPoseX, 0.0);
110 float y = configSource.
read_float(iniSection, sensorNPoseY, 0.0);
111 float z = configSource.
read_float(iniSection, sensorNPoseZ, 0.0);
112 float yaw = configSource.
read_float(iniSection, sensorNPoseYaw, 0.0);
113 float pitch = configSource.
read_float(iniSection, sensorNPosePitch, 0.0);
114 float roll = configSource.
read_float(iniSection, sensorNPoseRoll, 0.0);
122 cout <<
"+------------------------------------------------------------------------------+" << endl;
124 cout <<
"| Phidget interfaceKit board number : " << m_serialNumber;
126 cout <<
"| Process rate : " << m_process_rate;
128 cout <<
"+---------+---------------------+----------------------------------------------+" << endl;
129 cout <<
"| # + Sensor type | Sensor 3D pose |" << endl;
130 cout <<
"+---------+---------------------+----------------------------------------------+" << endl;
131 for(
int i = 0 ; i < 8 ; i++)
138 switch (m_sensorType[i])
144 cout <<
"SHARP_30cm |";
147 cout <<
"SHARP_80cm |";
150 cout <<
"UNPLUGGED |";
154 cout << m_sensorPoses[i];
157 cout <<
"+------------------------------------------------------------------------------+" << endl;
172 CPhidgetInterfaceKit_create((CPhidgetInterfaceKitHandle*)m_carteInterfaceKit);
173 CPhidget_open(*((CPhidgetHandle*)(m_carteInterfaceKit)), m_serialNumber);
174 int err = CPhidget_waitForAttachment(*((CPhidgetHandle*)(m_carteInterfaceKit)), 200);
179 THROW_EXCEPTION(
"Can't find Phidget IK card, please check your serial number.");
197 m_minOfMinRanges = *min_element(m_minRange.begin(), m_minRange.end());
198 m_maxOfMaxRanges = *max_element(m_maxRange.begin(), m_maxRange.end());
211 if(*((CPhidgetHandle*)m_carteInterfaceKit))
213 CPhidget_close(*((CPhidgetHandle*)(m_carteInterfaceKit)));
214 CPhidget_delete(*((CPhidgetHandle*)(m_carteInterfaceKit)));
224 CObservationRangePtr obs= CObservationRange::Create();
231 if(obs->sensedData.size() > 0)
233 appendObservation( obs );
257 for(
int i = 0 ; i < 8 ; i++)
259 if(m_sensorIsPlugged[i])
262 int err = CPhidgetInterfaceKit_getSensorValue(*((CPhidgetInterfaceKitHandle*)(m_carteInterfaceKit)), i, &sensorValue);
265 string error(
"Error durring acquiering sensor value on channel : %d", i);
268 switch (m_sensorType[i])
275 obsRange.
sensedDistance = 2076./(
static_cast<float>(sensorValue) - 11.);
278 obsRange.
sensedDistance = 4800./(
static_cast<float>(sensorValue) - 16.92);
bool read_bool(const std::string §ion, const std::string &name, bool defaultValue, bool failIfNotFound=false) const
Declares a class derived from "CObservation" that encapsules a single range measurement, and associated parameters.
Classes for serialization, sockets, ini-file manipulation, streams, list of properties-values, timewatch, extensions to STL.
bool sectionExists(const std::string §ion_name) const
Checks if a given section exists (name is case insensitive)
float minSensorDistance
The data members.
OBSERVATION_T::Ptr getObservation(mrpt::obs::CSensoryFramePtr &observations, mrpt::obs::CObservationPtr &observation, bool priority_to_sf=true)
Given an mrpt::obs::CSensoryFrame and a mrpt::obs::CObservation pointer if a OBSERVATION_T type obser...
float sensorConeApperture
Cone aperture of each ultrasonic beam, in radians.
This namespace provides a OS-independent interface to many useful functions: filenames manipulation...
float read_float(const std::string §ion, const std::string &name, float defaultValue, bool failIfNotFound=false) const
mrpt::system::TTimeStamp BASE_IMPEXP getCurrentTime()
Returns the current (UTC) system time.
#define THROW_EXCEPTION(msg)
void getObservation(mrpt::obs::CObservationRange &outObservation)
This method tries to get a set of range measurements from the IR sensors.
Contains classes for various device interfaces.
std::string read_string(const std::string §ion, const std::string &name, const std::string &defaultValue, bool failIfNotFound=false) const
This class allows loading and storing values and vectors of different types from a configuration text...
int read_int(const std::string §ion, const std::string &name, int defaultValue, bool failIfNotFound=false) const
float sensedDistance
The measured range, in meters (or a value of 0 if there was no detected echo).
#define MRPT_UNUSED_PARAM(a)
Can be used to avoid "not used parameters" warnings from the compiler.
This namespace contains representation of robot actions and observations.
std::string BASE_IMPEXP format(const char *fmt,...) MRPT_printf_format_check(1
A std::string version of C sprintf.
GLsizei const GLchar ** string
#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.
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.
mrpt::system::TTimeStamp timestamp
The associated UTC time-stamp. Where available, this should contain the accurate satellite-based time...
: An interface for the phidget Interface kit board (1018).
uint16_t sensorID
Some kind of sensor ID which identifies it on the bus (if applicable, 0 otherwise) ...
A class used to store a 3D pose (a 3D translation + a rotation in 3D).
math::TPose3D sensorPose
The 6D position of the sensor on the robot.
void loadConfig_sensorSpecific(const mrpt::utils::CConfigFileBase &configSource, const std::string &iniSection)
See the class documentation at the top for expected parameters.
void doProcess()
This method should be called periodically.
virtual ~CPhidgetInterfaceKitProximitySensors()
Destructor.
void initialize()
Initialize the sensor according to the parameters previously read in the configuration file...
TMeasurementList sensedData
All the measurements.