Skip to content

Synchronization with Motion & Timing

This topic sits exactly at the intersection of vision systems, motion control, hardware triggering, and timing-sensitive machine workflows. Your roadmap explicitly calls out triggered image capture, integration with machine motion, coordinated timing, clock/timestamp handling, and hardware-triggered events as high-priority industrial machine skills.


PART 1 — WHY VISION + MOTION SYNCHRONIZATION MATTERS

In many industrial vision machines, an image is not valuable just because it was captured clearly. It is valuable only if the system knows where, when, and under which machine context it was captured.

In a normal business system, data correctness is often about whether the record has the right fields. In a vision machine, correctness depends on physical alignment between:

  • the part position
  • the camera field of view
  • the trigger moment
  • the exposure window
  • the machine workflow step
  • the product / wafer / lot / recipe context

A vision system can capture a perfect image and still be wrong.

For example, in a wafer inspection machine, the stage may scan under a fixed camera. The camera may capture thousands of frames while the wafer moves. Each frame must correspond to a known physical region of the wafer. If frame 1532 is associated with the wrong wafer coordinate, the defect result becomes physically meaningless.

In a pick-and-place machine, a camera may check whether a component is correctly positioned before placement. If the image is captured before the part settles, or after the robot has already moved slightly, the vision result may be stale.

In a line-scan system, the image is literally constructed from motion. Each line corresponds to a movement interval. If the motion speed and line trigger timing drift, the final image can become stretched, compressed, or geometrically distorted.

The key point:

“Image captured successfully” only means the camera produced data. It does not mean the image belongs to the correct position, product, step, or decision.

Strong machine software treats every image as:

text
Image = PixelData + CaptureTime + Position + TriggerId + WorkflowContext + ProductContext

Without that metadata, image data is unsafe to use for decisions.


PART 2 — BASIC TIMING RELATIONSHIP

A typical vision-motion capture flow looks like this:

text
1. Machine workflow commands motion
2. Stage / robot starts moving
3. Motion reaches or passes target position
4. Trigger occurs
5. Camera exposure happens
6. Frame is transferred
7. Software receives image
8. Image is correlated with position and workflow context
9. Vision processing starts
10. Result is returned to workflow

The important architectural lesson is that these events do not happen at the same time.

A trigger is not the same as exposure. Exposure is not the same as frame arrival. Frame arrival is not the same as processing start. Processing completion is not the same as decision time.

Basic timing diagram

text
Time ───────────────────────────────────────────────────────────────>

Motion Position:
Start move        accelerating        target / capture zone       settled
   |-------------------|----------------------|----------------------|

Trigger:

                                      trigger fired

Exposure:
                                           |=========|
                                           exposure window

Frame Transfer:
                                                     |------------|
                                                     camera → PC

Frame Arrival:

                                                            frame received

Processing Start:

                                                               processing

What this diagram shows:

The physical capture happened near the trigger and exposure window. But the software may only receive the image later. If software uses “current machine state” when the frame arrives, it may assign the image to the wrong step or position.

This is one of the most common mistakes software engineers make when entering machine vision:

text
Bad assumption:
"The image I received now belongs to what the machine is doing now."

In real systems, the image belongs to what the machine was doing at capture time, not receive time.


PART 3 — SOFTWARE TRIGGER VS HARDWARE TRIGGER

There are two broad ways to trigger image capture.

Software trigger

A software trigger means the PC application or workflow sends a command such as:

text
camera.Trigger()

or:

text
Send trigger command over SDK / Ethernet / USB / frame grabber API

This is simple and flexible. It is useful when timing precision is not extremely strict, such as:

  • manual image capture
  • setup / calibration screens
  • low-speed inspection
  • capture after machine has stopped and settled
  • service diagnostics
  • operator preview images

But software triggering has timing uncertainty.

The command may be delayed by:

  • OS scheduling
  • thread scheduling
  • garbage collection pauses
  • SDK internal queues
  • USB / Ethernet latency
  • camera command processing
  • contention with other workload
  • poor async/threading design

