Notes for WaitPositionXXXX functions.
WaitPositionXXXX functions pause calling thread until the specified angular position is reach. The thread is resumed if current servo position is the specified position (+- an acceptable error) or if a timeout occurred. WaitPositionXXXX don't try to change servo position : you usually use it just after calling GoPositionYYYY.
Variables |
Description |
Range |
Position |
It is an angular position in rad or deg according to the used function. Given position value must be according to the servo capabilities : 720 ° for exemple cannot be reach by a servo that do not maintains an absolute angle. |
Angular position according to servo capabilities. |
Acceptable Error |
The calling thread is resumed if current servo position is equal to the specified position +- this acceptable angular error. |
0 : The error is equal to the servo accuracy >0 : absolute acceptable angular error (must be the same unit as Position) |
Timeout |
This is the maximum time the WaitPositionXXXX will lock calling thread. After this time, if current position is not the specified position (+- acceptable error), the device free the thread and returns MODA_EWAITCOMPLETETIMEOUT. If the position is reach before the timeout, the device returns MODA_EOK. |
0: timeout is raised just after servo next update (5 ms) >0: timeout is a number of milli seconds = INFINITE: infinite waiting |
/////////////////////////////////////////////////////// //exemple from Samples/Devices/Servomotor, modified /////////////////////////////////////////////////////// #include "ModaCpp.h" #include "conio.h" //Settings: #define MODASERVER "localhost" int main(int argc, TCHAR* argv[]) { ModaCPP::Connection *connection=new ModaCPP::Connection(true); //Connect to MODA server if(connection->Connect(MODASERVER)) { _cprintf("Connexion to %s ok\r\n",MODASERVER); //Find the robot ModaCPP::RobotPHX *robot=connection->QueryRobotPHX("/"); if(robot) { _cprintf("robot found in this world\r\n"); ModaCPP::DeviceServoMotor *pServo1=robot->QueryDeviceServoMotor("hinge2/axisred/servo"); ModaCPP::DeviceServoMotor *pServo2=robot->QueryDeviceServoMotor("hinge2/axisgreen/servo"); if(pServo1 && pServo2) { while(!_kbhit()) { M32 DeviceResponse; //go to a specific position pServo1->GoPositionDeg(-89); //wait the servo reach this position, wait an infinite time if needed //acceptable error is not specified... pServo1->WaitPositionDegComplete(-89,0,INFINITE,&DeviceResponse); if(DeviceResponse==MODA_EWAITCOMPLETETIMEOUT) _cprintf("1: TIMEOUT\r\n"); //go to another specific position pServo1->GoPositionDeg(89); //wait the servo reach this position, wait 250 ms max //acceptable error is not specified ... pServo1->WaitPositionDegComplete(89,0,250,&DeviceResponse); if(DeviceResponse==MODA_EWAITCOMPLETETIMEOUT) _cprintf("2: TIMEOUT\r\n"); } delete pServo1; delete pServo2; } else { _cprintf("servo(s) not found ...\r\n"); } delete robot; } else { _cprintf("robot not found in this world\r\n"); } } else { _cprintf("Unable to connect to moda server : be sure Exec is running and MODA TCP/UDP ports are open\r\n"); } connection->Disconnect(); delete connection; return 0; }
Documentation v4.7 (18/01/2015), Copyright (c) 2015 anyKode. All rights reserved.
|
What do you think about this topic? Send feedback!
|