function [ xnew G] = motion_diff( x, u )
%MOTION_DIFF Compute differential drive motion model

l = 0.1; % distance between both wheels

theta = x(3,:,:);
sl = u(1);
sr = u(2);

r = l*(sl + sr)/(2*(sr-sl));

G = eye(3);
if r == Inf
    % Special case: Robot is driving straight:
    d = (sl+sr)/2;
    xnew = x + [d*cos(theta); ...
                d*sin(theta); ...
                zeros(1,1,size(x,3))];
else
	dTh = repmat((sr - sl)/l,1,1,size(x,3));
	xnew = x + [r*sin(theta + dTh) - r*sin(theta); ...
               -r*cos(theta + dTh) + r*cos(theta); ...
                dTh];
            
    if (size(x,3) == 1)
        G = [1, 0, r*(cos(theta + dTh) - cos(theta)); ...
            0, 1, r*(sin(theta + dTh) - sin(theta)); ...
            0, 0, 1];
    end
end % if

end

