KUKA iiwa 机器人实时控制 -- 3. 控制柜FRI JAVA程序

本文详细介绍了KUKAiiwa机器人的控制柜FRIJAVA程序,包括FRI通信硬件连接、基本环境配置、Java关节位置控制示例和客户端程序的运行。教程指导读者如何在SunriseWorkbench中编辑和在Ubuntu上运行程序,以实现精确的关节控制和通信功能。
摘要由CSDN通过智能技术生成

KUKA iiwa 机器人实时控制 – 3. 控制柜FRI JAVA程序

本文将对KUKA iiwa 控制柜 FRI JAVA程序进行介绍。

本教程其他文章请通过下面链接查看
KUKA iiwa 机器人实时控制 – 1. FRI通信硬件连接
KUKA iiwa 机器人实时控制 – 2. 基本环境配置
KUKA iiwa 机器人实时控制 – 3. 控制柜FRI JAVA程序
KUKA iiwa 机器人实时控制 – 4. 客户端FRI C++程序

测试平台

KUKA 机器人:KUKA iiwa 14
KUKA iiwa编程软件: Sunrise Workbench 1.7
KUKA iiwa 通信包: KUKA Sunrise.Connectivity FRI 1.7
操作系统:

  • Windows 10 运行Sunrise Workbench软件
  • Ubuntu 20.04 运行 FRI 客户端程序

1 FRI 位置控制JAVA例程

下面以KUKA提供的FRI关节位置控制程序LBRJointSineOverlay.java为例进行介绍,该程序使关节在目标位置附近做正弦运动。该程序源代码以及其他FRI demo可以在 这里 下载。

程序要到导入到Sunrise Workbench中的JAVA工程进行编辑,关于如何构建JAVA工程可以参考KUKA iiwa 机器人实时控制 – 2. 基本环境配置,该文末尾参考链接部分包含使用Sunrise Workbench构建JAVA工程的详细介绍。

package com.kuka.connectivity.fri.example;

import static com.kuka.roboticsAPI.motionModel.BasicMotions.ptp;

import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

import com.kuka.connectivity.fastRobotInterface.FRIConfiguration;
import com.kuka.connectivity.fastRobotInterface.FRIJointOverlay;
import com.kuka.connectivity.fastRobotInterface.FRISession;
import com.kuka.roboticsAPI.applicationModel.RoboticsAPIApplication;
import com.kuka.roboticsAPI.controllerModel.Controller;
import com.kuka.roboticsAPI.deviceModel.LBR;

/**
 * Creates a FRI Session.
 */
public class LBRJointSineOverlay extends RoboticsAPIApplication
{
    private Controller _lbrController;
    private LBR _lbr;
    private String _clientName;

    @Override
    public void initialize()
    {
        _lbrController = (Controller) getContext().getControllers().toArray()[0];
        _lbr = (LBR) _lbrController.getDevices().toArray()[0];
        // **********************************************************************
        // *** change next line to the FRIClient's IP address                 ***
        // **********************************************************************
       
        //这里的 为FRI 客户端配置的IP地址,本教程将IP配置为 192.168.1.13
       // _clientName = "127.0.0.1"; 
        _clientName = "192.168.1.13"; 
    }

