ROS 之 KUKA iiwa编程

本文涉及的产品
资源编排,不限时长
简介: ROS 之 KUKA iiwa编程

背景介绍


目前,市面上大多数的拖动试教机器人是UR的协作机器人和DLR-KUKA的iiwa机器人,相比于UR机器人,iiwa机器人在结构上有一点重要的不同。


80f04f3f59c0f9ade1169bfe61545962.png


UR在每个关节上采取的是双编码器的方式,分别测量电机角度和连杆角度。而iiwa机器人在每个关节上还加入了一个单轴力矩传感器(一般位于减速器输出端与末端连杆间),用于测量每个关节的输出力矩。如图所示,iiwa在牵引拖动时表现更好,同时iiwa机器人拥有更小的运动盲区。用户可以施加更小的力就可以牵着机器人按其意图运动,而不会担心机械臂运动受限。


20210410173716494.png


ROS API说明


以iiwa为代表的七轴机械臂在高精度的工作中有着很重要的应用,但是作为以java语言为驱动的机械臂,相较于以python为驱动的UR机械臂而言,其上手难度更高,难以去进行二次开发。之前常用的开发主要通过SunriseWorkbench等软件进行的开发。难以满足现有的分布式控制需求。为此也有很多人通过使用ROSjava来对iiwa机器人进行开发。但是ROSjava已在几年前停止了维护。为此本文尝试通过TCP+ROS+Python的搭建方法来满足机械臂的驱动需求。本文为KUKA-iiwa 智能机器人提供了应用程序编程接口(API)。来支持后续的iiwa开发工作。该API建立在KUKA iiwa内核安全性的基础上,可实现紧密的工作并与操作员进行交互。它将功能引入了机器人操作系统(ROS),后者提供了一个分布式开发环境,同时允许多种新的设备形式轻松地进行接口。


API架构


开发的API设计得很简单,通过TCP通讯建立出一套方便与ROS交互开发的平台。API体系结构侧重于突破通常在Smartpad上运行的KUKA Sunrise控制器中可用的功能。通过使用下图所示的通用结构,可以看到该体系结构扩展了KUKA LBR iiwa的功能。API公开了在机器网络上操作的接口。这允许在KUKA LBR iiwa的操作中轻松部署和利用不同的传感方法和额外的计算资源。


20210410173654608.png


KUKA-iiwa的守护程序还处理一些低级但通用和关键的控制任务,例如碰撞检测。这样的操作可以给我们的二次开发提供基础的安全保障。ROS-KUKA节点也以Python脚本语言实现,通过订阅ROS节点来使KUKA守护程序和ROS主节点之间起到中间接口的作用。通过python订阅来自其他控制ROS节点的命令,并将它们传递给KUKA服务端。这样可以实现良好的外部扩展。同样,它从KUKA服务端接收感官和状态信息,并通过ROS将其其发布到python中。从而实现在计算机上不安装KUKA Sunrise OS即可外部运行此ROS-KUKA节点,这意味着无需修改KUKA Sunrise Cabinet。因此,保留了KUKA提供的安全协议,并且添加了功能而不是对其进行了更改。无需在Sunrise OS上安装第三方软件(例如ROS),只需使用基于标准Sunrise的应用程序就可以设置KUKA iiwa ROS接口。


下表列出了可通过API调用的ROS主题以读取KUKA-iiwa内部的参数


订阅主题名称

描述

例子

JointPosition [A1,A2,A3,A4,A5,A6,A7]time

对应了iiwa7个自由度

JointPosition [0.0, 0.17, 0.0, 1.92, 0.0,0.35, 0.0] 1459253274.1

ToolPosition [X, Y, Z, A, B, C] time

工具末端的位置以及三个旋转量

ToolPosition [433.59711426170867,0.028881929589094864,

601.4449734558293,3.1414002368275726,

1.0471367465304213,3.141453681799645] 1459253274.11


