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