From b3215d9da5ec7071467563d20cdb07ac0e7f420c Mon Sep 17 00:00:00 2001 From: Sergi Hernandez Juan <shernand@iri.upc.edu> Date: Wed, 30 Aug 2017 13:48:01 +0200 Subject: [PATCH] Added attributes and functions in the driver to be used in the nodelet version (the parameters for all the nodes are the same). Changed the NodeHandle used to create topics in different namespaces. Changed the parameters of the launch files. --- .../include/ir_foot_sensor_driver.h | 6 +++++ .../include/ir_foot_sensor_driver_node.h | 1 + ir_foot_sensor/launch/darwin_left_foot.launch | 4 ++-- .../launch/darwin_right_foot.launch | 4 ++-- .../launch/darwin_two_feet_nodelet.launch | 8 +++---- ir_foot_sensor/src/ir_foot_sensor_driver.cpp | 23 ++++++++++++++++++- .../src/ir_foot_sensor_driver_node.cpp | 16 ++++++++++--- 7 files changed, 50 insertions(+), 12 deletions(-) diff --git a/ir_foot_sensor/include/ir_foot_sensor_driver.h b/ir_foot_sensor/include/ir_foot_sensor_driver.h index abed4b7..e459dde 100644 --- a/ir_foot_sensor/include/ir_foot_sensor_driver.h +++ b/ir_foot_sensor/include/ir_foot_sensor_driver.h @@ -56,6 +56,9 @@ class IrFootSensorDriver : public iri_base_driver::IriBaseDriver private: // private attributes and methods CIRFeet<CDynamixelServerSerial> *device; + std::string dyn_device; + unsigned int dyn_baudrate; + unsigned char dev_id; public: /** * \brief define config type @@ -150,6 +153,9 @@ class IrFootSensorDriver : public iri_base_driver::IriBaseDriver std::vector<double> get_all_sensor_thresholds(void); void set_sensor_threshold(adc_dma_ch_t channel_id, double threshold); std::vector<bool> get_all_sensor_status(void); + void set_dynamixel_device(std::string &device); + void set_dynamixel_baudrate(unsigned int baudrate); + void set_device_id(unsigned char dev_id); /** * \brief Destructor diff --git a/ir_foot_sensor/include/ir_foot_sensor_driver_node.h b/ir_foot_sensor/include/ir_foot_sensor_driver_node.h index b93c024..1b28e08 100644 --- a/ir_foot_sensor/include/ir_foot_sensor_driver_node.h +++ b/ir_foot_sensor/include/ir_foot_sensor_driver_node.h @@ -187,6 +187,7 @@ class IrFootSensorDriverNode : public iri_base_driver::IriBaseNodeDriver<IrFootS class IrFootSensorDriverNodelet : public nodelet::Nodelet { private: + ros::NodeHandle nodelet_nh; IrFootSensorDriverNode *node; virtual void onInit();// initialization function // thread attributes diff --git a/ir_foot_sensor/launch/darwin_left_foot.launch b/ir_foot_sensor/launch/darwin_left_foot.launch index 61d8490..3e25782 100644 --- a/ir_foot_sensor/launch/darwin_left_foot.launch +++ b/ir_foot_sensor/launch/darwin_left_foot.launch @@ -4,8 +4,8 @@ pkg="ir_foot_sensor" type="ir_foot_sensor" output="screen"> - <param name="dyn_serial" value="A4008atn"/> - <param name="dyn_baudrate" value="1000000"/> + <param name="dyn_serial" value="/dev/ttyUSB0"/> + <param name="dyn_baudrate" value="115200"/> <param name="ir_foot_id" value="1"/> <remap from="/darwin_left_foot/sensor_data" to="/darwin/sensors/left_foot_data"/> diff --git a/ir_foot_sensor/launch/darwin_right_foot.launch b/ir_foot_sensor/launch/darwin_right_foot.launch index df674f2..51cd6f3 100644 --- a/ir_foot_sensor/launch/darwin_right_foot.launch +++ b/ir_foot_sensor/launch/darwin_right_foot.launch @@ -4,8 +4,8 @@ pkg="ir_foot_sensor" type="ir_foot_sensor" output="screen"> - <param name="dyn_serial" value="A4008atn"/> - <param name="dyn_baudrate" value="1000000"/> + <param name="dyn_serial" value="/dev/ttyUSB0"/> + <param name="dyn_baudrate" value="115200"/> <param name="ir_foot_id" value="2"/> <remap from="/darwin_right_foot/sensor_data" to="/darwin/sensors/right_foot_data"/> diff --git a/ir_foot_sensor/launch/darwin_two_feet_nodelet.launch b/ir_foot_sensor/launch/darwin_two_feet_nodelet.launch index 210fb48..7146cd7 100755 --- a/ir_foot_sensor/launch/darwin_two_feet_nodelet.launch +++ b/ir_foot_sensor/launch/darwin_two_feet_nodelet.launch @@ -13,8 +13,8 @@ name="darwin_left_foot" args="load ir_foot_sensor/IrFootSensorDriverNodelet dynamixel_devices" output="screen"> - <param name="dyn_serial" value="A4008atn"/> - <param name="dyn_baudrate" value="1000000"/> + <param name="dyn_serial" value="/dev/ttyUSB0"/> + <param name="dyn_baudrate" value="115200"/> <param name="ir_foot_id" value="1"/> <remap from="/darwin_left_foot/sensor_data" to="/darwin/sensors/left_foot_data"/> @@ -26,8 +26,8 @@ name="darwin_right_foot" args="load ir_foot_sensor/IrFootSensorDriverNodelet dynamixel_devices" output="screen"> - <param name="dyn_serial" value="A4008atn"/> - <param name="dyn_baudrate" value="1000000"/> + <param name="dyn_serial" value="/dev/ttyUSB0"/> + <param name="dyn_baudrate" value="115200"/> <param name="ir_foot_id" value="2"/> <remap from="/darwin_right_foot/sensor_data" to="/darwin/sensors/right_foot_data"/> diff --git a/ir_foot_sensor/src/ir_foot_sensor_driver.cpp b/ir_foot_sensor/src/ir_foot_sensor_driver.cpp index 7d71cff..18fdc9b 100644 --- a/ir_foot_sensor/src/ir_foot_sensor_driver.cpp +++ b/ir_foot_sensor/src/ir_foot_sensor_driver.cpp @@ -4,6 +4,9 @@ IrFootSensorDriver::IrFootSensorDriver(void) { //setDriverId(driver string id); this->device=NULL; + this->dyn_device=""; + this->dyn_baudrate=-1; + this->dev_id=-1; } bool IrFootSensorDriver::openDriver(void) @@ -17,7 +20,10 @@ bool IrFootSensorDriver::openDriver(void) this->device=NULL; } name << "foot_" << this->config_.ir_foot_id; - this->device=new CIRFeet<CDynamixelServerSerial>(name.str(),this->config_.dyn_serial,this->config_.dyn_baudrate,this->config_.ir_foot_id); + if(this->dyn_device!="" && this->dyn_baudrate!=-1 && this->dev_id!=-1) + this->device=new CIRFeet<CDynamixelServerSerial>(name.str(),this->dyn_device,this->dyn_baudrate,this->dev_id); + else + this->device=new CIRFeet<CDynamixelServerSerial>(name.str(),this->config_.dyn_serial,this->config_.dyn_baudrate,this->config_.ir_foot_id); return true; }catch(CException &e){ @@ -105,6 +111,21 @@ std::vector<bool> IrFootSensorDriver::get_all_sensor_status(void) return std::vector<bool>(); } +void IrFootSensorDriver::set_dynamixel_device(std::string &device) +{ + this->dyn_device=device; +} + +void IrFootSensorDriver::set_dynamixel_baudrate(unsigned int baudrate) +{ + this->dyn_baudrate=baudrate; +} + +void IrFootSensorDriver::set_device_id(unsigned char dev_id) +{ + this->dev_id=dev_id; +} + IrFootSensorDriver::~IrFootSensorDriver(void) { if(this->device!=NULL) diff --git a/ir_foot_sensor/src/ir_foot_sensor_driver_node.cpp b/ir_foot_sensor/src/ir_foot_sensor_driver_node.cpp index a3773e6..1dcea82 100644 --- a/ir_foot_sensor/src/ir_foot_sensor_driver_node.cpp +++ b/ir_foot_sensor/src/ir_foot_sensor_driver_node.cpp @@ -3,11 +3,13 @@ IrFootSensorDriverNode::IrFootSensorDriverNode(ros::NodeHandle &nh) : iri_base_driver::IriBaseNodeDriver<IrFootSensorDriver>(nh) { + std::string dyn_serial=""; + int dyn_baudrate=-1,dev_id=-1; //init class attributes if necessary this->loop_rate_ = 10;//in [Hz] // [init publishers] - this->sensor_data_publisher_ = this->public_node_handle_.advertise<humanoid_common_msgs::ir_foot_data>("sensor_data", 1); + this->sensor_data_publisher_ = this->node_handle_.advertise<humanoid_common_msgs::ir_foot_data>("sensor_data", 1); // [init subscribers] @@ -29,6 +31,13 @@ IrFootSensorDriverNode::IrFootSensorDriverNode(ros::NodeHandle &nh) : this->sensor_data_ir_foot_data_msg_.names[7]="front_left"; this->sensor_data_ir_foot_data_msg_.names[8]="front_right"; this->sensor_data_ir_foot_data_msg_.names[9]="front_analog"; + + this->node_handle_.getParam("dyn_serial",dyn_serial); + this->driver_.set_dynamixel_device(dyn_serial); + this->node_handle_.getParam("dyn_baudrate",dyn_baudrate); + this->driver_.set_dynamixel_baudrate(dyn_baudrate); + this->node_handle_.getParam("ir_foot_id",dev_id); + this->driver_.set_device_id(dev_id); } void IrFootSensorDriverNode::mainNodeThread(void) @@ -111,7 +120,7 @@ int main(int argc,char *argv[]) #include <pluginlib/class_list_macros.h> -IrFootSensorDriverNodelet::IrFootSensorDriverNodelet() +IrFootSensorDriverNodelet::IrFootSensorDriverNodelet() { this->node=NULL; } @@ -131,7 +140,8 @@ IrFootSensorDriverNodelet::~IrFootSensorDriverNodelet(void) void IrFootSensorDriverNodelet::onInit() { // initialize the driver node - this->node=new IrFootSensorDriverNode(getPrivateNodeHandle()); + this->nodelet_nh=ros::NodeHandle(getPrivateNodeHandle(),getName()); + this->node=new IrFootSensorDriverNode(this->nodelet_nh); // initialize the thread this->thread_server=CThreadServer::instance(); this->spin_thread_id=getName() + "_firewire_nodelet_spin"; -- GitLab