So software trigger timing is usually best-effort, not deterministic.

Example:

text
Workflow says: "Capture now"
Software thread wakes 3 ms later
SDK sends command 2 ms later
Camera starts exposure 1 ms later

Total delay = 6 ms
But next time it may be 3 ms or 12 ms

That variation is jitter.

Hardware trigger

A hardware trigger means the capture signal is generated outside the normal PC software path.

It may come from:

  • motion controller
  • encoder compare output
  • PLC output
  • digital IO card
  • sensor
  • frame grabber
  • dedicated trigger generator

The key advantage is that hardware trigger timing can be tied directly to physical machine events.

For example:

text
When encoder position reaches X = 125.000 mm,
motion controller outputs trigger pulse to camera.

This avoids waiting for the PC application to notice the position and call the camera SDK.

Hardware triggers are common in high-precision systems because they reduce timing uncertainty.

Comparison

text
Software Trigger

Workflow / PC App
      |
      | command over SDK / network / driver
      v
Camera starts exposure

Pros:
- simple
- flexible
- easy to debug
- good for low-speed or stopped capture

Cons:
- affected by OS scheduling
- affected by software latency
- less deterministic
text
Hardware Trigger

Encoder / Controller / Sensor
      |
      | electrical trigger signal
      v
Camera starts exposure

Pros:
- more deterministic
- tied to physical position or sensor event
- better for high-speed or high-accuracy capture

Cons:
- requires hardware setup
- harder to simulate
- more cross-disciplinary
- debugging requires timing evidence

A good rule:

Use software trigger when “near enough” timing is acceptable. Use hardware trigger when physical position and capture time must be precise.


PART 4 — POSITION-BASED CAPTURE

Many industrial vision systems do not capture “whenever software wants.” They capture at specific physical positions.

Position can come from:

  • motion controller feedback
  • encoder feedback
  • robot controller position
  • stage controller position
  • sensor event
  • trigger generated by position compare logic

Capture after stage settles

This is common for high-quality still images.

text
Move stage to inspection point
Wait for motion complete
Wait for settle time
Trigger camera
Process image
Move to next point

Timing diagram:

text
Time ───────────────────────────────────────────────────────────────>

Stage Position:
Start move             target reached        settled
   |--------------------------|------------------|
                              ↑                  ↑
                        motion complete      stable enough

Trigger:

                                           trigger camera

Exposure:
                                                  |======|

Frame Arrival:

The important detail: motion complete does not always mean physically stable.

A controller may report motion complete when the commanded trajectory has ended, but the mechanical system may still have vibration, overshoot, or settling behavior. For high-magnification inspection, small vibration can blur the image or shift the apparent feature position.

So a real system may need:

text
motion complete
+ in-position confirmation
+ settle delay
+ vibration/servo stability check
+ trigger

Capture during continuous scan

In continuous scanning, the stage does not stop for every image.

text
Stage moves continuously
Camera triggers at position intervals
Images are stitched / mapped / inspected

Diagram:

text
Time ───────────────────────────────────────────────────────────────>

Stage Position:
0mm        1mm        2mm        3mm        4mm        5mm
 |----------|----------|----------|----------|----------|

Encoder-Based Trigger:
 ↑          ↑          ↑          ↑          ↑          ↑

Exposure:
 |==|       |==|       |==|       |==|       |==|       |==|

Frames:
 F1         F2         F3         F4         F5         F6

Here, capture is based on position intervals, not software loop timing.

This is especially important for:

  • wafer scan inspection
  • web inspection
  • conveyor inspection
  • line-scan imaging
  • surface inspection
  • metrology scans

Why “motion complete” is not enough

For point capture, “motion complete” may be enough only if the system also verifies stability.

For scan capture, “motion complete” is almost irrelevant because images are captured while motion is happening.

The real question is:

text
Was the camera exposed at the intended physical position?

Not:

text
Did the movement command finish?

PART 5 — TIMESTAMPS, CORRELATION, AND DATA ASSOCIATION

In vision-machine software, metadata is as important as pixels.

