ABB机器人---基础编程

目录

第一章 代码+解释

1.1 基础代码

1.1.2 关于 VAR robtarget pos

1.1.3 关于四元数

1.2 机器人初始化程序

1.3 配置通信 (ProfiNet 示例,ABB RAPID)

1.4 设置干涉区 (ABB RAPID)

1.5 示教轨迹和自动过程 (ABB RAPID)

1.6 配置抓手并进行抓取操作 (ABB RAPID)

1.7 上下料操作 (ABB RAPID)

1.8 弧焊机器人程序 (ABB RAPID)




第一章 代码+解释

1.1 基础代码

MODULE MainModule
  VAR robtarget pos1 := [[1000,0,500],[1,0,0,0],[0,0,0,0],[9E9,9E9,9E9,9E9,9E9,9E9]];
  VAR robtarget pos2 := [[800,200,600],[1,0,0,0],[0,0,0,0],[9E9,9E9,9E9,9E9,9E9,9E9]];
  VAR robtarget pos3 := [[600,400,700],[1,0,0,0],[0,0,0,0],[9E9,9E9,9E9,9E9,9E9,9E9]];

  PROC Main()
    ; 移动到初始位置
    MoveJ pos1, v1000, z50, tool0;
    ; 以直线移动到第二个位置
    MoveL pos2, v500, z10, tool0;
    ; 以直线移动到第三个位置
    MoveL pos3, v500, z10, tool0;
  ENDPROC
ENDMODULE

注释

  1. MODULE MainModule: 定义一个主模块 MainModule
  2. VAR robtarget pos1 := ...: 声明并初始化位置变量 pos1,指定位置和姿态。
  3. VAR robtarget pos2 := ...: 声明并初始化位置变量 pos2,指定位置和姿态。
  4. VAR robtarget pos3 := ...: 声明并初始化位置变量 pos3,指定位置和姿态。
  5. PROC Main(): 定义主过程 Main
  6. MoveJ pos1, v1000, z50, tool0;: 以关节运动模式(MoveJ)移动到 pos1,速度为1000,区间z为50,工具为tool0。
  7. MoveL pos2, v500, z10, tool0;: 以直线运动模式(MoveL)移动到 pos2,速度为500,区间z为10,工具为tool0。
  8. MoveL pos3, v500, z10, tool0;: 以直线运动模式(MoveL)移动到 pos3,速度为500,区间z为10,工具为tool0。
  9. ENDPROC: 结束过程。
  10. ENDMODULE: 结束模块。

1.1.2 关于 VAR robtarget pos

  • VAR:这是RAPID语言中的关键字,用于声明变量。
  • robtarget:这是变量的类型。在RAPID中,robtarget类型用于描述机器人目标位置和姿态,包括笛卡尔坐标和四元数。
  • pos1:这是变量的名称,表示这是第一个位置变量。

1. :=

  • 赋值操作符,用于初始化变量 pos1 的值。

2. [[1000,0,500],[1,0,0,0],[0,0,0,0],[9E9,9E9,9E9,9E9,9E9,9E9]]

  • 这是一个数组,表示 robtarget 类型变量的初始值。robtarget 类型由四部分组成,分别是位置、姿态(四元数)、配置数据和外部轴。

. [[1000,0,500]]

  • 位置部分,这是一个3D坐标数组,表示机器人末端执行器在空间中的位置。
    • 1000:X轴坐标,表示位置在X轴方向上的距离,单位是毫米。
    • 0:Y轴坐标,表示位置在Y轴方向上的距离,单位是毫米。
    • 500:Z轴坐标,表示位置在Z轴方向上的距离,单位是毫米。

3. [1,0,0,0]

  • 姿态部分,这是一个四元数数组,表示机器人末端执行器的姿态。
    • 1:四元数的实部,表示姿态的角度。
    • 000:四元数的虚部,表示姿态的方向。

