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);
50 "MRPT Was compiled without the CPhidget support. Recompile MRPT to use " 70 configSource.
read_int(iniSection,
string(
"process_rate"), 50);
72 configSource.
read_int(iniSection,
string(
"serialNumber"), -1);
74 iniSection,
string(
"displayRecapitulativeInformations"),
false);
78 for (
int i = 1; i <= 8; i++)
80 string sensorNKeyName =
format(
"sensor%d", i);
82 iniSection, sensorNKeyName,
string(
"UNPLUGGED"));
83 if (sensorType !=
string(
"UNPLUGGED"))
87 if (sensorType ==
string(
"EZ1"))
89 m_sensorType[i - 1] =
EZ1;
90 m_minRange[i - 1] = 0.15;
91 m_maxRange[i - 1] = 6.45;
93 else if (sensorType ==
string(
"SHARP-30cm"))
96 m_minRange[i - 1] = 0.04;
97 m_maxRange[i - 1] = 0.3;
99 else if (sensorType ==
string(
"SHARP-80cm"))
102 m_minRange[i - 1] = 0.06;
103 m_maxRange[i - 1] = 0.8;
107 string err =
format(
"Type of sensor %d is not supported", i);
111 m_sensorIsPlugged[i - 1] =
true;
113 string sensorNPoseX =
format(
"pose%d_x", i);
114 string sensorNPoseY =
format(
"pose%d_y", i);
115 string sensorNPoseZ =
format(
"pose%d_z", i);
116 string sensorNPoseYaw =
format(
"pose%d_yaw", i);
117 string sensorNPosePitch =
format(
"pose%d_pitch", i);
118 string sensorNPoseRoll =
format(
"pose%d_roll", i);
120 float x = configSource.
read_float(iniSection, sensorNPoseX, 0.0);
121 float y = configSource.
read_float(iniSection, sensorNPoseY, 0.0);
122 float z = configSource.
read_float(iniSection, sensorNPoseZ, 0.0);
124 configSource.
read_float(iniSection, sensorNPoseYaw, 0.0);
126 configSource.
read_float(iniSection, sensorNPosePitch, 0.0);
128 configSource.
read_float(iniSection, sensorNPoseRoll, 0.0);
130 m_sensorPoses[i - 1] =
137 cout <<
"+-------------------------------------------------------------" 141 cout <<
"| Phidget interfaceKit board number : " << m_serialNumber;
143 cout <<
"| Process rate : " << m_process_rate;
145 cout <<
"+---------+---------------------+-----------------------------" 148 cout <<
"| # + Sensor type | Sensor 3D pose " 151 cout <<
"+---------+---------------------+-----------------------------" 154 for (
int i = 0; i < 8; i++)
161 switch (m_sensorType[i])
167 cout <<
"SHARP_30cm |";
170 cout <<
"SHARP_80cm |";
173 cout <<
"UNPLUGGED |";
177 cout << m_sensorPoses[i];
180 cout <<
"+-------------------------------------------------------------" 197 CPhidgetInterfaceKit_create(
198 (CPhidgetInterfaceKitHandle*)m_carteInterfaceKit);
199 CPhidget_open(*((CPhidgetHandle*)(m_carteInterfaceKit)), m_serialNumber);
200 int err = CPhidget_waitForAttachment(
201 *((CPhidgetHandle*)(m_carteInterfaceKit)),
208 "Can't find Phidget IK card, please check your serial number.");
226 m_minOfMinRanges = *min_element(m_minRange.begin(), m_minRange.end());
227 m_maxOfMaxRanges = *max_element(m_maxRange.begin(), m_maxRange.end());
239 if (*((CPhidgetHandle*)m_carteInterfaceKit))
241 CPhidget_close(*((CPhidgetHandle*)(m_carteInterfaceKit)));
242 CPhidget_delete(*((CPhidgetHandle*)(m_carteInterfaceKit)));
259 if (obs->sensedData.size() > 0)
261 appendObservation(obs);
287 for (
int i = 0; i < 8; i++)
289 if (m_sensorIsPlugged[i])
292 int err = CPhidgetInterfaceKit_getSensorValue(
293 *((CPhidgetInterfaceKitHandle*)(m_carteInterfaceKit)), i,
298 "Error durring acquiering sensor value on channel : %d", i);
301 switch (m_sensorType[i])
309 2076. / (
static_cast<float>(sensorValue) - 11.);
313 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.
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 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 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.
: 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).
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...
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.
std::shared_ptr< CObservationRange > Ptr
virtual ~CPhidgetInterfaceKitProximitySensors()
Destructor.
void initialize()
Initialize the sensor according to the parameters previously read in the configuration file...
TMeasurementList sensedData
All the measurements.