How to listen to ign-transport messages?
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 -l
and 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:
- How can I figure out which events trigger messages being sent on each topic? Alternatively, how can I trigger them manually?
- Why do I see messages being sent via the
ign
command-line tool, buttcpdump
remains?
Any help or pointers are highly appreciated.