diff --git a/src/dynamixel_motor.cpp b/src/dynamixel_motor.cpp index 974c13a92de957fafd3e7821b4b9ce74fa39c4ae..05a9da30c8eea3a2d9756db96a85d529ae290fea 100644 --- a/src/dynamixel_motor.cpp +++ b/src/dynamixel_motor.cpp @@ -1,7 +1,6 @@ #include "dynamixel_motor_exceptions.h" #include "dynamixel_registers.h" #include "dynamixelexceptions.h" -#include "dynamixelserver.h" #include "eventexceptions.h" #include "dynamixel_motor.h" #include "ftdiserver.h" @@ -16,7 +15,7 @@ #include "xml/dynamixel_motor_cfg_file.hxx" #endif -CDynamixelMotor::CDynamixelMotor(std::string& cont_id,unsigned char bus_id,int baudrate,unsigned char dev_id,dyn_version_t version) +CDynamixelMotor::CDynamixelMotor(std::string& cont_id,CDynamixelServer *dyn_server,unsigned char dev_id,dyn_version_t version) { this->info.model=""; this->info.firmware_ver=(unsigned char)-1; @@ -26,7 +25,6 @@ CDynamixelMotor::CDynamixelMotor(std::string& cont_id,unsigned char bus_id,int b this->info.max_angle=-1; this->info.center_angle=-1; this->info.max_speed=-1; - this->info.bus_id=""; this->info.baudrate=(unsigned int)-1; this->info.id=(unsigned char)-1; this->compliance.cw_compliance_margin=0x00; @@ -44,65 +42,10 @@ CDynamixelMotor::CDynamixelMotor(std::string& cont_id,unsigned char bus_id,int b this->config.max_torque=0.0; this->config.punch=0x20; this->registers=NULL; - this->dyn_server=CDynamixelServer::instance(); + this->dyn_server=dyn_server; this->dynamixel_dev=NULL; try{ - this->dyn_server->config_bus(bus_id,baudrate); - this->info.baudrate=baudrate; - this->info.bus_id=this->dyn_server->get_bus_serial(); - this->dynamixel_dev=this->dyn_server->get_device(dev_id,version); - this->info.id=dev_id; - this->get_model(); - this->get_control_mode(); - this->config.max_temperature=this->get_temperature_limit(); - this->get_voltage_limits(&this->config.min_voltage,&this->config.max_voltage); - this->config.max_torque=this->get_max_torque(); - this->get_compliance_control(this->compliance); - this->get_pid_control(this->pid); - this->alarms=this->get_turn_off_alarms(); - }catch(CException &e){ - /* handle exceptions */ - if(this->dynamixel_dev!=NULL) - delete this->dynamixel_dev; - this->dynamixel_dev=NULL; - throw; - } -} - -CDynamixelMotor::CDynamixelMotor(std::string& cont_id,std::string &bus_id,int baudrate,unsigned char dev_id,dyn_version_t version) -{ - this->info.model=""; - this->info.firmware_ver=(unsigned char)-1; - this->info.gear_ratio=(unsigned int)-1; - this->info.encoder_resolution=(unsigned int)-1; - this->info.pid_control=false; - this->info.max_angle=-1; - this->info.center_angle=-1; - this->info.max_speed=-1; - this->info.bus_id=""; - this->info.baudrate=(unsigned int)-1; - this->info.id=(unsigned char)-1; - this->compliance.cw_compliance_margin=0x00; - this->compliance.ccw_compliance_margin=0x00; - this->compliance.cw_compliance_slope=0x00; - this->compliance.ccw_compliance_slope=0x00; - this->pid.p=0x00; - this->pid.i=0x00; - this->pid.d=0x00; - this->config.max_angle=0.0; - this->config.min_angle=0.0; - this->config.max_temperature=0.0; - this->config.max_voltage=0.0; - this->config.min_voltage=0.0; - this->config.max_torque=0.0; - this->config.punch=0x20; - this->registers=NULL; - this->dyn_server=CDynamixelServer::instance(); - this->dynamixel_dev=NULL; - try{ - this->dyn_server->config_bus(bus_id,baudrate); - this->info.baudrate=baudrate; - this->info.bus_id=bus_id; + this->info.baudrate=this->dyn_server->get_baudrate(); this->dynamixel_dev=this->dyn_server->get_device(dev_id,version); this->info.id=dev_id; this->get_model(); @@ -505,7 +448,6 @@ void CDynamixelMotor::get_servo_info(TDynamixel_info &info) info.max_angle=this->info.max_angle; info.center_angle=this->info.center_angle; info.max_speed=this->info.max_speed; - info.bus_id=this->info.bus_id; info.baudrate=this->info.baudrate; info.id=this->info.id; } @@ -1489,7 +1431,6 @@ CDynamixelMotor::~CDynamixelMotor() this->info.max_angle=-1; this->info.center_angle=-1; this->info.max_speed=-1; - this->info.bus_id=""; this->info.baudrate=(unsigned int)-1; this->info.id=(unsigned char)-1; this->compliance.cw_compliance_margin=0x00; diff --git a/src/dynamixel_motor.h b/src/dynamixel_motor.h index ca81c0a2bf8e2677c8cbb99d15bd3fc670234841..d466a2ac165d968ab42ead5964a66d6e94a85874 100644 --- a/src/dynamixel_motor.h +++ b/src/dynamixel_motor.h @@ -33,7 +33,6 @@ typedef struct double max_angle; double center_angle; double max_speed; - std::string bus_id; unsigned int baudrate; unsigned char id; }TDynamixel_info; @@ -155,12 +154,7 @@ class CDynamixelMotor * \brief * */ - CDynamixelMotor(std::string& cont_id,unsigned char bus_id,int baudrate,unsigned char dev_id,dyn_version_t version=dyn_version1); - /** - * \brief - * - */ - CDynamixelMotor(std::string& cont_id,std::string &bus_id,int baudrate,unsigned char dev_id,dyn_version_t version=dyn_version1); + CDynamixelMotor(std::string& cont_id,CDynamixelServer *dyn_server,unsigned char dev_id,dyn_version_t version=dyn_version1); /** * \brief * diff --git a/src/dynamixel_motor_group.cpp b/src/dynamixel_motor_group.cpp index e5096b00133ea5745d55720cc584756af7ab97d9..0e86391e1aa4d376d4ad011973c3c50d51d97888 100644 --- a/src/dynamixel_motor_group.cpp +++ b/src/dynamixel_motor_group.cpp @@ -17,7 +17,7 @@ #include "xml/dynamixel_motor_group_cfg_file.hxx" #endif -CDynamixelMotorGroup::CDynamixelMotorGroup(std::string &group_id) +CDynamixelMotorGroup::CDynamixelMotorGroup(std::string &group_id,CDynamixelServer *dyn_server) { if(group_id.size()==0) { @@ -27,13 +27,13 @@ CDynamixelMotorGroup::CDynamixelMotorGroup(std::string &group_id) else { this->group_id=group_id; - this->dyn_server=CDynamixelServer::instance(); + this->dyn_server=dyn_server; this->clear(); this->mode=angle_ctrl; } } -CDynamixelMotorGroup::CDynamixelMotorGroup(std::string &group_id,unsigned bus_id,int baudrate,std::vector<unsigned char> &ids,dyn_version_t version) +CDynamixelMotorGroup::CDynamixelMotorGroup(std::string &group_id,CDynamixelServer *dyn_server,std::vector<unsigned char> &ids,dyn_version_t version) { unsigned int i=0; @@ -45,7 +45,7 @@ CDynamixelMotorGroup::CDynamixelMotorGroup(std::string &group_id,unsigned bus_id else { this->group_id=group_id; - this->dyn_server=CDynamixelServer::instance(); + this->dyn_server=dyn_server; this->clear(); this->mode=torque_ctrl; if(ids.size()==0) @@ -54,40 +54,6 @@ CDynamixelMotorGroup::CDynamixelMotorGroup(std::string &group_id,unsigned bus_id throw CDynamixelMotorGroupException(_HERE_,"Impossible to create an empty group"); } try{ - this->dyn_server->config_bus(bus_id,baudrate); - for(i=0;i<ids.size();i++) - this->init_motor(ids[i],version); - this->set_control_mode(angle_ctrl); - }catch(CException &e){ - /* handle exceptions */ - this->clear(); - throw; - } - } -} - -CDynamixelMotorGroup::CDynamixelMotorGroup(std::string &group_id,std::string &bus_id,int baudrate,std::vector<unsigned char> &ids,dyn_version_t version) -{ - unsigned int i=0; - - if(group_id.size()==0) - { - /* handle exceptions */ - throw CDynamixelMotorGroupException(_HERE_,"Invalid group identifier - empty string"); - } - else - { - this->group_id=group_id; - this->dyn_server=CDynamixelServer::instance(); - this->clear(); - this->mode=torque_ctrl; - if(ids.size()==0) - { - /* handle exceptions */ - throw CDynamixelMotorGroupException(_HERE_,"Impossible to create an empty group"); - } - try{ - this->dyn_server->config_bus(bus_id,baudrate); for(i=0;i<ids.size();i++) this->init_motor(ids[i],version); this->set_control_mode(angle_ctrl); @@ -656,7 +622,6 @@ void CDynamixelMotorGroup::init_motor(unsigned int id,dyn_version_t version) CDynamixel *dynamixel_dev=NULL; info.baudrate=this->dyn_server->get_baudrate(); - info.bus_id=this->dyn_server->get_bus_serial(); dynamixel_dev=this->dyn_server->get_device(id,version); this->dynamixel_dev.push_back(dynamixel_dev); info.id=id; @@ -746,7 +711,6 @@ void CDynamixelMotorGroup::load_config(TDynamixelGroup_config &config) this->clear(); try{ - this->dyn_server->config_bus(config.bus_id,config.baudrate); pid.resize(config.id.size()); punch.resize(config.id.size()); compliance.resize(config.id.size()); @@ -810,8 +774,6 @@ TDynamixelGroup_config CDynamixelMotorGroup::read_config(std::string &filename) // try to open the specified file try{ std::auto_ptr<dyn_motor_group_config_t> cfg(dyn_motor_group_config(filename.c_str(), xml_schema::flags::dont_validate)); - config.bus_id=cfg->bus_id(); - config.baudrate=cfg->baudrate(); config.id.resize(cfg->dyn_motor_config().size()); config.dyn_config.resize(cfg->dyn_motor_config().size()); config.pid_control.resize(cfg->dyn_motor_config().size()); @@ -855,7 +817,6 @@ void CDynamixelMotorGroup::load_config(std::string &filename) // try to open the specified file try{ std::auto_ptr<dyn_motor_group_config_t> cfg(dyn_motor_group_config(filename.c_str(), xml_schema::flags::dont_validate)); - this->dyn_server->config_bus(cfg->bus_id(),cfg->baudrate()); pid.resize(cfg->dyn_motor_config().size()); punch.resize(cfg->dyn_motor_config().size()); compliance.resize(cfg->dyn_motor_config().size()); diff --git a/src/dynamixel_motor_group.h b/src/dynamixel_motor_group.h index d7e35b3de09bd3959ade7f1080c2af2550c860eb..a79f87a36f3055413e3d3b72a0f3ebc791616a67 100644 --- a/src/dynamixel_motor_group.h +++ b/src/dynamixel_motor_group.h @@ -7,8 +7,6 @@ typedef struct { - std::string bus_id; - unsigned int baudrate; std::vector<unsigned char> id; dyn_version_t dyn_version; std::vector<TDynamixel_config> dyn_config; @@ -185,17 +183,12 @@ class CDynamixelMotorGroup * \brief * */ - CDynamixelMotorGroup(std::string &group_id); + CDynamixelMotorGroup(std::string &group_id,CDynamixelServer *dyn_server); /** * \brief * */ - CDynamixelMotorGroup(std::string &group_id,unsigned bus_id,int baudrate,std::vector<unsigned char> &ids,dyn_version_t version=dyn_version1); - /** - * \brief - * - */ - CDynamixelMotorGroup(std::string &group_id,std::string &bus_id,int baudrate,std::vector<unsigned char> &ids,dyn_version_t version=dyn_version1); + CDynamixelMotorGroup(std::string &group_id,CDynamixelServer *dyn_server,std::vector<unsigned char> &ids,dyn_version_t version=dyn_version1); /* configuration functions */ /** * \brief diff --git a/src/examples/motor_testbench.cpp b/src/examples/motor_testbench.cpp index 44bacebf21ed170548ca8035420fbbbfda29b6e8..357925af6ec1693448b275ddb302a0240386dcec 100755 --- a/src/examples/motor_testbench.cpp +++ b/src/examples/motor_testbench.cpp @@ -1,16 +1,16 @@ #include "dynamixelexceptions.h" -#include "dynamixelserver.h" +#include "dynamixelserver_ftdi.h" #include "exceptions.h" #include "dynamixel_motor.h" #include <iostream> #include "ctime.h" std::string cont_name="XL_320"; -std::string config_file="../src/xml/dyn_config.xml"; +std::string config_file="../src/xml/dyn_servo_config.xml"; int main(int argc, char *argv[]) { - CDynamixelServer *dyn_server=CDynamixelServer::instance(); + CDynamixelServerFTDI *dyn_server=CDynamixelServerFTDI::instance(); CDynamixelMotor *cont; std::string serial="A400gavq"; TDynamixel_info info; @@ -42,7 +42,8 @@ int main(int argc, char *argv[]) } if(dyn_server->get_num_buses()>0) { - cont = new CDynamixelMotor(cont_name, serial, 1000000, 23,dyn_version2); + dyn_server->config_bus(serial,1000000); + cont = new CDynamixelMotor(cont_name, dyn_server, 23,dyn_version2); if(argc==3) cont->load_config(config_file); else diff --git a/src/examples/test_dynamixel_motion_seq.cpp b/src/examples/test_dynamixel_motion_seq.cpp index 1a0d4d48efe9b2c0a1a46181ccc41b818a518ded..3a96c4bf063fc08402acb3e7053630653aa505b8 100755 --- a/src/examples/test_dynamixel_motion_seq.cpp +++ b/src/examples/test_dynamixel_motion_seq.cpp @@ -1,5 +1,5 @@ #include "dynamixelexceptions.h" -#include "dynamixelserver.h" +#include "dynamixelserver_ftdi.h" #include "eventserver.h" #include "exceptions.h" #include "dynamixel_motor_group.h" @@ -12,14 +12,15 @@ std::string sequence_filename="../src/xml/sequence1.xml"; std::string group_name="GROUP1"; -std::string config_file="../src/xml/dyn_group_config.xml"; +std::string group_config_file="../src/xml/dyn_group_config.xml"; +std::string dyn_config_file="../src/xml/dyn_config.xml"; int main(int argc, char *argv[]) { - CDynamixelServer *dyn_server=CDynamixelServer::instance(); + CDynamixelServerFTDI *dyn_server=CDynamixelServerFTDI::instance(); CEventServer *event_server=CEventServer::instance(); std::vector<double> angles,speeds; - CDynamixelMotorGroup group(group_name); + CDynamixelMotorGroup group(group_name,dyn_server); CTrajectory<CDynamixelMotorGroup> dyn_traj("dyn_traj",&group,&CDynamixelMotorGroup::stop,&CDynamixelMotorGroup::get_current_angle, &CDynamixelMotorGroup::move_absolute_angle,&CDynamixelMotorGroup::move_relative_angle, &CDynamixelMotorGroup::get_num_motors); @@ -28,7 +29,8 @@ int main(int argc, char *argv[]) if(dyn_server->get_num_buses()>0) { #ifdef _HAVE_XSD - group.load_config(config_file); + dyn_server->config(dyn_config_file); + group.load_config(group_config_file); dyn_traj.load_trajectory(sequence_filename); dyn_traj.start_trajectory(); while(!event_server->event_is_set(dyn_traj.get_trajectory_complete_event_id())) diff --git a/src/examples/test_dynamixel_motor.cpp b/src/examples/test_dynamixel_motor.cpp index dd79d3dc9d183bff51bb236fe2696ff92c2e3da2..f096687ac1f02802a63274bd071cd9e50d2c85ae 100755 --- a/src/examples/test_dynamixel_motor.cpp +++ b/src/examples/test_dynamixel_motor.cpp @@ -1,15 +1,15 @@ #include "dynamixelexceptions.h" -#include "dynamixelserver.h" +#include "dynamixelserver_ftdi.h" #include "exceptions.h" #include "dynamixel_motor.h" #include <iostream> std::string cont_name="RX-28"; -std::string config_file="../src/xml/dyn_config.xml"; +std::string config_file="../src/xml/dyn_servo_config.xml"; int main(int argc, char *argv[]) { - CDynamixelServer *dyn_server=CDynamixelServer::instance(); + CDynamixelServerFTDI *dyn_server=CDynamixelServerFTDI::instance(); CDynamixelMotor *cont; std::string serial="A400gavq"; TDynamixel_info info; @@ -22,7 +22,8 @@ int main(int argc, char *argv[]) { if(dyn_server->get_num_buses()>0) { - cont = new CDynamixelMotor(cont_name, serial, 57600, 1); + dyn_server->config_bus(serial,1000000); + cont = new CDynamixelMotor(cont_name, dyn_server, 1); cont->get_servo_info(info); std::cout << "[INFO]: Servo model: " << info.model << std::endl; @@ -49,7 +50,6 @@ int main(int argc, char *argv[]) std::cout << "[INFO]: Maximum angle: " << info.max_angle << " degrees" << std::endl; std::cout << "[INFO]: Center angle: " << info.center_angle << " degrees" << std::endl; std::cout << "[INFO]: Maximum speed: " << info.max_speed << " degress/s" << std::endl; - std::cout << "[INFO]: Bus identifier: " << info.bus_id << std::endl; std::cout << "[INFO]: Bus baudrate: " << info.baudrate << " bps" << std::endl; std::cout << "[INFO]: Servo identifier: " << (int)info.id << std::endl; cont->get_position_range(&min_angle,&max_angle); @@ -69,7 +69,6 @@ int main(int argc, char *argv[]) cont->turn_led_on(); sleep(1); cont->turn_led_off(); - return 1; // cont->move_absolute_angle(-90,300,0); // sleep(2); // cont->move_absolute_angle(90,100,0); @@ -93,7 +92,6 @@ int main(int argc, char *argv[]) cont->move_torque(100); sleep(5); cont->move_torque(0); - return 1; for (size_t aa = 0; aa < 100; ++aa) { try diff --git a/src/examples/test_dynamixel_motor_group.cpp b/src/examples/test_dynamixel_motor_group.cpp index 9c44294384ebd908e2efe468b22ff7182404e44b..b2d0e7635825dfa9746c4ac580874d624bf000ae 100644 --- a/src/examples/test_dynamixel_motor_group.cpp +++ b/src/examples/test_dynamixel_motor_group.cpp @@ -1,5 +1,5 @@ #include "dynamixelexceptions.h" -#include "dynamixelserver.h" +#include "dynamixelserver_ftdi.h" #include "eventserver.h" #include "exceptions.h" #include "dynamixel_motor_group.h" @@ -9,20 +9,22 @@ std::string group_name="GROUP1"; -std::string config_file="../src/xml/dyn_group_config.xml"; +std::string group_config_file="../src/xml/dyn_group_config.xml"; +std::string dyn_config_file="../src/xml/dyn_config.xml"; int main(int argc, char *argv[]) { - CDynamixelServer *dyn_server=CDynamixelServer::instance(); + CDynamixelServerFTDI *dyn_server=CDynamixelServerFTDI::instance(); std::vector<double> angles,speeds,torques; - CDynamixelMotorGroup group(group_name); + CDynamixelMotorGroup group(group_name,dyn_server); unsigned int i=0; try{ if(dyn_server->get_num_buses()>0) { #ifdef _HAVE_XSD - group.load_config(config_file); + dyn_server->config(dyn_config_file); + group.load_config(group_config_file); angles.resize(2); angles[0]=90; angles[1]=-10; diff --git a/src/xml/dyn_group_config.xml b/src/xml/dyn_group_config.xml index 85c2803ab3d42e3bef563688018004e02b245066..a284fad5896904dd98491f34633d5f9f8c7bcbc3 100755 --- a/src/xml/dyn_group_config.xml +++ b/src/xml/dyn_group_config.xml @@ -3,14 +3,12 @@ <dyn_motor_group_config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="dyn_motor_group_cfg_file.xsd"> - <bus_id>A400gavq</bus_id> - <baudrate>1000000</baudrate> <dyn_motor_config> <id>2</id> - <config_file>dyn_config.xml</config_file> + <config_file>dyn_servo_config.xml</config_file> </dyn_motor_config> <dyn_motor_config> <id>3</id> - <config_file>dyn_config.xml</config_file> + <config_file>dyn_servo_config.xml</config_file> </dyn_motor_config> </dyn_motor_group_config> diff --git a/src/xml/dyn_config.xml b/src/xml/dyn_servo_config.xml similarity index 100% rename from src/xml/dyn_config.xml rename to src/xml/dyn_servo_config.xml diff --git a/src/xml/dynamixel_motor_group_cfg_file.xsd b/src/xml/dynamixel_motor_group_cfg_file.xsd index c2664d681dca68d02659ecc4e96b0c9bcd694f03..926ec83dd9160918fa33a46e8a59bb229ef0fd42 100755 --- a/src/xml/dynamixel_motor_group_cfg_file.xsd +++ b/src/xml/dynamixel_motor_group_cfg_file.xsd @@ -21,10 +21,6 @@ copyright : not copyrighted - public domain <xsd:complexType name="dyn_motor_group_config_t"> <xsd:sequence> - <xsd:element name="bus_id" type="xsd:string"> - </xsd:element> - <xsd:element name="baudrate" type="xsd:int"> - </xsd:element> <xsd:element name="dynamixel_version" type="xsd:int" minOccurs="0"> </xsd:element> <xsd:element name="dyn_motor_config" type="dyn_motor_config_t" maxOccurs="unbounded">