New Technology Introduction: Android Studio with PushBot

Size: px
Start display at page:

Download "New Technology Introduction: Android Studio with PushBot"

Transcription

1 FIRST Tech Challenge New Technology Introduction: Android Studio with PushBot Carol Chiang, Stephen O Keefe 12 September 2015

2 Overview Android Studio What is it? Android Studio system requirements Android Studio installation Phone Setup Basic setup Driver s workstation setup Android Studio Programming OpMode Working with motors Working with servos Full example Wireless debugging Common Pitfalls

3 Resources Official FTC documents to set up phones, install software, write code, etc Intelitek Download zip file ftc_app-master/doc/tutorial/ftc_nextgenguide.pdf Slides and interactive step-by-step tutorials on setting up phone, pairing, installing software, writing code, etc FIRST FTC Forums Feedback from actual users FIRST and Intelitek have worked very hard to provide detailed step-by-step guides!

4 Android Studio

5 What is Android Studio? Android Studio is the official IDE for Android application development* Based on JetBrains IntelliJ IDEA Flexible Gradle-based build system Freely available under the Apache License 2.0 for Windows, Mac OS X, and Linux *

6 What is Android Studio?

7 What is Android Studio? Solution Explorer: Locate and open files

8 What is Android Studio? Code Editor: Make changes to code, smart editor, autocomplete!

9 What is Android Studio? Build/Run: Green arrow, compile code

10 What is Android Studio? SDK Manager: Needed during install

11 Android Studio System Requirements Windows - Microsoft Windows 8/7/Vista/2003 (32 or 64-bit) - 2 GB RAM minimum, 4 GB RAM recommended MB hard disk space - At least 1 GB for Android SDK, emulator system images, and caches x 800 minimum screen resolution - Java Development Kit (JDK) 7 - Optional for accelerated emulator: Intel processor with support for Intel VT-x, Intel EM64T (Intel 64), and Execute Disable (XD) Bit functionality Mac OS X - Mac OS X or higher, up to 10.9 (Mavericks) - 2 GB RAM minimum, 4 GB RAM recommended MB hard disk space - At least 1 GB for Android SDK, emulator system images, and caches x 800 minimum screen resolution - Java Runtime Environment (JRE) 6 - Java Development Kit (JDK) 7 - Optional for accelerated emulator: Intel processor with support for Intel VT-x, Intel EM64T (Intel 64), and Execute Disable (XD) Bit functionality Linux - GNOME or KDE desktop - GNU C Library (glibc) 2.15 or later - 2 GB RAM minimum, 4 GB RAM recommended MB hard disk space - At least 1 GB for Android SDK, emulator system images, and caches x 800 minimum screen resolution - Oracle Java Development Kit (JDK) 7 Source:

12 Android Studio Installation Download FTC SDK Install Java Development Kit Downloads > Java SE Install Android Studio Develop > Tools > Download Android Studio > Install Run Android Studio Open Android SDK Manager ( ) Install Android (API 19) Install Build Tools See also: PushBot Manual p52-103

13 Phone Setup

14 Phone Setup See PushBot Guide p for walkthrough on activating new phone Charge phone Remove SIM card Talk back Click Next English Click Next Why WiFi Click Next, Click Next UICC Error Click OK Hands Free Click Activate, Click Done System Settings Airplane mode = On WiFi = On Click on three dots, select WiFi Direct Rename device About Phone > Tap SW Version 7 times Developer Options > Enable USB debugging

15 Driver s Workstation Setup Download from Play Store (requires WiFi connection) FTC Driver Station Do NOT install FTC Robot Controller Install from computer Connect phone via USB to computer Copy ftc_app-master/doc/apk/ftcdriverstationrelease.apk To My computer > N9130 device > Downloads Disconnect phone from computer Using File Manager navigate to Downloads directory Open apk file > Next > Install If you see an error about the install being blocked Click Settings > Security > Unknown sources > Check

16 Android Studio Programming

