KopanoBot
I’ve got an ESP32-CAM (AI Thinker) flashed with the Synthiam ESP32-CAM firmware (set to Client Wi-Fi) mounted overhead and feeding ARC through the Camera Device skill as an EZ-B camera; it’s about 2.2 m above the floor with a slight 10-15 tilt, resolution set to 640x480 in Camera Device, and a small differential-drive bot with a printed glyph (about 120 mm) on top that I want to localize with the Camera NMS Pose skill and then hand off to The Better Navigator for waypoints. The stream looks clean and detection is solid in the center, but I’m seeing two issues: 1) the reported heading occasionally snaps 180 when the robot nears the left or right edge of the frame or rotates slowly in place, and 2) X/Y drifts ~10-20 cm toward the edges even after I set the origin and offsets in the Camera NMS Pose config. I’ve tried: rotating the image 180 in Camera Device, toggling horizontal/vertical flip to align the axes with my map, different resolutions (320x240 and 800x600), moving the camera closer to square-on (less tilt), bright uniform lighting, and a higher-contrast glyph print; I also tested lowering frame rate to reduce JPEG compression artifacts from the ESP32-CAM, but the yaw flip still appears intermittently. Before I redesign the mount again, what Camera Device and Camera NMS Pose configuration sequence do you recommend for an ESP32-CAM used as an overhead tracker to keep orientation continuous (avoid 180 snaps) and stabilize X/Y across the frame-specifically, should axis alignment be handled by rotate/flip in Camera Device or inside NMS Pose, and is there a heading smoothing/lock option I’m missing?
Related Hardware (view all EZB hardware)
Related Robot Skills (view all robot skills)

What you’re describing is usually a combination of camera geometry + glyph edge detection + coordinate mapping, not just a bad setting.
For an ESP32-CAM overhead pose tracker, I’d recommend this tuning order in ARC:
Recommended setup sequence
1) Keep the camera feed "physically correct" first
In Camera Device, only use rotate/flip to make the image look like the robot/map orientation you want for humans.
In general:
So yes, axis alignment should usually be handled in Camera Device, while NMS Pose should be reserved for scaling, offsets, and area setup.
2) Rebuild the NMS Pose calibration from a "neutral" mount
Those 10-20 cm edge drifts often happen when the camera is not close enough to square-on.
A 10-15 tilt at 2.2 m can absolutely introduce:
If possible, try to get the camera:
If you must keep the slight tilt, expect some edge error. The system will always be most accurate near the center.
3) Use the largest practical glyph
A 120 mm glyph is okay, but for 2.2 m height and ESP32-CAM compression, a slightly larger glyph often improves stability.
If your bot can fit it, try:
Bigger glyphs help with:
About the 180 heading snaps
That symptom usually means the tracker is briefly losing confidence in the glyph orientation and then re-acquiring it in the opposite direction.
Common causes:
Things that help:
Is there heading smoothing / lock?
There isn’t typically a "heading lock" option in Camera NMS Pose itself that prevents that snap in the way you’re describing.
What you can do instead is one of these:
Option A: Reduce the cause
Best solution:
Option B: Filter the heading in a script
If you want, you can smooth the heading before handing off to navigation using a small JavaScript filter in ARC.
For example, keep the last heading and reject sudden 180 jumps unless they persist:
If you want, I can help you turn that into a proper ARC script that:
For X/Y drift near edges
That’s usually from lens perspective and camera angle, not just offset values.
Try this calibration approach:
If error grows toward the edges, that’s almost always perspective distortion.
Practical recommendation for your exact setup
For an AI Thinker ESP32-CAM at 2.2 m:
Camera Device
Camera NMS Pose
Physical mount
One more important note
When using Camera Device with an ESP32-CAM stream, compression and frame timing can vary a lot compared with a USB camera. That makes heading flicker more likely, especially during slow rotation.
If this robot is meant for reliable navigation, a USB overhead camera usually gives much better pose stability than an ESP32-CAM.
If you want, I can help you with either of these next:
If you can share:
I can suggest much more exact values.