Top Front Side Back
Figure 2: Mechanical design. CAD design of the 3D-printed robot body.
Figure 3: Connection diagram. Top: Electri-
cal connections between battery, motor controller,
microcontroller, speed sensors, indicator LEDs,
and smartphone. Bottom: Optional custom PCB
to reduce wiring.
Our battery consists of three USB-rechargeable
18650 Lithium cells connected in series, pro-
viding a voltage between 9.6V and 12.6V de-
pending on their state-of-charge (SOC). An Ar-
duino Nano board is connected to the smart-
phone via its USB port, providing a serial com-
munication link and power. Two LM393-based
speed sensors with optical sensors are con-
nected as input to two of the digital pins. The
two front wheels are each equipped with a disk
that interrupts the optical signal: these interrup-
tions are detected and counted by the Arduino,
providing a wheel odometry signal. Two fur-
ther digital pins are used as outputs to switch
the indicator LEDs on and off, providing visual
means for the robot to communicate with its en-
vironment. We also use one of the analog pins
as input to measure the battery voltage through
a voltage divider. Finally, four PWM pins are
connected to the motor controller. This allows
us to adjust the speed and direction of the mo-
tors according to the control commands received from the smartphone. We have also designed
a PCB with integrated battery monitoring and two TI-DRV8871 motor drivers for increased effi-
ciency. The Arduino, motors, indicator LEDs, speed sensors, and an optional ultrasonic sensor are
simply plugged in. When building multiple robots, the PCB further reduces setup time and cost.
3.2 Software Stack
State estimation Serial communication
Run neural network
Interface with game
controller (e.g. PS4/Xbox)
➔ vehicle control
➔ indicators
➔ vehicle modes
PWM control of motors
Operate indicator signals
Measure wheel speed
Monitor battery voltage
Serial communication
Data Logger
➔ images
➔ IMU, GPS, etc.
➔ control, indicator
Graphical user interface
Process network outputAudio feedback for user
Android Arduino
OpenBot - Software Design
Figure 4: Software design. Our Android applica-
tion is responsible for high-level computation on
the smartphone and the Arduino program provides
the low-level interface to the vehicle.
Our software stack consists of two components,
illustrated in Figure 4. The first is an Android
application that runs on the smartphone. Its
purpose is to provide an interface for the op-
erator, collect datasets, and run the higher-level
perception and control workloads. The second
component is a program that runs on the Ar-
duino. It takes care of the low-level actuation
and some measurements such as wheel odom-
etry and battery voltage. The Android applica-
tion and the Arduino communicate via a serial
communication link. In the following, we dis-
cuss both components in more detail.
Android application. We design a user interface which provides visual and auditory feedback for
interaction with the robot. We use Bluetooth communication to interface with common game con-
sole controllers (e.g. PS4, Xbox), which can be used to teleoperate the robot for data collection. (The
use of a controller is optional and is not needed for autonomous operation.) To collect data, such
as demonstrations for imitation learning, we use the joystick inputs to control the robot and use the
buttons to trigger functionalities such as toggling control modes, logging, running a neural network,
etc. We derive our graphical user interface from the Android Tensorflow Object Detection appli-
cation [37] and extend it. Our GUI provides the camera feed and buttons to toggle data logging,
4