Курсовая работа. 9. Разработка регламента выполнения процесса «Движение библиотеч. Курсовая работа по дисциплине Методы и средства проектирования информационных систем и технологий на тему Разработка регламента выполнения процесса Движение библиотечного фонда
Скачать 337.85 Kb.
|
'Position',[LD-100 BT 20 HT]); % L, B, W, H t2_edit = uicontrol(K_p,'style','edit',... 'String',0,... 'callback',@t2_edit_button_press,... 'Position',[LD-75 BT 30 HT]); % L, B, W, H % %% GUI buttons for Theta 3. BT = 96; % Bottom t3_slider = uicontrol(K_p,'style','slider',... 'Max',135,'Min',-135,'Value',0,... 'SliderStep',[0.05 0.2],... 'callback',@t3_slider_button_press,... 'Position',[LD BT 120 HT]); t3_min = uicontrol(K_p,'style','text',... 'String','-135',... 'Position',[LD-30 BT+1 25 HT-4]); % L, from bottom, W, H t3_max = uicontrol(K_p,'style','text',... 'String','+135',... 'Position',[LD+125 BT+1 25 HT-4]); % L, B, W, H t3_text = uibutton(K_p,'style','text',... 'String','\theta_3',... 'Position',[LD-100 BT 20 HT]); % L, B, W, H t3_edit = uicontrol(K_p,'style','edit',... 'String',0,... 'callback',@t3_edit_button_press,... 'Position',[LD-75 BT 30 HT]); % L, B, W, H % %% GUI buttons for Theta 4. BT = 66; % Bottom t4_slider = uicontrol(K_p,'style','slider',... 'Max',266,'Min',-266,'Value',0,... 'SliderStep',[0.05 0.2],... 'callback',@t4_slider_button_press,... 'Position',[LD BT 120 HT]); t4_min = uicontrol(K_p,'style','text',... 'String','-266',... 'Position',[LD-30 BT+1 25 HT-4]); % L, from bottom, W, H t4_max = uicontrol(K_p,'style','text',... 'String','+266',... 'Position',[LD+125 BT+1 25 HT-4]); % L, B, W, H t4_text = uibutton(K_p,'style','text',... 'String','\theta_4',... 'Position',[LD-100 BT 20 HT]); % L, B, W, H t4_edit = uicontrol(K_p,'style','edit',... 'String',0,... 'callback',@t4_edit_button_press,... 'Position',[LD-75 BT 30 HT]); % L, B, W, H % %% GUI buttons for Theta 5. BT = 36; % Bottom t5_slider = uicontrol(K_p,'style','slider',... 'Max',100,'Min',-100,'Value',0,... 'SliderStep',[0.05 0.2],... 'callback',@t5_slider_button_press,... 'Position',[LD BT 120 HT]); t5_min = uicontrol(K_p,'style','text',... 'String','-100',... 'Position',[LD-30 BT+1 25 HT-4]); % L, from bottom, W, H t5_max = uicontrol(K_p,'style','text',... 'String','+100',... 'Position',[LD+125 BT+1 25 HT-4]); % L, B, W, H t5_text = uibutton(K_p,'style','text',... 'String','\theta_5',... 'Position',[LD-100 BT 20 HT]); % L, B, W, H t5_edit = uicontrol(K_p,'style','edit',... 'String',0,... 'callback',@t5_edit_button_press,... 'Position',[LD-75 BT 30 HT]); % L, B, W, H % %% GUI buttons for Theta 6. BT = 6; % Bottom t6_slider = uicontrol(K_p,'style','slider',... 'Max',266,'Min',-266,'Value',0,... 'SliderStep',[0.05 0.2],... 'callback',@t6_slider_button_press,... 'Position',[LD BT 120 HT]); t6_min = uicontrol(K_p,'style','text',... 'String','-266',... 'Position',[LD-30 BT+1 25 HT-4]); % L, from bottom, W, H t6_max = uicontrol(K_p,'style','text',... 'String','+266',... 'Position',[LD+125 BT+1 25 HT-4]); % L, B, W, H t6_text = uibutton(K_p,'style','text',... 'String','\theta_6',... 'Position',[LD-100 BT 20 HT]); % L, B, W, H t6_edit = uicontrol(K_p,'style','edit',... 'String',0,... 'callback',@t6_edit_button_press,... 'Position',[LD-75 BT 30 HT]); % L, B, W, H % %% Slider for Theta 1 motion. % function t1_slider_button_press(h,dummy) slider_value = round(get(h,'Value')); set(t1_edit,'string',slider_value); T_Old = getappdata(0,'ThetaOld'); t2old = T_Old(2); t3old = T_Old(3); t4old = T_Old(4); t5old = T_Old(5); t6old = T_Old(6); pumaANI(slider_value+t1_home,t2old,t3old,t4old,t5old,t6old,10,'n') end % %% Slider for Theta 2 motion. % function t2_slider_button_press(h,dummy) slider_value = round(get(h,'Value')); set(t2_edit,'string',slider_value); T_Old = getappdata(0,'ThetaOld'); t1old = T_Old(1); t3old = T_Old(3); t4old = T_Old(4); t5old = T_Old(5); t6old = T_Old(6); pumaANI(t1old,slider_value+t2_home,t3old,t4old,t5old,t6old,10,'n') end % %% Slider for Theta 3 motion. function t3_slider_button_press(h,dummy) slider_value = round(get(h,'Value')); set(t3_edit,'string',slider_value); T_Old = getappdata(0,'ThetaOld'); t1old = T_Old(1); t2old = T_Old(2); t4old = T_Old(4); t5old = T_Old(5); t6old = T_Old(6); pumaANI(t1old,t2old,slider_value+t3_home,t4old,t5old,t6old,10,'n') end % %% Slider for Theta 4 motion. function t4_slider_button_press(h,dummy) slider_value = round(get(h,'Value')); set(t4_edit,'string',slider_value); T_Old = getappdata(0,'ThetaOld'); t1old = T_Old(1); t2old = T_Old(2); t3old = T_Old(3); t5old = T_Old(5); t6old = T_Old(6); pumaANI(t1old,t2old,t3old,slider_value,t5old,t6old,10,'n') end % %% Slider for Theta 5 motion. function t5_slider_button_press(h,dummy) slider_value = round(get(h,'Value')); set(t5_edit,'string',slider_value); T_Old = getappdata(0,'ThetaOld'); t1old = T_Old(1); t2old = T_Old(2); t3old = T_Old(3); t4old = T_Old(4); t6old = T_Old(6); pumaANI(t1old,t2old,t3old,t4old,slider_value,t6old,10,'n') end % %% Slider for Theta 6 motion. function t6_slider_button_press(h,dummy) slider_value = round(get(h,'Value')); set(t6_edit,'string',slider_value); T_Old = getappdata(0,'ThetaOld'); t1old = T_Old(1); t2old = T_Old(2); t3old = T_Old(3); t4old = T_Old(4); t5old = T_Old(5); pumaANI(t1old,t2old,t3old,t4old,t5old,slider_value,10,'n') end % %% Edit box for Theta 1 motion. % function t1_edit_button_press(h,dummy) user_entry = check_edit(h,-160,160,0,t1_edit); set(t1_slider,'Value',user_entry); % slider = text box. T_Old = getappdata(0,'ThetaOld'); % Current pose % t2old = T_Old(2); t3old = T_Old(3); t4old = T_Old(4); t5old = T_Old(5); t6old = T_Old(6); % pumaANI(user_entry+t1_home,t2old,t3old,t4old,t5old,t6old,10,'n') end % %% Edit box for Theta 2 motion. % function t2_edit_button_press(h,dummy) user_entry = check_edit(h,-110,110,0,t2_edit); set(t2_slider,'Value',user_entry); % slider = text box. T_Old = getappdata(0,'ThetaOld'); % Current pose % t1old = T_Old(1); t3old = T_Old(3); t4old = T_Old(4); t5old = T_Old(5); t6old = T_Old(6); % pumaANI(t1old,user_entry+t2_home,t3old,t4old,t5old,t6old,10,'n') end %% Edit box for Theta 3 motion. % function t3_edit_button_press(h,dummy) user_entry = check_edit(h,-135,135,0,t3_edit); set(t3_slider,'Value',user_entry); % slider = text box. T_Old = getappdata(0,'ThetaOld'); % Current pose % t1old = T_Old(1); t2old = T_Old(2); t4old = T_Old(4); t5old = T_Old(5); t6old = T_Old(6); % pumaANI(t1old,t2old,user_entry+t3_home,t4old,t5old,t6old,10,'n') end %% %% Edit box for Theta 4 motion. % function t4_edit_button_press(h,dummy) user_entry = check_edit(h,-266,266,0,t4_edit); set(t4_slider,'Value',user_entry); % slider = text box. T_Old = getappdata(0,'ThetaOld'); % Current pose % t1old = T_Old(1); t2old = T_Old(2); t3old = T_Old(3); t5old = T_Old(5); t6old = T_Old(6); % pumaANI(t1old,t2old,t3old,user_entry,t5old,t6old,10,'n') end %% Edit box for Theta 5 motion. % function t5_edit_button_press(h,dummy) user_entry = check_edit(h,-100,100,0,t5_edit); set(t5_slider,'Value',user_entry); % slider = text box. T_Old = getappdata(0,'ThetaOld'); % Current pose % t1old = T_Old(1); t2old = T_Old(2); t3old = T_Old(3); t4old = T_Old(4); t6old = T_Old(6); % pumaANI(t1old,t2old,t3old,t4old,user_entry,t6old,10,'n') end %% %% Edit box for Theta 6 motion. % function t6_edit_button_press(h,dummy) user_entry = check_edit(h,-266,266,0,t6_edit); set(t6_slider,'Value',user_entry); % slider = text box. T_Old = getappdata(0,'ThetaOld'); % Current pose % t1old = T_Old(1); t2old = T_Old(2); t3old = T_Old(3); t4old = T_Old(4); t5old = T_Old(5); % pumaANI(t1old,t2old,t3old,t4old,t5old,user_entry,10,'n') end %% function user_entry = check_edit(h,min_v,max_v,default,h_edit) % This function will check the value typed in the text input box % against min and max values, and correct errors. % % h: handle of gui % min_v min value to check % max_v max value to check % default is the default value if user enters non number % h_edit is the edit value to update. % user_entry = str2double(get(h,'string')); if isnan(user_entry) errordlg(['You must enter a numeric value, defaulting to ',num2str(default),'.'],'Bad Input','modal') set(h_edit,'string',default); user_entry = default; end % if user_entry < min_v errordlg(['Minimum limit is ',num2str(min_v),' degrees, using ',num2str(min_v),'.'],'Bad Input','modal') user_entry = min_v; set(h_edit,'string',user_entry); end if user_entry > max_v errordlg(['Maximum limit is ',num2str(max_v),' degrees, using ',num2str(max_v),'.'],'Bad Input','modal') user_entry = max_v; set(h_edit,'string',user_entry); end end % %% Demo button's callback function demo_button_press(h,dummy) % % disp('pushed demo bottom'); % R = 500; % x = 1000; n = 2; % demo ani steps num = 30; % home to start, and end to home ani steps % j = 1; % M = 1000; for t = 0:.1:7*pi Px = 30*t*cos(t); Py = 1200-300*t*(t)/(50*pi); Pz = 30*t*sin(t); [theta1,theta2,theta3,theta4,theta5,theta6] = PumaIK(Px,Py,Pz); if t==0 %move to start of demo pumaANI(theta1,theta2,theta3-180,0,0,0,num,'n') end % Theta 4, 5 & 6 are zero due to plotting at wrist origen. pumaANI(theta1,theta2,theta3-180,0,0,0,n,'y') set(t1_edit,'string',round(theta1)); % Update slider and text. set(t1_slider,'Value',round(theta1)); set(t2_edit,'string',round(theta2)); set(t2_slider,'Value',round(theta2)); set(t3_edit,'string',round(theta3-180)); set(t3_slider,'Value',round(theta3-180)); end gohome % pumaANI(90,-90,-90,0,0,0,num,'n') end % % %% function home_button_press(h,dummy) %disp('pushed home bottom'); gohome end % %% function clr_trail_button_press(h,dummy) %disp('pushed clear trail bottom'); handles = getappdata(0,'patch_h'); % Tr = handles(9); % setappdata(0,'xtrail',0); % used for trail tracking. setappdata(0,'ytrail',0); % used for trail tracking. setappdata(0,'ztrail',0); % used for trail tracking. % set(Tr,'xdata',0,'ydata',0,'zdata',0); end % % function rnd_demo_button_press(h, dummy) %disp('pushed random demo bottom'); % a = 10; b = 50; x = a + (b-a) * rand(5) % Angle Range Default Name % Theta 1: 320 (-160 to 160) 90 Waist Joint % Theta 2: 220 (-110 to 110) -90 Shoulder Joint % Theta 3: 270 (-135 to 135) -90 Elbow Joint % Theta 4: 532 (-266 to 266) 0 Wrist Roll % Theta 5: 200 (-100 to 100) 0 Wrist Bend % Theta 6: 532 (-266 to 266) 0 Wrist Swival t1_home = 90; % offsets to define the "home" postition as UP. t2_home = -90; t3_home = -90; theta1 = -160 + 320*rand(1); % offset for home theta2 = -110 + 220*rand(1); % in the UP pos. theta3 = -135 + 270*rand(1); theta4 = -266 + 532*rand(1); theta5 = -100 + 200*rand(1); theta6 = -266 + 532*rand(1); n = 50; pumaANI(theta1+t1_home,theta2+t2_home,theta3+t3_home,theta4,theta5,theta6,n,'y') set(t1_edit,'string',round(theta1)); % Update slider and text. set(t1_slider,'Value',round(theta1)); set(t2_edit,'string',round(theta2)); set(t2_slider,'Value',round(theta2)); set(t3_edit,'string',round(theta3)); set(t3_slider,'Value',round(theta3)); set(t4_edit,'string',round(theta4)); set(t4_slider,'Value',round(theta4)); set(t5_edit,'string',round(theta5)); set(t5_slider,'Value',round(theta5)); set(t6_edit,'string',round(theta6)); set(t6_slider,'Value',round(theta6)); end %% %Here are the functions used for this robot example: % %% % When called this function will simply initialize a plot of the Puma 762 % robot by plotting it in it's home orientation and setting the current % angles accordingly. function gohome() pumaANI(90,-90,-90,0,0,0,20,'n') % show it animate home %PumaPOS(90,-90,-90,0,0,0) %drive it home, no animate. set(t1_edit,'string',0); set(t1_slider,'Value',0); %At the home position, so all set(t2_edit,'string',0); %sliders and input boxes = 0. set(t2_slider,'Value',0); set(t3_edit,'string',0); set(t3_slider,'Value',0); set(t4_edit,'string',0); set(t4_slider,'Value',0); set(t5_edit,'string',0); set(t5_slider,'Value',0); set(t6_edit,'string',0); set(t6_slider,'Value',0); setappdata(0,'ThetaOld',[90,-90,-90,0,0,0]); end %% % This function will load the 3D CAD data. % function loaddata % Loads all the link data from file linksdata.mat. % This data comes from a Pro/E 3D CAD model and was made with cad2matdemo.m % from the file exchange. All link data manually stored in linksdata.mat [linkdata]=load('linksdata.mat','s1','s2', 's3','s4','s5','s6','s7','A1'); %Place the robot link 'data' in a storage area setappdata(0,'Link1_data',linkdata.s1); setappdata(0,'Link2_data',linkdata.s2); setappdata(0,'Link3_data',linkdata.s3); setappdata(0,'Link4_data',linkdata.s4); setappdata(0,'Link5_data',linkdata.s5); setappdata(0,'Link6_data',linkdata.s6); setappdata(0,'Link7_data',linkdata.s7); setappdata(0,'Area_data',linkdata.A1); end % %% % Use forward kinematics to place the robot in a specified configuration. % function PumaPOS(theta1,theta2,theta3,theta4,theta5,theta6) s1 = getappdata(0,'Link1_data'); s2 = getappdata(0,'Link2_data'); s3 = getappdata(0,'Link3_data'); s4 = getappdata(0,'Link4_data'); s5 = getappdata(0,'Link5_data'); s6 = getappdata(0,'Link6_data'); s7 = getappdata(0,'Link7_data'); A1 = getappdata(0,'Area_data'); % a2 = 650; a3 = 0; d3 = 190; d4 = 600; Px = 5000; Py = 5000; Pz = 5000; t1 = theta1; t2 = theta2; t3 = theta3 %-180; t4 = theta4; t5 = theta5; t6 = theta6; % % Forward Kinematics T_01 = tmat(0, 0, 0, t1); T_12 = tmat(-90, 0, 0, t2); T_23 = tmat(0, a2, d3, t3); T_34 = tmat(-90, a3, d4, t4); T_45 = tmat(90, 0, 0, t5); T_56 = tmat(-90, 0, 0, t6); %T_01 = T_01; T_02 = T_01*T_12; T_03 = T_02*T_23; T_04 = T_03*T_34; T_05 = T_04*T_45; T_06 = T_05*T_56; % Link1 = s1.V1; Link2 = (T_01*s2.V2')'; Link3 = (T_02*s3.V3')'; Link4 = (T_03*s4.V4')'; Link5 = (T_04*s5.V5')'; Link6 = (T_05*s6.V6')'; Link7 = (T_06*s7.V7')'; handles = getappdata(0,'patch_h'); % L1 = handles(1); L2 = handles(2); L3 = handles(3); L4 = handles(4); L5 = handles(5); L6 = handles(6); L7 = handles(7); % set(L1,'vertices',Link1(:,1:3),'facec', [0.717,0.116,0.123]); |