ToolForce [X, Y, Z] time 力模式施加的力 ToolForce [13.485958070668463,0.3785658886199012,
5.964988607372689] 1459253274.11’
ToolTorque [A, B, C] time 设置对应的三个扭矩参数 ToolTorque [13.485958070668463,
0.3785658886199012,
5.964988607372689] 1459253274.11’
ToolTorque [A, B, C] time joint关节加速度值 JointAcceleration 0.4 1459253274.11’
JointVelocity Float time joint关节速度值 JointVelocity 1.0 1459253274.11’
JointVelocity Float time joint关节速度值

JointJerk 1.0 1459253274.11’

isCompliance Boolean time

判断机器人状态是否符合规范

isCompliance off 1459253274.11’
isReadyToMove Boolean time 判断机器人是否执行完所有步骤

isReadyToMove true 1459253274.11’

isCollision Boolean time

检测是否碰撞

isCollision false 1459253274.11’
isCollision Boolean time 是否为主程序 isMastered true 1459253274.11’
isJointOutOfRange Boolean time 是否超出设定值范围 isJointOutOfRange false 1459253274.11’


另外一个表列出了可通过字符串调用的ROS主题以向KUKA-iiwa发送指令



订阅主题名称

描述

例子

setJointAcceleration F

设定/变更关节加速度值

’setJointAcceleration 0.4’
setJointVelocity F 设定/更改关节速度值 ’setJointVelocity 1.0’

setJointJerk F

设置/更改关节Jerk速度值 ’setJointJerk 1.0’
setPosition A1 A2 A3 A4 A5 A6 A7 ptp/lin 根据关节位置移动机器人手臂。可以选择点对点(ptp)或线性(lin)运动。float类型的角度值(以度为单位)可以在A1-7中替换。如果不需要移动任何轴,可以使用-代替值。该示例为除A2不变的每个轴分配新位置。

’setPosition 0 21 0 -100 0 60 0 ptp’

setPositionXYZABC X Y Z A B C ptp/lin 在机器人笛卡尔空间中移动机器人末端执行器。可以选择点对点(ptp)或线性(lin)运动。这会将机器人末端执行器移动到特定位置[x,y,z]方向[a,b,c](浮点中的值)。如果不需要更改任何参数,可以使用-代替值。 ’setPositionXYZABC 700 0 290 - 180 0 -180 lin’

MoveXYZABC X Y Z A B C

仅通过点对点(ptp)运动在机器人笛卡尔空间中移动机器人末端执行器。对于给定值(以毫米和度为单位),这会将机器人末端执行器沿特定方向[x,y,z]和/或方向[a,b,c]移动。 MoveXYZABC 10 20 0 30 0 0
MoveCirc X1 Y1 Z1 A1 B1 C1 X2 Y2 Z2 A2 B2 C2 BlendingOri 以给定的混合值将机器人末端执行器从第一个位置( [x1 y1 z1 a1 b1c1])的当前位置以弧形/圆周运动从其当前位置移动到第二个位置([x2y2 z2 a2 b2 c2]) 。 MoveCirc 700 0 290 -180 0 -180 710 0 300 -180 0 -180 0.1
setCompliance X Y Z Z B C 在每个x,y,z,a,b和c中具有特定刚度的情况下激活机器人的Compliance模式。给定的示例仅在x和y直角坐标系中以非常低的刚度激活Compliance。 ’setCompliance 10 10 5000 300 300 300’
resetCompliance 停用机器人的“合规性”模式 ’resetCompliance’
resetCollision 如果检测到任何碰撞,则重置碰撞 ’resetCollision’
forceStop 停止机器人并删除所有等待执行的机器人运动队列 ’forceStop’

setWorkspace xmin ymin zmin xmax ymax zmax


定义工作区边界

‘SetWorkspace 100 -300 0 600 300 500’


ROS环境搭建


.........详情请参考古月居文章


