diff --git a/src/examples/CMakeLists.txt b/src/examples/CMakeLists.txt index c6e4e9048991d5c6cf5e8fd7a10f109c4cbf762f..fd13e10301c06fe3bc70226214c6e8feacdacaf3 100644 --- a/src/examples/CMakeLists.txt +++ b/src/examples/CMakeLists.txt @@ -24,9 +24,9 @@ ADD_EXECUTABLE(darwin_action_test darwin_action_test.cpp) TARGET_LINK_LIBRARIES(darwin_action_test darwin_robot) # create an example application -#ADD_EXECUTABLE(darwin_walking_test darwin_walking_test.cpp) +ADD_EXECUTABLE(darwin_walking_test darwin_walking_test.cpp) # link necessary libraries -#TARGET_LINK_LIBRARIES(darwin_walking_test darwin_robot) +TARGET_LINK_LIBRARIES(darwin_walking_test darwin_robot) # create an example application #ADD_EXECUTABLE(darwin_stairs_test darwin_stairs_test.cpp) diff --git a/src/examples/darwin_walking_test.cpp b/src/examples/darwin_walking_test.cpp index 799aaa9149bdfd8dd42b0dca364e92eadb25258b..d74f3d23f8b40d0b01f7c0f86652e46ba4ff0cee 100644 --- a/src/examples/darwin_walking_test.cpp +++ b/src/examples/darwin_walking_test.cpp @@ -1,77 +1,97 @@ -#include "darwin_robot.h" +#include "darwin_mmanager.h" +#include "darwin_action.h" +#include "darwin_walk.h" +#include "darwin_balance.h" +#include "darwin_imu.h" #include "darwin_robot_exceptions.h" #include "action_id.h" #include <iostream> -std::string robot_device="/dev/pts/20"; -//std::string robot_device="A603LOBS"; -//std::string robot_device="A4008atn"; +std::string robot_device="/tmp/darwin_driver"; 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,true); - 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(); - sleep(1); - for(i=0;i<MAX_NUM_SERVOS;i++) + CDarwinMManager darwin("Darwin",robot_device,1000000,0x01,true); + CDarwinAction action("Darwin",robot_device,1000000,0x01,true); + CDarwinIMU imu("Darwin",robot_device,1000000,0x01,true); + CDarwinBalance balance("Darwin",robot_device,1000000,0x01,true); + CDarwinWalk walk("Darwin",robot_device,1000000,0x01,true); + std::cout << "Manager period: " << darwin.get_base_period() << std::endl; + std::cout << "Number of modules: " << darwin.get_num_modules() << std::endl; + std::cout << "Number of masters: " << darwin.get_num_masters() << std::endl; + std::cout << "Motion manager period: " << darwin.get_period() << std::endl; + darwin.start_scan(); + while(darwin.is_scanning()) { - darwin.mm_enable_servo(i); - darwin.mm_assign_module(i,DARWIN_MM_ACTION); + std::cout << "scanning ..." << std::endl; + usleep(100000); + } + num_servos=darwin.get_num_devices(); + std::cout << "num. devices: " << num_servos << std::endl; + present_servos=darwin.get_present_devices(); + std::cout << "present devices: " << std::hex << present_servos << std::endl; + present_servos=darwin.get_present_servos(); + std::cout << "present servos: " << std::hex << present_servos << std::endl; + i=0; + while(i<num_servos) + { + if(present_servos&(0x00000001<<i)) + { + darwin.enable_servo(i); + darwin.assign_module(i,DARWIN_MM_ACTION); + } + i++; } - darwin.mm_start(); - // execute an action - darwin.action_load_page(WALK_READY); - darwin.action_start(); - while(darwin.action_is_page_running()) + darwin.start(); + action.load_page(7); + action.start(); + while(action.is_page_running()) + { + std::cout << "action running ... " << std::endl; usleep(100000); - std::cout << "starting calibration" << std::endl; - darwin.imu_start_gyro_cal(); - while(darwin.imu_is_gyro_cal_done()) + } + imu.start(); + std::cout << "Gyroscope detected: " << imu.is_gyro_detected() << std::endl; + std::cout << "Accelerometer detected: " << imu.is_accel_detected() << std::endl; + imu.start_gyro_cal(); + while(!imu.is_gyro_cal_done()) + { + std::cout << "calibrating gyro ..." << std::endl; usleep(100000); + } std::cout << "calibration done" << std::endl; - darwin.mm_enable_balance(); - for(i=0;i<MAX_NUM_SERVOS;i++) + balance.enable(); + i=0; + while(i<num_servos) { - darwin.mm_enable_servo(i); - darwin.mm_assign_module(i,DARWIN_MM_WALKING); + if(present_servos&(0x00000001<<i)) + { + darwin.enable_servo(i); + darwin.assign_module(i,DARWIN_MM_WALKING); + } + i++; } std::cout << "Start walking ..." << std::endl; - darwin.walk_set_x_step(0.0); - darwin.walk_set_y_step(0.0); - darwin.walk_set_turn_step(0.04); - darwin.walk_start(); + walk.set_x_step(0.04); + walk.set_y_step(0.0); + walk.set_turn_step(0.0); + walk.start(); sleep(10); 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.01); - darwin.walk_start(); - sleep(2); - std::cout << "Stop walking ..." << std::endl; - darwin.walk_stop(); - while(darwin.is_walking()) + walk.stop(); + while(walk.is_walking()) { std::cout << "Walking ..." << std::endl; usleep(100000); } - darwin.mm_stop(); - darwin.mm_disable_power(); + balance.disable(); + imu.stop(); + darwin.stop(); }catch(CException &e){ std::cout << e.what() << std::endl; }