/** * Request/reply: Motor power. <br> * <br> * On some robots, the motor power can be turned on and off from software. To do so, send a * PLAYER_POSITION1D_MOTOR_POWER request with the format given below, and with the appropriate * state (zero for motors off and non-zero for motors on). Null response. <br> * <br> * Be VERY careful with this command! You are very likely to start the robot running across the * room at high speed with the battery charger still attached. * * @param state 0 for off, 1 for on */ public void setMotorPower(int state) { try { sendHeader(PLAYER_MSGTYPE_REQ, PLAYER_POSITION1D_REQ_MOTOR_POWER, 4); XdrBufferEncodingStream xdr = new XdrBufferEncodingStream(4); xdr.beginEncoding(null, 0); xdr.xdrEncodeByte((byte) state); xdr.endEncoding(); os.write(xdr.getXdrData(), 0, xdr.getXdrLength()); xdr.close(); os.flush(); } catch (IOException e) { throw new PlayerException("[Position1D] : Couldn't request MOTOR_POWER: " + e.toString(), e); } catch (OncRpcException e) { throw new PlayerException( "[Position1D] : Error while XDR-encoding POWER request: " + e.toString(), e); } }
/** * The position1D interface accepts new positions and/or velocities for the robot's motors * (drivers may support position control, speed control or both). <br> * <br> * See the player_position1d_cmd_vel structure from player.h * * @param pp1dcv a PlayerPosition1dCmdVel structure holding the required data */ public void setVelocity(PlayerPosition1dCmdVel pp1dcv) { try { sendHeader(PLAYER_MSGTYPE_CMD, PLAYER_POSITION1D_CMD_VEL, 8); XdrBufferEncodingStream xdr = new XdrBufferEncodingStream(8); xdr.beginEncoding(null, 0); xdr.xdrEncodeFloat(pp1dcv.getVel()); xdr.xdrEncodeByte(pp1dcv.getState()); xdr.endEncoding(); os.write(xdr.getXdrData(), 0, xdr.getXdrLength()); xdr.close(); os.flush(); } catch (IOException e) { throw new PlayerException( "[Position1D] : Couldn't send velocity command: " + e.toString(), e); } catch (OncRpcException e) { throw new PlayerException( "[Position1D] : Error while XDR-encoding position command: " + e.toString(), e); } }
/** * The position1D interface accepts new positions and/or velocities for the robot's motors * (drivers may support position control, speed control or both). <br> * <br> * See the player_position1d_cmd_pos structure from player.h * * @param pos position data [m] or [rad] * @param vel velocity at which to move to the position [m/s] or [rad/s] * @param state motor state (zero is either off or locked, depending on the driver) */ public void setPosition(float pos, float vel, int state) { try { sendHeader(PLAYER_MSGTYPE_CMD, PLAYER_POSITION1D_CMD_POS, 12); XdrBufferEncodingStream xdr = new XdrBufferEncodingStream(12); xdr.beginEncoding(null, 0); xdr.xdrEncodeFloat(pos); xdr.xdrEncodeFloat(vel); xdr.xdrEncodeByte((byte) state); xdr.endEncoding(); os.write(xdr.getXdrData(), 0, xdr.getXdrLength()); xdr.close(); os.flush(); } catch (IOException e) { throw new PlayerException( "[Position1D] : Couldn't send position command: " + e.toString(), e); } catch (OncRpcException e) { throw new PlayerException( "[Position1D] : Error while XDR-encoding position command: " + e.toString(), e); } }