From Desktop to Browser: A Web-Based Redesign of the RaPToR Robot Teleoperation Interface
RaPToR is a ROS 2 toolkit for human-robot interaction research at the University of Bath. Its original Python Tkinter interface had to be installed and configured on every machine used in a study. I replaced it with a React web application and a new Python bridge service, so researchers can operate the robot from any modern browser with no local installation.
- Built the React frontend with separate panels for connection status, live sensor monitoring, movement control, built-in actions, recording management and a command terminal, plus switching between two simulation environments.
- Developed a Python ROS 2 bridge that exposes 35 sensor topics over WebSocket, streams only the ones a researcher enables, and runs all 8 built-in robot actions with full sent, accepted and result feedback.
- Chose a purpose-built bridge over the planned rosbridge and roslibjs approach, because action lifecycle handling, recording playback and selective sensor streaming need stateful logic that a generic message relay does not provide.
- Diagnosed a timing race condition that stopped the simulated robot from accepting commands on an ARM64 virtual machine without GPU acceleration, and resolved it with an automated detect-and-retry start-up script.
- Resolved silent data loss caused by QoS mismatches between subscribers and several Create 3 topics, by verifying each topic's QoS profile against the running system.
- Evaluated the interface through a heuristic evaluation against Nielsen's ten usability heuristics and a structured comparison with the original GUI, which showed improvements on five of seven criteria.
How it fits together