User Interface Overview
Phantom Bridge comes with a flexible web-based User Interface. It can display autodetected Topics either as raw deserialized data, or using visual widgets. Several widget types are built in, you can also easily implement your own. You can call any ROS Service, set runtime ROS Parameters, and completely customize User Input for tele-operation.
Tip
The current configuration of the displayed panels and their settings are stored in the URL. You can share it with others and they will see exactly what you see, and be able to control the machine.
Most elements are designed to be intuitive and self-explanatory, here are some bits that may need a small introduction:
Robot Connection & Status
Discovered Resources
Nodes & Topics (Graph View)
Under the Nodes & Topics menu, you will find a Graph View like the one shown below. On the left you can see all the discovered ROS Nodes, on the right all discovered ROS Topics. The connections between them signify which Nodes publish and subscribe to which Topics. The icon next to the Node’s name opens a dialog allowing to examine and modify runtime parameters of each Node. The checkbox next to a Topic name opens a new panel for the topic. Each connection in the graph shows Publisher’s and Subscriber’s QOS. A warning is displayed when QOS mismatch is detected.
Introspection
This button controls Introspection (discovery of ROS Nodes, Topics, Services and Docker containers). When animating as shown here, Introspection is running on the Robot. You can manually start and stop it at any time.
User Input Indicator
If configured on the Robot, you will see the User Input menu on the top-right of the screen. Based on the current state of the input system, this is what the icon means. More information about user input can be found here.
Input disabled |
|
Input enabled and ready, not transmitting |
|
Input enabled and transmitting |
|
Error occured, not transmitting |
Message Type Inspector
Wherever you see a ROS Message or Service type name (such as sensor_msgs/msg/CameraInfo), you can click on it to reveal its full definition transcribed into a pseudo-JSON, as shown here. This is particularly useful as you don’t need to look up IDL/MSG/SRV type definitions and their nested sub-structures when working with a ROS system.