Software Exploration - DDS and the Trident #6 - An example Java UI Data Visualizer

Greetings enthusiasts,

I hope you are all well. I promised a dive into ROS2, but I didn’t do that, so here’s a slight tangent.

The Trident Data Visualizer example, written in Java using RTI DDS code gen for quick prototyping.

We discussed FastRTPS code gen in the last post. The details for rtiddsgen are very similiar, however, as you might expect, RTI offers more platforms and code examples over the C++ only FastRTPS. Here, I took a look at using the Java code generation from RTI and wrote this quick little app. (caution, its an example and buggy and laggy and needs work)

Trident Data Visualizer Example - Java based

You will need an RTI Connext 5.3.1 installed and a license to run it. If you don’t have RTI Connext, install it and request a 30-day trial license from their website. But fear not, I will have an OpenDDS Java implemenation with no license requirement in the near future. Also, I used eclipse photon for the development with the WindowBuilder eclipse plugin. I did not include any of the project settings. If you want to play with the code, you will need to set your LD_LIBRARY_PATH variable, pointing to (path to RTI’s install folder)/lib.

As an example, this application shows how you can build a reader interface for capturing trident data. The application only displays the Depth, Power, Water Temp, and Battery Power and nothing else. In the future, I would like to have an open source application that visualizes the data and records the data as well, exports to .csv, and so on.

Note, development was done on Ubuntu 16.04 using Eclipse Photon.


  1. Clone repo
  2. ‘cd’ into the executable directory
  3. Place your rti_license file here
  4. open the USER_QOS_PROFILES.xml and modify the partition->element tag for your partiion ID which is the first 7 characters of you ROV’s UUID. You can use RTI Admin console to discover this.
  5. type java -jar TridentDataVisualizerv1.0.jar

If your ROV is on the network and you have the correct partition ID, you should see updates in the text windows.

Thanks and remember to keep exploring, learning, and changing.


@Jim_N @Jim_T

Hi Jim_*,

I’ve looked at your Java and C examples, but it’s too big of dive for me. So I’ve been working with the RTI Connector Python binding and trying to derive everything from a couple of csv spreadsheets.

I have a few questions I thought you could clarify.

On how Depth and DepthConfig are handled as one rov_depth Topic vs rov_fuelgauge_health and *_status as two Topics? In the I saw:

    public void on_data_available(DataReader reader) {
        DepthDataReader DepthConfigReader = (DepthDataReader)reader;

In Python, I could only see DepthConfig in the Topic sample Python dictionary by putting the following in Depth.xml :

  <struct name= "Depth">
      <member name="depthConfig" type="nonBasic"  nonBasicTypeName= "orov::DepthConfig"/>

I tried the time_based_filter QoS property to reduce the Depth samples received to 1 Hz. First time I got something to work like I thought it would!

Have you found a way to handle the nested IDL / XML include(s) and member nonBasic types?
I’m looking for something to show the Topic attribute variable hierarchy on one line.
Something like : Depth/pressure/FluidPressure_/fluid_pressure_
and the RTI Native Type : float64

Do you have a good way to get the Topic data flow architecture? I tried RTI Views, but I can’t get a screenshot showing the entire graph with readable text.

For telemetry recording - at what rate?
1 Hz or slower
5 Hz rate
Every valid Topic DDS sample with DDS timestamp

I keep looking for Software Exploration - DDS and the Trident #7


Hi @webhoppery, Bill, I will reply with more detail soon! It might be a few days.



How to get the DDS Topics published by Cockpit?

I can see the DDS Topics published by the Trident and their type XMLs from /opt/openrov/dds/types/v1, but how do I get the Topics and type XMLs that are published by the Cockpit?

I’m mostly interested in the attitude.calc for the pitch, roll, yaw. Can I assume the yaw is giving the compass heading? This shows up in the JSON telemetry when Settings -> Experiments -> Telemetry is enabled.

Do you have the partition set correctly? btw, I will respond to our other thread soon.

Jim N.

I can see some topics published by the Cockpit ( rov_target_command etc ) that’s tied to the joystick. I’m looking for the names of the topics, and their associated type XMLs, that the Cockpit publishes that don’t show up in /opt/openrov/dds/types/v1 XMLs. Like the attitude of the Trident in degrees that I’m guessing the Cockpit calculates from the Trident Quaternion data. Compass heading data?

The types have moved on the Trident in v1.6.0 to /opt/openrov/share/orovmsg/types/

No hurry - enjoy Father’s Day if appropriate.


Are you able to see any data for the new rov_datetime topic? What types XML to use?

I still don’t see anything for the compass heading in degrees. Since it’s in the 1080p overlay and on the Pilot display, is it being calculated in both places?

I’ve attached a spreadsheet of the old v1.5.2 and new v1.6.0 topics and what I believe to be their assosiated types XML. Those with ??? are what I’m unsure of.TopicsTypes.csv (4.6 KB)

Hi Bill,

I’ve noticed something strange during a series of dives yesterday and will be looking at this tonight. Actually a number of things that are either artifacts of misunderstanding/expectation on the 1.6 release or something changed under the hood between the releases. My heading info and temp info are off from the pilot view info and I dont believe the water temp data I am getting on the overlay. Consistent 29 degree C … I dont live in the Bahamas lol and I would be very surprised that I am reading 29 C at 5 meters in the Chesapeake. It’s possible but still lol

Research and testing is needed for verification. More to come


Hi Jim,

Some of the topics have new attributes. I’ll try to get summary tomorrow.


I’ve regained sanity with the strange telemetry data I was receiving. All is well on that end. I am going to look at what you’ve sent me now.


Hi Jim,

Some new topic attributes I noticed. There may be more. They also declared a lot of enum E*.

member name=“provisioning_state” type=“nonBasic” nonBasicTypeName= “orov::msg::recording::EFilesystemProvisioningState”/
member name=“error_reason” stringMaxLength=“128” type=“string”/

Add substate attrib enum EVideoSessionSubstate