Ask Your Question

Revision history [back]

Topics are (in a way) strongly typed, so theoretically you can only send messages of a single type to them (namely, the type that was NodeHandle::advertise(..)d.

Topics are (in a way) strongly typed, so theoretically you can only send messages of a single type to them (namely, the type that was NodeHandle::advertise(..)d.


Edit: just tested this with three rostopic instances:

  1. pub /chatter std_msgs/String "data: 'piet'" -r1
  2. pub /chatter std_msgs/Int16 "data: 345" -r1
  3. echo /chatter

Result: the last publisher "wins", so the topic type registered appears to be std_msgs/int16. rostopic echo also prints 345.

The std_msgs/String publisher prints this:

[/rostopic_15588_1537948069134] [WARN] [1537948151.558332]: Could not process inbound connection: topic types do not match: [std_msgs/Int16] vs. [std_msgs/String]{'message_definition': 'int16 data\n', 'callerid': '/rostopic_17009_1537948151282', 'tcp_nodelay': '0', 'md5sum': '8524586e34fbd7cb1c08c5f5f1ca0e57', 'topic': '/chatter', 'type': 'std_msgs/Int16'}

Summarising: you can advertise(..) any type on a single topic, but the "last one" will "win" and connections between publishers and subscribers will error out as they expect a certain type but during handshaking they see another.

Note: rostopic is Python, I've not tested C++ but the behaviour should be similar.