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.android_tutorial_teleop; 00018 00019 import android.os.Bundle; 00020 import android.view.Menu; 00021 import android.view.MenuInflater; 00022 import android.view.MenuItem; 00023 import org.ros.address.InetAddressFactory; 00024 import org.ros.android.RosActivity; 00025 import org.ros.android.view.VirtualJoystickView; 00026 import org.ros.android.view.visualization.VisualizationView; 00027 import org.ros.android.view.visualization.layer.CameraControlLayer; 00028 import org.ros.android.view.visualization.layer.LaserScanLayer; 00029 import org.ros.android.view.visualization.layer.OccupancyGridLayer; 00030 import org.ros.android.view.visualization.layer.PathLayer; 00031 import org.ros.android.view.visualization.layer.PosePublisherLayer; 00032 import org.ros.android.view.visualization.layer.PoseSubscriberLayer; 00033 import org.ros.android.view.visualization.layer.RobotLayer; 00034 import org.ros.node.NodeConfiguration; 00035 import org.ros.node.NodeMainExecutor; 00036 00044 public class MainActivity extends RosActivity { 00045 00046 private VirtualJoystickView virtualJoystickView; 00047 private VisualizationView visualizationView; 00048 00049 public MainActivity() { 00050 super("Teleop", "Teleop"); 00051 } 00052 00053 @Override 00054 public boolean onCreateOptionsMenu(Menu menu) { 00055 MenuInflater inflater = getMenuInflater(); 00056 inflater.inflate(R.menu.settings_menu, menu); 00057 return true; 00058 } 00059 00060 @Override 00061 public boolean onOptionsItemSelected(MenuItem item) { 00062 switch (item.getItemId()) { 00063 case R.id.virtual_joystick_snap: 00064 if (!item.isChecked()) { 00065 item.setChecked(true); 00066 virtualJoystickView.EnableSnapping(); 00067 } else { 00068 item.setChecked(false); 00069 virtualJoystickView.DisableSnapping(); 00070 } 00071 return true; 00072 default: 00073 return super.onOptionsItemSelected(item); 00074 } 00075 } 00076 00077 @Override 00078 public void onCreate(Bundle savedInstanceState) { 00079 super.onCreate(savedInstanceState); 00080 setContentView(R.layout.main); 00081 virtualJoystickView = (VirtualJoystickView) findViewById(R.id.virtual_joystick); 00082 visualizationView = (VisualizationView) findViewById(R.id.visualization); 00083 visualizationView.getCamera().setFrame("map"); 00084 } 00085 00086 @Override 00087 protected void init(NodeMainExecutor nodeMainExecutor) { 00088 visualizationView.addLayer(new CameraControlLayer(this, nodeMainExecutor 00089 .getScheduledExecutorService())); 00090 visualizationView.addLayer(new OccupancyGridLayer("map")); 00091 visualizationView.addLayer(new PathLayer("move_base/NavfnROS/plan")); 00092 visualizationView.addLayer(new PathLayer("move_base_dynamic/NavfnROS/plan")); 00093 visualizationView.addLayer(new LaserScanLayer("base_scan")); 00094 visualizationView.addLayer(new PoseSubscriberLayer("simple_waypoints_server/goal_pose")); 00095 visualizationView.addLayer(new PosePublisherLayer("simple_waypoints_server/goal_pose", this)); 00096 visualizationView.addLayer(new RobotLayer("base_footprint")); 00097 NodeConfiguration nodeConfiguration = 00098 NodeConfiguration.newPublic(InetAddressFactory.newNonLoopback().getHostAddress(), 00099 getMasterUri()); 00100 nodeMainExecutor 00101 .execute(virtualJoystickView, nodeConfiguration.setNodeName("virtual_joystick")); 00102 nodeMainExecutor.execute(visualizationView, nodeConfiguration.setNodeName("android/map_view")); 00103 } 00104 }