How to listen to ign-transport messages?

asked 2021-03-08 04:14:58 -0500

FirefoxMetzger gravatar image

I'm trying to work out how different parts of Ignition Gazebo (Dome) communicate, and how I can "listen in" on the communication form outside Ignition.

I found that it "delivers messages to the destinations using a combination of custom code and ZeroMQ" [source], but I didn't manage to find a lot of detail on which nodes in what modules actually communicate with each other and why. Hence, my current approach is pretty much trial-and-error. If there is relevant documentation that I'm missing, please let me know where to find it.

I can get a list of published topics (and their corresponding protobuf messages) using the command-line tool via ign topic -land ign topic -i -t <topic> respectively. All messages seem to go via tcp, which is great (in theory) because I should be able to see them in both, a tcpdump and from outside ignition (e.g., via pyzmq).

For some topics (/world/shapes/state and /world/shapes/stats) this works nicely. I can monitor the messages on the wire, and I can receive and parse them inside of python.

For the other topics, this doesn't work. E.g., I don't seem to be receiving any /clock messages or messages from the /gui namespace (/gui/camera/pose). I also don't see any packages being sent (tcpdump) for the address specified by the /gui namespace. Yet, if I monitor either via ign topic -e -t <topic> I get a constant stream of messages and ign topic -i -t <topic> claims that these messages are sent via tcp.

I am wondering two things in particular:

  1. How can I figure out which events trigger messages being sent on each topic? Alternatively, how can I trigger them manually?
  2. Why do I see messages being sent via the ign command-line tool, but tcpdump remains?

Any help or pointers are highly appreciated.

edit retag flag offensive close merge delete