当前位置: 首页 > article >正文

【仿真动画】ABB IRB 8700 机器人搬运(ruckig在线轨迹生成)动画欣赏

568e475f94af9ed203b811a7b939b815.png

场景

动画

一、IRB 8700简介

02e4641fe156b97a95ed1b8d564addc5.png

 二、动画脚本重点分析

2.1  sim.moveToPose

通过在两个 poses 之间执行插值,使用 Ruckig 在线轨迹生成器生成对象运动数据。该函数可以通过处理 4 个运动变量(x、y、z 和两个姿势之间的角度)或单个运动变量(t,需要指定一个度量来计算两个姿势之间的距离)来操作。该函数只能从线程中运行的脚本调用,因为这是一个阻塞操作

float[7]/float[12] endP/endM, float t = sim.moveToPose(int flags, 
                                                       float[7]/float[12] currentP/currentM, 
                                                       float[] maxVel, float[] maxAccel, 
                                                       float[] maxJerk, 
                                                       float[7]/float[12] targetP/targetM, 
                                                       func/string callback, auxData, 
                                                       float[4] metric = nil, 
                                                       float timeStep = 0)

Arguments 参数

  • flags: Ruckig flags. -1 for default flags.
    标志:Ruckig 标志。-1 表示默认标志。

  • currentP/currentM: the start pose, specified via a pose [x y z qx qy qz qw] or transformation matrix [Vx0 Vy0 Vz0 P0 Vx1 Vy1 Vz1 P1 Vx2 Vy2 Vz2 P2]
    currentP/currentM:起始姿势,通过姿势 [x y z qx qy qz qw] 或变换矩阵 [Vx0 Vy0 Vz0 P0 Vx1 Vy1 Vz1 P1 Vx2 Vy2 Vz2 P2] 指定

  • maxVel: the maximum allowed velocity. If metric is specified, then this is an array of size 1, otherwse an array of size 4. If sim.ruckig_minVel is specified in flags, then this array should contain twice as many values, first the values for the maximum velocity, then the values for the minimum velocity.
    maxVel:允许的最大速度。如果指定了 metric,则这是一个大小为 1 的数组,否则为大小为 4 的数组。如果在标志中指定了 sim.ruckig_minVel,则该数组应包含两倍的值,首先是最大速度的值,然后是最小速度值。

  • maxAccel: the maximum allowed acceleration. If metric is specified, then this is an array of size 1, otherwse an array of size 4. If sim.ruckig_minAccel is specified in flags, then this array should contain twice as many values, first the values for the maximum acceleration, then the values for the minimum acceleration.
    maxAccel:允许的最大加速度。如果指定了 metric,则这是一个大小为 1 的数组,否则为大小为 4 的数组。如果在标志中指定了 sim.ruckig_minAccel,则该数组应包含两倍的值,首先是最大加速度的值,然后是最小加速度值。

  • maxJerk: the maximum allowed jerk. If metric is specified, then this is an array of size 1, otherwse an array of size 4.
    maxJerk:允许的最大加加速度。如果指定了 metric,则这是一个大小为 1 的数组,否则为大小为 4 的数组。

  • targetP/targetM: the goal pose, specified via a pose [x y z qx qy qz qw] or transformation matrix [Vx0 Vy0 Vz0 P0 Vx1 Vy1 Vz1 P1 Vx2 Vy2 Vz2 P2]
    targetP/targetM:目标姿势,通过姿势 [x y z qx qy qz qw] 或变换矩阵 [Vx0 Vy0 Vz0 P0 Vx1 Vy1 Vz1 P1 Vx2 Vy2 Vz2 P2] 指定

  • callback: a callback function that will be called for each movement step. The arguments provided to the callback function are: currentPose/currentMatrix, currentVel, currentAccel, auxData.
    回调:每个移动步骤都会调用的回调函数。提供给回调函数的参数有:currentPose/currentMatrix、currentVel、currentAccel、auxData。

  • auxData: random data that will be forwarded to the callback function.
    auxData:将转发到回调函数的随机数据。

  • metric: an optional metric, used to compute a pose-pose distance. If metric is None/nil, the movement calculation happens in the 4-dimensional space (x,y,z,angle), otherwise it happens in the 1-dimensional space (t).
    metric:可选的度量,用于计算位姿-位姿距离。如果 metric 为 None/nil,则运动计算发生在 4 维空间 (x,y,z,angle) 中,否则发生在 1 维空间 (t) 中。

  • timeStep: the desired time step size. A value of 0 indicates that the current simulation time step will be used.
    timeStep:所需的时间步长。值 0 表示将使用当前模拟时间步长。