A frame should carry enough metadata to answer:

text
Which trigger produced this frame?
When was exposure started?
When did exposure end?
Where was the stage?
Which wafer / product / part was active?
Which recipe was active?
Which workflow step requested this capture?
Which inspection result came from this frame?

Correlation diagram

text
FrameId
  |
  v
TriggerId
  |
  v
CaptureTimestamp
  |
  v
PositionSnapshot
  |
  v
WorkflowStepId
  |
  v
Recipe / Product / Wafer Context
  |
  v
InspectionResult

Or more concretely:

text
FrameId:           F-0001532
TriggerId:         T-0001532
CaptureTime:       10:15:22.184500
ReceiveTime:       10:15:22.193200
StagePosition:     X=125.000mm, Y=42.500mm
WorkflowStep:      DieInspection.Row12.Col08
WaferId:           WAFER-A123
RecipeVersion:     ProductX-v17
InspectionResult:  DefectCandidate #8841

This correlation prevents a late frame from being assigned to the wrong machine state.

The dangerous bad approach

text
Workflow step 1 triggers image
Workflow moves to step 2
Frame from step 1 arrives late
Software says: "latest image belongs to current step"
Frame is assigned to step 2
Inspection result is wrong

This is a classic production bug.

It may not fail every time. It may only happen when:

  • the system is under load
  • image transfer is slow
  • processing backlog grows
  • camera SDK buffers frames
  • motion sequence is faster than expected
  • operator runs a high-throughput recipe

Better approach

Every capture request gets a correlation ID.

text
CaptureRequestId = C-10091
ExpectedTriggerId = T-10091
WorkflowStepId = Step-Die-12-08
ExpectedPosition = X=125.000, Y=42.500
AllowedPositionTolerance = ±2 µm
AllowedTimeWindow = [t0, t0 + 20ms]

When the frame arrives, the system validates:

text
Does frame.TriggerId match?
Is capture timestamp inside expected window?
Is position within tolerance?
Is workflow context still valid?
Is frame sequence continuous?

If validation fails, the system should not silently use the image.


PART 6 — LATENCY, JITTER, AND PIPELINE DELAY

A strong industrial vision engineer separates different times.

text
Trigger time     = when trigger signal was generated
Exposure time    = when camera sensor collected light
Receive time     = when PC software received frame
Process time     = when image processing started
Result time      = when inspection result was produced
Decision time    = when machine acted on result

These are not interchangeable.

Timing chain

text
Time ───────────────────────────────────────────────────────────────>

Trigger Time:


Exposure:
       |=========|

Camera Readout / Transfer:
                 |----------------|

Frame Received by Software:


Queued for Processing:
                                  |----------|

Processing:
                                             |================|

Result Available:


Machine Decision:

Latency

Latency is delay.

Example:

text
Trigger → frame received = 8 ms
Frame received → processing start = 15 ms
Processing start → result = 40 ms
Total trigger → result = 63 ms

Latency is not always bad. It becomes bad when the machine decision assumes the result is current.

Example:

text
A conveyor part is moving.
Vision result arrives 80 ms after capture.
If the reject actuator fires based on current position without compensation,
it may reject the wrong part.

Jitter

Jitter is variation in timing.

Example:

text
Trigger → frame received:
Frame 1: 7 ms
Frame 2: 8 ms
Frame 3: 7 ms
Frame 4: 25 ms
Frame 5: 9 ms

The 25 ms frame may cause a queue, missed decision window, or wrong association.

Jitter is often worse than fixed latency because it makes the system unpredictable.

Wrong timestamp usage

A common bug is using frame receive time as capture time.

text
Bad:
Frame.CaptureTime = DateTime.UtcNow when software receives frame

This is wrong because the physical image was captured earlier.

Better:

text
Frame.CaptureTime = camera / frame grabber / trigger timestamp
Frame.ReceiveTime = PC time when callback received it
Frame.ProcessStartTime = processing start time
Frame.ResultTime = result produced time