四元数 [1,0,0,0] 对应的是没有旋转的姿态(即与参考坐标系对齐)。

4. [0,0,0,0]

  • 配置数据部分,这是一组四个整数,用于描述机器人运动时的特定配置(如关节角度、翻转状态等)。
    • 通常配置数据与机器人型号有关,这里所有值为 0,表示默认配置。

5. [9E9,9E9,9E9,9E9,9E9,9E9]

  • 外部轴部分,这是一个包含六个值的数组,表示机器人使用的外部轴的位置。
    • 9E9:表示一个极大值(通常是 9999999999),用于指示未定义或未使用的外部轴位置。

1.1.3 关于四元数

四元数是一种用于表示三维空间中旋转的数学工具。它们比欧拉角或旋转矩阵更稳定,不容易出现万向节锁(Gimbal lock)问题。一个四元数通常表示为 (𝑤,𝑥,𝑦,𝑧)(w,x,y,z),其中 𝑤w 是实部,𝑥,𝑦,𝑧x,y,z 是虚部。

四元数 (1,0,0,0)(1,0,0,0) 表示没有旋转。这是因为它等价于单位旋转矩阵,或旋转角度为0度的旋转。

一些常见的四元数姿态示例

1. 没有旋转

  • 四元数: (1,0,0,0)(1,0,0,0)
  • 描述: 机器人末端执行器没有旋转,保持与参考坐标系对齐。

2. 绕X轴旋转90度

  • 四元数: (2/2,2/2,0,0)(2​/2,2​/2,0,0) 或 (0.7071,0.7071,0,0)(0.7071,0.7071,0,0)
  • 描述: 机器人末端执行器绕X轴顺时针旋转90度。

3. 绕Y轴旋转90度

  • 四元数: (2/2,0,2/2,0)(2​/2,0,2​/2,0) 或 (0.7071,0,0.7071,0)(0.7071,0,0.7071,0)
  • 描述: 机器人末端执行器绕Y轴顺时针旋转90度。

4. 绕Z轴旋转90度

  • 四元数: (2/2,0,0,2/2)(2​/2,0,0,2​/2) 或 (0.7071,0,0,0.7071)(0.7071,0,0,0.7071)
  • 描述: 机器人末端执行器绕Z轴顺时针旋转90度。

5. 绕X轴旋转180度

  • 四元数: (0,1,0,0)(0,1,0,0)
  • 描述: 机器人末端执行器绕X轴旋转180度。

6. 绕Y轴旋转180度

  • 四元数: (0,0,1,0)(0,0,1,0)
  • 描述: 机器人末端执行器绕Y轴旋转180度。

7. 绕Z轴旋转180度

  • 四元数: (0,0,0,1)(0,0,0,1)
  • 描述: 机器人末端执行器绕Z轴旋转180度。

计算四元数的基本公式

一个四元数 (𝑤,𝑥,𝑦,𝑧)可以通过旋转角度 𝜃和旋转轴向量 (𝑢𝑥,𝑢𝑦,𝑢𝑧)来计算:


示例计算


1.2 机器人初始化程序

用ABB RAPID编程语言编写的一个简单的机器人初始化程序。它的主要功能包括工具和用户坐标系的初始化,以及机器人上电和校零点操作。我们将逐行详细解释这个程序:

程序模块头部

  • MODULE InitRobot: 定义一个名为 InitRobot 的模块。模块是RAPID程序的基本构建单元,包含了多个过程、函数和数据。

主过程定义

  • PROC Main(): 定义一个名为 Main 的过程,作为程序的主入口点。

