29 #include <schunk_sdh/TactileSensor.h>
30 #include <schunk_sdh/TactileMatrix.h>
33 #include <diagnostic_msgs/DiagnosticArray.h>
34 #include <diagnostic_msgs/KeyValue.h>
36 #include <schunk_sdh/dsa.h>
38 #include <boost/lexical_cast.hpp>
39 #include <boost/bind.hpp>
52 res.resize(namesXmlRpc.
size());
53 for (
int i = 0; i < namesXmlRpc.
size(); i++)
55 res[i] = (T)namesXmlRpc[i];
149 double publish_frequency, diag_frequency;
154 nh_.
param(
"diag_frequency", diag_frequency, 5.0);
158 nh_.
param(
"publish_frequency", publish_frequency, 0.0);
170 if (publish_frequency > 0.0)
229 catch (SDH::cSDHLibraryException* e)
232 ROS_ERROR(
"An exception was caught: %s", e->what());
253 SDH::UInt32 last_time;
254 last_time =
dsa_->GetFrame().timestamp;
256 if (last_time !=
dsa_->GetFrame().timestamp)
265 catch (SDH::cSDHLibraryException* e)
267 ROS_ERROR(
"An exception was caught: %s", e->what());
292 catch (SDH::cSDHLibraryException* e)
294 ROS_ERROR(
"An exception was caught: %s", e->what());
315 schunk_sdh::TactileSensor msg;
318 msg.tactile_matrix.resize(
dsa_->GetSensorInfo().nb_matrices);
323 schunk_sdh::TactileMatrix &tm = msg.tactile_matrix[i];
325 tm.cells_x =
dsa_->GetMatrixInfo(m).cells_x;
326 tm.cells_y =
dsa_->GetMatrixInfo(m).cells_y;
327 tm.tactile_array.resize(tm.cells_x * tm.cells_y);
328 for (y = 0; y < tm.cells_y; y++)
330 for (x = 0; x < tm.cells_x; x++)
331 tm.tactile_array[tm.cells_x * y + x] =
dsa_->GetTexel(m, x, y);
340 diagnostic_msgs::DiagnosticArray diagnostics;
341 diagnostics.status.resize(1);
343 diagnostics.status[0].values.resize(1);
344 diagnostics.status[0].values[0].key =
"error_count";
345 diagnostics.status[0].values[0].value = boost::lexical_cast < std::string > (
error_counter_);
350 diagnostics.status[0].level = 0;
351 diagnostics.status[0].message =
"DSA tactile sensing initialized and running";
355 diagnostics.status[0].level = 1;
356 diagnostics.status[0].message =
"DSA not initialized";
360 diagnostics.status[0].level = 2;
361 diagnostics.status[0].message =
"DSA exceeded eror count";
376 int main(
int argc,
char** argv)
383 if (!dsa_node.
init())
392 ROS_INFO(
"...dsa node shut down...");