diff --git a/main.cpp b/main.cpp index abd470d..9e985c7 100644 --- a/main.cpp +++ b/main.cpp @@ -4,6 +4,8 @@ //#include//for windows #include//for linux #include "DynamixelHandler.h" +#include + // Global variables DynamixelHandler _oDxlHandler; @@ -19,6 +21,9 @@ int _targetJointTorqueGripper = 1140; float _proportionnalIncrement = 0.025f; float _proportionnalIncrementAbove = 0.01f; float _threshold= 1.9; +std::array,9> notes_position = {{{1, 2, 3, 4, 5, 6}, {2, 2, 3, 4, 5, 6}, {3, 2, 3, 4, 5, 6}, {4, 2, 3, 4, 5, 6}, {5, 2, 3, 4, 5, 6}, {6, 2, 3, 4, 5, 6}, {7, 2, 3, 4, 5, 6}, {8, 2, 3, 4, 5, 6}, {9, 2, 3, 4, 5, 6}}}; +//short unsigned int notes_position[54] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54}; + int convertAnglesToJointCmd(float fJointAngle) { // y = ax + b @@ -69,6 +74,41 @@ void currentPos() std::cout << ")" << std::endl; } +void teachTarget() +{ + _oDxlHandler.enableTorque(false); + + int noteNumber = 333; + + std::cout << "enter 555 when all the notes have been taught\n"; + std::cout << "enter note number (starting from 0):\n"; //allows to wait until user input, and specify which note is given + std::cin >> noteNumber; + + while(noteNumber != 555) + { + // read current joint position + std::vector l_vCurrentJointPosition; + _oDxlHandler.readCurrentJointPosition(l_vCurrentJointPosition); + for (int l_joint=0; l_joint < notes_position[noteNumber].size(); l_joint++) + { + notes_position[noteNumber][l_joint] = l_vCurrentJointPosition[l_joint]; + std::cout<> noteNumber; + + while (noteNumber < 0 or (noteNumber > 9 and noteNumber != 555)) // test if the input is good + { std::cout << "wrong number: enter note number (between 0 and 9), or exit with 555:\n"; + std::cin >> noteNumber; + } + } + + _oDxlHandler.enableTorque(true); +} + int closeGripper() { //read current joint 6 torque @@ -140,70 +180,71 @@ int closeGripper() void playNote(int myNote) { goToPlayingPosition(); + std::this_thread::sleep_for(std::chrono::milliseconds(200)); std::vector l_vTargetJointPosition; switch(myNote){ case 1: - l_vTargetJointPosition.push_back(convertAnglesToJointCmd(25.0f)); - l_vTargetJointPosition.push_back(convertAnglesToJointCmd(-55.0f)); - l_vTargetJointPosition.push_back(convertAnglesToJointCmd(0.0f)); - l_vTargetJointPosition.push_back(convertAnglesToJointCmd(0.0f)); - l_vTargetJointPosition.push_back(convertAnglesToJointCmd(20.0f)); + l_vTargetJointPosition.push_back(notes_position[0][0]); + l_vTargetJointPosition.push_back(notes_position[0][1]); + l_vTargetJointPosition.push_back(notes_position[0][2]); + l_vTargetJointPosition.push_back(notes_position[0][3]); + l_vTargetJointPosition.push_back(notes_position[0][4]); break; case 2: - l_vTargetJointPosition.push_back(convertAnglesToJointCmd(-35.0f)); - l_vTargetJointPosition.push_back(convertAnglesToJointCmd(-55.0f)); - l_vTargetJointPosition.push_back(convertAnglesToJointCmd(0.0f)); - l_vTargetJointPosition.push_back(convertAnglesToJointCmd(0.0f)); - l_vTargetJointPosition.push_back(convertAnglesToJointCmd(20.0f)); + l_vTargetJointPosition.push_back(notes_position[1][0]); + l_vTargetJointPosition.push_back(notes_position[1][1]); + l_vTargetJointPosition.push_back(notes_position[1][2]); + l_vTargetJointPosition.push_back(notes_position[1][3]); + l_vTargetJointPosition.push_back(notes_position[1][4]); break; case 3: - l_vTargetJointPosition.push_back(convertAnglesToJointCmd(25.0f)); - l_vTargetJointPosition.push_back(convertAnglesToJointCmd(-55.0f)); - l_vTargetJointPosition.push_back(convertAnglesToJointCmd(0.0f)); - l_vTargetJointPosition.push_back(convertAnglesToJointCmd(0.0f)); - l_vTargetJointPosition.push_back(convertAnglesToJointCmd(20.0f)); + l_vTargetJointPosition.push_back(notes_position[2][0]); + l_vTargetJointPosition.push_back(notes_position[2][1]); + l_vTargetJointPosition.push_back(notes_position[2][2]); + l_vTargetJointPosition.push_back(notes_position[2][3]); + l_vTargetJointPosition.push_back(notes_position[2][4]); break; case 4: - l_vTargetJointPosition.push_back(convertAnglesToJointCmd(25.0f)); - l_vTargetJointPosition.push_back(convertAnglesToJointCmd(-55.0f)); - l_vTargetJointPosition.push_back(convertAnglesToJointCmd(0.0f)); - l_vTargetJointPosition.push_back(convertAnglesToJointCmd(0.0f)); - l_vTargetJointPosition.push_back(convertAnglesToJointCmd(20.0f)); + l_vTargetJointPosition.push_back(notes_position[3][0]); + l_vTargetJointPosition.push_back(notes_position[3][1]); + l_vTargetJointPosition.push_back(notes_position[3][2]); + l_vTargetJointPosition.push_back(notes_position[3][3]); + l_vTargetJointPosition.push_back(notes_position[3][4]); break; case 5: - l_vTargetJointPosition.push_back(convertAnglesToJointCmd(25.0f)); - l_vTargetJointPosition.push_back(convertAnglesToJointCmd(-55.0f)); - l_vTargetJointPosition.push_back(convertAnglesToJointCmd(0.0f)); - l_vTargetJointPosition.push_back(convertAnglesToJointCmd(0.0f)); - l_vTargetJointPosition.push_back(convertAnglesToJointCmd(20.0f)); + l_vTargetJointPosition.push_back(notes_position[4][0]); + l_vTargetJointPosition.push_back(notes_position[4][1]); + l_vTargetJointPosition.push_back(notes_position[4][2]); + l_vTargetJointPosition.push_back(notes_position[4][3]); + l_vTargetJointPosition.push_back(notes_position[4][4]); break; case 6: - l_vTargetJointPosition.push_back(convertAnglesToJointCmd(25.0f)); - l_vTargetJointPosition.push_back(convertAnglesToJointCmd(-55.0f)); - l_vTargetJointPosition.push_back(convertAnglesToJointCmd(0.0f)); - l_vTargetJointPosition.push_back(convertAnglesToJointCmd(0.0f)); - l_vTargetJointPosition.push_back(convertAnglesToJointCmd(20.0f)); + l_vTargetJointPosition.push_back(notes_position[5][0]); + l_vTargetJointPosition.push_back(notes_position[5][1]); + l_vTargetJointPosition.push_back(notes_position[5][2]); + l_vTargetJointPosition.push_back(notes_position[5][3]); + l_vTargetJointPosition.push_back(notes_position[5][4]); break; case 7: - l_vTargetJointPosition.push_back(convertAnglesToJointCmd(25.0f)); - l_vTargetJointPosition.push_back(convertAnglesToJointCmd(-55.0f)); - l_vTargetJointPosition.push_back(convertAnglesToJointCmd(0.0f)); - l_vTargetJointPosition.push_back(convertAnglesToJointCmd(0.0f)); - l_vTargetJointPosition.push_back(convertAnglesToJointCmd(20.0f)); + l_vTargetJointPosition.push_back(notes_position[6][0]); + l_vTargetJointPosition.push_back(notes_position[6][1]); + l_vTargetJointPosition.push_back(notes_position[6][2]); + l_vTargetJointPosition.push_back(notes_position[6][3]); + l_vTargetJointPosition.push_back(notes_position[6][4]); break; case 8: - l_vTargetJointPosition.push_back(convertAnglesToJointCmd(25.0f)); - l_vTargetJointPosition.push_back(convertAnglesToJointCmd(-55.0f)); - l_vTargetJointPosition.push_back(convertAnglesToJointCmd(0.0f)); - l_vTargetJointPosition.push_back(convertAnglesToJointCmd(0.0f)); - l_vTargetJointPosition.push_back(convertAnglesToJointCmd(20.0f)); + l_vTargetJointPosition.push_back(notes_position[7][0]); + l_vTargetJointPosition.push_back(notes_position[7][1]); + l_vTargetJointPosition.push_back(notes_position[7][2]); + l_vTargetJointPosition.push_back(notes_position[7][3]); + l_vTargetJointPosition.push_back(notes_position[7][4]); break; case 9: - l_vTargetJointPosition.push_back(convertAnglesToJointCmd(25.0f)); - l_vTargetJointPosition.push_back(convertAnglesToJointCmd(-55.0f)); - l_vTargetJointPosition.push_back(convertAnglesToJointCmd(0.0f)); - l_vTargetJointPosition.push_back(convertAnglesToJointCmd(0.0f)); - l_vTargetJointPosition.push_back(convertAnglesToJointCmd(20.0f)); + l_vTargetJointPosition.push_back(notes_position[8][0]); + l_vTargetJointPosition.push_back(notes_position[8][1]); + l_vTargetJointPosition.push_back(notes_position[8][2]); + l_vTargetJointPosition.push_back(notes_position[8][3]); + l_vTargetJointPosition.push_back(notes_position[8][4]); break; default: l_vTargetJointPosition.push_back(convertAnglesToJointCmd(25.0f)); @@ -219,7 +260,7 @@ void playNote(int myNote) } int main() -{ +{ std::cout << "===Initialization of the Dynamixel Motor communication====" << std::endl; _oDxlHandler.setDeviceName(_poppyDxlPortName); _oDxlHandler.setProtocolVersion(_poppyDxlProtocol); @@ -237,10 +278,12 @@ int main() //int gripperTorque = closeGripper(); goToPlayingPosition(); - goToPlayingPosition();goToPlayingPosition();goToPlayingPosition();goToPlayingPosition();goToPlayingPosition();goToPlayingPosition(); currentPos(); + teachTarget(); playNote(1); playNote(2); + playNote(3); + goToPlayingPosition(); // wait 1s std::this_thread::sleep_for(std::chrono::milliseconds(1000));