保捱科技网
您的当前位置:首页工业机器人实验报告02-机械41-示教-离线编程

工业机器人实验报告02-机械41-示教-离线编程

来源:保捱科技网


工业机器人实验报告41-示教-离线编程

02-机械西安交通大学机器人实验第一组

工业机器人实验报告

——机器人示教与离线编程实验

班 级:机械41 组 别:第一组

组 员:陈 豪 2140101003 尹鑫鑫 2140101023 武文家 2140101020 指导老师:桂亮

2

西安交通大学机器人实验第一组

西安交通大学 2017年 5 月 3 日

西安交通大学实验报告

第 页(共 页)

课程: 工业机器人 实 验 日 期 :2017年 5月 3 日 专业班号 机械41 组别 第一组 交报告日期: 年 月 日 姓 名 陈豪 学号 2140101003 报 告 退 发 : (订正、重做) 姓 名 尹鑫鑫 学号 2140101023 教师审批签字: 姓 名 武文家 学号 2140101020 实验一 机器人示教实验

一、实验目的

1.了解机器人示教与再现的原理;

2.掌握机器人示教和再现过程的操作方法。

二、实验设备

1.模块化机器人一台; 2.模块化机器人控制柜一台。

三、实验原理

机器人的示教-再现过程是分为四个步骤:示教、记忆、再现、操作。

示教,就是操作者把规定的目标动作(包括每个运动部件,每个运动轴的动作)一步一步的教给机器人。

3

西安交通大学机器人实验第一组

记忆,即是机器人将操作者所示教的各个点的动作顺序信息、动作速度信息、位姿信息等记录在存储器中。

再现,便是将示教信息再次浮现,即根据需要,将存储器所存储的信息读出,向执行机构发出具体的指令。

操作,指机器人以再现信号作为输入指令,使执行机构重复示教过程规定的各种动作。

示教的方法有很多种,有主从式,编程式,示教盒式等多种。

四、实验步骤

1.接通控制柜电源,按下“启动”按钮; 2.启动计算机,运行机器人软件; 3.点击主界面“模块组合方式”按钮,按照实际情况选择已组合的模块设备,并点击“确定”按钮;

