PoseSubscriberLayer.java
Go to the documentation of this file.
00001 /*
00002  * Copyright (C) 2011 Google Inc.
00003  *
00004  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
00005  * use this file except in compliance with the License. You may obtain a copy of
00006  * the License at
00007  *
00008  * http://www.apache.org/licenses/LICENSE-2.0
00009  *
00010  * Unless required by applicable law or agreed to in writing, software
00011  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
00012  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
00013  * License for the specific language governing permissions and limitations under
00014  * the License.
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 }


android_core
Author(s): Damon Kohler
autogenerated on Thu Aug 27 2015 12:11:33