Universal Robots Forum

Move the Robot without a ProgramNode

I modified the HelloWorld Program Contribution as bellow
but I have always an Error:

HelloworldProgamNodeContribution is not abstract and does not override abstract method generateScript(ScriptWriter) in ProgramNode Contribution

package com.ur.urcap.examples.helloworld.impl ;

// API stuff imported
import com.ur.urcap.api .contribution.ProgramNodeContribution ;
import com.ur.urcap.api.domain.URCapAPI ;
import com.ur.urcap.api.domain.data.DataModel ;
import com.ur.urcap.api.domain.script.ScriptWriter ;
import com.ur.urcap.api.ui.annotation.Input ;
import com.ur.urcap.api.ui.annotation.Label ;
import com.ur.urcap.api.ui.component.InputEvent ;
import com.ur.urcap.api.ui.component.InputTextField ;
import com.ur.urcap.api.ui.component.LabelComponent ;

// Used for reading from RealTime Client
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;

public class HelloWorldProgramNodeContribution implements ProgramNodeContribution {

         private final URCapAPI urCapAPI;
         private final DataModel dataModel;

public HelloWorldProgramNodeContribution(URCapAPI urCapAPI, DataModel dataModel) {
this.urCapAPI = urCapAPI;
this.dataModel = dataModel;
}
// Include the “clientSendScript” class as “scriptSender”
//clientSendScript scriptSender = new clientSendScript();

// Just a pose, that is used for moving the robot…
private String myPose = “p[0.0,-0.3,0.1,0,3.1415,0]”;

public class clientSendScript {

public clientSendScript() { }

// localhost IP
private String TCP_IP = “127.0.0.1”;
// Port for secondary client
private int TCP_port = 30002;

// Public method to send MoveJ command to client interface
public void sendMoveJ(String pose){
sendToSecondary(“movej(”+myPose+",a=1.57,v=0.5)");
}

// Internal method that sends script to client
private void sendToSecondary(String command){
try{
// Create a new Socket Client
Socket sc = new Socket(TCP_IP, TCP_port);
if (sc.isConnected()){
System.out.println(“Connected to UR Secondary Client”);
}

  	// Create stream for data
  	DataOutputStream out;
  	out = new DataOutputStream(sc.getOutputStream());
  	
  	// Wrap command in "def" and "end"
  	String thisCommand = "def myCustomCode():\n "+command+"\n end\n";
  	
  	// Send command
  	out.writeUTF(thisCommand);
  	System.out.println("Send this: "+thisCommand);
  	out.flush();

  	// Perform housekeeping 
  	out.close();
  	sc.close();
  	System.out.println("Disconnected from UR Secondary Client");
  } 
  catch (IOException e){
  	System.out.println(e);
  }

}
}

}

thank you in advance

Hi,

I follow this code to send movej but I also would like some event for the next step after the robot already moved to the target position successful.

could you please give me an advice.

It seems as if your NodeContribution does not implement the generateScript() function the ProgramNodeContribution interface demands.
Just add the following lines and your error should disappear:

@Override
public void generateScript(ScriptWriter writer){}

The interface needs some more functions to be defined. Probably best if you have a look into one of the example URCaps or the definition of the ProgramNodeContribution interface.

1 Like

Hi,

I follow this code and it work very well. but I can see that move respect to base coordination, I wonder how to change it to move the robot respect to Tool coordination.

normally, I move the robot with URscript as below but now I would like to move as the same via URCap

Example code:

global pose_wrt_tool = p[0,0,0.1,0,0 , 1.57]

global pose_wrt_base = pose_trans(get_forward_kin(), pose_wrt_tool)

movel( pose_wrt_base , a=1.2, v=0.25)

   get_forward_kin() returns current pose.