4.点击主界面“机器人复位”按钮,机器人进行回零运动。观察机器人的运动,所有模块全部运动完成后,机器人处于零点位置; 5.点击“示教”按钮,出现界面; 6.在“速度”中选择示教速度(由左到右从

4

西安交通大学机器人实验第一组

低速到高速1.5度/秒、6度/秒、12度/秒、24度/秒共四个挡,默认是6度/秒,一般情况下建议选择12度/秒;在“模块运动”中有每个关节的正反向运动,持续按下相应模块的按钮,机器人的模块会按照指令运动,松开相应的按钮,机器人的模块会停止运动;

7.在机器人“模块状态”和“当前坐标”中,可以实时显示机器人的运动状态,当每运动到一个点,必须按下“记录”按钮,在再现时机器人将忽略中间过程而只再现各个点,在“示教列表”中会记录并显示机器人相应模块运动的信息,继续运动其他模块,直到整个示教程序完成;

8.点击“保存”按钮,示教完的信息以(*.RBT6)格式保存在示教文件中; 9.点击“再现”按钮,机器人按照记录的机器人各模块信息再现一遍运动轨迹; 10.点击“清空”按钮会把示教列表全部清除。

11.点击“退出”按钮,退出当前界面;

5

西安交通大学机器人实验第一组

12.点击“机器人复位”按钮,使机器人回到零点位置;

13.按下控制柜上的“停止”按钮,关闭计算机;

14.断开控制柜电源。

五、实验结果

1.示教实验结果截屏

图1.1 回参考点

6

西安交通大学机器人实验第一组

图1.2 机械手吸取物块

7

西安交通大学机器人实验第一组

图1.3 机器人放下物块

2.示教实验结果分析 2.1实验结论

在实验中,我们可以看到,经过示教和记忆后的机器人能够较为准确地再现示教过程的动作,能够完成物块的运输装配工作。 2.2实验问题

但在实验中,我们发现,有时机器人无法再现动作与示教动作有所偏差,即机器人无法准确到达物块所在位置,进行物块的搬运工作。

我们分析,造成该问题的原因有如下几点: 1.机器人的控制与响应有延迟,导致机器人运动存在偏差;

2.机器人的机械结构造成机器人的误差不可避免(如反向间隙的存在);

3.机器人在运动过程中存在干扰,造成误差。

2.2实验过程总结

机器人示教过程总结:

8

西安交通大学机器人实验第一组

1.通过控制软件可视化界面,控制机器人完成拾取物块、搬运物块、放置物块的工作;

2.在示教的同时完成记忆过程;

3.通过再现过程,计算机向机器人发出指令;

4.机器人接受指令,进行预定操作。 六、思考题

1.通过实验总结机器人示教-再现的概念 机器人示教和再现实际上是一个信号输入与输出过程。通过示教,机器人采集关键点的位置信息,并将位置反馈给存储器。在再现过程中,存储器将已有的位置以指令的形式发出,控制机器人按示教的顺序,完成对应的工作。 2.试分析机器人的示教属于PTP(点到点)控制还是输入CP(连续轨迹)控制

机器人的示教属于PTP(点到点)控制。 在实验中,我们注意到在示教过程中,每控制机器人到达一个新位置,都要重新记录机器人关键点的位置,由此可以看出机器人示教实际上是对关键点位置和到达顺序的记录。而再现是将关键点按顺序重新复现的过程。即机器人的示教属

9

西安交通大学机器人实验第一组

于PTP(点到点)控制。

西安交通大学实验报告

第 页(共 页)

课程: 工业机器人 实 验 日 期 :2017年 5月 3 日 专业班号 机械41 组别 第一组 交报告日期: 年 月 日 姓 名 陈豪 学号 2140101003 报 告 退 发 : (订正、重做) 姓 名 尹鑫鑫 学号 2140101023 教师审批签字: 姓 名 武文家 学号 2140101020 实验二 机器人离线编程实验

一、实验目的

1.通过编程,实现对机器人的控制; 2.熟悉机器人的操作控制过程;

3.熟悉利用VC++实现可视化机器人控制程序

10

西安交通大学机器人实验第一组

的编写过程。

二、实验设备

1.模块化机器人一台; 2.模块化机器人控制柜一台。

三、实验内容

在Visual C++6.0中编写可视化机器人控制程序。

通过完成的控制系统,实现对机器人的一些简单操作。并要求控制程序能够控制机器人的运动模式、选择方式、启动方式、运动速度、目标位置、运动方向、手爪张闭。

完成程序后在机器人上实现操作。

四、实验结果

1.程序界面截图

图2.1程序头文件截图

11

西安交通大学机器人实验第一组

图2.2 程序可视化界面截图

五、实验

分析与总结

1.实验过程总结

在实验中,我们通过调用机器人动态链接库函数实现对机器人的控制。通过实验,我们有如下几点收获:

1.我们从函数形式中可以看出控制机器人需要提供给机器人一些参数(运动轴号、目标位置、运动速度、运动模式和启动方式);

2.手部的控制函数与其他轴的控制函数不同,可见手部控制器是一个的部件;

3.只有当机器人的速度、目标位置控制在一个合适的范围内时、机器人的运动才能稳定。

12

西安交通大学机器人实验第一组

4.不同的运动模式下,机器人方式有所不同。

2.实验问题分析

实验中遇到的最大问题是程序与机器人的链接问题,通过调用动态链接库最终能够实现机器人的链接。

由于我们不熟悉VC++语言,在编写程序时遇到了很多困难,但实际上,通过查找相关资料以及查看错误说明能够很好地解决问题。

六、机器人链接库编程实验程序

见附页

西安交通大学实验报告

第 页(共 页)

课程: 工业机器人 实 验 日 期 :2017年 5月 3 日 专业班号 机械41 组别 第一组 交报告日期: 年 月 日 姓 名 陈豪 学号 2140101003 报 告 退 发 : (订正、重做)

13

西安交通大学机器人实验第一组

姓 名 尹鑫鑫 学号 2140101023 教师审批签字: 姓 名 武文家 学号 2140101020 机器人示教与离线编程实验总结

一、机器人示教与离线编程的对比

表1 机器人示教与离线编程的对比 项目 槛 机器人占用 占用 事故 精度 示教过程中不易碰撞 易碰撞 靠人控制,精精度高 度低 应用范针对特定机可控制大部围 度

二、实验体会

示教 离线编程 高 不占用 编程门低 器人 分机器人 低 直观程高 陈豪:

通过本次实验,我们了解了机器人的控制系统的组成。在实验中,我们进一步认识了示教的

14

西安交通大学机器人实验第一组

作用,对机器人控制有了进一步的理解。并在实验中复习了方VC++程序的编写、有关机器人示教和离线编程的相关知识、并对实验系统进行了分析。对机器人理论的相关知识有了更深入的理解。 尹鑫鑫:

武文家:通过此次试验,我们亲自操作完成了六自由度机器人的示教,对六自由度机器人机构和运转有了更深入的认知。在编程控制实验中,我们又回顾了vc++的编写与应用,真正的把学到的知识用到了实践中去,对机器人的控制编程更加熟悉,也增加了对机器人开发的兴趣

三、实验分工

15

西安交通大学机器人实验第一组

表2 实验分工

组员 学号 实验前期 实验过程 实验结束 报告撰写

16

陈豪 尹鑫鑫 武文家 2140101003 2140101023 2140101020 实验预习,阅读实验指导书,了解实验步骤 实验分析、实验操作、数据记录、程序编写 分析 控制调试 实验原理、实验结果分析讨论 理论部分 分析部分 总结部分 西安交通大学机器人实验第一组

西安交通大学实验报告附页

机器人离线编程程序

// expDlg.cpp : implementation file //

#include \"StdAfx.h\" #include \"exp.h\" #include \"expDlg.h\" #include \"s6s1.h\" #ifdef _DEBUG

#define new DEBUG_NEW #undef THIS_FILE

static char THIS_FILE[] = __FILE__; #endif

//////////////////////////////////////

17

西安交通大学机器人实验第一组

/////////////////////////////////////// // CAboutDlg dialog used for App About

class CAboutDlg : public CDialog { public: CAboutDlg();

// Dialog Data

//{{AFX_DATA(CAboutDlg) enum { IDD = IDD_ABOUTBOX }; //}}AFX_DATA

// ClassWizard generated virtual function overrides

//{{AFX_VIRTUAL(CAboutDlg) protected: virtual void

DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL

18

西安交通大学机器人实验第一组

// Implementation protected:

//{{AFX_MSG(CAboutDlg) //}}AFX_MSG

DECLARE_MESSAGE_MAP() };

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) {

//{{AFX_DATA_INIT(CAboutDlg) //}}AFX_DATA_INIT } void

CAboutDlg::DoDataExchange(CDataExchange* pDX) {

CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CAboutDlg) //}}AFX_DATA_MAP

19

西安交通大学机器人实验第一组

}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) //{{AFX_MSG_MAP(CAboutDlg) // No message handlers //}}AFX_MSG_MAP END_MESSAGE_MAP()

