基于UG二次开发的工业机器人作业仿真系统设计
物体在空间中存在六种可能的运动方向,分别是沿着x、y、z坐标轴的移动方向,和绕着x、y、z坐标轴的转动方向。在机械原理中,把这样的六个运动方向称为物体在空间运动的自由度。如果需要设计一种机器人操作臂(来抓取物体),那么机械臂末端的夹持器或焊枪等工具通常也需要能够实现六种方向的空间运动。这种工业机器人往往由六根运动杆件通过六个转动关节构成,每个关节由一个电机驱动,我们称为六自由度全转动副机器人,简称6R机器人。
当已知机器人末端执行器的位置姿态时,需要求解机器人各个关节的转动角度,这称为6R机器人的位置反解或位置逆解问题。在机器人学教科书上,通常只介绍末尾三个关节的轴线相交于同一点的6R机器人位置反解技术;很少介绍末尾三关节轴线不交于一点的一般6R机器人的位置反解方法。在1970年代,一般6R机器人的位置反解问题(等价地,即空间7R闭环机构位置分析问题)被国际机构学研究人员喻为“机构学的珠穆朗玛峰问题”。 前两个月发表了一篇关于工业机器人仿真软件设计与实现的论文,简要介绍了读博期间所编制的计算机软件。当时编制了两套机器人仿真软件,一套采用VC,完全自主开发,拥有软件著作权;另一套基于UG软件,采用Open C API技术二次开发,与企业CAD平台无缝集成。 论文中所涉及的机器人是日本公司的一款MOTOMAN机器人。机器人末尾三个关节的轴线没有交于同一点,而是存在着30毫米的偏距。别小看这3个厘米的偏距,这使得在编制计算机程序时花费了很大精力来研究6R机器人位置反解方法。当然,这篇小论文中没有涉及上述的那些复杂的机构分析问题,这些复杂问题还是留待以后的文章讨论吧。虽然这篇机器人仿真的论文可能技术多于科学、工程强于学术,不过自己对这篇“技术报告”还是比较满意的。因为目前为止,尚未发现有采用相似技术路线在UG软件中实现机器人运动仿真的论文或报告。 有一点想说明的问题,日本公司的这款机器人为什么要设计成末尾三个关节的轴线不相交于一点呢?一种说法是,这样的机械结构更利于机器人焊接作业。我想可能还有第二个原因,这样的机械结构很难让别人仿造,因为这种机器人的位置反解技术不是普通工程师能够完全胜任的,更不是那些山寨公司能够轻易破解的。 这篇论文发表后,图片转成黑白色了,有些看不清晰。所以博文下面转发带彩色图片的论文。 -----------------
图1 基于UG二次开发的工业机器人作业仿真系统
图2 仿真系统的体系结构 与运动学正问题对应的是机器人关节坐标控制方式,即操作人员直接指定各关节的移动长度或转动角度,从而带动末端执行器运动。与运动学逆问题对应的是机器人直角坐标控制方式,即操作人员指定末端执行器所期望的位置和姿态,然后求解出各关节需要的移动长度或转动角度,从而带动末端执行器运动。 以上是机器人作业仿真系统中作业管理层进行的机器人运动学求解。无论关节坐标控制还是直角坐标控制,UG支撑层都是通过关节运动来带动机器人末端执行器运动的。在仿真系统开发实践中,发现UG运动模块难以进行二次开发,因此本文采用对UG装配模块的二次开发来实现机器人运动仿真,有修改装配约束和装配重定位两种技术方案。 采用修改装配约束的方案需要事先建立合适的机器人装配约束。如转动关节应采用面面角度约束,移动副应采用面面距离约束。关键代码如下: //由机器人装配模型的实例获取原型 tRobotPart = UF_ASSEM_ask_prototype_of_occ (tRobot); //设置当前机器人装配模型为工作部件,并保存原始工作部件 UF_ASSEM_set_work_part_quietly (tRobotPart, &tOldWorkPart); //创建装配模型中转动关节角度约束的表达式 sprintf (newExp, "%s=%lf", Joint.lh_str, Joint.dAngle); //修改装配约束 UF_MODL_edit_exp (newExp); //更新模型,这样机器人运动副就发生了转动 UF_MODL_update ( ); //恢复原始工作部件为当前工作部件 UF_ASSEM_set_work_part_quietly (tOldWorkPart, &tRobotPart); 采用装配重定位的方案不需要建立装配约束,但需要指定杆件局部坐标系原点和姿态矩阵的前6个元素。关键代码如下: // Joint.tIns为杆件实例;new_origin是double[3]数组,为局部坐标系原点;new_csys_matrix是double[6]数组,为局部坐标系x轴和y轴的姿态 UF_ASSEM_reposition_instance (Joint.tIns, new_origin, new_csys_matrix); 仿真系统中机器人运动过程如图4所示。 图4 两台六自由度焊接机器人协同运动
4. 机器人运动过程碰撞检测及实现 碰撞检测可以防止机器人运动过程中与工件、夹具、机架等发生干涉。由人机接口层中的碰撞检测开关,作业管理层中的碰撞检测子模块,和UG支撑层中的间隙检查功能构成。机器人运动过程中的碰撞检测流程如图5所示。UG支撑层中实现间隙检查的关键代码为: //进行间隙分析,datasetWorkpart为分析结果数据集合 UF_CLEAR_do_clearance_analysis(datasetWorkpart); //获得间隙分析结果,其中summary.n_all_interf中存储了干涉数目 UF_CLEAR_ask_results(datasetWorkpart,&summary); 仿真系统中机器人碰撞检测如图6所示。 图5 碰撞检测流程
|
|