STICKY: Camera Calibration Crowdsourcing

This sticky post will serve as a way to crowdsource calibration values for various cameras.

Hey FIRST Tech Challenge Teams! The FTC Tech Team is incredibly excited about this season’s introduction of the FIRST Tech Challenge VisionPortal and the full rollout of AprilTags for use in CENTERSTAGE presented by RTX. There is a massive amount of work that has gone into providing these technologies to FIRST Tech Challenge, and the FTC Tech Team needs your help to complete this effort.

As the Camera Calibration for FIRST Tech Challenge page states:

Cameras are composed of many different components that can introduce variability in the actual image that a camera ultimately “sees”. Camera calibration is a process that mathematically models how a camera & lens combination ultimately sees the world, for example how wide the field of view is. Calibrating your camera is a must if you desire to use it for high-precision tasks, such as performing precision measurements using the camera or obtaining accurate 6DOF pose data from fiducial marker systems like AprilTags. It’s important to note that calibrations are not only specific to the camera and lens, but also specific to the resolution used on a particular camera as well!

Although any compatible UVC camera may be used on a robot, only certain cameras and specific resolutions have calibration values bundled with the FTC SDK - this is thanks to the efforts of the FTC Tech Team, specifically @rgatkinson. Unfortunately only cameras and resolutions with calibration data can be used to provide full AprilTag pose estimation data via the FTC SDK. Performing calibrations on all of the supported cameras and resolutions is simply too much for a small number of individuals, so the FTC Tech Team is asking FIRST Tech Challenge teams to join us and help contribute calibration data - together we can build a complete library of calibration data!

The VisionPortal Webcam page on FTC-Docs provides a summary of the most commonly used webcams supported by the FTC VisionPortal, as well as the resolutions that currently have calibration data built into the SDK. The FTC Tech Team would like to get additional calibration data for listed cameras, as well as cameras that are not yet listed (let us know what cameras you like to use!).

If your team would like to submit a camera calibration to have it included here, please fill out the appropriate Google Form:

The FTC Tech Team will include select “missing” calibrations in future SDK releases, with attribution and our thanks. If you have specific questions about this effort, please email

Please DO NOT reply to this thread unless to discuss calibrations provided by others. The second post will be continuously updated and maintained as calibrations are submitted.

Reserved for submitted calibrations

Arducam OV9281 [VID:0x0C45 PID:0x6366]

  • Graciously provided by team 4348 the RoboKnights from Sherman Oaks, CA

    We attached the Arducam to the USB 2.0 port on the Robot Controller and ran the ConceptAprilTag sample with the calibration we did via 3DF Zephyr. This is a fixed focal-length camera and the calibration images looked quite blurry. But the results from ConceptAprilTag were very good. In our first test the camera was able to see both AprilTags 9 and 10 from as close as 10" and all of the pose values looked good. Update: we also plugged the Arducam into a powered USB 3.0 hub and it performed the same.

  • Resolutions

    • 640x480 (3DF Zephyr): fx=539.0239404, fy=539.0239404, cx=316.450283269, cy=236.364794005
    • Calibrations for other resolutions not provided

When I tried to submit calibration data for the Arducam I got errors from the Google Form although I believe I formatted the hex numbers as asked.

Oh! Apologies, we were originally going to have people convert hex to decimal but ultimately decided against that, but then I forgot to update the input validation for those fields. Please try it again now :')

I have a C920 with the PID 0x08B6. I have run through calibrations and here is the data the I got back with comparisons against the existing FTC values.

Resolution Source fx fy cx cy
640x480 FTC 622.001f 622.001f 319.803f 241.251f
640x480 My Camera 638.991 638.991 327.391 246.924
800x600 FTC 775.79f 775.79f 400.898f 300.79f
800x600 My Camera 791.489 791.489 400.403 313.946
640x360 FTC 463.566f 463.566f 316.402f 176.412f
640x360 My Camera 477.753 477.753 320.357 181.369
1920x1080 FTC 1385.92f 1385.92f 951.982f 534.084f
1920x1080 My Camera 1439.292 1439.292 947.996 550.08
800x448 FTC 578.272f 578.272f 402.145f 221.506f
800x448 My Camera 601.618 601.618 392.459 225.876
864x480 FTC 626.909f 626.909f 426.007f 236.834f
864x480 My Camera 644.059 644.059 425.96 241.591

I am not that familiar with running the calibration process or interpreting the results so my process may not have been ideal but it looks like my values are somewhat similar to the ones in the FTC files so most likely this PID could just be added as a new PID for the existing values.

I also found an interesting article that discusses the different C920 models.

Please let me know if there is additional data I should be trying to get.

1 Like