




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
.7附錄三程序源代碼MATLAB程序:functionvarargout=dof4serial(varargin)%DOF4SERIALMATLABcodefordof4serial.figgui_Singleton=1;gui_State=struct('gui_Name',mfilename,...'gui_Singleton',gui_Singleton,...'gui_OpeningFcn',@dof4serial_OpeningFcn,...'gui_OutputFcn',@dof4serial_OutputFcn,...'gui_LayoutFcn',[],...'gui_Callback',[]);ifnargin&&ischar(varargin{1})gui_State.gui_Callback=str2func(varargin{1});endifnargout[varargout{1:nargout}]=gui_mainfcn(gui_State,varargin{:});elsegui_mainfcn(gui_State,varargin{:});endfunctiondof4serial_OpeningFcn(hObject,eventdata,handles,varargin)handles.output=hObject;warning('off');javaFrame=get(hObject,'JavaFrame');%javaFrame.setFigureIcon(javax.swing.ImageIcon('icon.jpg'));%%初始化參數hasData=false;%表征串口是否接收到數據isShow=false;%表征是否正在進行數據顯示,即是否正在執行函數dataDispisStopDisp=false;%表征是否按下了【停止顯示】按鈕isHexDisp=false;%表征是否勾選了【十六進制顯示】isHexSend=false;%表征是否勾選了【十六進制發送】numRec=0;%接收字符計數numSend=0;%發送字符計數strRec='';%已接收的字符串isSeparateSend=false;%表征是否勾選了分開發送的命令num_Send_counts=0;%發送總次數num_Send_counter=0;%發送次數計數%%將上述參數作為應用數據,存入窗口對象內setappdata(hObject,'hasData',hasData);setappdata(hObject,'strRec',strRec);setappdata(hObject,'numRec',numRec);setappdata(hObject,'numSend',numSend);setappdata(hObject,'isShow',isShow);setappdata(hObject,'isStopDisp',isStopDisp);setappdata(hObject,'isHexDisp',isHexDisp);setappdata(hObject,'isHexSend',isHexSend);setappdata(hObject,'isSeparateSend',isSeparateSend);setappdata(hObject,'num_Send_counts',num_Send_counts);setappdata(hObject,'num_Send_counter',num_Send_counter);guidata(hObject,handles);%%%%模型建立clc;clear;%反解和笛卡爾直角坐標deg=pi/180;L(1)=Revolute('d',1.1,'a',0.1,'alpha',-pi/2,...'qlim',[-9090]*deg);L(2)=Revolute('d',0.1,'a',1.04,'alpha',0,...'qlim',[0180]*deg);L(3)=Revolute('d',0,'a',0.97,'alpha',0,...'qlim',[-9090]*deg);L(4)=Revolute('d',0,'a',0,'alpha',0,...'qlim',[-9090]*deg);L(5)=Revolute('d',0,'a',0.01,'alpha',0,...'qlim',[-11]*deg);L(6)=Revolute('d',0,'a',0.8,'alpha',0,...'qlim',[-11]*deg);dof4=SerialLink(L,'name','dof4');qz=[000000];%zeroangles,Lshapedposedof4.plot(qz);functionvarargout=dof4serial_OutputFcn(hObject,eventdata,handles)%varargoutcellarrayforreturningoutputargs(seeVARARGOUT);%hObjecthandletofigure%eventdatareserved-tobedefinedinafutureversionofMATLAB%handlesstructurewithhandlesanduserdata(seeGUIDATA)%Getdefaultcommandlineoutputfromhandlesstructurevarargout{1}=handles.output;functionstep_num_Callback(hObject,eventdata,handles)%%計算步數handles.t=str2double(get(hObject,'String'))guidata(hObject,handles);functioninitialize_Callback(hObject,eventdata,handles)%%關節初始化handles.qz=[000000];handles.input_dof4=zeros(1,4);guidata(hObject,handles);functionx_axes_input_Callback(hObject,eventdata,handles)%%X軸輸入%str=get(hObject,'String');%獲取可編輯文本中的文本handles.input_dof4(1)=str2double(get(hObject,'String'))./100;guidata(hObject,handles);functionx_axes_input_CreateFcn(hObject,eventdata,handles)ifispc&&isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');endfunctiony_axes_input_Callback(hObject,eventdata,handles)%%Y軸輸入handles.input_dof4(2)=str2double(get(hObject,'String'))./100;guidata(hObject,handles);functionz_axes_input_Callback(hObject,eventdata,handles)%%Z軸輸入handles.input_dof4(3)=str2double(get(hObject,'String'))./100;guidata(hObject,handles);functiongama_axes_input_Callback(hObject,eventdata,handles)%%仰角輸入handles.input_dof4(4)=str2double(get(hObject,'String'))*pi*2/360;guidata(hObject,handles);functiongama_axes_input_CreateFcn(hObject,eventdata,~)ifispc&&isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');endfunctioncalculate_jointangle_Callback(hObject,eventdata,handles)%%計算位置和姿態對應的關節角度%反解和笛卡爾直角坐標deg=pi/180;L(1)=Revolute('d',1.1,'a',0.1,'alpha',-pi/2,...'qlim',[-9090]*deg);L(2)=Revolute('d',0.1,'a',1.04,'alpha',0,...'qlim',[-1800]*deg);L(3)=Revolute('d',0,'a',0.97,'alpha',0,...'qlim',[-9090]*deg);L(4)=Revolute('d',0,'a',0,'alpha',0,...'qlim',[-9090]*deg);L(5)=Revolute('d',0,'a',0.01,'alpha',0,...'qlim',[-11]*deg);L(6)=Revolute('d',0,'a',0.8,'alpha',0,...'qlim',[-11]*deg);dof4=SerialLink(L,'name','dof4');qz=[000000];%%輸入參數%handles.input_dof4(1)=str2double(get(handles.x_axes_input,'String'))./100;%handles.input_dof4(2)=str2double(get(handles.y_axes_input,'String'))./100;%handles.input_dof4(3)=str2double(get(handles.z_axes_input,'String'))./100;%handles.input_dof4(4)=str2double(get(handles.gama_axes_input,'String'))./100;input_dof4=handles.input_dof4;input_dof4=double(input_dof4);%%Tr_zaxes=atan2(input_dof4(2),input_dof4(1));%Taim=transl(input(1),input(2),input(3))*trotx(-pi/2)*trotz(Tr_zaxes)*Tv%位置和角度輸入3版,這個是正確的Taim=transl(input_dof4(1),input_dof4(2),input_dof4(3))*trotz(Tr_zaxes)*troty(-input_dof4(4))*trotx(-pi/2)%位置和角度輸入3版,這個是正確的inverse_kinematics=dof4.ikinem(Taim,qz,'qlimits');%最小化反解,theta1=inverse_kinematics(1)theta2=inverse_kinematics(2)theta3=inverse_kinematics(3)theta4=inverse_kinematics(4)theta5=inverse_kinematics(5)theta6=inverse_kinematics(6)thetas=[theta1theta2theta3theta4theta5theta6];%【打開/關閉串口】按鈕的回調函數%打開串口,并初始化相關參數%%若按下【打開串口】按鈕,打開串口ifget(hObject,'value')%%獲取串口的端口名com_n=sprintf('com%d',get(,'value'));%%獲取波特率rates=[30060012002400480096001920038400430005600057600115200];baud_rate=rates(get(handles.rate,'value'));%%獲取校驗位設置switchget(handles.jiaoyan,'value')case1jiaoyan='none';case2jiaoyan='odd';case3jiaoyan='even';end%%創建串口對象scom=serial(com_n);%%配置串口屬性,指定其回調函數set(scom,'BaudRate',baud_rate,'Parity',jiaoyan,...'BytesAvailableFcnCount',10,...'InputBufferSize',8000,...'OutputBufferSize',8000,...'BytesAvailableFcnMode','byte','BytesAvailableFcn',{@bytes,handles},...'TimerPeriod',0.05,'timerfcn',{@dataDisp,handles});%%將串口對象的句柄作為用戶數據,存入窗口對象set(handles.figure1,'UserData',scom);%%嘗試打開串口tryfopen(scom);%打開串口catch%若串口打開失敗,提示“串口不可獲得!”msgbox('串口不可獲得!');set(hObject,'value',0);%彈起本按鈕return;end%%打開串口后,允許串口發送數據,清空接收顯示區,點亮串口狀態指示燈,%%并更改本按鈕文本為“關閉串口”set(handles.period_send,'Enable','on');%啟用【自動發送】按鈕set(handles.manual_send,'Enable','on');%啟用【手動發送】按鈕set(hObject,'String','關閉串口');%設置本按鈕文本為“關閉串口”else%若關閉串口%%停止并刪除定時器t=timerfind;if~isempty(t)stop(t);delete(t);end%%停止并刪除串口對象scoms=instrfind;stopasync(scoms);fclose(scoms);delete(scoms);%%禁用【自動發送】和【手動發送】按鈕,熄滅串口狀態指示燈set(handles.period_send,'Enable','off','value',0);%禁用【自動發送】按鈕set(handles.manual_send,'Enable','off');%禁用【手動發送】按鈕set(hObject,'String','打開串口');%設置本按鈕文本為“關閉串口”endfunctionperiod_send_Callback(hObject,eventdata,handles)%【自動發送】按鈕的Callback回調函數%%若按下【自動發送】按鈕,啟動定時器;否則,停止并刪除定時器%ifget(hObject,'value')t1=0.001*str2double(get(handles.period1,'string'));%獲取定時器周期t=timer('ExecutionMode','fixedrate','Period',t1,'TimerFcn',...{@manual_send_Callback,handles});%{@manual_send});%{@show_animation_Callback,handles})%創建定時器'disp(''HelloWorld!'')');%set(handles.period1,'Enable','off');%禁用設置定時器周期的EditText對象set(handles.sends,'Enable','inactive');%禁用數據發送編輯區start(t);%啟動定時器%else%set(handles.period1,'Enable','on');%啟用設置定時器周期的EditText對象%set(handles.sends,'Enable','on');%啟用數據發送編輯區%t=timerfind;%查找定時器%%stop(t);%停止定時器%delete(t);%刪除定時器%end%Executesonbuttonpressinhex_send.functionjointangle_separate_send(hObject,eventdata,handles)%%關節角度分開發送回調函數%str=get(handles.sends,'string');%%val=get(handles.sends,'UserData');%counts=handles.num_send_counts;%空格鍵的位置%counts=[0counts];%counter=handles.num_send_counter;%temp=str(counts(counter*4+1)+1:counts(counter*4+5));%取得一個位置相應的角度值%handles.num_send_counter=handles.num_send_counter+1;%set(handles.data_sends_buffer,'string',temp);%%guidata(hObject,handles);%data_sends_buffer_Callback(handles.data_sends_buffer,eventdata,handles);%將string轉化為ASC碼str=get(handles.sends,'string');counts=handles.num_send_counts;%空格鍵的位置counts=[0counts];counter=get(handles.send_mode,'UserData');temp=str(counts(counter*4+1)+1:counts(counter*4+5));%取得一個位置相應的角度值counter=counter+1;set(handles.send_mode,'UserData',counter);set(handles.data_sends_buffer,'string',temp);data_sends_buffer_Callback(handles.data_sends_buffer,eventdata,handles);%將string轉化為ASC碼%data_sends_buffer_Callback(hObject,eventdata,handles);functionjointangle_pack_send_Callback(data_sends_buffer,eventdata,handles)%%關節角度打包發送回調函數disp('fu');%Executesonselectionchangeinsend_mode.functionsend_mode_Callback(hObject,eventdata,handles)%%發送方式選擇回調str=get(handles.sends,'string');n=find(str=='');handles.num_send_counts=n;%setappdata(hObject,'num_Send_counts',num_Send_counts);switchget(handles.send_mode,'value')case1%調用分開發送函數set(handles.period_send,'enable','on');%setappdata(hObject,'num_Send_counter',0);handles.isSeparateSend=1;case2%調用打包發送函數set(handles.period_send,'enable','off');handles.isSeparateSend=0;endguidata(hObject,handles);functiondata_sends_buffer_Callback(hObject,eventdata,handles)%數據發送編輯區的Callback回調函數%更新要發送的數據%%獲取數據發送編輯區的字符串str=get(hObject,'string');str=strcat(str,';');%%獲取參數isHexSend的值isHexSend=getappdata(handles.figure1,'isHexSend');if~isHexSend%若為ASCII值形式發送,直接將字符串轉化為對應的數值val=double(str);%val為一維數組,ASC碼形式elseval=double(str);val=dec2hex(val);%轉換為十六進制endset(hObject,'UserData',val);functiondataDisp(obj,event,handles)串口通信及舵機程序:主程序://#include"led.h"#include"delay.h"#include"key.h"#include"sys.h"#include"usart.h"#include"timer.h"#include"led.h"intmain(void){ u16t; u16len; floatge[4],shifenwei[4],baifenwei[4],qianfenwei[4]; floatangle[4]; delay_init(); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); uart_init(9600); TIM3_PWM_Init(19999,71); while(1){ if(USART_RX_STA&0x8000) { len=USART_RX_STA&0x3fff; for(t=0;t
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中介方房屋租賃合同
- 創意手工活動促進幼兒動手能力計劃
- 如何引導團隊實現共同目標計劃
- 科技公司財務經理工作總結與2025年度計劃
- 小學2025年秋季線上教學策略計劃
- 二零二五版事業單位續訂聘用合同書
- 二零二五版擔保合同和保證合同
- 商鋪租賃續簽合同
- 二零二五版租用羽毛球場地合同
- 初中地理課程評估體系計劃
- 汽車半懸掛系統建模與分析(現代控制理論大作業)
- 高分子化學6離子聚合陽離子
- 小學語文人教課標版(部編)三年級下冊習作:我做了一項小實驗
- 畢業設計論文土木工程專業五層單身宿舍樓框架結構設計
- 立式水輪發電機軸線分析及處理
- 石膏板項目可行性分析與經濟測算(范文參考)
- 蹲踞式起跑PPT
- 1云南省初中綜合素質,完整版綜合素質評定表
- HAD 101-07《核電廠廠址查勘》_圖文
- 北京房地產測繪細則
- 抗生素的生物效價測定法(管碟法)
評論
0/150
提交評論