毕业设计(论文)-履带车式机械臂结构及智能系统设计_第1页
毕业设计(论文)-履带车式机械臂结构及智能系统设计_第2页
毕业设计(论文)-履带车式机械臂结构及智能系统设计_第3页
毕业设计(论文)-履带车式机械臂结构及智能系统设计_第4页
毕业设计(论文)-履带车式机械臂结构及智能系统设计_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

.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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论