20 #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.");
229 m_minOfMinRanges = *min_element(m_minRange.begin(), m_minRange.end());
230 m_maxOfMaxRanges = *max_element(m_maxRange.begin(), m_maxRange.end());
242 if (*((CPhidgetHandle*)m_carteInterfaceKit))
244 CPhidget_close(*((CPhidgetHandle*)(m_carteInterfaceKit)));
245 CPhidget_delete(*((CPhidgetHandle*)(m_carteInterfaceKit)));
262 if (obs->sensedData.size() > 0)
264 appendObservation(obs);
290 for (
int i = 0; i < 8; i++)
292 if (m_sensorIsPlugged[i])
295 int err = CPhidgetInterfaceKit_getSensorValue(
296 *((CPhidgetInterfaceKitHandle*)(m_carteInterfaceKit)), i,
301 "Error durring acquiering sensor value on channel : %d", i);
304 switch (m_sensorType[i])
312 2076. / (
static_cast<float>(sensorValue) - 11.);
316 4800. / (
static_cast<float>(sensorValue) - 16.92);
Declares a class derived from "CObservation" that encapsules a single range measurement, and associated parameters.
void loadConfig_sensorSpecific(const mrpt::config::CConfigFileBase &configSource, const std::string &iniSection) override
See the class documentation at the top for expected parameters.
std::string read_string(const std::string §ion, const std::string &name, const std::string &defaultValue, bool failIfNotFound=false) const
float minSensorDistance
The data members.
float sensorConeApperture
Cone aperture of each ultrasonic beam, in radians.
#define THROW_EXCEPTION(msg)
mrpt::system::TTimeStamp getCurrentTime()
Returns the current (UTC) system time.
double DEG2RAD(const double x)
Degrees to radians.
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.
float read_float(const std::string §ion, const std::string &name, float defaultValue, bool failIfNotFound=false) const
int read_int(const std::string §ion, const std::string &name, int defaultValue, bool failIfNotFound=false) const
This class allows loading and storing values and vectors of different types from a configuration text...
float sensedDistance
The measured range, in meters (or a value of 0 if there was no detected echo).
Versatile class for consistent logging and management of output messages.
void initialize() override
Initialize the sensor according to the parameters previously read in the configuration file...
This namespace contains representation of robot actions and observations.
void doProcess() override
This method should be called periodically.
bool sectionExists(const std::string §ion_name) const
Checks if a given section exists (name is case insensitive)
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).
bool read_bool(const std::string §ion, const std::string &name, bool defaultValue, bool failIfNotFound=false) const
std::string format(const char *fmt,...) MRPT_printf_format_check(1
A std::string version of C sprintf.
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.
~CPhidgetInterfaceKitProximitySensors() override
Destructor.
TMeasurementList sensedData
All the measurements.
#define MRPT_UNUSED_PARAM(a)
Determines whether this is an X86 or AMD64 platform.