    @Override
    public void run()
    {
        // configure and start FRI session
        FRIConfiguration friConfiguration = FRIConfiguration.createRemoteConfiguration(_lbr, _clientName);
        //配置通知频率,这里 5 表示通信间隔为 5ms
        friConfiguration.setSendPeriodMilliSec(5);

        getLogger().info("Creating FRI connection to " + friConfiguration.getHostName());
        getLogger().info("SendPeriod: " + friConfiguration.getSendPeriodMilliSec() + "ms |"
                + " ReceiveMultiplier: " + friConfiguration.getReceiveMultiplier());

        FRISession friSession = new FRISession(friConfiguration);
        FRIJointOverlay jointOverlay = new FRIJointOverlay(friSession);

        // wait until FRI session is ready to switch to command mode
        try
        {
       		//等待与客户端连接,等待时间设置为10s ,超时则退出程序
            friSession.await(10, TimeUnit.SECONDS);
        }
        catch (final TimeoutException e)
        {
            getLogger().error(e.getLocalizedMessage());
            friSession.close();
            return;
        }

        getLogger().info("FRI connection established.");

        // move to start pose
        //连接成功后,不会立即接受来自FRI客户端的位置指令,而是先将关节运动到指定位置
        _lbr.move(ptp(Math.toRadians(90), .0, .0, Math.toRadians(90), .0, Math.toRadians(-90), .0));

        // async move with overlay ...
        //moveAsync是异步运动模式,采用FRI控制iiwa建议优先考虑同步运动模式 move()
        //addMotionOverlay(jointOverlay)意味着开始接受来自客户端的指令
        _lbr.moveAsync(ptp(Math.toRadians(-90), .0, .0, Math.toRadians(90), .0, Math.toRadians(-90), .0)
                .setJointVelocityRel(0.2)
                .addMotionOverlay(jointOverlay)
                .setBlendingRel(0.1)
                );

        // ... blending into sync move with overlay
        //同步模式 接收来自客户端目标点数据,并实时控制关节移动
        _lbr.move(ptp(Math.toRadians(90), .0, .0, Math.toRadians(90), .0, Math.toRadians(-90), .0)
                .setJointVelocityRel(0.2)
                .addMotionOverlay(jointOverlay)
                );

        // done
        //通信结束
        friSession.close();
    }

    /**
     * main.
     * 
     * @param args
     *            args
     */
    public static void main(final String[] args)// 程序入口
    {
        final LBRJointSineOverlay app = new LBRJointSineOverlay();
        app.runApplication();
    }

}

2 代码分析

对于官方给出的demo,在关键语句处给出了注释,上述程序是演示程序,需要注意的是_clientName 一定要设置为运行FRI客户端程序的电脑IP地址

通信端口号不设置的情况下,默认为30200,该值一般不需要修改。

如果我们需要机器人直接根据我们发送的关节角度进行运动,需要对代码进行修改。

将上述代码的_lbr.move(......) 以及_lbr.moveAsync(......)删除,替换为

ctrMode= new PositionControlMode();//位置控制模式

// ctrMode为控制模式
// -1表示不限制函数运行时间,若设为正整数,则运行指定时间后退出函数
// TimeUnit.SECONDS表示时间单位为秒,可以设为其他单位
PositionHold posHold = new PositionHold(ctrMode, -1, TimeUnit.SECONDS);
_lbr.move(posHold.addMotionOverlay(jointOverlay));

addMotionOverlay( ) 支持的控制模式包括:

(1) PositionControlMode(); //关节位置模式,实现关节精确定位
(2) JointImpedanceControlMode(200, 200, 200, 200, 200, 200, 200); //关节阻抗模式,关节具备柔性,可以提高安全性,需要设置刚度值,值越大刚度越强,这里的200属于偏小的值
(3) CartesianImpedanceControlMode(); //笛卡尔阻抗模式

addMotionOverlay( ) 支持的运动类型包括:

PTPLINSPLINEPositionHold

PTP在前面例程被使用,需要设置目标位置; PositionHold基于机器人当前位置,根据客户端发来的关节角度运动,推荐使用该运动类型。

3 程序下载

上述程序编写完成,若编译器无错误提示,可以点击同步按钮,将程序下载至控制柜。

在这里插入图片描述

程序成功下载后,KUKA Smartpad 会显示可以运行的程序列表,点击LBRJointSineOverlay 进入程序准备运行页面。
在这里插入图片描述

初次执行程序前,建议将关节速度缩放比例调节至10% 以下,防止关节速度运行过快,发生危险!

在这里插入图片描述

使用钥匙旋钮将Smartpad模式设置为AUT模式,返回程序,直接点击启动程序按钮,开始运行程序;

也可以在T1模式运行,T1模式下一直按住Smartpad背部的确认按钮,点击启动程序按钮开始执行程序,这种模式更加安全。

在这里插入图片描述

运行程序时,可能提示下面错误信息

在这里插入图片描述
这表示通信不成功,图中所示为IP地址设置错误,应该设为客户端的地址192.168.1.13.

