void KeyPTU::status(void) { ArLog::log(ArLog::Normal, "\r\nStatus:\r\n_________________\r\n"); ArLog::log(ArLog::Normal, "Pan Position = %.1f deg", myPTU.getPan()); ArLog::log(ArLog::Normal, "Tilt Position = %.1f deg", myPTU.getTilt()); ArLog::log(ArLog::Normal, "Pan Slew Rate = %d deg/sec", myPTU.getPanSlew()); ArLog::log(ArLog::Normal, "Tilt Slew Rate = %d deg/sec", myPTU.getTiltSlew()); ArLog::log(ArLog::Normal, "Position Increment = %d deg", myPosIncrement); if (myAbsolute) ArLog::log(ArLog::Normal, "Positional-movements using absolute commands"); else ArLog::log(ArLog::Normal, "Positional-movements using relative commands"); ArLog::log(ArLog::Normal, "\r\n"); }
// the important function void KeyPTU::drive(void) { // if the PTU isn't initialized, initialize it here... it has to be // done here instead of above because it needs to be done when the // robot is connected if (!myPTUInited && myRobot->isConnected()) { myPTU.init(); myPTU.resetCalib(); myPTU.awaitExec(); myPTU.regStatPower(); myPTU.regMotPower(); mySlew = myPTU.getPanSlew(); //uses only pan slew rate myPTU.awaitExec(); myPTUInited = true; myInit = false; myAbsolute = true; } if (myInit == true) { myPTU.init(); myInit = false; myDesiredPanPos = myPTU.getPan(); myDesiredTiltPos = myPTU.getTilt(); mySlew = myPTU.getPanSlew(); //uses only pan slew rate myReset = false; } if (myReset == true) { myPTU.resetCalib(); myPTU.awaitExec(); myDesiredPanPos = myPTU.getPan(); myDesiredTiltPos = myPTU.getTilt(); myReset = false; } else { if (myDesiredPanPos != myPTU.getPan()) { if (myAbsolute) myPTU.pan(myDesiredPanPos); else myPTU.panRel(myDesiredPanPos - myPTU.getPan()); } if (myDesiredTiltPos != myPTU.getTilt()) { if (myAbsolute) myPTU.tilt(myDesiredTiltPos); else myPTU.tiltRel(myDesiredTiltPos - myPTU.getTilt()); } if (mySlew != myPTU.getPanSlew()) { myPTU.panSlew(mySlew); myPTU.tiltSlew(mySlew); } } }
// the important function void KeyPTU::drive(void) { // if the PTU isn't initialized, initialize it here... it has to be // done here instead of above because it needs to be done when the // robot is connected if (!myPTUInited && myRobot->isConnected()) { ArLog::log(ArLog::Normal, "Initializing ArDPPTU..."); myPTU.init(); ArLog::log(ArLog::Normal, "Resetting PTU and performing self-calibration..."); myPTU.resetCalib(); myPTU.awaitExec(); // DPPTU will wait for self-calibration to end before executing the following commands (though they will still be sent) mySlew = myPTU.getPanSlew(); //uses only pan slew rate myPTU.awaitExec(); myPTUInited = true; myInit = false; myAbsolute = true; } if (myInit == true) // User hit initialization key { ArLog::log(ArLog::Normal, "Initializing PTU..."); myPTU.init(); myInit = false; myDesiredPanPos = myPTU.getPan(); myDesiredTiltPos = myPTU.getTilt(); mySlew = myPTU.getPanSlew(); //uses only pan slew rate myReset = false; } if (myReset == true) // User hit reset key { ArLog::log(ArLog::Normal, "Resetting PTU and performing self-calibration..."); myPTU.resetCalib(); myPTU.awaitExec(); myDesiredPanPos = myPTU.getPan(); myDesiredTiltPos = myPTU.getTilt(); myReset = false; } else // User did nothing, or hit a key that changed myDesiredPanPos, myDesiredTiltPos, or mySlew (so request PTU to move if those changed since last request) { // Some PTUs can determine their current position (with encoders, etc) and return that. // canGetRealPanTilt() will return true in this case, and getPan() and // getTilt() will return those received values. Otherwise, getPan() and // getTilt() return the last commanded values. getLastPanRequest() and // getLastTiltRequest() will always return the last commanded values sent by // ArDPPTU (so in the case that canGetRealPanTilt() is false, getPan() and // getTilt() return the same pair of values as getLastPanRequest() and // getLastTiltRequest(). ArDPPTU::canGetRealPanTilt() is initialally false, // but once the first set of pan and tilt positions is read back from the // PTU device, it becomes true. if(myPTU.canGetRealPanTilt()) printf("Position (%.1f deg, %.1f deg) [Incr. %d deg] Press ? for help \r", myPTU.getPan(), myPTU.getTilt(), myPosIncrement); else printf("Requested (%.1f deg, %.1f deg) [Incr. %d deg] Press ? for help \r", myPTU.getPan(), myPTU.getTilt(), myPosIncrement); if (myDesiredPanPos != myPTU.getLastPanRequest()) { if (myAbsolute) myPTU.pan(myDesiredPanPos); else myPTU.panRel(myDesiredPanPos - myPTU.getPan()); } if (myDesiredTiltPos != myPTU.getLastTiltRequest()) { if (myAbsolute) myPTU.tilt(myDesiredTiltPos); else myPTU.tiltRel(myDesiredTiltPos - myPTU.getTilt()); } if (mySlew != myPTU.getPanSlew()) { myPTU.panSlew(mySlew); myPTU.tiltSlew(mySlew); } } }