Software Exploration - DDS and the Trident #2


#1

Greetings enthusiasts!

I hope you are all well. I’d like to follow up on the previous post, highlighting RTI’s Admin Console. The console is great. You can view the entire DDS architecture, mesages types, topics, and data. However, sometimes you just need to see data scrolling on a terminal screen for good measure. This can be done with DDS Spy. Assuming you’ve found the RTI Connext Launcher, which you should have explored the Admin console from, you’ll want to select the Utilities tab near the top of the launcher.

Select DDS Spy.

ddsspy1

Here, you can pick a domain, here the Trident works in 0, print samples, display id’s, show handles, truncate names, subscribe to topics and filter via type or topic name. You can open as many of these as you like.

Ok. So there’s an issue here. OpenROV has data partitions set up to match the reader/writers to individual ROVs. A partition allows readers and writers on the same domain to separate data streams. This is a good thing, however, DDS Spy, when using the GUI, does not have a clear partition selection process. I haven’t figured it out yet. However, the command line works just fine.

Navigate to your rti_connext directory. In the bin folder, you will find all the executable scripts (remember I am in Linux, so your windows applications may differ). Also, take a look at, http://community.rti.com/rti-doc/510/ndds/doc/html/api_cpp/group__DDSNddsspyModule.html, the RTI Connext C++ API. This gives you all the commandline parameter for DDS Spy. You can also type ./rtidsspy -help.

Ok, you need to match the partition, domainId, and select the topic or data type you would like to display.

Try ./rtiddsspy -partition (enter you rov host name. this is found on the physical view in the admin console. it will look something like 4ecb6b… They are individual system names. You should see your host PC IP as well)

Moving on:

./rtiddsspy -partition 4ecb6b -topicRegex “depth” -printSample

You should see something like:

There’s good info here. We see the message sequence number, the topic name, rov_depth, the topic type, orov::Depth and pressure data, objectId and depth data.

Good stuff. Play around with it, try different parameters and look at the topics. Once I figure out the trick to get the DDS Spy UI to match partitions, I’ll post the solution.

Enjoy.

In the next post, we’ll take a look at, drum roll…, how to read this data from a template c++ application, which I will post on github, soon. After which, we will discuss publishing data to the ROV.

Jim


RTI Connext DDS
#2

Greetings enthusiasts!

I figured out how to get the DDS Spy UI to monitor partitions. It was silly easy.

Click the Advanced Settings tab in the UI and you will see a section labeled Partitions, comma separated.

Merely enter the partition label in that text box and hit the run button on the UI…yes, that easy…I feel stupid.

ddsspy_advanced

Moving on!
Enjoy,

Jim


#3

Just attended the RTI Connext conference and learned a bit more about their product suite and licensing. Good news is that extended availability is there for any researcher (any non-commercial developer) and can be requested from RTI (annual renewal license). I can post more on this if folks are interested.

Following up on Jim_N’s posts I did the following:
Configure Trident to connect to local network (wi-fi)

Brought up RTI admin console on my windows laptop

Admin console discovered Trident being on same wi-fi network

Selected system and topic within domain (trident-core)

Selected DDS Entity – rov_depth

Right clicked, visualize > sample log

In Data Type box, selected “show data type details” button (to right of type name)

Will show type tree. Select Equivalent IDL tab.

Can now cut and paste idl to idl file. (ex. rov_depth.idl)

Utilities can be used to convert type (xml <> idl)

Also code generator will generate C++ code for publisher and subscriber from either the xml or idl files.

I got a set of C++ files along with USER_QOS_PROFILES.xml

also on windows a file to set up a visual studio project.

I compiled things (build) and was able to run rov_depth_publisher and rov_depth_subscriber.

The problem I ran into is that I couldn’t get the subscriber to listen to my Trident output. There seems to be some way to associate the Trident and it’s domain and partition with my subscriber

I tried experimenting with the USER_QOS_PROFILES.xml file to add that info:

      <subscriber_qos>
        <partition>
          <name>
            <element>995982b</element>
          </name>
        </partition>
      </subscriber_qos>

Did not work and I will try to find out how to actually do this.

Jim T


#4

@Jim_Trezzo In Admin Console, can you see the Trident dynamic data in the Topic Data panel? If you can, what Windows are you using? Home or Professional? Router model?

If you can’t see the Trident dynamic Topic data, can you see the dynamic data in the Shapes Demo?

I couldn’t see the Trident dynamic Topic data with Win10 Home and a Netgear N300 router. I ended up dual booting Ubuntu v18.04 with the RTI DDS Trial for Ubuntu v16.04. Seems to be working as advertised.

I’d be interested in further info on the non-commercial developer annual license.

Bill


#5

Thanks for exploring this @webhoppery and @Jim_Trezzo! As far as Windows use…I haven’t touched a windows machine by choice, other than as a dummy email terminal at work, for some time. Can’t help you there. However, make sure you are partition matched, if not, you can see the topics but won’t be able to see the data.


#6

@Jim_Trezzo, How’s the auto-generated code? I am pretty allergic to auto generated stuff, but curious as to what you have dove into.

I think it would behoove the entire community to have a generic interface code base that wraps the more tenuous RTI DDS calls nicely such that a developer need not be a DDS expert in order to use. There are two generic DDS application projects that I know of, one from spiderkeys,https://github.com/spiderkeys/SensorPublisher, and one I wrote for OCI OpenDDS, https://github.com/binary42/OpenDDS_SkeletonNodeCpp. Both approaches need modification and testing.

There is also ROS 2.0…but I haven’t made the dive into that yet…


#7

@Jim_N wrt generic interface code - the RTI Connector might provide a base.
RTI Launcher -> Labs -> RTI Connector

