Three parts and two modes
Robo-Platform is described in an arXiv preprint by Masoud Dayani Najafabadi and Khoshnam Shojaei of the Department of Electrical Engineering, Islamic Azad University, Najafabad Branch. It was first submitted on 25 September 2024 and revised to version 3 on 17 July 2025. No conference or journal venue is listed, so it has not been presented here as peer-reviewed work. [1] [2]
| Part | What it is | Role |
|---|---|---|
| Android app | Java app for API 35, minimum API 21 | Records sensors, or relays commands to the robot |
| Microcontroller board over USB | Arduino Uno, Due or Mega 2560, or a custom ATmega8 or ATmega32 board using the V-USB library | GPIO, PWM and analogue-to-digital readings the phone does not have |
| Controller | Desktop app in Java with a JavaFX interface, or a second phone | Sends commands over Wi-Fi or Bluetooth |
In data acquisition mode, only the phone is needed, plus the board if an external sensor is read. In robot control mode, all three parts are used: commands travel wirelessly from the controller to the phone, and over USB from the phone to the board that drives the motors. The code, schematics and PCB designs are in an MIT-licensed repository that links to a sample dataset. [2] [3]
What it records, and in what form
| Data | Stored as | Detail that matters later |
|---|---|---|
| Accelerometer, gyroscope, magnetometer | One file per sensor type, with optional bias columns and a sensor ID | Raw, uncalibrated readings are available |
| GPS fix | Timestamp, latitude, longitude, altitude, velocity, bearing | About one fix every 4 s in the recorded data |
| Raw GNSS | Navigation messages and measurement messages in separate files | Usable for post-processing positioning |
| Cameras | Timestamped JPEG images and a text index, one index per physical camera | Focus, white balance and exposure locked at the start; lens distortion correction off; 640 × 480 in the published dataset |
| External sensor on the board | Timestamp, ADC reading, optional channel ID | Meaning depends on the attached sensor |
| Calibration | Separate files for camera parameters and ADC settings | Channel count, bit resolution and sample rate recorded |
Each value is stamped with nanosecond resolution when it becomes available to the app. The paper does not describe hardware synchronization between sensors. Locking focus and exposure keeps the camera model constant through a recording, which visual SLAM relies on; the missing synchronization means time offsets between camera and IMU must be estimated afterwards. The paper itself notes that, unlike MARS Logger, it does not calibrate time offsets offline. [2]
Why timestamps and synchronization decide whether recorded data can be trained on is explained in how robotics teams collect training data.
Measured rates: a fast IMU and a slow camera
| Sensor | Mean period | Period standard deviation | Rate (our calculation) |
|---|---|---|---|
| Gyroscope | 0.01 s | 0.002 s | About 100 Hz |
| Accelerometer | 0.01 s | 0.002 s | About 100 Hz |
| Magnetometer | 0.01 s | 0.003 s | About 100 Hz |
| External ADC | 0.01 s | 0.003 s | About 100 Hz |
| Camera | 0.32 s | 0.038 s | About 3 images per second |
| GPS | 4.06 s | 0.378 s | About one fix every 4 s |
Two figures deserve attention. The IMU period varies by 2 ms around 10 ms, so consecutive samples are not evenly spaced and must be integrated with their own timestamps rather than an assumed 100 Hz. The camera delivers about three images per second. For comparison, the EuRoC drone dataset that the paper also evaluates lists 20 images per second per camera and a 200 Hz IMU. At three images per second, a phone carried at walking pace moves roughly 40 cm between images, which leaves visual tracking little overlap to work with. That distance is our arithmetic at an assumed 1.3 m/s, not a figure from the paper. [2] [4]
How fast each link is
| Measure | USB, Arduino | USB, V-USB board | Wi-Fi | Bluetooth |
|---|---|---|---|---|
| Latency, 64 B | 5.7 ms | 14.0 ms | 13.5 ms | 87.1 ms |
| Throughput, 64 B | 0.6 | 2.9 | 0.6 | 0.5 |
| Throughput, 256 B | 2.5 | 4.8 | 2.4 | 2.0 |
| Throughput, 512 B | 5.0 | 5.4 | 4.8 | 3.9 |
| Throughput, 1024 B | 9.9 | 5.8 | 9.5 | 6.7 |
The Arduino link is close to its ceiling. A serial line at 115,200 bit/s with the usual one start bit and one stop bit per byte carries at most 11,520 bytes per second, about 11.25 KiB/s; the measured 9.9 KiB/s with 1024-byte buffers is about 88 % of that. The framing assumption and the percentage are ours. The V-USB board is fastest at small buffers but grows slowly, and the current implementation cannot handle buffers of 256 bytes or more, so only its 64-byte figure reflects the board as published. [2]
Latency becomes distance once a robot moves. If the reported delay sits between a command and a wheel, a vehicle at 1 m/s covers about 6 mm over the Arduino USB link, 14 mm over Wi-Fi and 87 mm over Bluetooth before the command arrives. Those distances are our arithmetic. For a toy car the Bluetooth figure is tolerable; for anything that must stop near a person it is not, and Robo-Platform makes no safety claim. [2]
What SLAM tools made of the recordings
| Robo-Platform sequence | ORB-SLAM3, visual | ORB-SLAM3, visual-inertial | VINS-Fusion, visual-inertial | EKF, inertial |
|---|---|---|---|---|
| iaun-cvr-lab | 28 | 68 | 97 | 100 |
| iaun-library | 10 | – | 90 | 100 |
| iaun-corridor1 | 12 | 56 | – | 100 |
| iaun-corridor2 | 6 | – | 17 | 100 |
| koohestan-park | – | – | – | 100 |
Visual-only ORB-SLAM3 tracked between 6 % and 28 % of the indoor sequences and none of the park sequence. Adding the IMU helped where it worked: VINS-Fusion tracked 97 % of the lab sequence and 90 % of the library. The inertial EKF tracked everything, but the authors note that it drifts, because the IMU-only runs had no magnetic or GPS correction. A 100 % tracking time therefore says the filter kept producing an estimate, not that the estimate stayed correct. [2]
The authors attribute the visual failures to low frame rate, fast motion and lighting changes, and their reference sequences from EuRoC and TUM-VI generally scored higher. That matches the rate table above. Anyone recording with this app for visual SLAM should expect to raise the image rate or slow the motion before blaming the algorithm. [2]
The two robot experiments
The toy car uses a Samsung Galaxy J5 attached to an ATmega8 V-USB board. Two digital outputs drive a DC motor through a motor driver, one switching it on or off and the other setting its direction, and commands come wirelessly from the desktop app. The quadcopter uses an Arduino to generate PWM. The phone reads the four current PWM values, the wireless commands and its own IMU to estimate orientation, then computes new PWM outputs. [2]
The paper reports no flight measurements for the quadcopter. An attitude loop that passes through Android scheduling and a USB round trip of several milliseconds is a demanding arrangement, so the experiment shows that the architecture can be wired together, not how well it flies. [2]
A phone that does run a walking robot’s control is examined in what UCLA’s PhoneBot runs on the phone.
What the authors say it does not do
- Android only; no iOS version and no barometer recording.
- In data acquisition mode, the board is read over USB only, and live data is shown only as the camera preview.
- No monitoring in control mode: camera feeds are not sent to the controller, and sensor data is not used for control in server mode.
- Recorded data is uncalibrated and noisy and needs post-processing, such as timestamp alignment and format conversion, before SLAM tools accept it.
- The code is not optimized for performance, and communication logic is not separated from sensor logic.
- V-USB buffers are capped at 64 bytes; encrypted communication is mentioned only as future work.
When it fits a project
| Use | Fit | Reason |
|---|---|---|
| Logging IMU, raw GNSS and multiple phone cameras for offline experiments | Good | Per-sensor files, raw values and calibration files are the paper’s main contribution |
| Visual or visual-inertial SLAM benchmark at normal motion speeds | Weak | About 3 images per second and no hardware synchronization |
| Driving a hobby car or a slow platform from a laptop | Good | Arduino USB and Wi-Fi latencies are in the 6 to 14 ms range |
| Closed-loop control over Bluetooth | Poor | 87.1 ms latency and the lowest throughput |
| Anything that needs safety-rated stopping | Not intended | No safety function is claimed or tested |
The useful lesson extends beyond this app: before recording a dataset with any phone logger, measure the actual period and jitter of each stream, as Table IV does, and check that the camera rate suits the motion you intend to record. [2]
Sources and verification
- Robo-Platform: A Robotic System for Recording Sensors and Controlling Robots (arXiv:2409.16595) ↗arXiv · Read 19 October 2026
Listing for version 3, revised 17 July 2025; first submitted 25 September 2024. Authors Masoud Dayani Najafabadi and Khoshnam Shojaei. Subjects cs.RO, cs.SY, eess.SY. No conference or journal venue listed.
- Robo-Platform, HTML full text, version 3 ↗arXiv · Read 19 October 2026
Tables IV (acquisition statistics), V (SLAM tracking time), VI (USB, Wi-Fi and Bluetooth latency and throughput), file formats, supported boards, experiments and stated limitations. Affiliation: Department of Electrical Engineering, Islamic Azad University, Najafabad Branch.
- m-dayani/robo-platform repository ↗GitHub · Read 19 October 2026
MIT licence. Android, AVR and desktop modules as Git submodules, scripts folder, link to a sample dataset on Google Drive and a video walkthrough.
- The EuRoC MAV Dataset ↗ETH Zurich Autonomous Systems Lab · Read 19 October 2026
Lists stereo WVGA monochrome images at 2 × 20 FPS and a MEMS IMU at 200 Hz. Used only as a reference point for rates.
Evidence limits
- The paper measures latency by echoing timestamped packets. This note repeats its latency figures without deciding whether they are a round trip or a one-way estimate.
- Phone models used for the authors’ recordings are not named; only the Galaxy A20 (link tests) and Galaxy J5 (toy car) are.
- The SLAM table reports the share of each sequence that was tracked, not trajectory error. Tracked is not the same as accurate.
- The quadcopter experiment has no published flight measurements.
- The text mentions iaun-corridor4 in one place while Table V lists iaun-corridor1.
Article history
Research note added after the paper title appeared in reader searches. arXiv listing, HTML full text, repository and EuRoC dataset page checked on 19 October 2026.
Report a correction