




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
.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'));%%初始化參數(shù)hasData=false;%表征串口是否接收到數(shù)據(jù)isShow=false;%表征是否正在進(jìn)行數(shù)據(jù)顯示,即是否正在執(zhí)行函數(shù)dataDispisStopDisp=false;%表征是否按下了【停止顯示】按鈕isHexDisp=false;%表征是否勾選了【十六進(jìn)制顯示】isHexSend=false;%表征是否勾選了【十六進(jìn)制發(fā)送】numRec=0;%接收字符計(jì)數(shù)numSend=0;%發(fā)送字符計(jì)數(shù)strRec='';%已接收的字符串isSeparateSend=false;%表征是否勾選了分開發(fā)送的命令num_Send_counts=0;%發(fā)送總次數(shù)num_Send_counter=0;%發(fā)送次數(shù)計(jì)數(shù)%%將上述參數(shù)作為應(yīng)用數(shù)據(jù),存入窗口對(duì)象內(nèi)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;%反解和笛卡爾直角坐標(biāo)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)%%計(jì)算步數(shù)handles.t=str2double(get(hObject,'String'))guidata(hObject,handles);functioninitialize_Callback(hObject,eventdata,handles)%%關(guān)節(jié)初始化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)%%計(jì)算位置和姿態(tài)對(duì)應(yīng)的關(guān)節(jié)角度%反解和笛卡爾直角坐標(biāo)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];%%輸入?yún)?shù)%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版,這個(gè)是正確的Taim=transl(input_dof4(1),input_dof4(2),input_dof4(3))*trotz(Tr_zaxes)*troty(-input_dof4(4))*trotx(-pi/2)%位置和角度輸入3版,這個(gè)是正確的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];%【打開/關(guān)閉串口】按鈕的回調(diào)函數(shù)%打開串口,并初始化相關(guān)參數(shù)%%若按下【打開串口】按鈕,打開串口ifget(hObject,'value')%%獲取串口的端口名com_n=sprintf('com%d',get(,'value'));%%獲取波特率rates=[30060012002400480096001920038400430005600057600115200];baud_rate=rates(get(handles.rate,'value'));%%獲取校驗(yàn)位設(shè)置switchget(handles.jiaoyan,'value')case1jiaoyan='none';case2jiaoyan='odd';case3jiaoyan='even';end%%創(chuàng)建串口對(duì)象scom=serial(com_n);%%配置串口屬性,指定其回調(diào)函數(shù)set(scom,'BaudRate',baud_rate,'Parity',jiaoyan,...'BytesAvailableFcnCount',10,...'InputBufferSize',8000,...'OutputBufferSize',8000,...'BytesAvailableFcnMode','byte','BytesAvailableFcn',{@bytes,handles},...'TimerPeriod',0.05,'timerfcn',{@dataDisp,handles});%%將串口對(duì)象的句柄作為用戶數(shù)據(jù),存入窗口對(duì)象set(handles.figure1,'UserData',scom);%%嘗試打開串口tryfopen(scom);%打開串口catch%若串口打開失敗,提示“串口不可獲得!”msgbox('串口不可獲得!');set(hObject,'value',0);%彈起本按鈕return;end%%打開串口后,允許串口發(fā)送數(shù)據(jù),清空接收顯示區(qū),點(diǎn)亮串口狀態(tài)指示燈,%%并更改本按鈕文本為“關(guān)閉串口”set(handles.period_send,'Enable','on');%啟用【自動(dòng)發(fā)送】按鈕set(handles.manual_send,'Enable','on');%啟用【手動(dòng)發(fā)送】按鈕set(hObject,'String','關(guān)閉串口');%設(shè)置本按鈕文本為“關(guān)閉串口”else%若關(guān)閉串口%%停止并刪除定時(shí)器t=timerfind;if~isempty(t)stop(t);delete(t);end%%停止并刪除串口對(duì)象scoms=instrfind;stopasync(scoms);fclose(scoms);delete(scoms);%%禁用【自動(dòng)發(fā)送】和【手動(dòng)發(fā)送】按鈕,熄滅串口狀態(tài)指示燈set(handles.period_send,'Enable','off','value',0);%禁用【自動(dòng)發(fā)送】按鈕set(handles.manual_send,'Enable','off');%禁用【手動(dòng)發(fā)送】按鈕set(hObject,'String','打開串口');%設(shè)置本按鈕文本為“關(guān)閉串口”endfunctionperiod_send_Callback(hObject,eventdata,handles)%【自動(dòng)發(fā)送】按鈕的Callback回調(diào)函數(shù)%%若按下【自動(dòng)發(fā)送】按鈕,啟動(dòng)定時(shí)器;否則,停止并刪除定時(shí)器%ifget(hObject,'value')t1=0.001*str2double(get(handles.period1,'string'));%獲取定時(shí)器周期t=timer('ExecutionMode','fixedrate','Period',t1,'TimerFcn',...{@manual_send_Callback,handles});%{@manual_send});%{@show_animation_Callback,handles})%創(chuàng)建定時(shí)器'disp(''HelloWorld!'')');%set(handles.period1,'Enable','off');%禁用設(shè)置定時(shí)器周期的EditText對(duì)象set(handles.sends,'Enable','inactive');%禁用數(shù)據(jù)發(fā)送編輯區(qū)start(t);%啟動(dòng)定時(shí)器%else%set(handles.period1,'Enable','on');%啟用設(shè)置定時(shí)器周期的EditText對(duì)象%set(handles.sends,'Enable','on');%啟用數(shù)據(jù)發(fā)送編輯區(qū)%t=timerfind;%查找定時(shí)器%%stop(t);%停止定時(shí)器%delete(t);%刪除定時(shí)器%end%Executesonbuttonpressinhex_send.functionjointangle_separate_send(hObject,eventdata,handles)%%關(guān)節(jié)角度分開發(fā)送回調(diào)函數(shù)%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));%取得一個(gè)位置相應(yīng)的角度值%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轉(zhuǎn)化為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));%取得一個(gè)位置相應(yīng)的角度值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轉(zhuǎn)化為ASC碼%data_sends_buffer_Callback(hObject,eventdata,handles);functionjointangle_pack_send_Callback(data_sends_buffer,eventdata,handles)%%關(guān)節(jié)角度打包發(fā)送回調(diào)函數(shù)disp('fu');%Executesonselectionchangeinsend_mode.functionsend_mode_Callback(hObject,eventdata,handles)%%發(fā)送方式選擇回調(diào)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%調(diào)用分開發(fā)送函數(shù)set(handles.period_send,'enable','on');%setappdata(hObject,'num_Send_counter',0);handles.isSeparateSend=1;case2%調(diào)用打包發(fā)送函數(shù)set(handles.period_send,'enable','off');handles.isSeparateSend=0;endguidata(hObject,handles);functiondata_sends_buffer_Callback(hObject,eventdata,handles)%數(shù)據(jù)發(fā)送編輯區(qū)的Callback回調(diào)函數(shù)%更新要發(fā)送的數(shù)據(jù)%%獲取數(shù)據(jù)發(fā)送編輯區(qū)的字符串str=get(hObject,'string');str=strcat(str,';');%%獲取參數(shù)isHexSend的值isHexSend=getappdata(handles.figure1,'isHexSend');if~isHexSend%若為ASCII值形式發(fā)送,直接將字符串轉(zhuǎn)化為對(duì)應(yīng)的數(shù)值val=double(str);%val為一維數(shù)組,ASC碼形式elseval=double(str);val=dec2hex(val);%轉(zhuǎn)換為十六進(jìn)制endset(hObject,'UserData',val);functiondataDisp(obj,event,handles)串口通信及舵機(jī)程序:主程序://#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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 運(yùn)輸合同的概念與特征
- 室外施工工程合同
- 醫(yī)療器械研發(fā)與采購供應(yīng)合同
- 五星級(jí)酒店廚師雇傭合同
- 通訊設(shè)備研發(fā)及銷售合作合同
- 倉儲(chǔ)場地租賃合同
- 工程施工勞務(wù)承包合同
- 房屋墻體改梁加固合同
- 家庭裝修監(jiān)理合同
- 融資租賃的保證合同
- 主題二 小錢幣大歷史-2024年中考?xì)v史專項(xiàng)復(fù)習(xí)
- 2024年知識(shí)競賽-中小學(xué)財(cái)務(wù)管理知識(shí)筆試參考題庫含答案
- GB/T 43747-2024密封膠粘接性的評(píng)價(jià)膠條剝離法
- 2023年4月自考00318公共政策試題及答案含解析
- 小班數(shù)學(xué)《學(xué)習(xí)3以內(nèi)的數(shù)》課件
- 美國睡眠醫(yī)學(xué)會(huì)睡眠及其相關(guān)事件判讀手冊(cè)規(guī)則、術(shù)語和技術(shù)規(guī)
- 國外保護(hù)非物質(zhì)文化遺產(chǎn)的現(xiàn)狀
- 李大釗簡介完
- 【班級(jí)管理表格】學(xué)生檢討反思承諾書
- GSV2.0反恐安全管理手冊(cè)
- 應(yīng)用文寫作說課稿 終稿
評(píng)論
0/150
提交評(píng)論