bool Odometry::open() { // open the control board driver printf("\nOpening the motors interface...\n"); Property control_board_options("(device remote_controlboard)"); if (!control_board_driver) { fprintf(stderr,"ERROR: control board driver not ready!\n"); return false; } // open the interfaces for the control boards bool ok = true; ok = ok & control_board_driver->view(ienc); if(!ok) { fprintf(stderr,"ERROR: one or more devices has not been viewed\nreturning...\n"); //return false; } // open control input ports port_odometry.open((localName+"/odometry:o").c_str()); port_odometer.open((localName+"/odometer:o").c_str()); port_ikart_vels.open((localName+"/velocity:o").c_str()); //reset odometry reset_odometry(); return true; }
bool ControlThread::threadInit() { //open the joystick port port_joystick_control.open(localName + "/joystick:i"); //try to connect to joystickCtrl output if (rf.check("joystick_connect")) { int joystick_trials = 0; do { yarp::os::Time::delay(1.0); if (yarp::os::Network::connect("/joystickCtrl:o", localName+"/joystick:i")) { yInfo("Joystick has been automatically connected"); break; } else { yWarning("Unable to find the joystick port, retrying (%d/5)...",joystick_trials); joystick_trials++; } if (joystick_trials>=5) { yError("Unable to find the joystick port, giving up"); break; } } while (1); } // open the control board driver yInfo("Opening the motors interface...\n"); int trials = 0; double start_time = yarp::os::Time::now(); Property control_board_options("(device remote_controlboard)"); control_board_options.put("remote", remoteName.c_str()); control_board_options.put("local", localName.c_str()); do { double current_time = yarp::os::Time::now(); //remove previously existing drivers if (control_board_driver) { delete control_board_driver; control_board_driver = 0; } //creates the new device driver control_board_driver = new PolyDriver(control_board_options); bool connected = control_board_driver->isValid(); //check if the driver is connected if (connected) break; //check if the timeout (10s) is expired if (current_time - start_time > 10.0) { yError("It is not possible to instantiate the device driver. I tried %d times!", trials); if (control_board_driver) { delete control_board_driver; control_board_driver = 0; } return false; } yarp::os::Time::delay(0.5); trials++; yWarning("Unable to connect the device driver, trying again..."); } while (true); control_board_driver->view(iDir); control_board_driver->view(iVel); control_board_driver->view(iEnc); control_board_driver->view(iPos); control_board_driver->view(iCmd); if (iDir == 0 || iEnc == 0 || iVel == 0 || iCmd == 0) { yError() << "Failed to open interfaces"; return false; } yarp::os::Time::delay(1.0); iEnc->getEncoder(0, &enc_init_elong); iEnc->getEncoder(1, &enc_init_roll); iEnc->getEncoder(2, &enc_init_pitch); iVel ->setRefAcceleration (0,10000000); iVel ->setRefAcceleration (1,10000000); iVel ->setRefAcceleration (2,10000000); yDebug() << "Initial vals" << enc_init_elong << enc_init_roll << enc_init_pitch; return true; }