1 #ifndef CONTROL_SENSORS_H 2 #define CONTROL_SENSORS_H 4 #include <KrisLibrary/math/vector.h> 56 virtual const char* Type()
const {
return "SensorBase"; }
65 virtual bool ReadState(File& f);
66 virtual bool WriteState(File& f)
const;
80 virtual map<string,string> Settings()
const;
82 virtual bool GetSetting(
const string& name,
string& str)
const;
85 virtual bool SetSetting(
const string& name,
const string& str);
88 virtual void DrawGL(
const Robot& robot,
const vector<double>& measurements) {}
109 void MakeDefault(
Robot* robot);
110 bool LoadSettings(
const char* fn);
111 bool SaveSettings(
const char* fn);
112 bool LoadSettings(TiXmlElement* in);
113 void SaveSettings(TiXmlElement* out);
114 bool LoadMeasurements(TiXmlElement* in);
115 void SaveMeasurements(TiXmlElement* out);
116 bool ReadState(File& f);
117 bool WriteState(File& f)
const;
118 shared_ptr<SensorBase> GetNamedSensor(
const string& name);
120 void GetTypedSensors(vector<T*>& sensors);
122 T* GetTypedSensor(
int index=0);
124 vector<shared_ptr<SensorBase> > sensors;
130 void RobotSensors::GetTypedSensors(vector<T*>& _sensors)
133 for(
size_t i=0;i<sensors.size();i++)
134 if(
typeid(T) ==
typeid(*sensors[i])) _sensors.push_back(dynamic_cast<T*>(sensors[i].
get()));
139 T* RobotSensors::GetTypedSensor(
int index)
141 for(
size_t i=0;i<sensors.size();i++) {
142 if(
typeid(T) ==
typeid(*sensors[i])) {
143 if(index==0)
return dynamic_cast<T*
>(sensors[i].get());
153 #define FILL_SENSOR_SETTING(res,membername) \ 157 res[#membername] = ss.str(); \ 159 #define GET_SENSOR_SETTING(membername) \ 160 if(name == #membername) { \ 166 #define SET_SENSOR_SETTING(membername) \ 167 if(name == #membername) { \ 168 stringstream ss(str); \ 173 #define FILL_ARRAY_SENSOR_SETTING(res,membername,count) \ 176 for(int _i=0;_i<count;_i++) \ 177 ss<<membername[_i]<<" "; \ 178 settings[#membername] = ss.str(); \ 180 #define GET_ARRAY_SENSOR_SETTING(membername,count) \ 181 if(name == #membername) { \ 183 for(int _i=0;_i<count;_i++) \ 184 ss << membername[_i]<<" "; \ 188 #define SET_ARRAY_SENSOR_SETTING(membername,count) \ 189 if(name == #membername) { \ 190 stringstream ss(str); \ 191 for(int _i=0;_i<count;_i++) \ 192 ss >> membername[_i]; \ 196 #define FILL_VECTOR_SENSOR_SETTING(res,membername) \ 199 for(size_t _i=0;_i<membername.size();_i++) \ 200 ss<<membername[_i]<<" "; \ 201 settings[#membername] = ss.str(); \ 203 #define GET_VECTOR_SENSOR_SETTING(membername) \ 204 if(name == #membername) { \ 206 for(size_t _i=0;_i<membername.size();_i++) \ 207 ss << membername[_i]<<" "; \ 211 #define SET_VECTOR_SENSOR_SETTING(membername) \ 212 if(name == #membername) { \ 213 stringstream ss(str); \ 214 membername.resize(0); \ 216 membername.resize(membername.size()+1); \ 217 ss >> membername.back(); \ 219 membername.resize(membername.size()-1); \ 222 if(ss.bad()) return false; \ virtual void DrawGL(const Robot &robot, const vector< double > &measurements)
Definition: Sensor.h:88
The main robot type used in RobotSim.
Definition: Robot.h:79
A class containing information about an ODE-simulated and controlled robot.
Definition: ControlledSimulator.h:17
The main world class containing multiple robots, objects, and static geometries (terrains). Lights and other viewport information may also be stored here.
Definition: World.h:20
virtual void GetMeasurements(vector< double > &values) const
Must be overridden to returns a list of all measurements.
Definition: Sensor.h:70
virtual void SetInternalState(const vector< double > &state)
Any other state besides measurements/settings that you might want to store. Used in WriteState...
Definition: Sensor.h:78
virtual void Simulate(ControlledRobotSimulator *robot, WorldSimulation *sim)
Called whenever the sensor is updated from the simulaton.
Definition: Sensor.h:58
A sensor base class. A SensorBase should allow a Controller to both connect to a simulation as well a...
Definition: Sensor.h:51
virtual void Reset()
Should be overridden if the sensor is stateful to reset to an initial state.
Definition: Sensor.h:64
virtual void GetInternalState(vector< double > &state) const
Any other state besides measurements/settings that you might want to store. Used in ReadState...
Definition: Sensor.h:76
A set of sensors for the robot.
Definition: Sensor.h:106
virtual void Advance(double dt)
Advances to the next time step with duration dt elapsed.
Definition: Sensor.h:62
virtual void SimulateKinematic(Robot &robot, RobotWorld &world)
Updates the sensor for a kinematic world. Useful for non-simulation debugging.
Definition: Sensor.h:60
A physical simulator for a RobotWorld.
Definition: WorldSimulation.h:67
virtual void MeasurementNames(vector< string > &names) const
Must be overridden to produce a list of names of each measurement.
Definition: Sensor.h:68
virtual void SetMeasurements(const vector< double > &values)
Definition: Sensor.h:74