private boolean checkRawSensorData() {
        if (rawSensorData.size() < sensorDataLength) {
//            System.out.println("Check Failed: too short");
            return false;
        }
        if (rawSensorData.get(0) != (byte) SENSOR_STREAM_HEADER) {
//            System.out.println("Check Failed: not header");
            return false;
        }
        if (rawSensorData.get(1) != sensorDataLength - 3) {
//            System.out.println("Check Failed: n-bytes incorrect");
            return false;
        }
        for (int j = 0; j < sensorDataLength; j++) {
//            System.out.println("byte: " + j + " value: " + rawSensorData.get(j));
        }
        int i = 2; // index of packet ID 1
        for (SensorPacket s : sensorPacketsRequested) {
            if (rawSensorData.get(i) != s.id()) {
//                System.out.println("Check Failed: packet id for " + s.id + "incorrect");
                return false;
            }
            i += s.length() + 1;
        }
        int checksum = 0;
        /* Desipte what it says in the Roomba documentation, the checksum calculated
         * by the Roomba actually includes the header byte (0x13).
         */
        for (int j = 0; j < sensorDataLength; j++) {
            checksum += (rawSensorData.get(j) & 0xff);
        }
        if ((checksum & 0xff) != 0) {
//            System.out.println("Check Failed: incorrect checksum computed " + checksum);
            return false;
        }
        return true;
    }