17 Android Studio: OpMode OpMode: defines custom behavior for a robot Selectable on driver station Example: autonomous, tele op, etc. Main functions: init() called at beginning loop() executed continuously package com.qualcomm.ftcrobotcontroller.opmodes; import com.qualcomm.robotcore.eventloop.opmode.opmode; public class BasicTeleOp extends Opmode public void init() public void loop() {

18 Android Studio: OpMode Registering OpMode OpMode must be registered before you can use Register in FtcOpModeRegister.java OpMode must be registered to show in Driver Workstation App! public class FtcOpModeRegister implements OpModeRegister { public void register(opmodemanager manager) {{ manager.register( BasicTeleOp, BasicTeleOp.class);

19 Android Studio: Motors import com.qualcomm.robotcore.hardware.dcmotor; public class BasicTeleOp extends Opmode { private DcMotor public void init() { drivemotorleft = hardwaremap.dcmotor.get("left public void loop() { double drivepowerleft = gamepad1.left_stick_y; drivemotorleft.setpower(drivepowerleft); Declare motor variable Assign hardware to variable in init Set power using output of gamepad

20 Android Studio: Servos import com.qualcomm.robotcore.hardware.servo; import com.qualcomm.robotcore.util.range; public class BasicTeleOp extends Opmode { private Servo servolefthand; private double lefthandposition = public void init() { servolefthand = hardwaremap.servo.get("left public void loop() { double clawinc = -0.01*gamepad1.left_stick_x; lefthandposition -= clawinc; lefthandposition = Range.clip(leftHandPosition, 0.2, 0.9); servolefthand.setposition(lefthandposition); Range can be used to validate inputs to servo

21 Android Studio: Telemetry adddata method takes two inputs Label (string) Value (string, double, float); New hardware allows querying of motor/servo positions public class BasicTeleOp extends Opmode public void init() public void loop() { telemetry.adddata("left hand", lefthandposition);

22 Android Studio: Full Example package com.qualcomm.ftcrobotcontroller.opmodes; import com.qualcomm.robotcore.eventloop.opmode.opmode; import com.qualcomm.robotcore.hardware.dcmotor; import com.qualcomm.robotcore.hardware.servo; import com.qualcomm.robotcore.util.range; Include package and fully qualified names public class BasicTeleOp extends OpMode { private DcMotor drivemotorleft; private DcMotor drivemotorright; private DcMotor armmotor; private Servo servolefthand; private Servo servorighthand; private double lefthandposition = 0.0; private double righthandposition = public void init() { drivemotorleft = hardwaremap.dcmotor.get("left Drive"); drivemotorright = hardwaremap.dcmotor.get("right Drive"); drivemotorright.setdirection(dcmotor.direction.reverse); armmotor = hardwaremap.dcmotor.get("arm Motor"); servolefthand = hardwaremap.servo.get("left Hand"); servorighthand = hardwaremap.servo.get("right Hand"); Declare variables Assign hardware to variables righthandposition = 0.9; lefthandposition = 0.15; servolefthand.setposition(lefthandposition); servorighthand.setposition(righthandposition); Position servos

23 Android Studio: Full public void loop() { double drivepowerleft = Range.clip(gamepad1.left_stick_y, -1, 1); drivemotorleft.setpower(drivepowerleft); double drivepowerright = Range.clip(gamepad1.right_stick_y, -1, 1); drivemotorright.setpower(drivepowerright); double armpower = 0.0; double drivearmup = Range.clip(gamepad1.right_trigger, -1, 1); armpower += drivearmup; double drivearmdown = Range.clip(gamepad1.left_trigger, -1, 1); armpower -= drivearmdown; armmotor.setpower(armpower); if(gamepad1.a) { double clawdelta = 0.01; double clawinc = -clawdelta * Range.clip(gamepad1.left_stick_x, -1, 1); lefthandposition -= clawinc; lefthandposition = Range.clip(leftHandPosition, 0.2, 0.9); servolefthand.setposition(lefthandposition); righthandposition += clawinc; righthandposition = Range.clip(rightHandPosition, 0.2, 0.9); servorighthand.setposition(righthandposition); Drive motor controlled using joystick Arm motor controlled using triggers Servos controlled using joystick when button pressed telemetry.adddata("left hand", lefthandposition); telemetry.adddata("right hand", righthandposition); Display telemetry

24 Android Studio: Wireless Debugging Make sure phone and computer are connected to the same WiFi network Connect phone to computer via USB cable Open command terminal on computer adb tcpip 5555 Remove USB cable from phone Determine phone s IP address ( X.XX) Settings > WiFi > Dots > Advanced > IP address Open command terminal on computer adb connect X.XX To see if device is connected adb devices When building (green arrow) the project make sure to select the wirelessly connected phone

25 Configuring Hardware Device names must match values compiled into code Configuration file can be changed without recompiling

26 Common Pitfalls

27 Legacy Versus New Components Legacy New Legacy controller DC Motor Controller DC Motor Controller Servo Controller Servo Controller PushBot OpMode will error out during execution Legacy controllers will not operate in READ_WRITE mode Must request mode change, and wait, before querying servo position, motor position or motor power

28 Driver s Workstation Setup Make sure gamepad on screen lights green when controls are pressed If not you must configure the gamepads Launch FTC Driver Station app Press Start and A simultaneously on controller 1 Press Start and B simultaneously on controller 2

29 Resources Official FTC documents to set up phones, install software, write code, etc Intelitek ftc_app-master/doc/tutorial/ftc_nextgenguide.pdf Slides and interactive step-by-step tutorials on setting up phone, pairing, installing software, writing code, etc FIRST FTC Forums Feedback from actual users FIRST and Intelitek have worked very hard to provide detailed step-by-step guides!

30 Questions?