///////////////////////////////////////////////////////////////////////////// // CExpDlg dialog

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;

20

西安交通大学机器人实验第一组

m_acc = 0; m_hand = FALSE; m_str = _T(\"\"); //}}AFX_DATA_INIT

// Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon =

AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void

CExpDlg::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);

21

西安交通大学机器人实验第一组

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)

22

西安交通大学机器人实验第一组

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()

///////////////////////////////////////////////////////////////////////////// // CExpDlg message handlers

BOOL CExpDlg::OnInitDialog() {

CDialog::OnInitDialog();

23

西安交通大学机器人实验第一组

// Add \"About...\" menu item to system menu.

// IDM_ABOUTBOX must be in the system command range.

ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);

ASSERT(IDM_ABOUTBOX < 0xF000);

CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) {

CString strAboutMenu;

strAboutMenu.LoadString(IDS_ABOUTBOX); if (!strAboutMenu.IsEmpty()) {

pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);

24

西安交通大学机器人实验第一组

} }

// Set the icon for this dialog. The framework does this automatically

// when the application's main window is not a dialog

SetIcon(m_hIcon, TRUE); // Set big icon

SetIcon(m_hIcon, FALSE); // Set small icon

// TODO: Add extra initialization here s6s1_set_critical ( NULL) ; s6s1_init( 1, NULL, true) ; s6s1_select ( 1) ;

return TRUE; // return TRUE unless you set the focus to a control }

void CExpDlg::OnSysCommand(UINT nID,

25

西安交通大学机器人实验第一组

LPARAM lParam) {

if ((nID & 0xFFF0) == IDM_ABOUTBOX) {

CAboutDlg dlgAbout; dlgAbout.DoModal(); } else {

CDialog::OnSysCommand(nID, lParam); } }

// If you add a minimize button to your dialog, you will need the code below // to draw the icon. For MFC

