【仿真动画】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.rhkb.cn/news/193490.html

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

相关文章

linux 网络 cat /proc/net/dev 查看测试网络丢包情况

可以通过 cat /proc/net/dev 查看测试网络丢包情况,drop关键字,查看所有网卡的丢包情况 还可以看其他数据, /proc/net/下面有如下文件

计算机毕业设计选题推荐-体育赛事微信小程序/安卓APP-项目实战

✨作者主页:IT毕设梦工厂✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

Linux C 进程间通信

进程间通信 概述进程间通信方式管道概述管道函数无名管道 pipe有名管道 makefifo删除有名管道 rmove 有名管道实现 双人无序聊天 例子 信号信号概述信号处理过程信号函数传送信号给指定的进程 kill注册信号 signal查询或设置信号处理方式 sigaction设置信号传送闹钟 alarm 有名…

web缓存-----squid代理服务

squid相关知识 1 squid的概念 Squid服务器缓存频繁要求网页、媒体文件和其它加速回答时间并减少带宽堵塞的内容。 Squid代理服务器(Squid proxy server)一般和原始文件一起安装在单独服务器而不是网络服务器上。Squid通过追踪网络中的对象运用起作用。…

【C语言 | 指针】指针和数关系——剪不断,理还乱

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 🤣本文内容🤣&a…

算法学习打卡day45|动态规划:股票问题总结

Leetcode股票问题总结篇 动态规划的股票问题一共六道题,买卖股票最佳时机和买卖股票手续费都是一个类型的问题,维护好买入和卖出两个状态即可,方法一摸一样。而冷冻期也差不多就是状态多了点,买入、保持卖出、当日卖出、以及冷冻期…

Android10 手势导航

种类 Android10 默认的系统导航有三种: 1.两个按钮的 2.三个按钮的 3.手势 它们分别对应三个包名 frameworks/base/packages/overlays/NavigationBarMode2ButtonOverlay frameworks/base/packages/overlays/NavigationBarMode3ButtonOverlay frameworks/base/packa…

基于安卓android微信小程序的快递取件及上门服务系统

项目介绍 本文从管理员、用户的功能要求出发,快递取件及上门服务中的功能模块主要是实现管理员服务端;首页、个人中心、用户管理、快递下单管理、预约管理、管理员管理、系统管理、订单管理,用户客户端;首页、快递下单、预约管理…

笔记51:循环神经网络入门

本地笔记地址:D:\work_file\DeepLearning_Learning\03_个人笔记\3.循环神经网络\循环神经网络 a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a

VS2017新建.hpp文件

目录 1、新建h文件的方法:2、新建对用的cpp文件:3、在main.cpp中调用 1、新建h文件的方法: 2、新建对用的cpp文件: 3、在main.cpp中调用 参见大佬博客

【flink实战】动态表:关系查询处理流的思路:连续查询、状态维护;表转换为流需要编码编码

文章目录 一. 使用关系查询处理流的讨论二. 动态表 & 连续查询(Continuous Query)三. 在流上定义表1. 连续查询2. 查询限制2.1. 维护状态2.2. 计算更新 四. 表到流的转换1. Append-only 流2. Retract 流3. Upsert 流 本文主要讨论了: 讨论通过关系查询处理无界流…

天津专升本新版报名系统网上报名、填志愿、缴费、审核等操作步骤

天津高职升本网上报名、填报志愿新版专升本报名系统 ▏报名入口:www.zhaokao.net▏注意:一定要在截止时间内完成报名、填报志愿、缴费、审核、下载《报名信息表》等4步骤▏可报考院校及专业请参考招生院校发布的通知(招生简章、报考须知&…

YOLOv7独家原创改进:最新原创WIoU_NMS改进点,改进有效可以直接当做自己的原创改进点来写,提升网络模型性能精度

💡该教程为属于《芒果书》📚系列,包含大量的原创首发改进方式, 所有文章都是全网首发原创改进内容🚀 💡本篇文章为YOLOv7独家原创改进:独家首发最新原创WIoU_NMS改进点,改进有效可以直接当做自己的原创改进点来写,提升网络模型性能精度。 💡对自己数据集改进有效…

EMNLP 2023 | 用于开放域多跳推理的大语言模型的自我提示思想链

©PaperWeekly 原创 作者 | 王金元 单位 | 上海交通大学 研究方向 | 大模型微调及应用 论文标题: Self-prompted Chain-of-Thought on Large Language Models for Open-domain Multi-hop Reasoning 模型&代码地址: https://github.com/noewangj…

Android 框架

MVC: MVP MVVM Model 数据以及业务数据 View 视图 Control 控制器 simple code MVP OnFinishInflate ViewGroup 加载完成 MVC 优化 Struts MVC- MVP MVC-单次调用逻辑把 MVP / 把C拆分出来 MVVM 2017Google推出ViewModel DataBind MVVM是一种框架规则,双向绑定 Model…

LeetCode(16)接雨水【数组/字符串】【困难】

目录 1.题目2.答案3.提交结果截图 链接: 42. 接雨水 1.题目 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例 1: 输入:height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&…

技巧篇:Mac 环境PyCharm 配置 python Anaconda

Mac 中 PyCharm 配置 python Anaconda环境 在 python 开发中我们最常用的IDE就是PyCharm,有关PyCharm的优点这里就不在赘述。在项目开发中我们经常用到许多第三方库,用的最多的命令就是pip install 第三方库名 进行安装。现在你可以使用一个工具来帮你解…

仿京东拼多多商品分类页-(RecyclerView悬浮头部实现、xml绘制ItemDecoration)

文章目录 前言效果图思路方式一:通过xml布局来实现方式二:通过ItemDecoration方式来实现 实现步骤1、数据项格式2、左侧列表适配器3、右侧列表适配器4、头部及悬浮头部绘制4.1头部偏移高度为要绘制xml布局的高度--getItemOffsets()4.2 绘制固定头部--onD…

Leetcode刷题详解——岛屿数量

1. 题目链接:200. 岛屿数量 2. 题目描述: 给你一个由 1(陆地)和 0(水)组成的的二维网格,请你计算网格中岛屿的数量。 岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上…

RabbitMQ之延迟队列(万字总结,手把手教你学习延迟队列)

文章目录 一、延迟队列概念二、延迟队列使用场景三、RabbitMQ 中的 TTL1、队列设置 TTL2、消息设置 TTL3、两者的区别 四、整合 springboot1、添加依赖2、修改配置文件3、添加 Swagger 配置类 五、队列 TTL1、代码架构图2、配置文件类代码3、消息生产者代码4、消息消费者代码 六…