【仿真动画】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.mzph.cn/news/147030.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度学习数据集—细胞、微生物、显微图像数据集大合集

最近收集了一大波关于细胞、微生物、显微图像数据集,有细胞、微生物,细菌等。 接下来是每个数据的详细介绍!! 1、12500张血细胞增强图像(JPEG)数据集 该数据集包含12500张血细胞增强图像(JPE…

vscode终端npm install报错

报错如下: npm WARN read-shrinkwrap This version of npm is compatible with lockfileVersion1, but package-lock.json was generated for lockfileVersion2. Ill try to do my best with it! npm ERR! code EPERM npm ERR! syscall open npm ERR! errno -4048…

视频剪辑技巧:轻松搞定视频随机合并,一篇文章告知所有秘诀

在视频制作的过程中,视频随机合并是一种创新的剪辑手法,它打破了传统的线性剪辑模式,使得视频剪辑更加灵活和有趣。通过将不同的视频片段随机组合在一起,我们可以创造出独特的视觉效果和情感氛围。这种剪辑方式让观众在观看视频时…

Hive函数

文章目录 一、Hive建表SQL二、Hive函数三、函数1、查看内置函数2、空字段赋值(nvl)3、CASE WHEN THEN ELSE END4、行转列5、列转行6、开窗函数6.1 简介6.2 语法6.3 案例6.4 LAG函数6.5 Ntile函数6.6 Rank 7、自定义函数 四、压缩和存储1、简介2、压缩简介3、Map输出阶段压缩4、…

数据处理生产环境_利用MurmurHash3算法在Spark和Scala中生成随机颜色

需求 根据给定的轨迹编号在这一列后面生成随机颜色_16 输入数据 ("吃饭", "123"), ("吃饭", "宋江"), ("郭靖", "宋江"), ("杨过", "奥特曼"), ("周芷若", "张无忌"),…

uniapp地图手动控制地图scale

前言 首次使用uniapp开发地图过程中,发现uniapp地图居然没有提供手动控制地图scale的方法,这个也着实没有想到,查了半天资料,也终于找到一个方法能够比较好的控制scale,做个记录。 代码 要定义一个地图map&#xff…

⑧【MySQL】数据库查询:内连接、外连接、自连接、子查询、多表查询

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ 内连接、外连接、自连接、子查询、多表查询 ⑧…

新加坡服务器搭建网站出现PHP错误怎么处理?

当您在新加坡服务器上搭建 PHP 网站时,显示错误信息是非常重要的。PHP 错误的及时检测和解决有助于提高网站的稳定性和安全性。以下是一些步骤,帮助您在新加坡服务器上实现这一目标: 步骤 1:编辑 PHP 配置文件 打开您的新加坡服务…

使用Pandas进行时间重采样,充分挖掘数据价值

大家好,时间序列数据蕴含着很大价值,通过重采样技术可以提升原始数据的表现形式。本文将介绍数据重采样方法和工具,提升数据可视化技巧。 在进行时间数据可视化时,数据重采样是至关重要且非常有用的,它支持控制数据的…

5、OpenCV介绍、环境搭建及实战

这一部分介绍下 OpenCV 以及它的安装和使用,因为后面一些文章中的示例代码会基于OpenCV的库做开发。 什么是OpenCV? OpenCV 是一个被广泛使用的开源计算机视觉库,它提供了大量的传统图像处理算法和基于深度学习的计算机视觉算法,以及用于图像和视频处理的方法。 OpenCV 的…

ControlNet原理及应用

《Adding Conditional Control to Text-to-Image Diffusion Models》 目录 1.背景介绍 2.原理详解 2.1 Controlnet 2.2 用于Stable Diffusion的ControlNet 2.3 训练 2.4 推理 3.实验结果 3.1 定性结果 3.2 消融实验 3.3 和之前结果比较 3.4 数据集大小的影响 4.结…

Vite 启动默认只能访问localhost解决方法

事情的经过是因为我需要测试本地项目的接口,然后因为burp默认不抓取localhost,127.0.0.1 .而且我也不想去修改burp. 所以我通过本地IP地址访问项目, 发现项目无法访问。 默认启动 所以特此记录一下。 在本地项目的package.json 中需要运行的脚本后 添加 --host即可。 具体如下…

spring给静态成员注入 你试过吗?

给静态成员注入 你试过吗? public class TempDataTransformUtilDto {Autowiredprivate static ICityCascadeService cityCascadeService;private static CstShareEmpMapper cstShareEmpMapper;private static PubUserInfoMapper pubUserInfoMapper; }如果ICityCascadeService…

Java重写和重载的区别,

Java中的重写(Override)和重载(Overload)都是面向对象编程的重要概念,它们的区别如下: 在定义上: 重载是在同一个类中定义多个方法,它们的方法名相同但参数不同。 重写是子类重新定义…

C++ 继承和派生

继承和派生 一个新类从已有的类那里获得其已有特性,这种现象称为类的继承。 从父类产生一个子类,称为派生。 基类与派生类的关系:派生类是基类的具体化,而基类是派生类的抽象。 定义基类和派生类 定义基类 例:一个…

rabbitMQ的扇出模式(fanout发布订阅)的生产者与消费者使用案例

扇出模式 fanout 发布订阅模式 生产者 生产者发送消息到交换机(logs),控制台输入消息作为生产者的消息发送 package com.esint.rabbitmq.work03;import com.esint.rabbitmq.RabbitMQUtils; import com.rabbitmq.client.Channel;import java.util.Scanne…

使用FP8加速PyTorch训练

现代的人工智能硬件架构(例如,Nvidia Hopper, Nvidia Ada Lovelace和Habana Gaudi2)中,FP8张量内核能够显著提高每秒浮点运算(FLOPS),以及为人工智能训练和推理工作负载提供内存优化和节能的机会。 在这篇文章中,我们将介绍如何修…

Arduino驱动LM35线性温度传感器(温湿度传感器)

目录 1、传感器特性 2、控制器和传感器连线图 3、驱动程序 LM35半导体的温度传感器,可以用来对环境温度进行定性的检测。LM35半导体温度传感器是美国国家半导体公司生产的线性温度传感器。其测温范围是-40℃到150℃,灵敏度为10mV/℃,输出电压与温度成正比。

<C++> 反向迭代器

我们知道正向迭代器的设计:begin迭代器指向第一个数据,end迭代器指向最后一个数据的下一个位置 。移向下一个数据,解引用得到数据的值,并根据容器储存方式的不同,容器有不同类型的迭代器。 注意:rbegin迭代…