Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 package org.ros.rosjava_tutorial_right_hand_rule;
00018
00019 import org.ros.message.MessageListener;
00020 import org.ros.namespace.GraphName;
00021 import org.ros.node.AbstractNodeMain;
00022 import org.ros.node.ConnectedNode;
00023 import org.ros.node.topic.Publisher;
00024 import org.ros.node.topic.Subscriber;
00025
00029 public class RightHandRule extends AbstractNodeMain {
00030
00031 @Override
00032 public GraphName getDefaultNodeName() {
00033 return GraphName.of("right_hand_rule");
00034 }
00035
00036 @Override
00037 public void onStart(ConnectedNode connectedNode) {
00038 final Publisher<geometry_msgs.Twist> publisher =
00039 connectedNode.newPublisher("cmd_vel", geometry_msgs.Twist._TYPE);
00040 final geometry_msgs.Twist twist = publisher.newMessage();
00041 final Subscriber<sensor_msgs.LaserScan> subscriber =
00042 connectedNode.newSubscriber("base_scan", sensor_msgs.LaserScan._TYPE);
00043 subscriber.addMessageListener(new MessageListener<sensor_msgs.LaserScan>() {
00044 @Override
00045 public void onNewMessage(sensor_msgs.LaserScan message) {
00046 float[] ranges = message.getRanges();
00047 float northRange = ranges[ranges.length / 2];
00048 float northEastRange = ranges[ranges.length / 3];
00049 double linearVelocity = 0.5;
00050 double angularVelocity = -0.5;
00051 if (northRange < 1. || northEastRange < 1.) {
00052 linearVelocity = 0;
00053 angularVelocity = 0.5;
00054 }
00055 twist.getAngular().setZ(angularVelocity);
00056 twist.getLinear().setX(linearVelocity);
00057 publisher.publish(twist);
00058 }
00059 });
00060 }
00061 }