Technical communities · SINGAPORE
ROS 2 message_filters: diagnose silent sensor-sync callbacks in Singapore
A practical guide for Singapore robotics builders who are combining multiple ROS 2 sensor topics and cannot tell whether a quiet callback is caused by QoS compatibility or timestamp matching.
By Boardzip · Published · Updated
Boardzip uses AI-assisted guide research, writing and review. Read how we research guides and check sources →
Start with these checks
- The event covers ROS 2 message_filters, multi-topic synchronization or sensor-fusion integration.
- The organizer identifies the ROS 2 distribution and whether participants will inspect timestamps or only hear a presentation.
- The session explains the distinction between QoS compatibility and timestamp-policy matching.
The problem
A Singapore robotics hardware builder has confirmed that sensor topics exist, but a multi-topic message_filters callback never fires. They need to distinguish publisher/subscriber QoS incompatibility from an ExactTime policy that is waiting for identical header timestamps, then choose a synchronization policy that matches the data they actually receive.
The direct answer
Check publisher/subscriber QoS compatibility first. The Jazzy docs warn that when a subscriber's qos_profile is incompatible with the corresponding publisher's offered QoS, the callback may not execute, possibly without warning. If messages are reaching the subscriptions and QoS is compatible, compare the header.stamp values from the channels. ExactTime requires identical timestamps across all specified channels. If those stamps are not identical, ExactTime will not emit a callback for that set. The Jazzy docs describe two alternatives when exact timestamps do not match: ApproximateEpsilonTime matches header timestamps within an epsilon tolerance, while ApproximateTime uses an adaptive timestamp-based algorithm. The source does not choose an epsilon for your sensors or specify a universal interval or queue setting.
- Message Filters documentation (ROS 2 Jazzy) ↗ · Source checked
Check the version, QoS and required headers
1. Confirm which ROS 2 distribution and message_filters policy your node actually uses. This guide describes the Jazzy documentation; check the matching docs for another distribution. 2. For each subscribed topic, check whether the subscriber's requested QoS policies are compatible with that topic publisher's offered policies. Resolve any compatibility failure before changing the timestamp policy. 3. Confirm that each message type supplies the header.stamp used by the synchronizer. ExactTime requires header timestamps.
- Message Filters documentation (ROS 2 Jazzy) ↗ · Source checked
Compare a sample and verify the output
4. From a small, representative sample, write down the header.stamp from each channel for messages you expected to combine. Compare the stamps themselves, not only arrival order or topic rate. 5. If values match exactly, ExactTime expresses that strict requirement. If they differ, compare the documented choices: ApproximateEpsilonTime when an application-justified epsilon is appropriate, or adaptive ApproximateTime. The source does not prescribe an epsilon value; test actual output associations against the task's needs. 6. Change one cause at a time, then verify whether the callback fires and whether the resulting message group is meaningful for your application. A callback firing alone does not prove that the sensors are physically synchronized.
- Message Filters documentation (ROS 2 Jazzy) ↗ · Source checked
Worked example
Suppose a representative image has header.stamp 12.340000000 and a scan you expected to pair has header.stamp 12.343000000. These illustrative values are not equal, so ExactTime cannot match that pair. The Jazzy docs describe ApproximateEpsilonTime as matching header timestamps within an epsilon tolerance and ApproximateTime as adaptive timestamp-based matching. They do not prescribe an epsilon for this sensor pair or promise that either policy will select it. Decide from your fusion task what relationship between the measurements is acceptable, then test actual output groups; do not invent a tolerance from this example.
- Message Filters documentation (ROS 2 Jazzy) ↗ · Source checked
Keep the two failure paths separate
A QoS incompatibility can prevent a subscription callback from executing. A timestamp-policy mismatch can prevent the synchronizer from producing a combined callback even when messages are received. Check publisher/subscriber QoS first, then inspect header timestamps and the selected synchronizer policy. Use the Singapore ROS 2 publisher/subscriber QoS guide to compare the requested and offered policies.
- Message Filters documentation (ROS 2 Jazzy) ↗ · Source checked
Scope and suitability
This procedure is for a multi-topic message_filters callback that is not producing synchronized groups. It does not diagnose physical clock calibration, camera/IMU calibration, sensor accuracy, network transport in general, or safety of a robot operation. The cited Jazzy page does not specify a universal ApproximateTime interval or queue tuning rule. Validate timing and data association against the requirements of your own robot and version-specific documentation.
Find relevant peer help
Use Boardzip event search for Singapore ROS 2, sensor-fusion, robotics or embedded-systems sessions. Check the organiser's listing for hands-on work, prerequisites, equipment access and admission terms before attending. If there is no exact match, broaden the search terms and date range and check the listed organiser calendars; no matching Boardzip listing does not prove that no suitable community session exists.
Use the documentation for the actual distribution
This guide uses the message_filters documentation on the ROS 2 Jazzy branch. That document displays no publication or update date. Confirm the distribution and policy in your actual node, and use the matching version’s documentation before applying a diagnostic step.
Questions and answers
Does ExactTime compare arrival times?
No. The Jazzy docs say it uses the messages' header timestamps and requires the same exact timestamp on every specified channel.
Can a QoS mismatch look like a message_filters problem?
Yes. The docs warn that an incompatible subscriber/publisher QoS pairing can prevent the callback from executing, possibly without a warning. Check that pairing before changing synchronization policy.
Does ApproximateTime guarantee that two close timestamps will be paired?
The Jazzy documentation only says it uses an adaptive algorithm to match by timestamp. It does not promise a particular pair or state a universal maximum difference. Test the output against your application's timing needs.
What does ApproximateEpsilonTime add?
The Jazzy source describes it as matching header timestamps within an epsilon tolerance. It does not choose the tolerance for your system; do not infer one from this example.
Do I need identical sensor topic rates for ExactTime?
This source does not establish a general rate requirement. It establishes the exact timestamp condition for a callback. Inspect the actual message stamps and consult the driver or version-specific documentation for rate behavior.
What if one message type has no header?
ExactTime requires header timestamps. The Jazzy page describes a Python-only allow_headerless option for ApproximateTimeSynchronizer that substitutes current ROS 2 time; that is not the missing measurement's original header stamp. Do not enable it for sensor fusion unless that substitution is explicitly appropriate for your task.
How should I check the result?
Keep a small sample of per-topic header stamps, confirm the QoS pairing, and record whether the synchronizer emits groups under the chosen policy. Separately test whether those grouped measurements are meaningful for the robot's use case.
Sources and further reading
These references provide the guide’s source context and further reading. They do not confirm a current event, admission or an available place; check each listing’s organiser terms for those conditions.
- Message Filters documentation (ROS 2 Jazzy) ↗Source checked
Each date belongs to the linked source check. These references provide source context; a recorded date does not by itself establish a completed independent review. Current event admission is checked separately in each listing. How to read the source dates →
Current listings to check
Topic matches from the verified Singapore feed. A matching topic does not confirm audience suitability, accessibility or available places; read the organiser’s terms.
No current verified listings match this guide’s search terms. Try a broader search or suggest an organiser we should check.
Browse the broader event category →Suggest a relevant organiser →