Android 13 controller

This page describes how to assemble the Android 13 controller, which controls movement for a sensor fusion test rig and lighting for ITS-in-a-box. The sensor fusion test is part of the Camera Image Test Suite (Camera ITS) in the Compatibility Test Suite (CTS). The Android 13 controller enables automation by controlling rig lighting and servo motor for tests scenes that require rotation and lighting control.

Android 13 controller overview

ITS-in-a-box provides a consistent testing environment with a fixed distance between the test tablet and test phone, in addition to consistent lighting without an external light source. The Android 13 controller automates both servo control and lighting control, and eliminates the need to manually rotate the DUT for sensor fusion scene tests and to manually toggle lights on and off for lighting-controlled tests.

Servo and lighting control in test rigs

The sensor fusion test rig provides a fixed motion of the phone for reproducible testing. The phone is rotated in front of a checkerboard target to allow image capture with the phone at various positions. For test_sensor_fusion, the servo rotates the phone around the camera center of axis 90 degrees and back in about 2 seconds. For test_video_stabilization, the servo rotates the phone around the camera center of axis 10 degrees and back repeatedly to mimic the phone movement when taking a video while walking. Figure 1 shows two phones moving in a sensor fusion test rig. Figure 2 shows one phone moving in a sensor fusion test rig.

Phone movement in test rig

Figure 1. Phone movement in test rig for test_sensor_fusion

Phone movement in test rig

Figure 2. Phone movement in test rig for test_video_stabilization

Servo motor control

The analog servo motors in the test rig are positional servos controlled using pulse-width modulation (PWM). A typical positional control example is shown in Figure 3. The control signal has a period of 20 ms. Changing the pulse width to the minimum width moves the motor to the neutral position and changing the pulse width to the maximum width moves the motor 180 degrees clockwise.

Servo control description

Figure 3. Typical servo control description

Lighting control

To control the servo motor motion and lights using a host computer, the sensor fusion test rig requires a USB connection. The Android 13 controller uses a USB-connected Arduino UNO R3 board with a custom routing board (or shield) mounted on top. The Android 13 controller can control up to three sensor fusion rigs rotator servos, and up to three ITS- in-a-box lighting systems or one sensor fusion rig from a single host computer.

The revision 3.0 Android 13 controller lets users disable auto-reset when the Arduino serial port is opened through USB. The auto-reset function is enabled when the controller is plugged into another host or being used for other test cases. Users can enable or disable auto-reset using a physical switch on the controller.

The Android 13 controller can work with any Camera ITS-in-a-box. When testing is conducted on DUTs running Android 13 and Android 14, the Android 13 controller is connected to the Camera ITS-in-a-box (RFoV, WFoV, Modular) to conduct lighting-controlled tests. From Android 15, all lighting-controlled tests except scene_low_light are included in scene_flash and can be run using the sensor fusion box.

In Android 15, we moved all lighting-controlled tests to scene_flash, which takes place in the Sensor Fusion Box, hence connecting to Camera ITS-in-a-boxes is no longer needed.

For tests in scene_flash, a dark environment with lights turned off is required to trigger the auto flash function on test phones. Figure 4 shows the lights in ITS-in-a-box being turned off and on by the Android 13 controller.

Light control within ITS-in-a-box

Figure 4. Lights turned off and on for test_auto_flash

Revision history

The following table describes the revision history of the Android 13 controller and includes download links to each version of the production files.

Date Revision Production file download Change log
August 2024 3.0
  • Added auto-reset bypass such that lights aren't toggled during communication with the DUT
December 2022 2.2
  • Added option to order populated PCB board from EasyEDA
  • Removed spurious delays after servo moves in Arduino micro-code
  • Changed standoffs from metal to nylon
  • Changed through-hole MOSFETS to surface-mounted MOSFETS
  • Changed capacitor from 10 uF to 1000 uF
March 2022 1
  • Added lighting control capability.
  • Changed from 6 servo control to 3 lighting and 3 servo control

Android 13 controller setup

This section describes how to set up an Android 13 controller.

Required components

You can purchase the Android 13 controller through one of our qualified vendors or you can build the controller on your own. The production file consists of a PCB Gerber file, the PCB bill of materials (BOM), PCB placement information, and an enclosure STEP file. To download the production file, see the table in Revision history.

If you're building your own controller, you must have an Arduino UNO R3 board. If purchasing the controller through a qualified vendor, the Arduino is included.

The Android 13 controller enclosure is an optional but recommended component that protects the controller and blocks off unused USB ports to prevent setup errors. For details about pricing and options for the controller, contact a qualified vendor.

Setup procedure

To set up the Android 13 controller, follow these steps:

  1. Connect 12V (for lighting) and 5V (for servo) adapters to the appropriate power jacks (Figure 5).

    Power adapter location

    Figure 5. Power adapter location

  2. Connect your ITS-in-a-box or Sensor Fusion box lights to one of the lighting channel output jacks (Figure 6). Depending on the lighting power's barrel use, use an adapter as required (Figure 7).

    Lighting output location

    Figure 6. Lighting channels output location

    3.5mm x 1.35mm male plug to 5.5mm x 2.1mm Female jack converter

    Figure 7. Adapter connecting lighting power to controller

  3. To set up for the sensor_fusion scenes, connect the servo to one of the servo channel connection headers.

    Servo channel connection location

    Figure 8. Servo connection location

    For revision 3.0 controllers, when connecting the controller to a new host the auto reset switch must be set to Enable.

    For revision 3.0, the controller includes an auto reset switch that can be enabled or disabled. When testing, we recommend setting the auto reset switch to Disable to prevent all lights from going out momentarily at the beginning of each test as its_base_test establishes communication with the Arduino controller. This is critical when running parallel testing (ITS running simultaneously with the test rig lighting system connected to the same controller).

    Auto Reset location

    Figure 9. Auto reset switch

  4. Connect the controller to the host with a USB-A cable.

    USB-A location

    Figure 10. USB-A connection port to host

Figure 11 shows an example of a completed Android 13 controller setup for one lighting system and servo.

USB-A location

Figure 11. Completed Android 13 controller setup

Software control from host

Micro-code can be downloaded to the UNO to assign the PWM pins to the motor signals and define the pulse-width ranges for different angles. The micro-code for servo rotation control of the six HS-755MB motors is included in Other resources. That section also includes a link to a simple program called rotator.py, which rotates the servos.

Using the Android 13 controller

Camera ITS usage:

python tools/run_all_tests.py device=device_id camera=0 rot_rig=arduino:1 scenes=sensor_fusion

With included test script:

python rotator.py --ch 1 --dir ON --debug

Software control downloads