iCub-main
Loading...
Searching...
No Matches
sensors.cpp
Go to the documentation of this file.
1/*
2 * Copyright (C) 2011 Department of Robotics Brain and Cognitive Sciences - Istituto Italiano di Tecnologia
3 * Author: Ugo Pattacini
4 * email: ugo.pattacini@iit.it
5 * Permission is granted to copy, distribute, and/or modify this program
6 * under the terms of the GNU General Public License, version 2 or any
7 * later version published by the Free Software Foundation.
8 *
9 * A copy of the license can be found at
10 * http://www.robotcub.org/icub/license/gpl.txt
11 *
12 * This program is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
15 * Public License for more details
16*/
17
18#include <yarp/os/Bottle.h>
19#include <yarp/os/BufferedPort.h>
20#include <yarp/dev/ControlBoardInterfaces.h>
21#include <yarp/dev/MultipleAnalogSensorsInterfaces.h>
22#include <yarp/sig/Vector.h>
23
26
27using namespace std;
28using namespace yarp::os;
29using namespace yarp::dev;
30using namespace yarp::sig;
31using namespace iCub::perception;
32
33
34/************************************************************************/
36{
37 name="";
38 source=NULL;
39 configured=false;
40}
41
42
43/************************************************************************/
44bool SensorEncoders::configure(void *source, const Property &options)
45{
46 if ((source==NULL) || !options.check("name") ||
47 !options.check("size") || !options.check("index"))
48 return false;
49
50 this->source=source;
51 name=options.find("name").asString();
52 size=options.find("size").asInt32();
53 index=options.find("index").asInt32();
54
55 return configured=true;
56}
57
58
59/************************************************************************/
60bool SensorEncoders::getOutput(Value &in) const
61{
62 if (!configured)
63 return false;
64
65 Vector vect(size);
66 static_cast<IEncoders*>(source)->getEncoders(vect.data());
67 in=Value(vect[index]);
68
69 return true;
70}
71
72
73/************************************************************************/
74bool SensorEncoderArrays::configure(void *source, const Property &options)
75{
76 if ((source==NULL) || !options.check("name") || !options.check("num_arrays") ||
77 !options.check("index_array") || !options.check("index_element"))
78 return false;
79
80 this->source=source;
81 name=options.find("name").asString();
82 num_arrays=options.find("num_arrays").asInt32();
83 index_array=options.find("index_array").asInt32();
84 index_element=options.find("index_element").asInt32();
85
86 return configured=true;
87}
88
89
90/************************************************************************/
91bool SensorEncoderArrays::getOutput(Value &in) const
92{
93 auto* iencarray=static_cast<IEncoderArrays*>(source);
94 if (!configured)
95 return false;
96
97 if ((index_array<0) || (index_array>=iencarray->getNrOfEncoderArrays()))
98 return false;
99
100 if ((index_element<0) || (index_element>=iencarray->getEncoderArraySize(index_array)))
101 return false;
102
103 if (iencarray->getEncoderArrayStatus(index_array)!=MAS_OK)
104 {
105 in=latch;
106 return false;
107 }
108
109 double stamp;
110 Vector vect(iencarray->getEncoderArraySize(index_array));
111 iencarray->getEncoderArrayMeasure(index_array,vect,stamp);
112 in=Value(vect[index_element]);
113 latch=in;
114
115 return true;
116}
117
118
119/************************************************************************/
120bool SensorPort::configure(void *source, const Property &options)
121{
122 if ((source==NULL) || !options.check("name") || !options.check("index"))
123 return false;
124
125 this->source=source;
126 name=options.find("name").asString();
127 index=options.find("index").asInt32();
128
129 return configured=true;
130}
131
132
133/************************************************************************/
134bool SensorPort::getOutput(Value &in) const
135{
136 if (configured)
137 {
138 in=static_cast<iCub::perception::Port*>(source)->getValue(index);
139 return true;
140 }
141 else
142 return false;
143}
144
145
146
147
bool configure(void *source, const yarp::os::Property &options)
Configure the sensor.
Definition sensors.cpp:74
bool getOutput(yarp::os::Value &in) const
Retrieve the sensor encoder value.
Definition sensors.cpp:91
bool configure(void *source, const yarp::os::Property &options)
Configure the sensor.
Definition sensors.cpp:44
bool getOutput(yarp::os::Value &in) const
Retrieve the sensor joint value.
Definition sensors.cpp:60
bool getOutput(yarp::os::Value &in) const
Retrieve the sensor output.
Definition sensors.cpp:134
bool configure(void *source, const yarp::os::Property &options)
Configure the sensor.
Definition sensors.cpp:120
Sensor()
Constructor.
Definition sensors.cpp:35