工具坐标系初始化

  • ! 工具坐标系初始化: 注释,说明接下来是工具坐标系的初始化部分。
  • VAR tooldata tool0 := ...: 定义一个变量 tool0,类型为 tooldata,并进行初始化。
    • [TRUE, [[0,0,250],[1,0,0,0]], [1,1,1,[0,0,0,0]], [1, [0,0,0], [0,0,0,0]]]: 初始化值的详细解释:
      • TRUE: 指示工具数据有效。
      • [[0,0,250],[1,0,0,0]]: 工具的TCP(Tool Center Point)位置和姿态。
        • [[0,0,250]]: TCP的坐标位置,表示工具在Z轴上延伸250毫米。
        • [[1,0,0,0]]: 四元数,表示工具的姿态(无旋转)。
      • [1,1,1,[0,0,0,0]]: 工具的负载信息,包含重量、质心位置和惯性矩。
      • [1, [0,0,0], [0,0,0,0]]: 工具的未知负载和惯性数据,通常为默认值。
  • PERS tooldata tool1 := ...: 定义一个持久性变量 tool1,其类型和初始化值与 tool0 相同。持久性变量在控制器重启后仍然保留其值。

用户坐标系初始化

  • ! 用户坐标系初始化: 注释,说明接下来是用户坐标系的初始化部分。
  • VAR wobjdata wobj0 := ...: 定义一个变量 wobj0,类型为 wobjdata,并进行初始化。
    • [TRUE, TRUE, "", [[1000,0,0],[1,0,0,0]]]: 初始化值的详细解释:
      • TRUE: 指示工件数据有效。
      • TRUE: 指示工件坐标系相对于工件的坐标系(而不是机器人的基座)。
      • "": 工件名称为空。
      • [[1000,0,0],[1,0,0,0]]: 工件的基座位置和姿态。
        • [[1000,0,0]]: 工件坐标系在世界坐标系中的位置,X轴上偏移1000毫米。
        • [[1,0,0,0]]: 四元数,表示工件坐标系的姿态(无旋转)。
  • PERS wobjdata wobj1 := ...: 定义一个持久性变量 wobj1,其类型和初始化值与 wobj0 相同。

设置工具和用户坐标系

  • ! 设置工具和用户坐标系: 注释,说明接下来将设置工具和用户坐标系。
  • ConfL\Off;: 关闭线性运动配置检查。
  • ConfJ\Off;: 关闭关节运动配置检查。
  • Tool0 := tool0;: 将 tool0 赋值给 Tool0,设置当前使用的工具。
  • Wobj0 := wobj0;: 将 wobj0 赋值给 Wobj0,设置当前使用的工件坐标系。

机器人上电和校零点

  • ! 机器人上电和校零点: 注释,说明接下来是机器人上电和校零点操作。
  • MoveJ [[0,0,0,0,0,0]], v1000, fine, tool0\WObj:=wobj0;: 使用关节运动(MoveJ)将机器人移动到所有关节角度为零的位置。
    • [[0,0,0,0,0,0]]: 关节角度数组,所有关节角度为零。
    • v1000: 运动速度,单位是度/秒。
    • fine: 精细停止,表示在目标位置完全停止。
    • tool0\WObj:=wobj0: 使用 tool0 作为工具,wobj0 作为工件坐标系。
    • 这个指令用于上电和校零点。

结束主过程和模块

  • ENDPROC: 结束 Main 过程的定义。
  • ENDMODULE: 结束 InitRobot 模块的定义。
MODULE InitRobot

  PROC Main()

    ! 工具坐标系初始化
    VAR tooldata tool0 := [TRUE, [[0,0,250],[1,0,0,0]], [1,1,1,[0,0,0,0]], [1, [0,0,0], [0,0,0,0]]];
    PERS tooldata tool1 := [TRUE, [[0,0,250],[1,0,0,0]], [1,1,1,[0,0,0,0]], [1, [0,0,0], [0,0,0,0]]];

    ! 用户坐标系初始化
    VAR wobjdata wobj0 := [TRUE, TRUE, "", [[1000,0,0],[1,0,0,0]]];
    PERS wobjdata wobj1 := [TRUE, TRUE, "", [[1000,0,0],[1,0,0,0]]];

    ! 设置工具和用户坐标系
    ConfL\Off;
    ConfJ\Off;
    Tool0 := tool0;
    Wobj0 := wobj0;

    ! 机器人上电和校零点
    MoveJ [[0,0,0,0,0,0]], v1000, fine, tool0\WObj:=wobj0; ! 上电
    MoveJ [[0,0,0,0,0,0]], v1000, fine, tool0\WObj:=wobj0; ! 校零点

  ENDPROC
