00001
00029
00030 #include <ros/ros.h>
00031
00032
00033 #include <string>
00034
00035 #include <unistd.h>
00036 #include <math.h>
00037
00038
00039 #include "sr_remappers/shadowhand_to_cybergrasp_remapper.h"
00040
00041 using namespace ros;
00042
00043 namespace shadowhand_to_cybergrasp_remapper{
00044
00045 ShadowhandToCybergraspRemapper::ShadowhandToCybergraspRemapper()
00046 : n_tilde("~"), publish_rate(0.0)
00047 {
00048 std::string searched_param;
00049
00050
00051 std::string path;
00052 n_tilde.searchParam("cybergrasp_calibration_path", searched_param);
00053 n_tilde.param(searched_param, path, std::string());
00054
00055 calibration_parser = new CalibrationParser(path);
00056
00057
00058 std::string prefix;
00059 n_tilde.searchParam("cybergrasp_prefix", searched_param);
00060 n_tilde.param(searched_param, prefix, std::string());
00061 std::string full_topic = prefix + "cybergraspforces";
00062
00063 shadowhand_cybergrasp_pub = node.advertise<cybergrasp::cybergraspforces>(full_topic, 20);
00064
00065
00066 n_tilde.searchParam("joint_states_prefix", searched_param);
00067 n_tilde.param(searched_param, prefix, std::string());
00068
00069 full_topic = prefix + "joint_states";
00070
00071 shadowhand_jointstates_sub = node.subscribe(full_topic, 10, &ShadowhandToCybergraspRemapper::jointstatesCallback, this);
00072
00073 }
00074
00075 ShadowhandToCybergraspRemapper::~ShadowhandToCybergraspRemapper()
00076 {
00077 if( calibration_parser )
00078 delete calibration_parser;
00079 }
00080
00087 void ShadowhandToCybergraspRemapper::jointstatesCallback(const sensor_msgs::JointStateConstPtr& msg)
00088 {
00089
00090 cybergrasp::cybergraspforces cybergrasp_msg;
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118 double average = 0.0;
00119
00120 for( unsigned int i=0; i < msg->effort.size(); ++i)
00121 {
00122 average = msg->effort[i]*10.0;
00123 }
00124
00125 average /= msg->effort.size();
00126
00127 average /= msg->effort.size();
00128 average *= 1000.0;
00129
00130 for( unsigned int i=0; i < 5; ++i)
00131 {
00132 cybergrasp_msg.forces[i] = 0.01;
00133 }
00134
00135
00136 cybergrasp_msg.forces[1] = (average - 0.016)*2.0;
00137
00138 shadowhand_cybergrasp_pub.publish(cybergrasp_msg);
00139
00140
00141
00142 }
00143 }