请在JAVA程序中修改IP地址,重新下载程序。

执行程序前可以使用ping指令检查网线连接是否正常。

如果IP地址和网线连接均没有问题,仍然提示失败,可能是因为客户端电脑还没有运行 FRI客户端程序

控制柜FRI JAVA程序运行前,要先启动FRI 客户端的C++程序,下面将对客户端FRI C++程序进行介绍。
KUKA iiwa 机器人实时控制 – 4. 客户端FRI C++程序

  • 23
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: gsdml-v2.25-kuka-roboter-gmbh-kr c4-devicev1.0-20121030.xml 是一个XML文件的名称。gsdml代表了"General Station Description Markup Language",它是一种描述工业自动化设备的通用标记语言。v2.25表示该文件遵循GSDML的第2.25版标准。kuka-roboter-gmbh-kr c4是指该文件针对的是库卡机器人GmbH公司的KR C4系列设备。devicev1.0-20121030表示该文件为设备描述文件的第1.0版本,时间戳为2012年10月30日。 这个XML文件可能包含了对库卡机器人GmbH公司的KR C4系列设备的一些基本描述信息,比如设备的功能、参数、输入输出等等。通过这个文件,用户可以对该设备进行配置、监控和控制。XML格式的描述使得工业设备可以和其他自动化系统进行集成,实现设备之间的信息交换和互操作。 这个文件的版本号和时间戳可以帮助用户追踪文件的历史和更新情况。用户可以根据文件中的描述和参数来了解设备的性能,并根据需要进行相应的调整和配置。 总之,gsdml-v2.25-kuka-roboter-gmbh-kr c4-devicev1.0-20121030.xml是一个描述库卡机器人GmbH公司的KR C4系列设备的XML文件,用户可以通过该文件对设备进行配置、监控和控制,并与其他自动化系统进行集成。 ### 回答2: gsdml-v2.25-kuka-roboter-gmbh-kr c4-devicev1.0-20121030.xml是一个XML文件,它与KUKA机器人有关。XML即可扩展标记语言,是一种用于存储和传输数据的标记语言。这个文件的版本是v2.25,它的发布者是KUKA机器人有限责任公司。 从文件名中可以看出,这个XML文件与KUKA机器人的设备KR C4有关,设备版本为v1.0,发布日期为2012年10月30日。KR C4是KUKA机器人控制器的一个型号,它是用于控制机器人运动和执行任务的核心设备。 这个XML文件可能包含与KR C4设备和KUKA机器人相关的配置信息、参数设置、通信协议等数据。XML文件通常以标签的形式组织数据,可以使用标签定义和描述不同的信息。 通过分析这个XML文件的具体内容,可以获取更多关于KUKA机器人设备和KR C4控制器的详细信息,如设备功能、性能指标、支持的通信协议、IO接口等。而具体文件内容则需要通过打开这个XML文件进行查看。 ### 回答3: gsdml-v2.25-kuka-roboter-gmbh-kr c4-devicev1.0-20121030.xml是一个XML文件,其文件名显示了相关信息。根据文件名,我们可以了解到该文件与KUKA机器人有关,"gsdml"可能是指General Station Description Markup Language的缩写,"v2.25"是指该文件的版本号为2.25。"kr c4"可能表示KUKA机器人型号为KR C4。"devicev1.0"可能是指该XML文件描述了一个设备,并且版本号为1.0。"20121030"可能是文件的创建或修改日期。 XML文件是一种用于存储和传输数据的标记语言,它采用尖括号标记来定义元素和属性。通过分析文件内容,可以了解该文件可能包含有关KUKA机器人的描述信息、性能参数、功能等。由于题目提供的文件名并未提供详细信息,具体内容和结构需要进一步解析该XML文件的内容。 总体而言,gsdml-v2.25-kuka-roboter-gmbh-kr c4-devicev1.0-20121030.xml是一个KUKA机器人的描述文件,通过该文件可以获取机器人详细信息和设备参数。由于没有具体的文件内容,无法进一步详细解释该文件的内容和用途。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值