相关实践学习
使用ROS创建VPC和VSwitch
本场景主要介绍如何利用阿里云资源编排服务,定义资源编排模板,实现自动化创建阿里云专有网络和交换机。
阿里云资源编排ROS使用教程
资源编排(Resource Orchestration)是一种简单易用的云计算资源管理和自动化运维服务。用户通过模板描述多个云计算资源的依赖关系、配置等,并自动完成所有资源的创建和配置,以达到自动化部署、运维等目的。编排模板同时也是一种标准化的资源和应用交付方式,并且可以随时编辑修改,使基础设施即代码(Infrastructure as Code)成为可能。 产品详情:https://www.aliyun.com/product/ros/
相关文章
|
23天前
|
传感器 机器人 数据处理
ROS 编程入门的介绍
2.1 创建 ROS 功能包 ROS(Robot Operating System)是一种开源的机器人软件框架,广泛用于机器人开发中。通过使用 ROS,开发者可以轻松创建和管理机器人应用程序。在本节中,我们将介绍如何创建一个 ROS 功能包并实现一些基本功能。 2.1.1 使用 ROS 主题 ROS 主题(Topic)是一种发布/订阅机制,允许节点之间进行通信。每个节点可以发布主题消息或订阅主题消息来获取数据。以下是如何使用 ROS 主题的步骤: 创建功能包 首先,我们需要创建一个新的 ROS 功能包。在终端中运行以下命令: catkin_create_pkg de_ws my_r
54 0
|
5月前
|
NoSQL 机器人 Windows
ROS机器人编程技术控制两只小海龟的编队运动
ROS机器人编程技术控制两只小海龟的编队运动
157 1
|
5月前
|
机器人 Python Windows
ROS机器人编程技术应用与实践
ROS机器人编程技术应用与实践
63 1
|
5月前
|
机器人 Unix C++
ROS机器人编程技术架构命令应用
ROS机器人编程技术架构命令应用
75 1
|
5月前
|
Ubuntu 机器人 编译器
ROS机器人编程技术系统安装
ROS机器人编程技术系统安装
76 1
|
5月前
|
传感器 机器人 C++
ROS 2机器人编程实战:基于现代C++和Python 3实现简单机器人项目
ROS 2机器人编程实战:基于现代C++和Python 3实现简单机器人项目
552 0
|
11月前
|
传感器 机器人 C++
机器人操作系统ROS 编程开发--详细总结
最近工作涉及到自动驾驶的,需要学习ROS,学习中总结了一些知识点,分享给大家。 机器人操作系统ROS,是一种分布式处理框架(又名Nodes),ROS常用C++和python编程语言开发;(这里项目开发采用C++ 11版本)。ROS的点对点设计以及服务和节点管理器等机制,可以分散由计算机视觉和语音识别等功能带来的实时计算压力,能够适应多机器人遇到的挑战。ROS免费并且开源。
1174 0
|
机器学习/深度学习 监控 机器人
ubuntu16.04下ROS操作系统学习笔记(三 / 二)ROS基础-ROS通信编程(下)
ubuntu16.04下ROS操作系统学习笔记(三 / 二)ROS基础-ROS通信编程(下)
114 0
|
数据处理 C++ Python
ubuntu16.04下ROS操作系统学习笔记(三 / 二)ROS基础-ROS通信编程(上)
ubuntu16.04下ROS操作系统学习笔记(三 / 二)ROS基础-ROS通信编程(上)
114 0
|
XML C++ 数据格式
【古月21讲】ROS入门系列(4)——参数使用与编程方法、坐标管理系统、tf坐标系广播与监听的编程实现、launch启动文件的使用方法
【古月21讲】ROS入门系列(4)——参数使用与编程方法、坐标管理系统、tf坐标系广播与监听的编程实现、launch启动文件的使用方法
258 0
【古月21讲】ROS入门系列(4)——参数使用与编程方法、坐标管理系统、tf坐标系广播与监听的编程实现、launch启动文件的使用方法

推荐镜像

更多