diff --git a/src/rosjava_actionlib/rosjava_actionlib/src/main/java/com/github/ekumen/rosjava_actionlib/ActionClient.java b/src/rosjava_actionlib/rosjava_actionlib/src/main/java/com/github/ekumen/rosjava_actionlib/ActionClient.java index f197cf31b62ac72598e7d38eecabd80cbc9c6ded..d18d14fdbe5737783e0c0e5ab2cc135d728813f7 100644 --- a/src/rosjava_actionlib/rosjava_actionlib/src/main/java/com/github/ekumen/rosjava_actionlib/ActionClient.java +++ b/src/rosjava_actionlib/rosjava_actionlib/src/main/java/com/github/ekumen/rosjava_actionlib/ActionClient.java @@ -7,22 +7,41 @@ import org.ros.node.ConnectedNode; import org.ros.node.topic.Subscriber; import org.ros.node.topic.Publisher; import org.ros.message.MessageListener; +import org.ros.internal.message.Message; -public class ActionClient extends AbstractNodeMain { - //actionlib_tutorials.FibonacciActionGoal actionGoal; - Publisher<actionlib_tutorials.FibonacciActionGoal> clientGoal; +public class ActionClient<T_ACTION_GOAL extends Message> { + T_ACTION_GOAL actionGoal; + String actionGoalType; + Publisher<T_ACTION_GOAL> goalPublisher; //Publisher<actionlib_msgs.cancel> clientCancel; //Suscriber<actionlib_msgs.status> serverStatus; Subscriber<actionlib_tutorials.FibonacciActionResult> serverResult; //Suscriber<actionlib_tutorials.FibonacciActionFeedback> serverFeedback; + ConnectedNode node; + String actionName; + + ActionClient (ConnectedNode node, String actionName, String actionGoalType) { + this.node = node; + this.actionName = actionName; + this.actionGoalType = actionGoalType; + publishClient(node); + } + + void sendGoal(T_ACTION_GOAL goal) { + goalPublisher.publish(goal); + } private void publishClient(ConnectedNode node) { - clientGoal = node.newPublisher("fibonacci/goal", - actionlib_tutorials.FibonacciActionGoal._TYPE); + goalPublisher = node.newPublisher(actionName + "/goal", + actionGoalType); //clientCancel = connectedNode.newPublisher("fibonacci/cancel", // actionlib_msgs.cancel._TYPE); } + public T_ACTION_GOAL newGoalMessage() { + return goalPublisher.newMessage(); + } + private void suscribeServer(ConnectedNode node) { serverResult = node.newSubscriber("fibonacci/result", actionlib_tutorials.FibonacciActionResult._TYPE); @@ -59,32 +78,4 @@ public class ActionClient extends AbstractNodeMain { //suscribeServer(node); } - @Override - public GraphName getDefaultNodeName() { - return GraphName.of("fibonacci_client"); - } - - @Override - public void onStart(ConnectedNode node) { - connect(node); - - suscribeServer(node); - - // publish a goal message - actionlib_tutorials.FibonacciActionGoal goalMessage = clientGoal.newMessage(); - actionlib_tutorials.FibonacciGoal fibonacciGoal = goalMessage.getGoal(); - // set Fibonacci parameter - fibonacciGoal.setOrder(6); - goalMessage.setGoal(fibonacciGoal); - - while (true) { - clientGoal.publish(goalMessage); - try { - Thread.sleep(10000); - } - catch (InterruptedException ex) { - ; - } - } - } }