zoukankan      html  css  js  c++  java
  • KUKA iiwa — VREP显示机械臂位置

       机械臂控制器中Background task通过UDP向外部程序每隔50ms循环发送当前各轴位置:

     1 package sampleBackgroundTask;
     2 
     3 import javax.inject.Inject;
     4 import java.util.concurrent.TimeUnit;
     5 import com.kuka.roboticsAPI.applicationModel.tasks.CycleBehavior;
     6 import com.kuka.roboticsAPI.applicationModel.tasks.RoboticsAPICyclicBackgroundTask;
     7 import com.kuka.roboticsAPI.deviceModel.JointPosition;
     8 import com.kuka.roboticsAPI.deviceModel.LBR;
     9 import java.net.*;
    10 import java.io.IOException; 
    11 
    12 
    13 public class BackgroundTask extends RoboticsAPICyclicBackgroundTask {
    14     @Inject
    15     private LBR robot; 
    16     
    17     byte[] posArr;    
    18     int port = 30003;
    19     InetAddress IP = null; 
    20     DatagramSocket datagramSocket = null; 
    21     DatagramPacket packet; 
    22 
    23     @Override
    24     public void initialize() {
    25         // initialize your task here
    26         initializeCyclic(2000, 50, TimeUnit.MILLISECONDS, CycleBehavior.BestEffort);
    27         
    28         try {
    29             datagramSocket = new DatagramSocket();   
    30             IP =  InetAddress.getByName("192.168.1.50"); // get PC's address
    31         } 
    32         catch (SocketException e)         { e.printStackTrace(); } 
    33         catch (UnknownHostException e)  { e.printStackTrace(); } 
    34     }
    35 
    36     @Override
    37     public void runCyclic() {
    38         // your task execution starts here
    39          JointPosition jPos = robot.getCurrentJointPosition();  
    40         posArr = jPos.toString().getBytes();  
    41         packet = new DatagramPacket(posArr, posArr.length, IP, port); 
    42         try {
    43             datagramSocket.send(packet);
    44         } 
    45         catch (IOException e)
    46         {  e.printStackTrace(); } 
    47     }
    48 }
    View Code

       虚拟模型关节设为Passive模式,VREP中的Lua代码获取KUKA iiwa各轴位置并设置关节角:

     1 function sysCall_init()
     2     -- do some initialization here:
     3     local socket = require 'socket'
     4     local host = "192.168.1.50"
     5     local port = 30003
     6     udp = assert(socket.udp())
     7     udp:settimeout(-1)
     8     assert(udp:setsockname(host, port))
     9     
    10     -- Get joint handles
    11     jointHandles = {-1,-1,-1,-1,-1,-1,-1}
    12     for i=1,7,1 do
    13         jointHandles[i] = sim.getObjectHandle('LBR_iiwa_7_R800_joint'..i)
    14     end
    15 end
    16 
    17 
    18 function sysCall_actuation()
    19     local data,receip,receport = udp:receivefrom()
    20     if data then
    21         --print("udp:receivefrom: " .. data .. receip, receport)
    22         local jointPositions = getJointPositions(data)
    23         for i=1,7,1 do
    24             sim.setJointPosition(jointHandles[i], jointPositions[i])
    25         end
    26     end
    27 end
    28 
    29 
    30 function getJointPositions(s)
    31     local result = {}
    32     local s = string.sub(s, 2, -2) -- Return a substring of the string
    33     for match in string.gmatch(s, "[^,]+") do
    34         table.insert(result, tonumber(match))  
    35     end
    36     return result
    37 end

      手动拖拽实际的机械臂,VREP中的虚拟模型按照轴的反馈位置实时更新:

    参考:

    Tutorial:Networking with UDP

  • 相关阅读:
    伪类选择器
    子元素和后代元素选择器
    常用的选择器
    CSS语法
    javascript中caller和callee call和apply
    我的第一篇
    Python— isinstance用法说明
    Python—对Excel进行读写操作
    RAID5,RAID10磁盘的创建
    vi/vim编辑器用法
  • 原文地址:https://www.cnblogs.com/21207-iHome/p/12093086.html
Copyright © 2011-2022 走看看