ENDMODULE

1.3 配置通信 (ProfiNet 示例,ABB RAPID)

MODULE ProfiNetConfig
  PERS signaldi DI_ProfiNet := [1];
  PERS signaldo DO_ProfiNet := [1];

  PROC Main()
    ! 初始化ProfiNet通信
    SetDO DO_ProfiNet, 1;
    WaitTime 1;
    SetDO DO_ProfiNet, 0;
    WaitTime 1;

    ! 发送数据到机器人
    IF DI_ProfiNet = 1 THEN
      SetDO DO_ProfiNet, 1;
    ELSE
      SetDO DO_ProfiNet, 0;
    ENDIF
  ENDPROC
ENDMODULE

1.4 设置干涉区 (ABB RAPID)

​
MODULE InterferenceZone
  PROC Main()
    ! 设置空间干涉区
    VAR robtarget zoneStart := [500, 500, 500, 0, 0, 0];
    VAR robtarget zoneEnd := [1000, 1000, 1000, 0, 0, 0];

    ConfL\Off;
    MoveJ zoneStart, v1000, fine, tool0;
    MoveL zoneEnd, v1000, fine, tool0;
  ENDPROC
ENDMODULE

​

1.5 示教轨迹和自动过程 (ABB RAPID)

​
MODULE TeachAndAuto
  PERS robtarget p1 := [1000, 0, 500, 0, 0, 0];
  PERS robtarget p2 := [1050, 0, 500, 0, 0, 0];
  PERS robtarget p3 := [1100, 0, 500, 0, 0, 0];

  PROC Main()
    MoveJ p1, v1000, fine, tool0;
    MoveL p2, v500, fine, tool0;
    MoveL p3, v500, fine, tool0;
    MoveL p1, v500, fine, tool0;
  ENDPROC
ENDMODULE

1.6 配置抓手并进行抓取操作 (ABB RAPID)

MODULE GripperConfig
  VAR bool gripperClosed := FALSE;

  PROC Main()
    VAR robtarget pGrab := [1000, 0, 500, 0, 0, 0];
    VAR robtarget pDrop := [1050, 0, 500, 0, 0, 0];

    ! 初始化抓手
    SetGripper(FALSE);
    MoveJ pGrab, v1000, fine, tool0;
    SetGripper(TRUE);
    MoveJ pDrop, v1000, fine, tool0;
    SetGripper(FALSE);
    MoveJ pGrab, v1000, fine, tool0;
  ENDPROC

  PROC SetGripper(bool close)
    IF close THEN
      SetDO doGripper, 1;
      gripperClosed := TRUE;
    ELSE
      SetDO doGripper, 0;
      gripperClosed := FALSE;
    ENDIF
  ENDPROC
ENDMODULE

1.7 上下料操作 (ABB RAPID)

MODULE LoadUnload
  PROC Main()
    VAR robtarget pLoad := [1000, 0, 500, 0, 0, 0];
    VAR robtarget pUnload := [1050, 0, 500, 0, 0, 0];

    ! 移动到加载位置
    MoveJ pLoad, v1000, fine, tool0;
    ! 模拟加载操作
    WaitTime 1;
    ! 移动到卸载位置
    MoveJ pUnload, v1000, fine, tool0;
    ! 模拟卸载操作
    WaitTime 1;
    ! 返回起始位置
    MoveJ pLoad, v1000, fine, tool0;
  ENDPROC
ENDMODULE

1.8 弧焊机器人程序 (ABB RAPID)