Return values 返回值

  • endP/endM: the pose at the end of the movement, specified via a pose [x y z qx qy qz qw] or transformation matrix [Vx0 Vy0 Vz0 P0 Vx1 Vy1 Vz1 P1 Vx2 Vy2 Vz2 P2]
    endP/endM:运动结束时的位姿,通过位姿 [x y z qx qy qz qw] 或变换矩阵 [Vx0 Vy0 Vz0 P0 Vx1 Vy1 Vz1 P1 Vx2 Vy2 Vz2 P2] 指定

  • t: the leftover time in current simulation step, i.e. the remaining time that was not used for movement.
    t:当前模拟步骤的剩余时间,即未用于运动的剩余时间。

2.2 逆运动学求解

建立4个机器人运动学的IK组,作为auxData成员传递给自定义函数moveToPose,在自定义函数中传递给函数 sim.moveToPose的回调函数,回调函数中调用simIK.handleGroup处理所有逆运动学组的求解并设置{syncWorlds=true}将IK组的处理结果同步到仿真场景。以下依次为ik组1-4.

dbca84b8d7b9a3bd2e134cca99935bee.png

5ab4d60b3318018f33e6584f0e9ae105.jpeg

8c7cf025b9fc67a89a0d4a49cf142021.jpeg

3f3a3490a3f62659d9ed9a069c69da32.jpeg

5439d7e7226202268763d7c4a9f54673.png

2.3 吸盘仿真

初始化函数中设置了吸盘是否为无限吸力、设置了最大拉力、最大剪切力,最大剥离扭矩。

传感函数中监控模型的自定义数据块吸盘状态:吸合-激活或释放-非激活,进行不同处理。当非激活时,重置dummy l 与l2重合,父对象为吸盘。当激活时,判断父对象是否为吸盘,如果为吸盘说明没有吸物体,此时通过接近传感器获取要吸合的物体,将dummy l绑定到物体上,并关联l 和l2 ;如果已经吸合物体,读取力传感器,判断是否需要有条件的释放物体,比如超出最大拉力、超出最大剪切力,任意方向的扭矩超过最大剥离扭矩。满足释放条件,就地释放物体。 同时在传感函数中实时检测仿真状态是否为“正在停止的最后一步”,如果是,则重置l与l2重合,父对象恢复为吸盘。

2.4 机器人Tip的速度曲线和加速度曲线

因为Tip的速度可直接获得,可直接用于绘制速度曲线图。加速度曲线图六需要通过 sim.setGraphStreamTransformation设置 sim.stream_transf_derivative,此时直接将速度值传递给加速度曲线即可。

参考网址:

https://new.abb.com/products/robotics/zh/robots/articulated-robots/irb-8700

https://search.abb.com/library/Download.aspx?DocumentID=3HAC052852-001&LanguageCode=en&DocumentPartId=&Action=Launch

https://library.e.abb.com/public/8b7f0d10fde0465c817d18e2e7664d37/IRB8700_datasheet_CN%20Rev%20D.pdf



作者陈晓永:智能装备专业高级工程师,软件工程师。机器人自动化产线仿真动画制作

The End


http://www.kler.cn/a/135725.html

相关文章:

  • 学习笔记(prism--视频【WPF-prism核心教程】)--待更新
  • Java爬虫技术:按关键字搜索VIP商品详情
  • 精选9个自动化任务的Python脚本精选
  • Linux内核 -- UIO (User-space I/O) 简介与使用笔记
  • 去除 el-input 输入框的边框(element-ui@2.15.13)
  • 19_HTML5 Web Workers --[HTML5 API 学习之旅]
  • 场景交互与场景漫游-交运算与对象选取(8-1)
  • 微服务实战系列之Token
  • 深度学习二维码识别 计算机竞赛
  • 黑马程序员 计算机网络(笔记)
  • Hello World分析
  • iceberg学习笔记(2)—— 与Hive集成
  • webSocket基于面向对象二次封装
  • vue3基于vite打包
  • echarts 折线图内容区域渐变、曲线平滑
  • MyBatis 事务源码分析
  • 2024年软件测试面试必看系列,看完去面试你会感谢我的!!
  • [Jenkins] Docker 安装Jenkins及迁移流程
  • nginx代理本地服务请求,避免跨域;前端图片压缩并上传
  • ajax,axios,fetch
  • Nodejs--Express框架使用
  • 编程刷题网站以及实用型网站推荐
  • Oracle Data Redaction和Oracle Data Pump
  • C#asp.net考试系统+sqlserver
  • 设计模式-创建型模式-单例模式
  • Flink之OperatorState