If the camera or frame grabber cannot provide hardware timestamps, then the system should be honest about uncertainty and design tolerances accordingly.


PART 7 — REAL-WORLD FAILURE SCENARIOS

1. Image captured at the wrong position due to trigger delay

What it looks like

Inspection results are consistently shifted. Defects appear mapped to the wrong location. Alignment looks slightly off. Measurements vary depending on scan speed.

Why it happens

The software issues a trigger after detecting that the stage position is near target, but the stage continues moving during trigger latency.

text
Software reads position: X = 100.000 mm
Software sends trigger
Camera exposes 5 ms later
Stage has moved to X = 100.050 mm
Image is labeled as X = 100.000 mm

Diagnosis

Experienced engineers compare:

  • commanded position
  • actual encoder position
  • trigger timestamp
  • exposure timestamp
  • frame ID
  • scan speed
  • measured image offset

They may run a calibration target and check whether image features shift with speed. If the error grows with velocity, timing delay is likely.

Handling

Use hardware position-based trigger, or compensate delay using velocity:

text
CapturePosition = PositionAtTrigger + Velocity * TriggerDelay

But compensation only works if delay is stable. If delay has jitter, hardware trigger is usually preferred.


2. Frame arrives late and is matched to wrong workflow step

What it looks like

The machine occasionally reports defects on the wrong die, wrong part, or wrong station. Logs show “capture succeeded,” but results appear attached to the next operation.

Why it happens

The workflow advances faster than the image pipeline.

text
Step A triggers frame
Workflow moves to Step B
Frame from Step A arrives late
Software assigns latest frame to Step B

Diagnosis

Look for logs like:

text
StepId=A TriggerId=101 issued
StepId=B started
FrameId=101 received
FrameId=101 processed under StepId=B

This reveals weak correlation.

Handling

Use explicit capture request IDs and reject frames that do not match expected context.

text
CaptureRequestId
TriggerId
FrameId
WorkflowStepId
PositionId
RecipeVersion

Never depend on “current step” when the frame arrives.


3. Software trigger jitter causes inconsistent inspection results

What it looks like

The same product sometimes passes and sometimes fails. Images look slightly different in position or blur. Problem appears worse when CPU load is high or UI is busy.

Why it happens

Software trigger timing varies because the trigger path depends on non-real-time software execution.

text
Trigger delay:
Run 1: 3 ms
Run 2: 5 ms
Run 3: 18 ms
Run 4: 4 ms

If the part or stage is moving, each image is captured at a different physical location.

Diagnosis

Measure trigger-to-exposure timing if possible. Compare results under CPU load, UI load, GC pressure, and high throughput. Check whether image variation correlates with timing variation.

Handling

Use hardware trigger for precise capture. If software trigger must be used, capture only after the motion is stopped and settled, and design clear timing margins.


4. Motion not settled before image capture

What it looks like

Images are slightly blurred, measurements are unstable, edges move between repeated captures, or autofocus behaves inconsistently.

Why it happens

The software triggers immediately after motion complete, but the mechanical system still has residual vibration.

text
Motion complete event

Immediate trigger

Exposure during vibration

Diagnosis

Capture repeated images at different settle delays:

text
0 ms
20 ms
50 ms
100 ms
200 ms

If image stability improves with delay, the machine needs settling logic.

Handling

Use:

  • in-position status
  • settle delay
  • vibration/stability signal if available
  • recipe-defined settle time
  • different settle times per motion profile or magnification

Do not hardcode one magic delay without diagnostics.


5. Continuous scan has missing or duplicated frames

What it looks like

A scan image has gaps, repeated strips, distorted geometry, or inconsistent frame count.

Why it happens

Possible causes:

  • trigger frequency too high
  • camera cannot keep up
  • exposure overlaps readout
  • frame grabber buffer overrun
  • software pipeline backlog
  • dropped frames in SDK
  • encoder trigger configuration wrong

Diagnosis

Check:

text
Expected triggers: 10,000
Actual frames:     9,997

Missing trigger IDs:
T-4421, T-4422, T-7880

