Open spiderkeys opened 2 years ago
Hello @spiderkeys
I guess that it is an error, but PublishHelloWorldClient
won't match with the code you have shared since it does not have the same topic name, type name, or reliability QoS.
I assume that you have prepared a Connext DDS application that results in the output that you share in the screenshot of the RTI AdminConsole. That is that matches with PublishHelloWorldClient
.
Regarding the RTPS version, I have been talking with @MiguelCompany, (responsible in eProsima of Fast DDS) and there should be no problem here.
We have been analyzing the situation and it seems to be a serialization issue. Could you share the type of support generated by Micro XRCE-DDS Gen and the one generated by RTI Connext in order to ensure that the serialization is compatible?
Sorry, I had copied the wrong test code w.r.t. the HelloWorld (the previous code was from earlier testing I was doing on the PX4 bridged messages). I've updated that code block, which is what the screenshot from AdminConsole is showing the match on.
Attached are the typesupport files for Connext, FastRTPSGen, and Cyclone.
Worth noting that the fastrtpsgen version is 1.0.4 (an earlier specification from the existing microRTPS bridge that PX4 is using). Let me know if this needs to get bumped to latest fastddsgen to work properly.
Could you also add the Micro XRCE-DDS type support?
Can you clarify on this - I wasn't aware that there was separate typesupport necessary when using the XRCE client/agent. Is this not true? The HelloWorld client example constains the ucdr serialization and uses xml entity creation, and then the Agent picks up the serialized messages and republishes them to applications that have full type descriptions (which works in the case of FastDDS and Cyclone).
XRCE Client code, just for reference: https://github.com/eProsima/Micro-XRCE-DDS-Client/tree/develop/examples/PublishHelloWorld
I believe the HelloWorld.h/c are what would be considered the typesupport.
Because of https://github.com/PX4/PX4-Autopilot/pull/19326 I thought that you were generating another type of support for the XRCE-DDS side.
Can you check that the RTI Connext side is ensuring XCDR and not XCDR2 in order to guarantee that we are not having serialization and alignment issues?
I can confirm that the Connext side is using XCDR. The default QOS value in 6.x for DataRepresentationQosPolicy is AUTO_DATA_REPRESENTATION, which translates to XCDR by default (unless some other specific opt-in criteria are met, which are not being used). This is also reflected in the screenshot from Admin Console above, where requested and offered DataRepresentation both reflect XCDR.
It is worth noting that in wireshark, only metatraffic is shown ever having been sent to Connext applications - no samples are ever transmitted from the XRCE agent.
Upon subscribing to the HelloWorld topic, I can see that XRCE agent sends a few HEARTBEATs, to which Connext replies with ACKNACKs. Upon unsubscribing, Connext sends DATA submessages marking the given key Unregistered/Disposed.
I can share a pcap of the RTPS traffic, if it helps.
Yes please, share a PCAP of the discovery process.
Attached as zip, due to github file restrictions.
The sequence of events are:
Just to make absolutely sure about the XCDR vs XCDR2 situation, I explicitly set the DataRepresentation QOS to XCDR_DATA_REPRESENTATION, as opposed to leaving it default. No change.
We found something. Could you please try to create the subscription in RTI AdminConsole removing the partitions?
I have seen here that there is a text field with the text {empty},*
, try the same scenario but with this field empty.
Possible fix here: https://github.com/eProsima/Fast-DDS/pull/2580
I can confirm that removing the { "", "*" } entries results in receiving samples in Admin Console. I'll test the fix on the Fast-DDS side later today. Thanks!
We'll update Fast DDS version in the Micro XRCE-DDS Agent as soon as the patch is merged.
When subscribing to topics published by the XRCE Agent from RTI Connext DDS 6.1.0 based applications, discovery appears to complete, and readers/writers match according to both QOS and the topic's datatype, but samples are not delivered to the Connext DataReader over any available transport.
Samples are successfully delivered when subscribing from FastDDS or CycloneDDS.
Steps to reproduce the issue
Build the XRCE Client PublishHelloWorld example: https://github.com/eProsima/Micro-XRCE-DDS-Client/tree/master/examples/PublishHelloWorld
Build the XRCE Agent
Run the agent in UDP mode:
Run the client in UDP mode:
Confirm that the agent discovers the client and the topic and datawriter entities are created on the client's behalf
Use
rtiddsgen
to generate typesupport source files from the same HelloWorld.idl file in the XRCE Client projectCreate a simple application using Connext DDS that subscribes to the HelloWorld topic published by the XRCE client:
You can also just subscribe directly in RTI AdminConsole - the same observations apply.
Confirm in RTI AdminConsole that the datawriter and datareader have matched on both type consistency and QOS
Additional information
Both applications seem to agree on XCDR vs XCDR2.
The only difference I can see right now is that ConnextDDS 6.1.0 is using RTPS 2.3 whereas XRCE Agent (FastDDS) is using v2.2 and Cyclone is using v2.1.
Additionally, I enabled the least strict TypeConsistency checks on the Connext side, in case those were a problem: