function create_3d_random_walk(num_moves, v_range, dp, theta, prefix,limits)
    %% Create a random path for G-code testing
    % This version of the code produces random lengths, and random 3d bends. Desired velocity is held at
    if ~exist('limits','var')
        limits=[-10,10,-10,10,-5,5]
    end


    tag = datestr(now(),"YYYY-MM-DD_HH-MM");
    fsuf=sprintf('%dsteps_%gin-%gin_%gips_%gdeg_max_angle_%s.ngc',num_moves,dp(1),dp(end),v_range(end),max(theta)*180/pi,tag);
    fid=fopen(sprintf('../nc_files/cv_random_walk_%s_%s',prefix,fsuf),'w');
    %Initial state
    header= 'G61 G90\n G0 X-.1 Y0 Z0 F20\n G1 X0 Y0 Z0\nG64\n';
    fprintf(fid, header);
    move=create_3d_line(v_range, dp, theta,[],limits);
    for k=1:num_moves
        move_prev=move;
        move=create_3d_line(v_range, dp, theta, move_prev, limits);
        fprintf(fid,'G1 X%f Y%f Z%f F%f\n', move_prev.P2(1), move_prev.P2(2), move.P2(3), move_prev.v_req*60);
    end
    fprintf(fid,'M30\n');
    fclose(fid);

end
