00001 #include "ati_force_sensor_driver.h" 00002 #include "ati_force_sensor_exceptions.h" 00003 00004 AtiForceSensorDriver::AtiForceSensorDriver(void) : 00005 filter_cutt_off_freq_(73) 00006 { 00007 //setDriverId(driver string id); 00008 sensor_ = boost::shared_ptr<CAti_Force_Sensor>(new CAti_Force_Sensor("ati_sensor","192.168.101.23")); 00009 // sensor_ = new CAti_Force_Sensor("ati_sensor","192.168.101.23"); 00010 } 00011 00012 bool AtiForceSensorDriver::openDriver(void) 00013 { 00014 //setDriverId(driver string id); 00015 sensor_->cancel_offsets(); 00016 sensor_->get_system_info(&sys_info_); 00017 sensor_->get_calibration_info(&cal_info_); 00018 sensor_->set_filter_cutt_off_freq(filter_cutt_off_freq_); 00019 return true; 00020 } 00021 00022 bool AtiForceSensorDriver::closeDriver(void) 00023 { 00024 return true; 00025 } 00026 00027 bool AtiForceSensorDriver::startDriver(void) 00028 { 00029 00030 sensor_->start(); 00031 return true; 00032 } 00033 00034 bool AtiForceSensorDriver::stopDriver(void) 00035 { 00036 if (this->getState() != AtiForceSensorDriver::CLOSED) 00037 sensor_->stop(); 00038 return true; 00039 } 00040 00041 void AtiForceSensorDriver::config_update(Config& new_cfg, uint32_t level) 00042 { 00043 this->lock(); 00044 00045 // depending on current state 00046 // update driver with new_cfg data 00047 switch(this->getState()) 00048 { 00049 case AtiForceSensorDriver::CLOSED: 00050 break; 00051 00052 case AtiForceSensorDriver::OPENED: 00053 break; 00054 00055 case AtiForceSensorDriver::RUNNING: 00056 try 00057 { 00058 sensor_->stop(); 00059 sensor_->set_filter_cutt_off_freq(new_cfg.filter_cutt_off_freq); 00060 sensor_->start(); 00061 filter_cutt_off_freq_ = new_cfg.filter_cutt_off_freq; 00062 } 00063 catch (CException &e) 00064 { 00065 ROS_ERROR("ERROR: %s",e.what().c_str()); 00066 new_cfg.filter_cutt_off_freq = filter_cutt_off_freq_; 00067 00068 } 00069 break; 00070 } 00071 00072 // save the current configuration 00073 this->config_=new_cfg; 00074 00075 this->unlock(); 00076 } 00077 00078 std::string AtiForceSensorDriver::getNewSampleEventId(void) const 00079 { 00080 return sensor_->get_new_sample_event_id(); 00081 } 00082 00083 geometry_msgs::WrenchStamped AtiForceSensorDriver::getData(void) 00084 { 00085 // if (this->getState() != AtiForceSensorDriver::CLOSED) 00086 // return; 00087 00088 std::vector<double> force,torque; 00089 geometry_msgs::WrenchStamped dataMsg; 00090 00091 sensor_->get_sample(force,torque); 00092 00093 //dataMsg.header.seq=seq_counter++; 00094 dataMsg.header.stamp = ros::Time::now(); 00095 dataMsg.header.frame_id = config_.frame_id; 00096 dataMsg.wrench.force.x = force[0]; 00097 dataMsg.wrench.force.y = force[1]; 00098 dataMsg.wrench.force.z = force[2]; 00099 dataMsg.wrench.torque.x = torque[0]; 00100 dataMsg.wrench.torque.y = torque[1]; 00101 dataMsg.wrench.torque.z = torque[2]; 00102 00103 return dataMsg; 00104 } 00105 00106 AtiForceSensorDriver::~AtiForceSensorDriver(void) 00107 { 00108 }