Or:

text
Frame sequence:
1001, 1002, 1003, 1003, 1004

The system needs frame counters, trigger counters, timestamps, and dropped-frame counters.

Handling

Use bounded acquisition pipelines, monitor frame sequence continuity, reduce trigger rate, increase buffering only carefully, and make frame loss visible as a machine/inspection fault.

Silent frame loss is dangerous.


6. Position feedback and image timestamp use different clocks

What it looks like

Logs seem correct individually, but correlation is inconsistent. Camera timestamps and motion timestamps cannot be reliably compared.

Why it happens

The camera, motion controller, and PC may use different clocks.

text
Camera timestamp clock
Motion controller clock
PC system clock
Workflow software clock

If these clocks are not synchronized or mapped, comparing timestamps directly may be misleading.

Diagnosis

Engineers check:

  • clock source
  • timestamp units
  • timestamp origin
  • drift over time
  • whether timestamps are hardware or software generated
  • whether time sync exists

Handling

Prefer shared hardware timing where possible. Otherwise, create a clock mapping strategy and record uncertainty.

At minimum, metadata should clearly state:

text
TimestampSource = CameraHardwareClock
TimestampSource = MotionControllerClock
TimestampSource = PcUtcClock

Never mix clocks silently.


7. Image pipeline backlog causes delayed decision

What it looks like

The machine captures images correctly but decisions arrive too late. Throughput drops, reject gates fire late, motion waits unexpectedly, or the UI shows stale results.

Why it happens

The pipeline cannot process frames as fast as they arrive.

text
Capture rate:    200 fps
Processing rate: 150 fps

Backlog grows by 50 frames/sec

After a few seconds, results may be hundreds of milliseconds or seconds behind reality.

Diagnosis

Track per-frame timing:

text
FrameId
CaptureTime
ReceiveTime
QueueEnterTime
ProcessingStartTime
ProcessingEndTime
ResultPublishedTime

Then calculate:

text
Capture → Receive
Receive → ProcessingStart
ProcessingStart → Result
Capture → Result
QueueDepth over time

Handling

Use bounded queues, backpressure, frame dropping policy where safe, parallel processing where valid, and clear maximum latency rules.

For machine decisions, sometimes an old result is worse than no result.


PART 8 — SOFTWARE DESIGN IMPLICATIONS

Synchronization must be designed explicitly. It cannot be added later as logging decoration.

A robust design separates these concerns:

text
Motion Controller / Encoder
        |
        | position / trigger / motion state
        v
Camera / Acquisition
        |
        | frame + trigger metadata + timestamps
        v
Vision Pipeline
        |
        | result + frame correlation
        v
Machine Workflow
        |
        | validated decision
        v
Machine Action / UI / Result Storage

Component diagram

text
+----------------------+
| Machine Workflow     |
| - step orchestration |
| - recipe context     |
| - product context    |
+----------+-----------+
           |
           | capture request
           v
+----------------------+
| Capture Coordinator  |
| - CaptureRequestId   |
| - expected position  |
| - expected timing    |
| - validation rules   |
+----------+-----------+
           |
           | arm trigger / configure capture
           v
+----------------------+          +----------------------+
| Motion Controller    |--------->| Trigger Source       |
| - position feedback  | position | - encoder compare    |
| - in-position state  | trigger  | - digital output     |
+----------------------+          +----------+-----------+
                                             |
                                             | trigger
                                             v
                                  +----------------------+
                                  | Camera Acquisition   |
                                  | - exposure           |
                                  | - frame received     |
                                  | - frame metadata     |
                                  +----------+-----------+
                                             |
                                             | frame + metadata
                                             v
                                  +----------------------+
                                  | Vision Pipeline      |
                                  | - processing         |
                                  | - result generation  |
                                  +----------+-----------+
                                             |
                                             | result + correlation
                                             v
                                  +----------------------+
                                  | Result Validator     |
                                  | - timing check       |
                                  | - position check     |
                                  | - context check      |
                                  +----------------------+

Bad approach

