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.