diff --git a/src/darwin_robot.cpp b/src/darwin_robot.cpp index 3508488f6c61b210ffb223920986b7cc1212d4c1..578a6cbe9149eb43688c75e4834e8708f43fc838 100644 --- a/src/darwin_robot.cpp +++ b/src/darwin_robot.cpp @@ -80,8 +80,6 @@ CDarwinRobot::CDarwinRobot(const std::string &name,std::string &bus_id,int bus_s this->robot_device->read_byte_register(DARWIN_MM_NUM_SERVOS,&this->manager_num_servos); /* get the current action status */ this->robot_device->read_byte_register(DARWIN_ACTION_CNTRL,&this->action_status); - /* get the current head tracking status */ - this->robot_device->read_byte_register(DARWIN_HEAD_CNTRL,&this->head_tracking_status); } else { @@ -1120,7 +1118,6 @@ void CDarwinRobot::walk_set_period(double period_s) if(this->robot_device!=NULL) { period=(unsigned short int)(period_s*1000.0); - std::cout << period_s << "," << period << std::endl; this->robot_device->write_word_register(DARWIN_WALK_PERIOD_TIME_L,period); } else @@ -1712,24 +1709,14 @@ void CDarwinRobot::head_get_tilt_range(double *max,double *min) void CDarwinRobot::head_start_tracking(double pan,double tilt) { unsigned short int value; - unsigned char data[128]; if(this->robot_device!=NULL) { value=pan*128.0; - std::cout << "pan value:" << value << std::endl; this->robot_device->write_word_register(DARWIN_HEAD_PAN_TARGET_L,value); value=tilt*128.0; - std::cout << "tilt value:" << value << std::endl; this->robot_device->write_word_register(DARWIN_HEAD_TILT_TARGET_L,value); - this->head_tracking_status|=HEAD_START; - this->robot_device->write_byte_register(DARWIN_HEAD_CNTRL,this->head_tracking_status); - this->robot_device->read_registers(DARWIN_HEAD_PAN_P_L,data,16); - for(unsigned int i=0;i<16;i++) - std::cout << "register: " << std::dec << (int)(DARWIN_HEAD_PAN_P_L + i) << std::hex << (int)data[i] << std::endl; - this->robot_device->read_registers(DARWIN_HEAD_CNTRL,data,13); - for(unsigned int i=0;i<13;i++) - std::cout << "register: " << std::dec << (int)(DARWIN_HEAD_CNTRL + i) << std::hex << (int)data[i] << std::endl; + this->robot_device->write_byte_register(DARWIN_HEAD_CNTRL,HEAD_START); } else throw CDarwinRobotException(_HERE_,"Invalid robot device"); @@ -1738,10 +1725,7 @@ void CDarwinRobot::head_start_tracking(double pan,double tilt) void CDarwinRobot::head_stop_tracking(void) { if(this->robot_device!=NULL) - { - this->head_tracking_status|=HEAD_STOP; - this->robot_device->write_byte_register(DARWIN_HEAD_CNTRL,this->head_tracking_status); - } + this->robot_device->write_byte_register(DARWIN_HEAD_CNTRL,HEAD_STOP); else throw CDarwinRobotException(_HERE_,"Invalid robot device"); } diff --git a/src/darwin_robot.h b/src/darwin_robot.h index 51343b1171878209a3c7b41a3a2506d8c286a584..597128f3f46817be92cb85f108a7432821483404 100644 --- a/src/darwin_robot.h +++ b/src/darwin_robot.h @@ -52,8 +52,6 @@ class CDarwinRobot unsigned char manager_status; /* action status */ unsigned char action_status; - /* head tracking status */ - unsigned char head_tracking_status; public: CDarwinRobot(const std::string &name,std::string &bus_id,int bus_speed, unsigned char id); // GPIO interface diff --git a/src/examples/darwin_gpio_test.cpp b/src/examples/darwin_gpio_test.cpp index 85d6c6dc45be8e6a7a11af72e593a7bdaa532a70..e7a0f910563fbcb7827d1fe8da3038c7577d5962 100644 --- a/src/examples/darwin_gpio_test.cpp +++ b/src/examples/darwin_gpio_test.cpp @@ -3,11 +3,13 @@ #include <iostream> -//std::string robot_device="A603LOBS"; -std::string robot_device="A4008atn"; +std::string robot_device="A603LOBS"; +//std::string robot_device="A4008atn"; int main(int argc, char *argv[]) { + unsigned int i=0; + try{ CDarwinRobot darwin("Darwin",robot_device,1000000,0x02); std::cout << "found darwin controller" << std::endl; @@ -18,6 +20,21 @@ int main(int argc, char *argv[]) darwin.gpio_set_led(LED_4); darwin.gpio_aux1_color(1.0,1.0,1.0); darwin.gpio_aux2_color(0.5,0.5,0.5); + for(i=0;i<100;i++) + { + if(darwin.is_button_pressed(START_PB)) + std::cout << "start button pressed" << std::endl; + else + std::cout << "start button not pressed" << std::endl; + usleep(100000); + } + darwin.gpio_blink_led(LED_TX,0); + darwin.gpio_blink_led(LED_RX,0); + darwin.gpio_blink_led(LED_2,0); + darwin.gpio_blink_led(LED_3,0); + darwin.gpio_clear_led(LED_4); + darwin.gpio_aux1_color(0.0,0.0,0.0); + darwin.gpio_aux2_color(0.0,0.0,0.0); sleep(10); }catch(CException &e){ std::cout << e.what() << std::endl; diff --git a/src/examples/darwin_head_tracking_test.cpp b/src/examples/darwin_head_tracking_test.cpp index c26b3213c3a4e4548ea03a75140edcd11ff5281e..ad7b46fa2c391e8f8c6476259550f8a362716cfe 100644 --- a/src/examples/darwin_head_tracking_test.cpp +++ b/src/examples/darwin_head_tracking_test.cpp @@ -3,8 +3,8 @@ #include <iostream> -//std::string robot_device="A603LOBS"; -std::string robot_device="A4008atn"; +std::string robot_device="A603LOBS"; +//std::string robot_device="A4008atn"; int main(int argc, char *argv[]) { @@ -30,9 +30,15 @@ int main(int argc, char *argv[]) darwin.mm_assign_module(19,DARWIN_MM_HEAD); darwin.mm_start(); darwin.head_start_tracking(45.0,90.0); - sleep(10); + sleep(3); darwin.head_set_new_target(0.0,0.0); - sleep(10); + sleep(3); + darwin.head_stop_tracking(); + sleep(1); + darwin.head_start_tracking(45.0,90.0); + sleep(3); + darwin.head_set_new_target(0.0,0.0); + sleep(3); darwin.mm_stop(); darwin.mm_disable_power(); }catch(CException &e){ diff --git a/src/examples/darwin_joint_motion_test.cpp b/src/examples/darwin_joint_motion_test.cpp index 7fa8fa9468eda1a1b11ac736c190555d9490a081..20a39c8659599478aadbe789a58590e328385b9c 100644 --- a/src/examples/darwin_joint_motion_test.cpp +++ b/src/examples/darwin_joint_motion_test.cpp @@ -3,8 +3,8 @@ #include <iostream> -//std::string robot_device="A603LOBS"; -std::string robot_device="A4008atn"; +std::string robot_device="A603LOBS"; +//std::string robot_device="A4008atn"; int main(int argc, char *argv[]) { @@ -35,42 +35,27 @@ int main(int argc, char *argv[]) angles.clear(); speeds.clear(); accels.clear(); - for(i=0;i<MAX_NUM_SERVOS;i++) - { - if(present_servos&(0x00000001<<i)) - { - servos.push_back(i); - angles.push_back(45.0); - speeds.push_back(10.0*j); - accels.push_back(10.0*j); - } - } + servos.push_back(19); + angles.push_back(45.0); + speeds.push_back(50.0); + accels.push_back(50.0); std::cout << "Start joint_motion ..." << std::endl; - darwin.joints_load((joints_grp_t)j,servos,angles,speeds,accels); - darwin.joints_start((joints_grp_t)j); - while(darwin.joints_are_moving((joints_grp_t)j)) - { - std::cout << "moving joints ..." << std::endl; - usleep(100000); - } + darwin.joints_load(JOINTS_GRP0,servos,angles,speeds,accels); + darwin.joints_start(JOINTS_GRP0); + sleep(2); + darwin.joints_stop(JOINTS_GRP0); std::cout << "done" << std::endl; servos.clear(); angles.clear(); speeds.clear(); accels.clear(); - for(i=0;i<MAX_NUM_SERVOS;i++) - { - if(present_servos&(0x00000001<<i)) - { - servos.push_back(i); - angles.push_back(-45.0); - speeds.push_back(10.0*j); - accels.push_back(10.0*j); - } - } - darwin.joints_load((joints_grp_t)j,servos,angles,speeds,accels); - darwin.joints_start((joints_grp_t)j); - while(darwin.joints_are_moving((joints_grp_t)j)) + servos.push_back(19); + angles.push_back(-45.0); + speeds.push_back(50.0); + accels.push_back(50.0); + darwin.joints_load(JOINTS_GRP0,servos,angles,speeds,accels); + darwin.joints_start(JOINTS_GRP0); + while(darwin.joints_are_moving(JOINTS_GRP0)) { std::cout << "moving joints ..." << std::endl; usleep(100000); diff --git a/src/examples/darwin_walking_test.cpp b/src/examples/darwin_walking_test.cpp index 5f474f4da29ce122926fdd0907b9b50e3ed1efff..acd149afbf6af4312520f375bdb413f57adcadde 100644 --- a/src/examples/darwin_walking_test.cpp +++ b/src/examples/darwin_walking_test.cpp @@ -4,21 +4,25 @@ #include <iostream> -//std::string robot_device="A603LOBS"; -std::string robot_device="A4008atn"; +std::string robot_device="A603LOBS"; +//std::string robot_device="A4008atn"; int main(int argc, char *argv[]) { int i=0,num_servos; std::vector<double> angles; + unsigned int present_servos; try{ CDarwinRobot darwin("Darwin",robot_device,1000000,0x02); num_servos=darwin.mm_get_num_servos(); + present_servos=darwin.mm_get_present_servos(); std::cout << "Found " << num_servos << " servos" << std::endl; + std::cout << "Present servos: " << std::hex << "0x" << present_servos << std::dec << std::endl; // enable all servos and assign them to the action module darwin.mm_enable_power(); - for(i=1;i<=num_servos;i++) + sleep(1); + for(i=0;i<MAX_NUM_SERVOS;i++) { darwin.mm_enable_servo(i); darwin.mm_assign_module(i,DARWIN_MM_ACTION); @@ -29,12 +33,33 @@ int main(int argc, char *argv[]) darwin.action_start(); while(darwin.action_is_page_running()) usleep(100000); - for(i=1;i<=num_servos;i++) + std::cout << "starting calibration" << std::endl; + darwin.imu_start_gyro_cal(); + while(darwin.imu_is_gyro_cal_done()) + usleep(100000); + std::cout << "calibration done" << std::endl; + darwin.mm_enable_balance(); + for(i=0;i<MAX_NUM_SERVOS;i++) + { + darwin.mm_enable_servo(i); darwin.mm_assign_module(i,DARWIN_MM_WALKING); + } std::cout << "Start walking ..." << std::endl; - darwin.walk_set_x_step(0.02); + darwin.walk_set_x_step(0.0); + darwin.walk_set_y_step(0.0); + darwin.walk_set_turn_step(0.01); + darwin.walk_start(); + sleep(2); + std::cout << "Stop walking ..." << std::endl; + darwin.walk_stop(); + while(darwin.is_walking()) + { + std::cout << "Walking ..." << std::endl; + usleep(100000); + } + darwin.walk_set_x_step(0.0); darwin.walk_set_y_step(0.0); - darwin.walk_set_turn_step(0.0); + darwin.walk_set_turn_step(0.01); darwin.walk_start(); sleep(2); std::cout << "Stop walking ..." << std::endl;