在轨服务应用模块设计及人机交互技术 实验指导书.docx
- 文档编号:30520082
- 上传时间:2023-08-16
- 格式:DOCX
- 页数:41
- 大小:3.45MB
在轨服务应用模块设计及人机交互技术 实验指导书.docx
《在轨服务应用模块设计及人机交互技术 实验指导书.docx》由会员分享,可在线阅读,更多相关《在轨服务应用模块设计及人机交互技术 实验指导书.docx(41页珍藏版)》请在冰豆网上搜索。
在轨服务应用模块设计及人机交互技术实验指导书
在轨服务应用模块设计及人机交互技术实验指导书
指导老师:
刘正雄黄攀峰
西北工业大学航天学院
综合实验大纲
实验名称:
在轨服务应用模块设计及人机交互技术实验(综合实验)
实验教学目标与基本要求
学生通过理论学习结合虚拟场景建模技术,搭建虚拟仿真环境进行有人参与的在轨服务应用实验方案设计与优化。
在真实机器人实验系统上验证实验设计的合理性,并综合演示在轨服务实验过程,让学生了解在轨服务操作技术以及人机交互技术的相关内容。
在此过程中,使学生了解并掌握ABB教学机器人及仿真软件ABBRobotStudio的相关操作,掌握力反馈型人机交互手控器的使用及简单应用,提高计算机虚拟仿真能力和实验动手能力。
在轨服务的相关操作通常由在轨空间机械臂实现,但由于地面重力因素的影响,较难实现空间机械臂的微重力工作环境,因此本实验采用工业机械臂来替代。
在本次综合试验中,将利用教研室的ABB教学实验平台来完成在轨服务应用的实验设计与验证及演示。
综合实验工作包括但不局限于以下内容:
(1)了解综合实验平台功能及实验平台的使用规范;
(2)开展综合实验任务方案设计与优化;
(3)学习相关编程技术,了解并掌握虚拟仿真环境搭建基本步骤;
(4)人机交互技术实验验证与演示;
(5)在轨服务应用实验验证与演示;
(6)人在回路的在轨服务应用实验验证与演示(拓展项);
(7)开展实验分析与总结、撰写实验总结报告及现场答辩。
主要参考书:
[1]《先进在轨服务技术》,讲义,2016
[2]《空间遥科学技术基础》,讲义,2016
[3]ABB机器人相关资料及参考文献
第一章软件及环境介绍
1.1RobotStudio介绍
RobotStudio是一个用于ABB机器人配置和编程的工程工具,同时支持工厂中的真实机器人和PC中的虚拟机器人。
为了实现真正的离线编程,RobotStudio采用了ABBVirtualRobot技术。
RobotStudio采用了MicrosoftOfficeFluentUserInterface(流畅用户界面)。
OfficeFluentUI是MicrosoftOffice使用的界面。
和在Office中一样,RobotStudio的功能也是以面向工作流程的方式设计的。
搭配插件,RobotStudio可以按需要进行扩展和定制。
插件使用RobotStudioSDK开发。
该SDK还可以用于开发出超出RobotStudio基本组件功能的定制SmartComponent。
本次课程设计首先在RobotStudio中搭建虚拟的机器人操作平台并进行任务演示,在虚拟平台中确认演示无误后再连接实际的机器人进行实验验证。
教研室为大家提供RobotStudio安装软件(包含RobotStudio本体以及RobotWare),学习文件及视频。
相关文件在课程资源包的XX路径下。
强烈建议同学配合教学视频进行学习!
RobotStudio常用操作介绍:
界面:
开始界面如下图所示,可按照“新建—空工作站—创建”的顺序得到一个空工作站,以供编程之用。
在视图窗口内按下“Ctrl+左键”“Ctrl+Shift+左键”可分别实现视图平移和旋转,其他功能可查看使用手册或观看教学视频进行学习。
图1-1
文件:
包含创建新工作站、创造新机器人系统、连接到控制器,将工作站另存为查看器的选项和RobotStudio选项。
基本:
包含搭建工作站,创建系统,编程路径和摆放物体所需的控件。
建模:
包含创建和分组工作站组件,创建实体,测量以及其他CAD操作所需的控件。
仿真:
包含创建、控制、监控和记录仿真所需的控件。
控制器:
包含用于虚拟控制器(VC)的同步、配置和分配给它的任务的控制措施。
它还包含用于管理真实控制器的控制措施。
RAPID:
包含集成的RAPID编辑器,后者用于编辑除机器人运动之外的其他所有机器人任务。
加载项(Add-Ins):
包含PowerPacs的控件。
更多工作站建模及环境搭建讲解详见“初级培训视频”!
1.2RAPID编程语言简介
RAPID语言是ABB机器人公司开发的专用于旗下的机器人开发语言,风格与C语言类似。
以下简单介绍一下RAPID语言的相关内容。
1.2.1RAPID语言概念
RAPID语言支持分层编程方案。
在分层编程方案中,可为特定机器人系统安装新程序、数据对象和数据类型。
该方案能对编程环境进行自定义(扩展编程环境的功能),并获得RAPID编程语言的充分支持。
此外,RAPID语言还带有若干强大功能:
•对任务和模块进行模块化编程
•无返回值程序和有返回值程序
•类型定义
•变量、永久数据对象、常量
•算术
•控制结构
•步退执行支持
•错误恢复
•撤销执行支持
•中断处理
•占位符
1.2.2语言摘要
任务与模块:
RAPID应用被称作一项任务。
一项任务包括一组模块。
一个模块包含一组数据和程序声明。
任务缓冲区用于存放系统当前在用(在执行、在开发)的模块。
RAPID语言区分了任务模块和系统程序模块。
一个任务模块被视作任务/应用的一部分,而一个系统程序模块被视作系统的一部分。
系统程序模块在系统启动期间自动加载到任务缓冲区,旨在(预)定义常用的系统特定数据对象(工具、焊接数据、移动数据等)、接口(打印机、日志文件..)等。
虽然(除了系统程序模块外)单个任务模块通常包含小应用,但较大应用可能包含主任务模块,主任务模块反过来又引用一项或多项其他任务模块所含的程序和/或数据。
一项任务模块包含任务的入口无返回值程序。
运行任务实际上表示执行该入口程序。
入口程序无法具备参数。
程序:
有三类程序:
有返回值程序、无返回值程序和软中断程序。
有返回值程序将返回特定类型的值,用于表达式中。
无返回值程序不返回任何值,用于语句中。
软中断程序提供了中断响应手段。
软中断程序可与特定中断关联起来,随后,在发生该中断的情况下,被自动执行。
用户程序:
预定义程序由系统提供,一直可供使用。
有两类预定义程序:
内置程序和安装程序。
内置程序(如有返回值运算程序一样)属于RAPID语言的一部分。
安装程序是用于控制机械臂、夹具、传感器等的、与应用或设备有关的程序。
数据对象:
有四种数据对象:
常量、变量、永久数据对象和参数。
永久(数据对象)可描述为“永久”变量。
在两次会话之间,永久变量将保持值。
变量在每次新会话开始时,即,当加载模块时(模块变量)或调用程序时(程序变量),将失去(重新初始化)变量值。
数据对象可呈结构化(记录),也可呈维度化(数组、矩阵等)。
语句:
语句可为简单语句或复合语句。
反过来,复合语句又可能包含其他语句。
标签是“空操作”语句,可用于定义在程序中指定的(goto)位置。
语句将被接连执行,除非goto、return、raise、exit、retry或trynext语句、或发生中断或错误,造成从另一点继续执行。
在将任何调用参数与无返回值程序的相应参数关联起来后,无返回值程序调用将引起无返回值程序被执行。
RAPID语言支持对无返回值程序名称进行后期绑定。
赋值语句将改变变量、永久数据对象或参数的值。
goto语句会导致程序在标签指定位置继续执行。
return语句将终止程序的求值。
raise语句用于发出和传递错误。
exit语句将终止任务的求值。
connect语句用于指定中断编号,并将中断编号与软中断(中断服务)程序关联起来。
retry和trynext语句用于在错误发生后,重新开始求值。
if和test语句用于选择。
if语句能够允许基于条件值,选择语句表。
test语句将选择一组(或不选择)语句表,具体取决于表达式的值。
for和while语句用于迭代。
只要循环变量处于指定值域内,for语句就会重复执行语句表的求值。
在每一迭代结束时,将(以可选增量)更新循环变量。
只要满足条件,while语句便会重复执行语句表的求值。
在每一迭代开始时,会对条件进行求值和核实。
1.2.3常用RAPID语言示例
1.2.3.1表达式:
表达式指定了对一个值的求值。
表达式可表示为占位符
相关运算符的相对优先级决定了求值的顺序。
圆括号能够覆写运算符的优先级。
为运算符优先级:
表1运算符优先级
优先级
运算符
最高
*/
+-
<><><=>==
AND
最低
XORORNOT
常量表达式
在数据声明中,用常量表达式来表示值。
<常量表达式>:
=<表达式>
注意:
常量表达式是一般表达式的特殊形式。
在任何等级均不可包含变量、永久数据对象或有返回值程序调用!
示例:
CONSTnumradius:
=25;
CONSTnumpi:
=3.141592654;
!
常量表达式(感叹号表示注释)
文字表达式
文字表达式用于表示永久数据对象声明的初始化值。
<文字表达式>:
=<表达式>
文字表达式是一般表达式的特殊形式,仅可包含各成分依次为文字表达式的单个聚合
或单个文字值(数值文字前带有+或-)。
示例:
PERSposrefpnt:
=[100,778,1183];
PERSnumdiameter:
=24.43;
条件表达式
条件表达式用于表示逻辑值。
<条件表达式>:
=<表达式>
条件表达式是一般表达式的特殊形式。
结果类型必须为bool型(真或假)。
示例:
counter>5ORlevel<0
1.2.3.2文字
文字是用于表示特定数据类型的一个恒定值的词法单元(不显示)。
表2文字示例说明
示例
描述
0.5,1E2
数字文字
“limit”
String文字
TRUE
Bool文字
1.2.3.3变量
根据变量的类型和维度,最多可以三种不同方式来引用变量。
变量引用可能意味着整个变量、变量的一个元素(数组)、或变量的一个分量(记录)。
<变量>:
=<整个变量>|<变量元素>|<变量分量>
按照上下文,变量引用表示变量的位置或值。
1.2.3.4聚合体
一个聚合表示一个复合值,该复合值为一个数组值或一个记录值。
将由表达式来指定每一聚合项。
表3聚合体示例说明
示例
描述
[x,y,2*x]
pos聚合
["john","eric","lisa"]
string数组聚合
[[100,100,0],[0,0,z]]
pos数组聚合
[[1,2,3],[a,b,c]]
num矩阵(2*3)聚合
聚合的数据类型将由(必须能由)上下文来确定聚合的数据类型。
各聚合项的数据类型必须等同于确定类型的相应聚合项的类型。
在下列示例中,IF子句是非法的,原因在于任何聚合的数据类型都无法由上下文确定。
VARposp1;
p1:
=[1,-100,12];
IF[1,-100,12]=[a,b,b]
THEN...
1.2.3.5函数调用
通过有返回值程序调用,将对特定的有返回值程序进行求值,并且调用中会收到有返回值程序返回的值。
有返回值程序可为预定义的或用户定义的。
有返回值程序调用的参数将数据传递至所调用的有返回值程序(并且也可从调用的有返回值程序传递数据)。
调用参数的数据类型必须等同于有返回值程序的相应参数的类型。
参数可为必要参数、可选参数,也可为条件参数,可选参数可省去,但是(当前)调用参数的顺序必须与参数的顺序相同。
两个或两个以上的参数可声明为相互排斥,在此情况下,同一参数表最多只能存在其中一个参数。
必要参数
将用","来将必要参数与进程(如有)参数分开。
可包含参数名,也可省去参数名。
可选参数或条件参数
可选参数或条件参数前面跟有'\'和参数名。
必须指定参数名的规范。
开关型参数有些特殊,仅用于表示(参数的)存在。
因此,开关型参数不包含参数表达式。
利用条件语法可以传递开关型参数。
1.2.4常用RAPID程序指令
线性运动指令(MoveL)
将机器人TCP沿直线运动至给定目标点,适用于对路径精度要求高的场合,如切割。
例如:
MoveLp20,v1000,z50,tool1\WObj:
=wogj1;
如图1-2所示,机器人TCP从当前位置p10处运动至p20处,运动轨迹为直线。
图1-2线性运动
关节运动指令(MoveJ)
将机器人TCP快速移动至给定目标点,运行轨迹不一定是直线。
例如:
MoveJp20,v1000,z50,tool1\WObj:
=wogj1;
如图1-3所示,机器人TCP从当前位置p10处运动至p20处,运动轨迹不一定为直线。
图1-3关节运动轨迹
圆弧运动指令(MoveC)
将机器人TCP沿圆弧运动至给定目标点。
例如:
MoveCp20,p30,v1000,z50,tool1\WObj:
=wogj1;
如图1-4所示,机器人当前位置p10作为圆弧的起点,p20是圆弧上的一点,p30作为圆弧的终点。
图1-4圆弧运动
绝对运动指令(MoveAbsj)
将机器人个关节轴运动到至给定位置。
例如:
PERSjointargetjpos10:
=[[0,0,0,0,0,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
关节目标点数据中各关节轴为零度。
MoveAbsjjpos10,v1000,z50,tool1\WObj:
=wobj1;
则机器人运行至关节轴零度位置。
1.2.5常用I/O控制指令
Set:
将数字输出信号Do1置为1。
例如:
SetDo1;将数字信号Do1置为1。
Reset:
将数字输出信号置为0。
例如:
ResetDo1;将数字信号Do1置为0。
WaitDI:
等待一个输入信号状态为设定值。
例如:
WaitDIDi1,1;等待数字输入信号Di1为1,之后才执行下面的指令。
1.2.6常用逻辑控制指令
IF:
满足不同条件,执行对应程序
例如:
IFreg1>5THEN
Setdo1;
ENDIF
如果reg1>5条件满足,则执行Setdo1指令。
FOR:
根据指定的次数,重复执行对应程序。
例如:
FORiFROM1TO10DO
routine1;
ENDFOR
重复执行10次routine1里的程序。
WHILE:
如果条件满足,则重复执行对应程序。
例如:
WHILEreg1 reg1: =reg1+1; ENDWHILE 如果变量reg1 TEST: 根据指定变量的判断结果,执行对应程序。 例如: TESTreg1 CASE1: routine1; CASE2: routine2; DEFAULT: Stop; ENDTEST 判断reg1数值,若干1则执行routine1;若为2则执行routine2,否则执行stop。 注释行“! ” 在语句前面加上“! ”,则整行语句作为注释行,不被程序执行。 例如: ! GotothePickPosition; MoveLpPick,v1000,fine,tool1\WObj: =wobj1; Offs偏移功能 以选定的目标点为基准,沿着选定工件坐标系的X、Y、Z轴方向偏移一定的距离。 例如: MoveLOffs(p10,0,0,10),v1000,z50,tool0\WObj: =wobj1; 将机器人TCP移动至以p10为基准点,沿着wobj1的Z轴正方向偏移10mm的位置。 1.2.7CRobT功能 读取当前机器人目标点位置数据。 例如: PERSrobtargetp10; P10: =CRobT(\Tool: =tool1\WObj: =wobj1); 读取当前机器人目标点位置数据,指定工具数据为tool1,工件坐标系数据为wobj1(若不指定,则默认工具数据为tool0,默认工件坐标系数据为wobj0),之后将读取的目标点数据赋值给p10。 1.2.8常用写屏指令 例如: TPErase; TRWtite“TheRobotisrunning! ”; TPWrite“TheLastCycleTimeis: ”\num: =nCycleTime; 假设上一次循环时间nCycleTime为10s,则示教器上面显示内容为 TheRobotisrunning! TheLastCycleTimeis: 10 功能程序 功能程序能够返回一个特定数据类型的值,在其他程序中可当做功能来调用。 例如: PERSnumnCount; FUNCboolbCompare(numnMin,numnMax) RETURNnCount>nMinANDnCount ENDFUNC PROCrTest() IFbCompare(5,10)THEN …. ENDIF ENDPROC 上述例子中,定义了一个用于比较数值大小的布尔量型功能程序,在调用此功能时需要输入比较下限值和上限值,如果数据nCount在上下限值范围之内,则返回为TRUE,否则为FALSE。 1.2.9轴配置监控指令 ConfL: 指定机器人在线性运动及圆弧运动过程中严格遵循程序中已设定的轴配置参数。 在默认情况下,轴配置监控是打开的,当关闭轴配置监控后,机器人在运动过程中采取最接近当前轴配置数据的配置到达指定目标点。 例如: 目标点p10中,数据[1,0,1,0]就是此目标点的轴配置数据: CONSTrobtaget P10: =[[*,*,*],[*,*,*,*],[1,0,1,0],[9E9,9E9,9E9,9E9,9E9,9E9]]; ConfL\Off; MoveLp10,v1000,fine,tool0; 机器人自动匹配一组最接近当前各关节轴姿态的轴配置数据移动至目标点p10,到达p10时,轴配置数据不一定为程序中指定的[1,0,1,0]。 在某些应用场合,如离线编程创建目标点或手动示教相邻两目标点间轴配置数据相差较大时,在机器人运动过程中容易出现报警“轴配置错误”而造成停机。 此种情况下,若对轴配置要求较高,则一般通过添加中间过渡点;若对轴配置要求不定目标点。 1.2.10计时指令 在机器人运动过程中,经常需要利用计时功能来计算当前机器人的运行节拍,并通过写屏指令显示相关信息。 下面以一个完整的计时案例来学习关于计时并显示计时信息的综合运用。 程序如下: VARclockclock1; ! 定义时钟数据clock1 VARnumCycleTime; ! 定义数字型数据CycleTime,用于存储时间数值 ClkResetclock1; ! 时钟复位 ClkStartclock1; ! 开始计时 … ! 机器人运动指令等 ClkStopclock1; ! 停止计时 CycleTime: =ClkRead(clock1); ! 读取时钟当前数值,并赋予值给CycleTime TPErase; ! 清屏 TPWrite“TheLastCycleTimeis”\Num: =CycleTime; ! 写屏,在示教器屏幕上显示节拍信息,假设当前数值CycleTime为10,则示教器屏幕上始终显示信息为“TheLastCycleTimeis10” 1.2.11动作触发指令 TriggL: 在线性运动过程中,在指定位置准确的触发事件,如置位输出信号、激活中断等。 可以定义多种类型的触发事件,如TriggI/O(触发信号)、TriggEquip(触发装置动作)、TriggInt(触发中断)等。 下面以触发装置动作(图4)类型为例(在准确的位置,触发机器人夹具的动作通常采用此种类型的触发事件)说明,程序如下: 图1-5动作触发示意 VARtriggdataGripOpen; ! 定义触发数据GripOpen TriggEquipGripOpen,10,0.1\DOp: =doGripOn,1; ! 定义触发事件GripOpen,在距离指定目标点前10mm处,并提前0.1s(用于抵消设备动作延迟时间)触发指定事件: 将数字输出信号doGripOn置为1 TriggLp1,v500,GripOpen,z50,tGripper; ! 执行TriggL,调用触发事件GripOpen,即机器人TCP在朝向p1运动过程中,在距离p1前10mm处,并且再提前0.1秒,则将doGripOn置为1 例如,为提高节拍时间,在控制吸盘夹具动作过程中,吸取产品时需要提前打开真空,在放置产品时需要提前释放真空,为了能够准确地触发吸盘夹具的动作,通常采用TriggL指令来对其进行控制。 1.2.12数组的应用 在定义程序数据时,可以将同种类型、同种用途的数值存放在同一数据中,当调用该数据时需要写明索引号来指定调用的是该数据中的哪个数值,这就是所谓的数组。 在RAPID中,可以定义一维数组、二维数组以及三维数组。 例如,一维数组: VARnumnum1{3}: =[5,7,9]; ! 定义一维数组num1 Num2: =num1{2}; ! num2被赋值为7 例如,二维数组: VARnumnum1{3,4}: =[[1,2,3,4],[5,6,7,8],[9,10,11,12]]; ! 定义二维数组num1 Num2: =num1{3,2}; ! num2被赋值为10 在程序编写过程中,当需要调用大量的同种类型、同种用途的数据时,创建数据时可以利用数组来存放这些数据,这样便于在编程过程中对其进行灵活调用。 甚至在大量I/O信号调用过程中,也可以先将I/O进行别名的操作,即将I/O信号与信号数据关联起来,之后将这些信号数据定义为数组类型,在程序编写中便于对同种类型、同种用途的信号进行调用。 1.2.13复杂程序数据赋值 多数类型的程序数据均是组合型数据,即里面包含了多项数值或字符串。 可以对其中任何一项参数进行赋值。 例如常见的目标数据: PERSrobtarget P10: =[[0,0,0],[1,0,0,0],[0,0,0,0],[9E9,9E9,9E9,9E9,9E9,9E9]]; PERSrobtarget P20: =[[100,0,0],[0,0,1,0],[1,0,1,0],[9E9,9E9,9E9,9E9,9E9,9E9]]; 目标点数据里面包含了四组数据,从前往后依次为TCP位置数据[100,0,0](trans)、TCP姿态数据[0,0,1,0](rot)、轴配置数据[1,0,1,0](robconf)和外部轴数据(extax),可以分别对该数据的各项数值进行操作,如: p10.trans.x: =p20.trans.x+50; p10.trans.y: =p20.trans.y-50; p10.trans.z: =p20.trans.z+100; p10.rot: =p20.rot; p10.robconf: =p20.robconf; 赋值后则p10为 PERSrobtarget p10: =[[150,-50,100],[0,0,1,0],[1,0,1,0],[9E9,9E9,9E9,9E9,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 在轨服务应用模块设计及人机交互技术 实验指导书 服务 应用 模块 设计 人机交互 技术 实验 指导书