function build_sim_vision(varargin) %BUILD_TURTLE_WORLDMODEL Build worldmodel.mdl. % % BUILD_TURTLE_WORLDMODEL() builds the worldmodel Simulink scheme to a % generic executable for all robots (no robot id required). % % To build the vision_turtle simulink scheme for specific turtles, % include an array with the turtle numbers in the function call, e.g. % BUILD_SIM_VISION([1 3 4]). %% init curdir=pwd; addpathrobocup; %kill running application !sudo killall appman_sim % retrieve list of turtles and desired field turtle_select=[]; desfield=''; for i1=1:nargin, if isnumeric(varargin{i1}), turtle_select=[turtle_select,varargin{i1}]; else cd /home/robocup/svn/trunk/src/Turtle2/Global_par fieldnamelist=getfieldnamelist; cd(curdir); for i2=1:length(fieldnamelist), if strcmp(fieldnamelist{i2},varargin{i1}), desfield=varargin{i1}; break; end end if isempty(desfield), disp('You requested a non-existing field! Building for default field instead.'); end end end %set field size deffield = get_global_par('DEFAULTFIELDSELECTION'); if isempty(desfield), desfield = get_global_par('DEFAULTSIMFIELD'); end if ~strcmp(deffield,desfield), disp(['setting ',desfield,' field size']); cd /home/robocup/svn/trunk/src/Turtle2/Global_par selectfield(-1,['global_par_',desfield,'.h']) end %remove old executable and build directories cd /home/robocup/svn/trunk/src/Turtle2/Simulator try warning('off','MATLAB:DELETE:FileNotFound'); delete('vision_sim'); warning('on','MATLAB:DELETE:FileNotFound'); rmdir('slprj','s'); rmdir('vision_sim_*','s'); disp('old executable and build directories have been removed') catch end %define tunable parameters set_tunabledata_vision(); curdirrobocup = cd; cd('/home/robocup/svn/trunk/src/Turtle2/Vision'); init_vision(); cd(curdirrobocup); %create copy of vision_sim.mdl, rename to vision_sim_temporary_copy.mdl try warning('off','MATLAB:DELETE:FileNotFound'); delete('vision_sim_temporary_copy.mdl'); warning('on','MATLAB:DELETE:FileNotFound'); catch end !cp vision_sim.mdl vision_sim_temporary_copy.mdl %% set rtw parameters % standard rtw configurations load_system('vision_sim') cs = getActiveConfigSet('vision_sim'); % set the rtw custom code properties set_param(cs,'CustomInclude',['./include ./src ../Libs/multicast ../Libs/ipcomm2 ../Targets/wintarget ../Global_par ../Vision/src',buspath]) set_param(cs,'CustomSource','') set_param(cs,'CustomLibrary','/usr/lib/librtdb.so /usr/lib/libpthread.so /usr/lib/libipcomm2_client.so /usr/lib/libipcomm2_server.so /usr/lib/libdiag.so') % change the Simulink target file and make options switchTarget(cs,'wmtarget.tlc',[]); set_param(cs,'TemplateMakefile','wm_unix.tmf') set_param(cs,'MakeCommand',['make_rtw OPT_OPTS="-g -O2 -W" CC="ccache gcc" OPTS="-DTIMER_ID=2 -D_GNU_SOURCE"']) % set external mode properties set_param(cs,'ExtMode','off') % save and close the system save_system('vision_sim'); close_system('vision_sim'); %% build executable try rtwbuild('vision_sim') %copy executable if nargin == 0 %copy executable !cp vision_sim bin/vision_sim1 !cp vision_sim bin/vision_sim2 !cp vision_sim bin/vision_sim3 !cp vision_sim bin/vision_sim4 !cp vision_sim bin/vision_sim5 !cp vision_sim bin/vision_sim6 else for i = 1:length(turtle_select) eval(['!cp vision_sim bin/vision_sim' num2str(turtle_select(i))]) end end %delete original delete('vision_sim'); cleanupvisionsim(deffield,desfield); catch err = lasterr; cleanupvisionsim(deffield,desfield); error(err); end cd(curdir); %% cleanup vision sim after building function cleanupvisionsim(deffield,desfield) %replace copy of vision_sim.mdl !cp vision_sim_temporary_copy.mdl vision_sim.mdl delete('vision_sim_temporary_copy.mdl'); %remove build directories try rmdir('slprj','s'); rmdir('vision_sim_*','s'); disp('build directories have been removed') catch end %set original field parameters if ~strcmp(deffield,desfield), cd /home/robocup/svn/trunk/src/Turtle2/Global_par selectfield(-1,['global_par_',deffield,'.h']); end