工业机器人实验报告02机械41示教离线编程.docx
《工业机器人实验报告02机械41示教离线编程.docx》由会员分享,可在线阅读,更多相关《工业机器人实验报告02机械41示教离线编程.docx(19页珍藏版)》请在冰豆网上搜索。
工业机器人实验报告02机械41示教离线编程
工业机器人实验报告
——机器人示教与离线编程实验
班级:
机械41
组别:
第一组
组员:
陈豪2140101003
尹鑫鑫2140101023
武文家2140101020
指导老师:
桂亮
西安交通大学
2017年5月3日
西安交通大学实验报告
第页(共页)
课程:
工业机器人实验日期:
2017年5月3日
专业班号机械41组别第一组交报告日期:
年月日
姓名陈豪学号2140101003报告退发:
(订正、重做)
姓名尹鑫鑫学号2140101023教师审批签字:
姓名武文家学号2140101020
实验一机器人示教实验
一、实验目的
1.了解机器人示教与再现的原理;
2.掌握机器人示教和再现过程的操作方法。
二、实验设备
1.模块化机器人一台;
2.模块化机器人控制柜一台。
三、实验原理
机器人的示教-再现过程是分为四个步骤:
示教、记忆、再现、操作。
示教,就是操作者把规定的目标动作(包括每个运动部件,每个运动轴的动作)一步一步的教给机器人。
记忆,即是机器人将操作者所示教的各个点的动作顺序信息、动作速度信息、位姿信息等记录在存储器中。
再现,便是将示教信息再次浮现,即根据需要,将存储器所存储的信息读出,向执行机构发出具体的指令。
操作,指机器人以再现信号作为输入指令,使执行机构重复示教过程规定的各种动作。
示教的方法有很多种,有主从式,编程式,示教盒式等多种。
四、实验步骤
1.接通控制柜电源,按下“启动”按钮;
2.启动计算机,运行机器人软件;
3.点击主界面“模块组合方式”按钮,按照实际情况选择已组合的模块设备,并点击“确定”按钮;
4.点击主界面“机器人复位”按钮,机器人进行回零运动。
观察机器人的运动,所有模块全部运动完成后,机器人处于零点位置;
5.点击“示教”按钮,出现界面;
6.在“速度”中选择示教速度(由左到右从低速到高速1.5度/秒、6度/秒、12度/秒、24度/秒共四个挡,默认是6度/秒,一般情况下建议选择12度/秒;在“模块运动”中有每个关节的正反向运动,持续按下相应模块的按钮,机器人的模块会按照指令运动,松开相应的按钮,机器人的模块会停止运动;
7.在机器人“模块状态”和“当前坐标”中,可以实时显示机器人的运动状态,当每运动到一个点,必须按下“记录”按钮,在再现时机器人将忽略中间过程而只再现各个点,在“示教列表”中会记录并显示机器人相应模块运动的信息,继续运动其他模块,直到整个示教程序完成;
8.点击“保存”按钮,示教完的信息以(*.RBT6)格式保存在示教文件中;
9.点击“再现”按钮,机器人按照记录的机器人各模块信息再现一遍运动轨迹;
10.点击“清空”按钮会把示教列表全部清除。
11.点击“退出”按钮,退出当前界面;
12.点击“机器人复位”按钮,使机器人回到零点位置;
13.按下控制柜上的“停止”按钮,关闭计算机;
14.断开控制柜电源。
五、实验结果
1.示教实验结果截屏
图1.1回参考点
图1.2机械手吸取物块
图1.3机器人放下物块
2.示教实验结果分析
2.1实验结论
在实验中,我们可以看到,经过示教和记忆后的机器人能够较为准确地再现示教过程的动作,能够完成物块的运输装配工作。
2.2实验问题
但在实验中,我们发现,有时机器人无法再现动作与示教动作有所偏差,即机器人无法准确到达物块所在位置,进行物块的搬运工作。
我们分析,造成该问题的原因有如下几点:
1.机器人的控制与响应有延迟,导致机器人运动存在偏差;
2.机器人的机械结构造成机器人的误差不可避免(如反向间隙的存在);
3.机器人在运动过程中存在干扰,造成误差。
2.2实验过程总结
机器人示教过程总结:
1.通过控制软件可视化界面,控制机器人完成拾取物块、搬运物块、放置物块的工作;
2.在示教的同时完成记忆过程;
3.通过再现过程,计算机向机器人发出指令;
4.机器人接受指令,进行预定操作。
六、思考题
1.通过实验总结机器人示教-再现的概念
机器人示教和再现实际上是一个信号输入与输出过程。
通过示教,机器人采集关键点的位置信息,并将位置反馈给存储器。
在再现过程中,存储器将已有的位置以指令的形式发出,控制机器人按示教的顺序,完成对应的工作。
2.试分析机器人的示教属于PTP(点到点)控制还是输入CP(连续轨迹)控制
机器人的示教属于PTP(点到点)控制。
在实验中,我们注意到在示教过程中,每控制机器人到达一个新位置,都要重新记录机器人关键点的位置,由此可以看出机器人示教实际上是对关键点位置和到达顺序的记录。
而再现是将关键点按顺序重新复现的过程。
即机器人的示教属于PTP(点到点)控制。
西安交通大学实验报告
第页(共页)
课程:
工业机器人实验日期:
2017年5月3日
专业班号机械41组别第一组交报告日期:
年月日
姓名陈豪学号2140101003报告退发:
(订正、重做)
姓名尹鑫鑫学号2140101023教师审批签字:
姓名武文家学号2140101020
实验二机器人离线编程实验
一、实验目的
1.通过编程,实现对机器人的控制;
2.熟悉机器人的操作控制过程;
3.熟悉利用VC++实现可视化机器人控制程序的编写过程。
二、实验设备
1.模块化机器人一台;
2.模块化机器人控制柜一台。
三、实验内容
在VisualC++6.0中编写可视化机器人控制程序。
通过完成的控制系统,实现对机器人的一些简单操作。
并要求控制程序能够控制机器人的运动模式、选择方式、启动方式、运动速度、目标位置、运动方向、手爪张闭。
完成程序后在机器人上实现操作。
四、实验结果
1.程序界面截图
图2.1程序头文件截图
图2.2程序可视化界面截图
五、实验分析与总结
1.实验过程总结
在实验中,我们通过调用机器人动态链接库函数实现对机器人的控制。
通过实验,我们有如下几点收获:
1.我们从函数形式中可以看出控制机器人需要提供给机器人一些参数(运动轴号、目标位置、运动速度、运动模式和启动方式);
2.手部的控制函数与其他轴的控制函数不同,可见手部控制器是一个独立的部件;
3.只有当机器人的速度、目标位置控制在一个合适的范围内时、机器人的运动才能稳定。
4.不同的运动模式下,机器人方式有所不同。
2.实验问题分析
实验中遇到的最大问题是程序与机器人的链接问题,通过调用动态链接库最终能够实现机器人的链接。
由于我们不熟悉VC++语言,在编写程序时遇到了很多困难,但实际上,通过查找相关资料以及查看错误说明能够很好地解决问题。
6、机器人链接库编程实验程序
见附页
西安交通大学实验报告
第页(共页)
课程:
工业机器人实验日期:
2017年5月3日
专业班号机械41组别第一组交报告日期:
年月日
姓名陈豪学号2140101003报告退发:
(订正、重做)
姓名尹鑫鑫学号2140101023教师审批签字:
姓名武文家学号2140101020
机器人示教与离线编程实验总结
1、机器人示教与离线编程的对比
表1机器人示教与离线编程的对比
项目
示教
离线编程
编程门槛
低
高
机器人占用
占用
不占用
事故
示教过程中易碰撞
不易碰撞
精度
靠人控制,精度低
精度高
应用范围
针对特定机器人
可控制大部分机器人
直观程度
高
低
二、实验体会
陈豪:
通过本次实验,我们了解了机器人的控制系统的组成。
在实验中,我们进一步认识了示教的作用,对机器人控制有了进一步的理解。
并在实验中复习了方VC++程序的编写、有关机器人示教和离线编程的相关知识、并对实验系统进行了分析。
对机器人理论的相关知识有了更深入的理解。
尹鑫鑫:
武文家:
通过此次试验,我们亲自操作完成了六自由度机器人的示教,对六自由度机器人机构和运转有了更深入的认知。
在编程控制实验中,我们又回顾了vc++的编写与应用,真正的把学到的知识用到了实践中去,对机器人的控制编程更加熟悉,也增加了对机器人开发的兴趣
3、实验分工
表2实验分工
组员
陈豪
尹鑫鑫
武文家
学号
2140101003
2140101023
2140101020
实验前期
实验预习,阅读实验指导书,了解实验步骤
实验过程
实验分析、程序编写
实验操作、分析
数据记录、控制调试
实验结束
实验原理、实验结果分析讨论
报告撰写
理论部分
分析部分
总结部分
西安交通大学实验报告附页
机器人离线编程程序
//expDlg.cpp:
implementationfile
//
#include"StdAfx.h"
#include"exp.h"
#include"expDlg.h"
#include"s6s1.h"
#ifdef_DEBUG
#definenewDEBUG_NEW
#undefTHIS_FILE
staticcharTHIS_FILE[]=__FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
//CAboutDlgdialogusedforAppAbout
classCAboutDlg:
publicCDialog
{
public:
CAboutDlg();
//DialogData
//{{AFX_DATA(CAboutDlg)
enum{IDD=IDD_ABOUTBOX};
//}}AFX_DATA
//ClassWizardgeneratedvirtualfunctionoverrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDVsupport
//}}AFX_VIRTUAL
//Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg:
:
CAboutDlg():
CDialog(CAboutDlg:
:
IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
voidCAboutDlg:
:
DoDataExchange(CDataExchange*pDX)
{
CDialog:
:
DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg,CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
//Nomessagehandlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
//CExpDlgdialog
CExpDlg:
:
CExpDlg(CWnd*pParent/*=NULL*/)
:
CDialog(CExpDlg:
:
IDD,pParent)
{
//{{AFX_DATA_INIT(CExpDlg)
m_axis=0;
m_runmod=0;
m_trans=30.0;
m_fh=10.0;
m_dir=0;
m_acc=0;
m_hand=FALSE;
m_str=_T("");
//}}AFX_DATA_INIT
//NotethatLoadIcondoesnotrequireasubsequentDestroyIconinWin32
m_hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
voidCExpDlg:
:
DoDataExchange(CDataExchange*pDX)
{
CDialog:
:
DoDataExchange(pDX);
//{{AFX_DATA_MAP(CExpDlg)
DDX_Radio(pDX,IDC_XMOTOR,m_axis);
DDX_Radio(pDX,IDC_SPEED,m_runmod);
DDX_Text(pDX,IDC_TRANS,m_trans);
DDX_Text(pDX,IDC_FH,m_fh);
DDX_Radio(pDX,IDC_PDIR,m_dir);
DDX_Radio(pDX,IDC_RADIO11,m_acc);
DDX_Check(pDX,IDC_CHECK_HAND,m_hand);
DDX_Text(pDX,IDC_EDIT1,m_str);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CExpDlg,CDialog)
//{{AFX_MSG_MAP(CExpDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_TRANS_START,OnTransStart)
ON_BN_CLICKED(IDC_SUDDEN_STOP,OnSuddenStop)
ON_BN_CLICKED(IDC_XMOTOR,OnXmotor)
ON_BN_CLICKED(IDC_YMOTOR,OnYmotor)
ON_BN_CLICKED(IDC_ZMOTOR,OnZmotor)
ON_BN_CLICKED(IDC_UMOTOR,OnUmotor)
ON_BN_CLICKED(IDC_VMOTOR,OnVmotor)
ON_BN_CLICKED(IDC_WMOTOR,OnWmotor)
ON_BN_CLICKED(IDC_SPEED,OnSpeed)
ON_BN_CLICKED(IDC_POSITION,OnPosition)
ON_BN_CLICKED(IDC_PDIR,OnPdir)
ON_BN_CLICKED(IDC_NDIR,OnNdir)
ON_BN_CLICKED(IDC_RADIO11,OnRadio11)
ON_BN_CLICKED(IDC_RADIO12,OnRadio12)
ON_EN_CHANGE(IDC_FH,OnChangeFh)
ON_EN_CHANGE(IDC_TRANS,OnChangeTrans)
ON_BN_CLICKED(IDC_CHECK_HAND,OnCheckHand)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
//CExpDlgmessagehandlers
BOOLCExpDlg:
:
OnInitDialog()
{
CDialog:
:
OnInitDialog();
//Add"About..."menuitemtosystemmenu.
//IDM_ABOUTBOXmustbeinthesystemcommandrange.
ASSERT((IDM_ABOUTBOX&0xFFF0)==IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX<0xF000);
CMenu*pSysMenu=GetSystemMenu(FALSE);
if(pSysMenu!
=NULL)
{
CStringstrAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if(!
strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu);
}
}
//Settheiconforthisdialog.Theframeworkdoesthisautomatically
//whentheapplication'smainwindowisnotadialog
SetIcon(m_hIcon,TRUE);//Setbigicon
SetIcon(m_hIcon,FALSE);//Setsmallicon
//TODO:
Addextrainitializationhere
s6s1_set_critical(NULL);
s6s1_init(1,NULL,true);
s6s1_select
(1);
returnTRUE;//returnTRUEunlessyousetthefocustoacontrol
}
voidCExpDlg:
:
OnSysCommand(UINTnID,LPARAMlParam)
{
if((nID&0xFFF0)==IDM_ABOUTBOX)
{
CAboutDlgdlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog:
:
OnSysCommand(nID,lParam);
}
}
//Ifyouaddaminimizebuttontoyourdialog,youwillneedthecodebelow
//todrawtheicon.ForMFCapplicationsusingthedocument/viewmodel,
//thisisautomaticallydoneforyoubytheframework.
voidCExpDlg:
:
OnPaint()
{
if(IsIconic())
{
CPaintDCdc(this);//devicecontextforpainting
SendMessage(WM_ICONERASEBKGND,(WPARAM)dc.GetSafeHdc(),0);
//Centericoninclientrectangle
intcxIcon=GetSystemMetrics(SM_CXICON);
intcyIcon=GetSystemMetrics(SM_CYICON);
CRectrect;
GetClientRect(&rect);
intx=(rect.Width()-cxIcon+1)/2;
inty=(rect.Height()-cyIcon+1)/2;
//Drawtheicon
dc.DrawIcon(x,y,m_hIcon);
}
else
{
CDialog:
:
OnPaint();
}
}
//Thesystemcallsthistoobtainthecursortodisplaywhiletheuserdrags
//theminimizedwindow.
HCURSORCExpDlg:
:
OnQueryDragIcon()
{
return(HCURSOR)m_hIcon;
}
voidCExpDlg:
:
OnTransStart()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
if(!
UpdateData(true))return;
if(m_fh<0)m_fh=-1*m_fh;
if(m_dir==1)
m_fh=m_fh*(-1);
if(m_runmod==0)
s6s1_moveone(m_axis,m_trans,m_fh,true,m_acc==1);
else
s6s1_moveone(m_axis,m_trans,m_fh,false,m_acc==1);
}
voidCExpDlg:
:
OnSuddenStop()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
if(!
UpdateData(true))return;
s6s1_stop_axis(m_axis);
}
voidCExpDlg:
:
OnCancel()
{
//TODO:
Addextracleanuphere
s6s1_close();
CDialog:
:
OnCancel();
}
voidCExpDlg:
:
OnXmotor()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
m_axis=0;
}
voidCExpDlg:
:
OnYmotor()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
m_axis=1;
}
voidCExpDlg:
:
OnZmotor()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
m_axis=2;
}
voidCExpDlg:
:
OnUmotor()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
m_axis=3;
}
voidCExpDlg:
:
OnVmotor()
{
//TODO: