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.android.view.visualization.layer;
00018
00019 import org.ros.android.view.visualization.VisualizationView;
00020 import org.ros.android.view.visualization.shape.GoalShape;
00021 import org.ros.android.view.visualization.shape.Shape;
00022 import org.ros.message.MessageListener;
00023 import org.ros.namespace.GraphName;
00024 import org.ros.node.ConnectedNode;
00025 import org.ros.rosjava_geometry.FrameTransform;
00026 import org.ros.rosjava_geometry.Transform;
00027
00028 import javax.microedition.khronos.opengles.GL10;
00029
00033 public class PoseSubscriberLayer extends SubscriberLayer<geometry_msgs.PoseStamped> implements
00034 TfLayer {
00035
00036 private final GraphName targetFrame;
00037
00038 private Shape shape;
00039 private boolean ready;
00040
00041 public PoseSubscriberLayer(String topic) {
00042 this(GraphName.of(topic));
00043 }
00044
00045 public PoseSubscriberLayer(GraphName topic) {
00046 super(topic, geometry_msgs.PoseStamped._TYPE);
00047 targetFrame = GraphName.of("map");
00048 ready = false;
00049 }
00050
00051 @Override
00052 public void draw(VisualizationView view, GL10 gl) {
00053 if (ready) {
00054 shape.draw(view, gl);
00055 }
00056 }
00057
00058 @Override
00059 public void onStart(final VisualizationView view, ConnectedNode connectedNode) {
00060 super.onStart(view, connectedNode);
00061 shape = new GoalShape();
00062 getSubscriber().addMessageListener(new MessageListener<geometry_msgs.PoseStamped>() {
00063 @Override
00064 public void onNewMessage(geometry_msgs.PoseStamped pose) {
00065 GraphName source = GraphName.of(pose.getHeader().getFrameId());
00066 FrameTransform frameTransform = view.getFrameTransformTree().transform(source, targetFrame);
00067 if (frameTransform != null) {
00068 Transform poseTransform = Transform.fromPoseMessage(pose.getPose());
00069 shape.setTransform(frameTransform.getTransform().multiply(poseTransform));
00070 ready = true;
00071 }
00072 }
00073 });
00074 }
00075
00076 @Override
00077 public GraphName getFrame() {
00078 return targetFrame;
00079 }
00080 }