MODULE ArcWelding
  VAR welddata wdata:=[20, 0.8, 5, 1.5, 0.1];

  PROC Main()
    VAR robtarget pStart := [1000, 0, 500, 0, 0, 0];
    VAR robtarget pWeld1 := [1050, 0, 500, 0, 0, 0];
    VAR robtarget pWeld2 := [1100, 0, 500, 0, 0, 0];

    MoveJ pStart, v1000, fine, tool0;
    ArcLStart wdata, pWeld1, v500, fine, tool0;
    ArcLEnd pWeld2, v500, fine, tool0;
    MoveJ pStart, v1000, fine, tool0;
  ENDPROC
ENDMODULE

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/641665.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[WUSTCTF2020]funnyre

ida打开 mian 函数 不能反汇编,往下翻有一处报红,一看是花指令,还怪长,报红的都nop后,全选按P重新生成函数 三百多个变量,也是不太可能一个个去解了,刚好前两天简单练了一下 angr (…

拓数派入选中电联大数据与统计分会两大重点专项工作组

自中国电力企业联合会大数据与统计分会成立以来,深入贯彻党中央、国务院关于不断做强做优做大我国数字经济有关要求,充分发挥数据要素乘数效应,凝聚行业专家及能源电力产业链各主体力量,持续推进能源电力数据资源交易共享&#xf…

Xinstall:开启携带参数注册新时代,提升用户体验与运营效率

在移动互联网时代,App推广和运营面临着诸多挑战。其中,如何精准追踪用户来源、评估推广效果以及优化用户体验,一直是开发者们关注的焦点。而Xinstall作为一家一站式App全渠道统计服务商,通过其独特的携带参数注册功能,…

electron调试自动更新,不触发下载进度解决方案

调试时候删除掉后缀是.blockmap的文件。如果你的代码在改动不大的情况下发布一个新版本。那个安装器可能会根据这个数据自动合成一个包,而不走网络路径。从而不触发下载进度。

kubectl--操作指令大全

目录 一 kubectl 1 查看版本信息 2 查看资源对象简写 3 查看集群信息 4 配置kubectl自动补全 5 node节点查看日志 二 基本信息查看 1 查看 master 节点状态 2 查看命令空间 3 查看命名空间为default的所有资源 4 创建命名空间app 5 删除命名空间app 6 指定pod控…

外卖系统源码开发全攻略:外卖小程序与后台管理系统的设计与实现

今天,小编将详细介绍外卖系统源码的开发全攻略,从需求分析到设计与实现,为开发者提供全面指导。 一、需求分析 1.用户需求 用户是外卖系统的核心,需满足以下基本需求: -浏览菜单并下单 -实时追踪订单 -多种支付方…

对安卓手机上损坏的 SD 卡进行故障排除:恢复提示和修复

概括 如果您总是在旅途中,那么您很可能每天都在使用 SD 卡。这些微小但功能强大的闪存已经变得和手机的内部存储一样有用。它们可以存储数据并移动您想要的任何数据类型,因为它们在 Android 设备上添加了额外的存储空间。不幸的是,他们可能会…

leetCode-hot100-数组专题之双指针

数组双指针专题 1.同向双指针1.1例题26.删除有序数组中的重复项27.移除元素80.删除有序数组中的重复项 Ⅱ 2.相向双指针2.1例题11.盛最多水的容器42.接雨水581.最短无序连续子数组 双指针在算法题中很常见,下面总结双指针在数组中的一些应用,主要分为两类…

探索自动化办公的新境界:批量操作与智能管理

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、自动化办公的必要性与价值 二、基础操作与自动化脚本 三、Python在自动化办公中的应用…

Java 类加载和实例化对象的过程

1. 类加载实例化过程 当我们编写完一个*.java类后。编译器(如javac)会将其转化为字节码。转化的字节码存储在.class后缀的文件中(.class 二进制文件)。接下来在类的加载过程中虚拟机JVM利用ClassLoader读取该.class文件将其中的字…

DEV--C++小游戏(吃星星(1.2))

目录 吃星星(1.2) 该版本简介更新说明 分部代码 头文件命名空间变量 结构体 角色结构体 星星结构体 打印地图结构体 函数 函数声明 单人模式游戏函数 双人模式游戏函数 开始游戏函数 清屏函数 定点输出函数 隐藏光标函数 输入函数 单人…

【C++】<知识点> 标准和文件的输入输出

目录 一、输入输出操作 1. 相关的类 2. 标准流对象 3. istream类的成员函数 二、流操纵算子 1. 整数流的基数 2. 浮点数精度的流操纵算子 3. 域宽的流操纵算子 4. 其他的流操纵算子 5. 用户自定义流操纵算子 三、文件读写 1. 文本文件的读写 2. 二进制文件的读写 3. 文件读写…

编一个自己的万年历

编一个自己的万年历 前阶段突然想查一下某一天是星期几,于是自己编了一个[小程序][https://blog.csdn.net/weixin_41905135/article/details/138972055?spm1001.2014.3001.5501],但是功能很单一,就是单纯的查是星期几。(虽然用网…

Deep Residual Learning for Image Recognition--论文笔记

论文笔记 论文来源: Deep Residual Learning for Image Recognition 代码来源 还没上传 1论文摘要的翻译 深度神经网络更难训练。我们提出了一个残差学习框架,以简化比以前使用的网络深度大得多的网络的训练。我们明确地将层重新表述为参考层输入的…

十五、Python模块 1、(入门一定看!!!)「长期更新Python简单入门到适用」

首先什么是模块? 小伙伴们经常看我写的教程不难发现,前面我们用过几次模块就是sys的那个,其实python不仅标准库中包含了大量的模块(也被称之为准模块),还有大量的第三方模块,开发者也可以自己发…

Python学习---基于HTTP的服务端基础框架搭建案例

整体功能: 1 创建框架构建相关的文件夹 2 创建app,模块文件 3 在 app模块文件中创建application函数(用于处理请求) 4 将request_handler()中的处理逻辑交由app模块的application函数完成 5 app模块的 application函数返回响应报文 6 在application 文件夹中创建一个…

零基础HTML教程(34)--HTML综合实例

文章目录 1. 背景2. 开发流程2.1 网站功能设计2.2 建立网站目录结构2.3 开发首页2.2 生平简介页2.3 经典诗词页2.4 苏轼图集页2.5 留言板 3. 小结 1. 背景 通过前面33篇文章的学习,我们对HTML有了一个比较全面的了解。 本篇,我们编写一个网站实例&…

C++ RBTree封装mapset

目录 RBTreeNode的声明 RBTree结构 map结构 set结构 改造红黑树 迭代器类 迭代器成员函数 默认成员函数 Insert set map RBTreeNode的声明 template<class T> struct RBTreeNode {RBTreeNode<T>* _left;RBTreeNode<T>* _right;RBTreeNode<T>*…

心理咨询系统|心理咨询系统开发|心理咨询软件开发

在快节奏的现代生活中&#xff0c;心理健康问题越来越受到人们的关注。为了有效应对这些问题&#xff0c;心理咨询系统应运而生&#xff0c;它为人们提供了一个安全、便捷的平台&#xff0c;以寻求心理帮助和支持。本文将详细介绍心理咨询系统的功能、优势以及未来发展趋势。 …

vue项目实战 - 如果高效的实现防抖和节流

在Vue项目中&#xff0c;处理高频事件的优化至关重要&#xff0c;直接影响用户体验和应用性能。防抖&#xff08;Debounce&#xff09;和节流&#xff08;Throttle&#xff09;是两种常用且有效的方法&#xff0c;可以控制事件触发频率&#xff0c;减少不必要的资源消耗。如何在…