The Matlab toolbox used for this project can be found here.

The iRobot Create Open Interface Manual can be found here.

The iterative learning process code is found below, in Matlab:

clear; 
clc; 
[serPort] = RoombaInit(4); 
robostates = 0; 
rightWheel = .2; 
leftWheel = .2;
sequence = []; 
while 1
    switch robostates 
        case 0
            [~] = DistanceSensorRoomba(serPort); 
            [BR, BL, WR, WL, WC,BF] = BumpsWheelDropsSensorsRoomba(serPort);
            while BR~=1 && BL~=1 && BF~=1
                setDriveWheelsCreate(serPort, rightWheel, leftWheel); 
                [BR, BL, WR, WL, WC,BF] = BumpsWheelDropsSensorsRoomba(serPort);
            end
            setDriveWheelsCreate(serPort,0,0); 
            newdistance = DistanceSensorRoomba(serPort); 
            if newdistance <= 0.06
                sequence(end)=90; 
            else
                sequence = [sequence (newdistance-.05) -90];
            end
            robostates = 2;

        case 1
            for ind = 1:length(sequence)
                if abs(sequence(ind))==90
                    turnAngle(serPort, .05, sequence(ind)); 
                else
                   travelDist(serPort, 0.2, sequence(ind)); 
                end
            end
            robostates = 0; 

        case 2
            [bA bP] = ButtonsSensorRoomba(serPort); 
            while 1
                if(bP==1)
                    break; 
                end
                [bA bP] = ButtonsSensorRoomba(serPort) ;
            end
            robostates = 1;
    end
end