The interface code would be helpful for subscribing to existing Trident data, but what about payload data? Have you seen anything from OpenROV about payload interfaces and how the payload data passes through DDS? Or bypasses DDS - ie Python WebREPL? It seems like they can’t change the Trident DDS code for every new user payload.

What about presenting payload data on the Pilot display?

Curious as to what Linux you’re using? I’m having trouble getting the right compiler version to match what RTI built with.


#8

@webhoppery

Indeed, thank you.

In regards to payloads, from past discussions, OpenROV is working towards this. I believe it will be DDS based. not sure about the pipeline. I am expecting information on this with in the next few months.

I’m using Ubuntu 16.04. What compile issues are you having , exactly?

Jim


#9

In reply to earlier messages, I am looking at the code Jim N. shared as well as what RTI generates. None of it is as approachable as I would like to see, but getting something to work is the first goal. I have requested a “research” license from RTI for non-commercial use. Will share how that goes.

Also saw a connector to MATLAB/Simulink at the RTI conference and saw some interesting robotics and sensor fusion demos at a MathWorks conference yesterday. This could be complementary or a bottom up alternative to ROS2 approach. Need to get some of this integrated with Trident first! Back to work…

Jim


#10

Just viewed the tutorial videos on the MathWorks DDS support package and wanted to share the link: https://www.mathworks.com/hardware-support/rti-dds.html

If I can get this working with the Trident platform, it seems like a potent tool for software experimentation and development.

Jim T.


#11

Jim, this is great. I haven’t had a chance to modify the c++ code template for the community as of yet, but I plan on having functioning code in the next month. Very happy your exploring this fuether.


#12

@Jim_Trezzo - Have you had any success reading the Trident data?

I tried using the RTI Connector using the Python bindings, and I too am stumbling trying to read the Trident data. My reader can read the writer canned TridentControl typed data ok. And the Admin Console sees that and the Trident data.

Any luck on your RTI R&D license? I tried for the Community Open Source license, but haven’t heard back on their decision.

If you have any hints, pointers …
Bill


Acoustic Location System
#13

A couple of replies and comments from earlier posts:

I am running windows 10 home and am able to see Trident data using RTI Admin when it is on the same network as mine.

I was able to get a license from RTI (on an annual basis) as a ‘researcher’. I made the request via e-mail to the regional account team. I think following the links for the free trial and selecting “internally funded pre-proposal R&D” should work as well. I also needed to request a license for ARM/Linux which wasn’t part of the initial response.

My e-mail request contained: “I would like to go ahead and request the annual license for research and development (non-commercial use). Given OpenROV’s adoption of RTI for their Trident platform and the ROS2 selection of DDS it’s clear I should be using this technology for my sensor integration work.”

If you have any issue with this request please let me know and I will let my contact at RTI who advised me on their licensing, know what you ran into.

Regarding getting software to work. One stumbling block is the need to configure DDS 'partitions" which is part of the more complex world of QOS. Trident uses partitions to separate out the data streams from multiple Tridents with identical topics on the same network (from what I understand).

There are ways to do this using the DDS APIs when a participant is created for example. Another approach is using an xml file to do this. The advantage here is that the same compiled code will run with different values in the qos.xml file which can be edited as needed (change partition value for example) and not have to rebuild your software.

I found a fairly simple example with implementations in multiple languages here that uses qos xml profiles:

You can try basic C or the cleaner modern C++ (I need to come up to speed on this myself).

I think a basic subscriber using a qos file with the partition for your Trident can be built for one of the simpler topics - ex. rov_beacon as a starting point.

I will let folks know how this goes and will see if someone else get’s it to work first.

There is also a programmatic example of using partitions here:

I also ran into some wi-fi connectivity issues with the Trident Top-side in my suburban area with many wi-fi networks around me. I will provide details on that and some work arounds in another post.

Jim T


#14

Finally got a C++ subscriber to listen to Trident topics: first rov_beacon then rov_attitude. beacon is a simpler type/type tree made up of strings. attitude is a more complex structure containing orientation and angular velocity along with a time stamp.

To do this, I used the RTI code generator (rtiddsgen) to generate C++ code from idl definitions for the topics. You can get the idl from the admin console by subscribing to the topic and viewing the data type info and equivalent idl.

I had to modify the QoS to include the partition element and the unique value for my Trident. I did this by modifying the USER_QOS_PROFILES.xml file that was generated by rtiddsgen.

      <subscriber_qos>
        <partition>
          <name>
            <element>995982b</element>
          </name>
        </partition>
      </subscriber_qos>

I then needed to add code to the subscriber C++ source to read the xml QoS file. Also had to modify the topic registration in the subscriber code to the correct topic name (rov_beacon or rov_attitude) as shown by the Admin Console DDS entities list.

When I have a chance I will put these examples in github to share. None of this is as simple as I would like. I will continue to explore both MATLAB DDS support and later ROS2. Both have higher level libraries and visualizations to make use of the Trident data.

More fun ahead!


#15

Hi Jim,

Fantastic exploration. Thanks!
I spoke with RTI about the open source developers license, and unfortunately, I do not think it will help many people. It’s setup for developers to release apps, not for researchers at home trying out their own dds nodes.
I am getting clearification on this, but as I understand it today, one can get an opensource license for a widget, but not for a, ‘hay i want to try this node for the trident…’. That doesn’t mean you can’t use the trial licenses, but there’s open legal questions there as well.

In any event, ROS2 looks to be the path forward. OpenDDS is also a good option, and I intend to release a modified version of the opendds template node that works with the Trident in the coming months.

More to come.

Jim