text
Workflow:
    Move stage
    Trigger camera
    Wait for latest image
    Process latest image

This looks simple but is dangerous.

Why?

Because “latest image” may not be the correct image.

It may be:

  • from a previous trigger
  • from a camera buffer
  • delayed by acquisition
  • assigned to the wrong step
  • captured before settle
  • captured at a different physical position

Good approach

text
Workflow:
    Create CaptureRequestId
    Define expected position/context/timing
    Arm acquisition
    Move or wait for trigger condition
    Receive frame with TriggerId/FrameId/timestamp
    Match frame to CaptureRequestId
    Validate position and timing
    Process image
    Attach result to original workflow context

Good design makes incorrect association hard.

Important design principles

1. Trigger ownership must be clear

The system should know who owns the trigger:

text
PC software?
Motion controller?
PLC?
Encoder compare?
Sensor?
Frame grabber?
Camera internal timer?

Ambiguous trigger ownership causes debugging pain.

2. Capture metadata must be first-class

Do not treat metadata as optional.

A frame object should not be just:

text
byte[] pixels

It should be closer to:

text
Frame
- FrameId
- TriggerId
- CaptureRequestId
- CaptureTimestamp
- ReceiveTimestamp
- ExposureTime
- CameraId
- PositionSnapshot
- WorkflowStepId
- RecipeId
- ProductId
- SequenceNumber

3. Separate capture time from processing time

Processing may happen much later.

The result should refer to the capture context, not the processing context.

text
InspectionResult
- ResultId
- FrameId
- CaptureRequestId
- CapturePosition
- CaptureTimestamp
- ProcessingStartTime
- ProcessingEndTime
- DecisionValidity

4. Design bounded latency assumptions

Every timing-sensitive path should have an expected maximum.

Example:

text
Trigger → frame received: max 15 ms
Frame received → processing start: max 20 ms
Processing: max 80 ms
Capture → result: max 120 ms

If the system exceeds this, it should log, alarm, slow down, drop safely, or reject the result depending on machine requirements.

5. Diagnostics must reconstruct timing

A good log should let engineers reconstruct this:

text
WorkflowStep started
Motion commanded
Motion reached position
Trigger fired
Exposure started
Frame received
Processing started
Processing completed
Result accepted/rejected
Machine acted on result

Without this, timing bugs become guesswork.


PART 9 — INTERVIEW / REAL-WORLD TALKING POINTS

A strong explanation in an interview could sound like this:

In industrial vision systems, image correctness is not just about image quality. It is about whether the image was captured at the correct physical position and associated with the correct machine context. I would design the capture flow around explicit trigger ownership, capture metadata, timestamps, frame IDs, position snapshots, and workflow correlation IDs. I would avoid assuming that the latest received frame belongs to the current workflow step, because frame arrival can be delayed by exposure, transfer, buffering, or processing backlog.

Another strong version:

For high-precision capture, I would prefer hardware or position-based triggering rather than relying on PC software timing. Software triggers are easier, but they are affected by OS scheduling, SDK latency, and jitter. If the stage is moving, even a few milliseconds of trigger variation can mean the image was captured at the wrong physical location.

Common mistakes software engineers make:

text
1. Treating image arrival time as capture time
2. Assuming latest frame belongs to current workflow step
3. Ignoring trigger IDs and frame sequence numbers
4. Using software trigger where hardware trigger is required
5. Capturing immediately after motion complete without settle validation
6. Ignoring camera / motion / PC clock differences
7. Letting image queues grow without bounded latency rules
8. Logging only success/failure instead of timing evidence

What strong engineers understand:

text
Image capture is a physical event.
Frame arrival is a software event.
Processing completion is a pipeline event.
Machine decision is a workflow event.

These must be explicitly correlated.

The central mental model:

text
Correct vision result
= correct pixels
+ correct capture position
+ correct capture time
+ correct workflow context
+ correct product context
+ validated latency

That is the difference between “a camera integration works” and “a machine vision system is production-safe.”

Docs-first project memory for AI-assisted implementation.