Fixes from a live run of 0.5.3 and 0.5.5 against OmniSim's simulated
Clearpath Husky (ROS 2 Humble, Fast DDS, Cyclone backend for the DDS tools),
reported with ground truth by the OmniSim team.
Added
sample_messagestakesmax_array_length(1..65536, default 128, null for no
cut) andarrays_summary_only. A cut is listed under_truncated_after_columns
in the sample and innote.- Size caps on returned samples: 1 MiB per message and 4 MiB per call
(TOPICFORGE_MAX_SAMPLE_BYTESsets the per-message cap). Over-cap messages are
dropped andnotesays so.peek_bag_samplesis capped the same way, and its
arrays are cut at 4096 elements. BagTopicStatsgainsfirst_timestamp_ns,last_timestamp_ns,
frequency_basis(topic_spanorbag_duration) andlatched.TopicInfo.qos_durability;qos_reliabilityandqos_durabilityare filled
byget_topic_infofrom the publishers' QoS (mixedwhen they disagree).HealthReport.dds_inactive_reasonsays whydds_backendisnone.- A real Humble rosbag2 bag from the OmniSim team as a test fixture
(tests/fixtures/bags/omnisim_humble/).
Changed
list_topics(live) uses oneros2 topic list -vcall for publisher and
subscriber counts instead of oneros2 topic infoper topic, falling back to
the per-topic calls if the output is not recognized. It leaves QoS null.rosbags>=0.11.3is required (0.10 reads a bare.db3as ROS 1 and returns
message definitions and QoS as plain strings).- A latched topic gets no rate only when its messages span under 1 second (a
start-up burst such as/tf_static); a latched topic published over a longer
span keeps its rate.latchedis unchanged. analyze_bagreads per-topic times of an.mcapbag only up to 200 MiB and
5 s; past either it keepsbag_durationrates and says so in the new
BagAnalysis.note.- The
policies_checkedentry for History reads "History (risky only, where
announced)". max_array_lengthalso cuts strings and bytes to that many characters plus
...; those cells are listed under_truncated_columns.QosProfile.historyis now optional, and a newhistory_noteexplains why it
is missing. DDS discovery does not carry History (the builtin endpoint data has
no such member), so TopicForge reports it only for its own endpoints and for
Cyclone DDS peers that set something other than the default. For Fast DDS, RTI
and unknown-vendor endpoints it isnull; for a Cyclone peer, KEEP_LAST depth 1
is alsonullbecause the binding fills missing QoS with that default. Clients
that assumedhistoryis always a string must handlenull.- A discovered endpoint that announced no History keeps its reliability,
durability and the other policies; before, the wholeqosbecamenull. detect_qos_mismatchesjudges the KEEP_ALL-vs-KEEP_LAST History risk only
where both sides announced History; elsewhere one hint states that discovery
does not carry it, instead of a warning on every pair.
Fixed
sample_messageswitharrays_summary_onlyshifted every CSV column after an
array:<sequence type: float, length: 541>contains a comma and was split in
two. It is one cell now.sample_messagesreturned no samples and no explanation when the echo timed
out (for example a large message withmax_array_lengthnull);notenow says
so.list_topicsreported 0 publishers and 0 subscribers for a topic missing from
ros2 topic list -v; it now asksros2 topic infofor that topic.peek_bag_samplesconverted a whole numpy array to a list before cutting it
at 4096 elements; it now converts only the part it keeps.- Fast DDS endpoints no longer report a History taken from the binding's
defaults:detect_qos_mismatchestreats it as not announced, like the other
vendors. This path has never run against a real Fast DDS bus. - The
tests/fixtures/bagsbag is left out of the sdist. peek_bag_samplesfailed on every Humble.db3bag with "Bag contains no
type definitions". The reader now gets the type definitions of the distro the
bag records, or Humble, andnotesays which.LaserScan.rangesand other
numeric arrays now come back as lists, not a numpy repr string.analyze_bagrates were count / whole-bag duration, 0.1 to 0.7 percent off on
periodic topics and meaningless on latched ones (/tf_staticshowed 0.06 Hz,
/rosout0.37 Hz). They are now(n - 1) / (last - first)per topic, read
from the bag when it is readable locally, and latched topics are flagged.get_topic_inforeturnedqos_reliability: nullon every topic although the
CLI prints Reliability and Durability per endpoint.peek_dds_samples('/scan')reported the topic as not discovered while
rt/scanandscanworked; it now resolves the name like the other DDS tools
and says which topic matched.- The "DDS module is not active" error said to install the Cyclone binding even
when it was installed. It now states the actual cause: backend not selected,
binding missing, or adapter failed to start. README wording aligned. - CSV
...truncation cells fromros2 topic echono longer count as data
columns. ros2output is decoded as UTF-8 on Windows instead of cp1252.detect_qos_mismatchesno longer calls service, action,rosout,
parameter_eventsorros_discovery_infotopics typos of each other (for
exampleget_parametersRequestvsset_parametersRequest), and no longer
reports them as orphans. Only plainrt/topics and bare DDS names are compared.- The "differs by N edits" hint is now only given between a writer-only name and
a reader-only name; a topic with both sides is never suggested as a typo.