applications using the document/view model, // this is automatically done for you by the framework.

void CExpDlg::OnPaint() {

26

西安交通大学机器人实验第一组

if (IsIconic()) {

CPaintDC dc(this); // device context for painting

SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

// Center icon in client rectangle int cxIcon =

GetSystemMetrics(SM_CXICON); int cyIcon =

GetSystemMetrics(SM_CYICON); CRect rect;

GetClientRect(&rect);

int x = (rect.Width() - cxIcon + 1) / 2;

int y = (rect.Height() - cyIcon + 1) / 2;

// Draw the icon

dc.DrawIcon(x, y, m_hIcon);

27

西安交通大学机器人实验第一组

} else {

CDialog::OnPaint(); } }

// The system calls this to obtain the cursor to display while the user drags // the minimized window.

HCURSOR CExpDlg::OnQueryDragIcon() {

return (HCURSOR) m_hIcon; }

void CExpDlg::OnTransStart() {

// TODO: Add your control notification handler code here

if (!UpdateData( true) ) return;

if ( m_fh<0) m_fh=- 1*m_fh;

28

西安交通大学机器人实验第一组

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) ; }

void CExpDlg::OnSuddenStop() {

// TODO: Add your control notification handler code here

if ( ! UpdateData( true) ) return; s6s1_stop_axis( m_axis) ; }

void CExpDlg::OnCancel() {

29

西安交通大学机器人实验第一组

// TODO: Add extra cleanup here s6s1_close(); CDialog::OnCancel(); }

void CExpDlg::OnXmotor() {

// TODO: Add your control notification handler code here m_axis=0; }

void CExpDlg::OnYmotor() {

// TODO: Add your control notification handler code here m_axis=1; }

void CExpDlg::OnZmotor() {

// TODO: Add your control notification

30

西安交通大学机器人实验第一组

handler code here m_axis=2; }

void CExpDlg::OnUmotor() {

// TODO: Add your control notification handler code here m_axis=3; }

void CExpDlg::OnVmotor() {

// TODO: Add your control notification handler code here m_axis=4; }

void CExpDlg::OnWmotor() {

// TODO: Add your control notification handler code here

31

西安交通大学机器人实验第一组

m_axis=5; }

void CExpDlg::OnSpeed() {

// TODO: Add your control notification handler code here m_runmod=1; }

void CExpDlg::OnPosition() {

// TODO: Add your control notification handler code here m_runmod=0; }

void CExpDlg::OnPdir() {

// TODO: Add your control notification handler code here m_dir=1;

32

西安交通大学机器人实验第一组

}

void CExpDlg::OnNdir() {

// TODO: Add your control notification handler code here m_dir=-1; }

void CExpDlg::OnRadio11() {

// TODO: Add your control notification handler code here m_acc=0; }

void CExpDlg::OnRadio12() {

// TODO: Add your control notification handler code here m_acc=1; }

33

西安交通大学机器人实验第一组

void CExpDlg::OnChangeFh() {

// TODO: If this is a RICHEDIT control, the control will not

// send this notification unless you override the CDialog::OnInitDialog() // function and call CRichEditCtrl().SetEventMask()

// with the ENM_CHANGE flag ORed into the mask.

// TODO: Add your control notification handler code here

GetDlgItemText(IDC_FH,m_str); m_fh=_ttoi(m_str); }

void CExpDlg::OnChangeTrans() {

// TODO: If this is a RICHEDIT control,

34

西安交通大学机器人实验第一组

the control will not

// send this notification unless you override the CDialog::OnInitDialog() // function and call CRichEditCtrl().SetEventMask()

// with the ENM_CHANGE flag ORed into the mask.

// TODO: Add your control notification handler code here

GetDlgItemText(IDC_TRANS,m_str); m_trans=_ttoi(m_str); }

void CExpDlg::OnCheckHand() {

// TODO: Add your control notification handler code here

if ( !UpdateData( true) ) return;

35

西安交通大学机器人实验第一组

if (m_hand) {

s6s1_hand( 1) ;

GetDlgItem( IDC_CHECK_HAND) ->SetWindowText( \"手爪闭合\") ; } else {

s6s1_hand(0) ;

GetDlgItem( IDC_CHECK_HAND) ->SetWindowText( \"手爪张开\") ; }

int s6s1_hand(m_hand); }

36

因篇幅问题不能全部显示,请点此查看更多更全内容