diff --git a/main.cpp b/main.cpp old mode 100644 new mode 100755 index 0362a14..e81a80b --- a/main.cpp +++ b/main.cpp @@ -12,27 +12,79 @@ float _minJointCmd = 0; float _maxJointCmd = 1023; float _minJointAngle = -180.0f; float _maxJointAngle = 180.0f; -int main() -{ std::cout << "===Initialization of the Dynamixel Motor communication====" << std::endl; -_oDxlHandler.setDeviceName(_poppyDxlPortName); -_oDxlHandler.setProtocolVersion(_poppyDxlProtocol); -_oDxlHandler.openPort(); -_oDxlHandler.setBaudRate(_poppyDxlBaudRate); -_oDxlHandler.enableTorque(true); -std::cout << std::endl; -// read current joint position -std::vector l_vCurrentJointPosition; -_oDxlHandler.readCurrentJointPosition(l_vCurrentJointPosition); -// display current joint position -std::cout << "vCurrentJointPosition= (" << std::endl; -for (int l_joint=0; l_joint < l_vCurrentJointPosition.size(); l_joint++) -std::cout << l_vCurrentJointPosition[l_joint] << ", "; -std::cout << ")" << std::endl; -// wait 1s -std::this_thread::sleep_for(std::chrono::milliseconds(1000)); -std::cout << "===Closing the Dynamixel Motor communication====" << std::endl; -_oDxlHandler.enableTorque(false); -_oDxlHandler.closePort(); -std::cout << std::endl; -return 0; + +int convertAnglesToJointCmd(float fJointAngle) +{ + // y = ax + b + float a = (_maxJointCmd-_minJointCmd) / (_maxJointAngle - _minJointAngle); + float b = _minJointCmd - a * _minJointAngle; + float jointCmd = a * fJointAngle + b; + return (int)jointCmd; } + +void goToHomePosition() +{ + std::vector l_vTargetJointPosition; + for (int l_joint = 0; l_joint < _nbJoints; l_joint++) + l_vTargetJointPosition.push_back(convertAnglesToJointCmd(0.0f)); + _oDxlHandler.sendTargetJointPosition(l_vTargetJointPosition); +} +void CurrentTorque() +{ + std::vector l_vTargetJointPosition; + for (int l_joint = 5; l_joint < _nbJoints; l_joint++) + l_vTargetJointPosition.push_back(convertAnglesToJointCmd(0.0f)); + _oDxlHandler.sendTargetJointPosition(l_vTargetJointPosition); +} +void goToNewPosition() +{ + std::vector l_vCurrentJointPosition; + _oDxlHandler.readCurrentJointPosition(l_vCurrentJointPosition); + // display current joint position + std::cout << "newCurrentJointPosition= (" << std::endl; + + for (int l_joint=0; l_joint < l_vCurrentJointPosition.size(); l_joint++) + std::cout << l_vCurrentJointPosition[l_joint] << ", "; + + std::cout << ")" << std::endl; +} + +int main() +{ + std::cout << "===Initialization of the Dynamixel Motor communication====" << std::endl; + _oDxlHandler.setDeviceName(_poppyDxlPortName); + _oDxlHandler.setProtocolVersion(_poppyDxlProtocol); + _oDxlHandler.openPort(); + _oDxlHandler.setBaudRate(_poppyDxlBaudRate); + _oDxlHandler.enableTorque(true); + std::cout << std::endl; + + // read current joint position + std::vector l_vCurrentJointPosition; + _oDxlHandler.readCurrentJointPosition(l_vCurrentJointPosition); + // display current joint position + std::cout << "vCurrentJointPosition= (" << std::endl; + + for (int l_joint=0; l_joint < l_vCurrentJointPosition.size(); l_joint++) + std::cout << l_vCurrentJointPosition[l_joint] << ", "; + + std::cout << ")" << std::endl; + // read current torque + std::vectorl_vCurrentJointTorque; + + + //goToHomePosition(); + //goToNewPosition(); + CurrentTorque(); + // wait 1s + std::this_thread::sleep_for(std::chrono::milliseconds(1000)); + std::cout << "===Closing the Dynamixel Motor communication====" << std::endl; + _oDxlHandler.enableTorque(false); + _oDxlHandler.closePort(); + std::cout << std::endl; + + + return 0; + +} +