diff --git a/src/examples/test_dynamixel_motor.cpp b/src/examples/test_dynamixel_motor.cpp index 11a716745759900ca37a62aef13ddbc037a3a0c0..533af63ce4189d29abb467978b3050c0cc03aeb0 100755 --- a/src/examples/test_dynamixel_motor.cpp +++ b/src/examples/test_dynamixel_motor.cpp @@ -4,15 +4,16 @@ #include "dynamixel_motor.h" #include <iostream> #include <math.h> +#include <time.h> std::string cont_name="RX-28"; std::string config_file="../src/xml/dyn_servo_config.xml"; int main(int argc, char *argv[]) { - std::string serial="A600cVjj"; //extracted from dynamixel library's test_dynamixel_server_no_scan or with 'dmesg' command: "SerialNumber: A600cVjj" - int baudrate = 57600; //1000000; //57600 or 1000000 - int device = 1; //extracted from dynamixel library's test_dynamixel_server_no_scan + std::string serial="A600cVjj"; //extracted from dynamixel library's test_dynamixel_server_no_scan or with 'dmesg' command: "SerialNumber: A600cVjj" + int baudrate = 57600; //57600 or 1000000 + int device = 1; //extracted from dynamixel library's test_dynamixel_server_no_scan CDynamixelServerFTDI *dyn_server=CDynamixelServerFTDI::instance(); CDynamixelMotor *cont = NULL; @@ -33,7 +34,7 @@ int main(int argc, char *argv[]) ///////////////////////////////////////////////////////////////////////// ////INFO ///////////////////////////////////////////////////////////////////////// - ///* + /* std::cout << "-----------------------------------------------------------" << std::endl; cont->get_servo_info(info); std::cout << "[INFO]: Servo model: " << info.model << std::endl; @@ -87,7 +88,7 @@ int main(int argc, char *argv[]) double desired_speed = 100.0; //chosen speed when moving angle double max_angle_error = 0.5; //max angle error permitted double time_interval = 0.1; //time in secs between checks - int max_time_sec = 2.0; //max time to wait until timeout + int max_time_sec = 10.0; //max time to wait until timeout double desired_angle; int t; @@ -99,7 +100,7 @@ int main(int argc, char *argv[]) ///////////////////////////////////////////////////////////////////////// /////MOVE RELATIVE ANGLE ///////////////////////////////////////////////////////////////////////// - ///* + /* std::cout << "-----------------------------------------------------------" << std::endl; double relative_angle = -45; double current_rel_angle; @@ -134,7 +135,7 @@ int main(int argc, char *argv[]) ///////////////////////////////////////////////////////////////////////// ////MOVE ABSOLUTE ANGLE ///////////////////////////////////////////////////////////////////////// - ///* + /* std::cout << "-----------------------------------------------------------" << std::endl; double absolute_angle=0.0; double current_abs_angle; @@ -169,7 +170,7 @@ int main(int argc, char *argv[]) ///////////////////////////////////////////////////////////////////////// ////MOVE TORQUE ///////////////////////////////////////////////////////////////////////// - ///* + /* std::cout << "-----------------------------------------------------------" << std::endl; double max_effort; if(argc==2) @@ -180,18 +181,13 @@ int main(int argc, char *argv[]) double desired_effort=max_effort; std::cout << "MOVE EFFORT: " << desired_effort << std::endl; - double current_effort = cont->get_current_effort(); - std::cout << "Desired effort: " << desired_effort << std::endl; - std::cout << "Current effort: " << current_effort << std::endl; - cont->move_torque(desired_effort); std::cout << "Moving..." << std::endl; t=0; while(t<timeout) { - current_effort = cont->get_current_effort(); - //std::cout << "Current effort: " << current_effort << std::endl; + std::cout << "Current speed: " << cont->get_current_speed() << std::endl; usleep(uperiod); t++; } @@ -204,18 +200,13 @@ int main(int argc, char *argv[]) desired_effort=-1.0*max_effort; std::cout << "MOVE EFFORT: " << desired_effort << std::endl; - current_effort = cont->get_current_effort(); - std::cout << "Desired effort: " << desired_effort << std::endl; - std::cout << "Current effort: " << current_effort << std::endl; - cont->move_torque(desired_effort); std::cout << "Moving..." << std::endl; t=0; while(t<timeout) { - current_effort = cont->get_current_effort(); - //std::cout << "Current effort: " << current_effort << std::endl; + std::cout << "Current speed: " << cont->get_current_speed() << std::endl; usleep(uperiod); t++; } @@ -226,13 +217,52 @@ int main(int argc, char *argv[]) sleep(1); //*/ + + ///////////////////////////////////////////////////////////////////////// + ////MOVE RANDOM TORQUES AND OUTPUT SPEEDS + ///////////////////////////////////////////////////////////////////////// + ///* + std::cout << "MOVE RANDOM EFFORTS" << std::endl; + int min=-100; + int max=100; + int output = min + (rand() % (int)(max - min + 1)); + cont->move_torque(output); + std::cout << "Effort: " << output << std::endl; + + double tt=0; + double time=10; + double step_time=0.5; + while(tt<time) + { + //std::cout << "tt: " << tt << std::endl; + double a1 = cont->get_current_angle(); + usleep(step_time*1000000); + double a2 = cont->get_current_angle(); + double speed = (a2-a1)/step_time; + std::cout << "- Speed from angle diff: " << speed << std::endl; + std::cout << "- Current speed: " << cont->get_current_speed() << std::endl; + int output = min + (rand() % (int)(max - min + 1)); + cont->move_torque(output); + std::cout << "Effort: " << output << std::endl; + tt+=step_time; + } + cont->move_torque(0); + std::cout << "Done" << std::endl; + std::cout << "-----------------------------------------------------------" << std::endl; + sleep(1); + //*/ + + + } } catch(CException &e) { std::cout << "[Genereal exception]: " << e.what() << std::endl; } + if(cont!=NULL) delete cont; + return 0; }