Building Android Robots
Juan Ignacio Ubeira
Julian Cerruti

KickstartTools andlibraries

Why?

Advantages

Cost?

Requiredeffort

How?

Why?
Technological evolution (2008 – 2017)
Samsung Galaxy S8

T-Mobile G1

✓
✓
✓
✓✓

7x faster processor
20x memory size
140x faster networking bitrate
100x video resolution
More integrated sensors

Why?
Popularity pushes innovation forward
Source: gs.statcounter.com

How?
Tools and libraries

Infrastructure

ROSJava• ROS implementation in pure Java• http://wiki.ros.org/rosjava

How?
Tools and libraries

Infrastructure

ROSJava• ROS implementation in pure Java• http://wiki.ros.org/rosjava

Native Libraries

Android NDK (roscpp_android)• Cross compiled ROS packages – JNI with native node wrapper• http://wiki.ros.org/android_ndk

How?
Tools and libraries

Infrastructure

ROSJava• ROS implementation in pure Java• http://wiki.ros.org/rosjava

Native Libraries

Android NDK (roscpp_android)• Cross compiled ROS packages – JNI with native node wrapper• http://wiki.ros.org/android_ndk

Java libraries

ROSJava Maven repository• Place to share compiled Java artifacts• https://github.com/rosjava/rosjava_mvn_repoBuilding a robotTangobot: A Turtlebot spinoff

Autonomous
Android Powered
Research platform
Open source
Tangobot’s wiki page: http://wiki.ros.org/Robots/Tangobot

Building a robot

Building a robot
Generic autonomous robot: Hardware components

Perception devices• Lasers, IMU, cameras, etc.

Processing unit
• CPU & Memory

Actuators• Mobile base

Building a robot
Tangobot: Hardware components
Turtlebot

Tangobot
Android phone(Tango-enabled)

Laser

Laptop
Robot base(IMU)

Robot base

Building a robot
Tangobot: Software components

Application

User Interface
Node launcher

Navigation stackSensor drivers
Mobile base drivers

Building a robot
Generic Navigation stack workflow• Sensors• Goals

InputsNavstack• Costmaps• Planners• Recovery• Velocity
commands

Outputs

Building a robot
Tangobot: Cross compiled navigation stack
Cross compiled Navstack (ROSCpp)JNI wrapper: execute & shutdown (C)ROSJava Native node (Java)
Executed by Tangobot app

Tutorial: http://wiki.ros.org/android_ndk/Tutorials/WrappingNativeRosjavaNodeBuilding a robot
Tangobot: Perception
MotionTracking

Area
LearningGoogle
TangoDepth
Perception

Building a robot
Tangobot: Tango and ROS interfacingTango ROS nodeRawdataROSdata

Native node (Maven)
Tango ROS Streamer wiki: http://wiki.ros.org/tango_ros_streamer

Navstack• Pose• Pointclouds• Cameras

Building a robot
Tangobot: Robot base driver

Twistcommands

Base
Serialcontroller commands

Robot
Base

Java node (Maven)
Node source: https://github.com/ekumenlabs/base_controller

Next steps
Tangobot roadmap

Maps Global costmap• Build• Navigate• ShareBases New platforms• TurtleBot 3• iRobot Create
App source: https://github.com/ekumenlabs/tangobot

GMapping
Tango ADF

Closing thoughts

ChallengesAdvantages

Tools

Multipletechnologies

Populardevices

ROSJava

Packageavailability

Evolving
devices

ROSCppAndroidThanks!

Q&A
Useful links:• http://ekumenlabs.com• http://wiki.ros.org/Robots/Tangobot• http://wiki.ros.org/rosjava• http://wiki.ros.org/android_ndk• http://wiki.ros.org/tango_ros_streamer