Software Change Log & Feedback
Submit issues and feature requests over email or to the Limelight Feedback Repo
Limelight OS 2024.10.2 (10/28/24)
Python Snapscript Fix (CREDIT - FTC TEAM 23251 TRIPLE FAULT)
- Python Outputs will no longer freeze while using the Control Hub with Limelight3A
- Python Outputs will no longer freeze while switching between python pipelines
MT2 Edge case
https://github.com/LimelightVision/limelight-feedback/issues/23
- While testing MT2 without a robot, it is easy to generate a geometric impossibility.
- This edge case wouldn't zero-out the mt2 botpose - it would zero-out the camera pose.
- The robot is now placed at (0,0,0) whenever this edge case is detected
Static IP Addressing
https://github.com/LimelightVision/limelight-feedback/issues/25
- Add a warning to the IP Address setter if the address ends in .1-.10 or .20-.255 as these addresses may interfere with the FMS or other devices
- In 2024.10.1, the UI would sometimes suggest that a static IP was configured when the addressing scheme was set to "automatic"
STDDevs NetworkTables
https://github.com/LimelightVision/limelight-feedback/issues/24
- "stddevs" in networktables contains all stddevs for mt1 and mt2 (double array, 12 elements)
Limelight OS 2024.10.1 (9/15/24)
Limelight 3A Updates
- Update default color balance values
- Update default AprilTag size configuration to 101.6 mm
- Reduce default video stream framerate to 30FPS
- Slightly increase video stream compression to reduce stream bitrate
AprilTag Size Warning
- Add a warning to the field space visualizer if the configured AprilTag size does not match the sizes in the uploaded field map.
CameraPose_RobotSpace Bugfix
- Overriding the UI's configued Camera Pose from NetworkTables/LimelightLib/REST works properly again.
Limelight OS 2024.10 (9/4/24)
Limelight 3A for FTC Support
- Limelight3A is fully supported
- 3A is usable in both FTC and FRC
AprilTag Map Updates
- The map editor now supports standard and diamond FTC map generation
- The LLOS web interface will automatically display the correct field type based on the uploaded map
- All field visualizers across tools and interfaces show alliance zones and ftc tile grids.
- 3D visualizer performance has been improved.
USB Limelight Support on ControlHub and RoboRio.
- FTC teams can use a single USB-capable Limelight on the Control Hub
- FRC teams can use up to 16 USB-capable Limelights on the RoboRio. USB limelights auto-populate networktables just like ethernet limelights.
- To use multiple USB Limelights, give each LL a unique USB index and a unique hostname.
USB Connectivity Upgrades
- MacOS no longer uses the USB Ethernet Limelight interface for internet access
- Windows no longer attempts to use the USB Ethernet Limelight interface for internet access
REST API Updates
- Fix update-robotorientation POST request.
- MT2 is now fully accessible without NetworkTables.
- Once the update-robotorientation route is used, NetworkTables orientation updates are disabled until reboot.
Limelight OS 2024.9.1 (7/7/24)
- The Map Builder Tool now accepts/converts WPILib .json apriltag layouts
- Add AprilTag3 to Python Snapscripts (from apriltag import apriltag)
- See example in examples github repo
- Fix USB connectivity gateway issue on Windows.
Limelight OS 2024.9 (7/5/24)
MegaTag Upgrades
-
Limelight OS has transitioned to NetworkTables 4.0
-
MegaTag2 now uses NT4's getAtomic() to retrieve timestamped IMU updates from the roboRIO.
-
Our timestamped image frames are matched to the two most relevant IMU samples before interpolation is performed.
-
NT4 flush() has been added to LimelightLib. Adding Flush() to older versions of Limelight OS will get you quite close to 2024.9 performance, but NT4 ensures accuracy is always high.
-
The MT2 visualizer robot now has green bumpers, and MT1's visualizer robot uses yellow bumpers.
-
Metrics are now collapsible, and the virtual robots can be hidden.
-
The following video demonstrates how 2024.9's MegaTag 2 (green robot) with robot-side flush() is more robust than 2024.5's MegaTag2 without Flush() (red robot)
USB ID and New USB IP Addresses
- Set the "USB ID" in the settings page to use multiple USB Limelights on any system.
- The USB-Ethernet interface that appears on your system will utilize an IP address that is determined by the USB ID
- Linux/Android/Mac Systems will now utilize the 172.29.0.0/24 subnet by default
- Windows systems will now utilize the 172.28.0.0/24 subnet by default.
- If the USBID is set, the subnet changes to 172.29.(USBID).0/24 for Linux/Android/Mac and 172.28.(USBID).0/24 for Windows.
- You can now, for example, attach four Limelight devices to a single USB Hub by adjusting their hostnames and USB IDs
CPU Neural classifiers
- Upload a CPU .tflite classifier to enable neural classification without Google Coral. You can expect 15-18 FPS on LL3 variants.
- 2024.9 comes with a default CPU classifier.
- Set the classifier runtime to "CPU" to enable this feature
CPU Neural detectors
- Upload a CPU .tflite detector to enable neural detecyion without Google Coral. You can expect 10 FPS on LL3 variants.
- 2024.9 comes with a default CPU detector.
- Set the detector runtime to "CPU" to enable this feature
Limelight OS 2024.8 (7/3/24)
- Add python output (PythonOut), tx, ty, txnc, tync, ta to json results object
- Further improved MT2 latency compensation
Limelight OS 2024.7 (5/21/24)
- Upgrade to Linux 6.6
Bugfixes
- Fix vision pipeline conversion
- Fix calibration uploads, snapshot uploads, and nn uploads
Limelight OS 2024.6 (5/8/24)
LimelightLib Python
- pip install limelightlib-python
- Our Python library allows you to interact with USB and Ethernet Limelights on any platform.
- It allows for complete Limelight configuration without web UI interaction.
- Upload pipelines, neural networks, field maps, etc
- Make realtime changes to any pipeline parameter with an optional "flush to disk" option
- Post custom python input data, set robot orientation, etc.
MegaTag2 Upgrades
- MegaTag2 Gyro latency compensation been improved. Look out for more improvements soon!
- Add "Gyro latency adjustment" slider to the UI. To manually tune MegaTag 2 latency compensation, you can spin your robot and adjust the slider until localization results are perfect while rotating.
Standard Deviation Metrics
- The 3D Field visualizer now includes MegaTag1 and Megatag2 standard deviations for x, y, and yaw.
New "Focus" Pipeline Type
- While in "focus" mode, you will have access to a stream quality slider and a crop box slider
- Spin the lens to maximize the "focus" score.
- If your camera is in a fixed location, this takes less than one minute. We recommend focusing with a fixed / mounted Limelight.
New "Barcodes" Pipeline Type
- 50-60FPS Multi QR Code Detection and Decoding at 1280x800
- 50-60FPS Multi DataMatrix Detection and Decoding at 1280x800
- 30FPS Multi UPC, EAN, Code128, and PDF417 at 1280x800
- Barcode data strings are posted to the "rawbarcodes" nt array.
- The Barcodes pipeline will populate all 2D metrics such as tx, ty, ta, tcornxy, etc.
All-New REST API
- https://docs.limelightvision.io/docs/docs-limelight/apis/rest-http-api
- Our REST / HTTP API has been rebuilt from the ground up.
- The REST API allows for complete Limelight configuration without web UI interaction.
- Upload pipelines, neural networks, field maps, etc
- Make realtime changes to any pipeline parameter with an optional "flush to disk" option
- Post python input data, set robot orientation, etc.
Remove Camera Orientation Setting From UI (BREAKING CHANGE)
- This has been replaced by the "stream orientation" option. Calibration and targeting are never affecting by this option.
- The new option only affects the stream. Upside-down, 90 Degree Clockwise, 90 Degree Counter-Clockwise, Horizontal Mirror, and Vertical Mirror
- Teams will now need to manually invert tx and ty as required while using rotated cameras.
Remove GRIP Support (BREAKING CHANGE)
Remove "Driver" zero-processing mode (BREAKING CHANGE)
- This has been replaced by the "Viewfinder" pipeline type
Add "Viewfinder" Pipeline type
- The viewfinder pipeline disables all processing for minimal latency
- This allows teams to design their own "Driver" pipelines for view-only modes
Pipeline Files now Use JSON format (BREAKING CHANGE)
- Pipelines still use the .vpr file extension
- (Broken in some cases in 2024.6) The UI will auto-convert pipelines to JSON when you use the "upload" button.
- (Fully functional) You may also https://tools.limelightvision.io/pipeline-upgrade to upgrade your pipelines
Calibration UX Improvement
- Calibration settings are now cached. You no longer need to enter your calibration settings every time you want to calibrate.
- The default calibration dictionary has been updated to work with the recommended 800x600mm coarse board from Calib.io.
Calibration Mosaic
- Previously, it was difficult to determine the quality of calibration images
- The calibration tab now has a "Download Calibration Mosaic" button. The mosaic will show you exactly what each image is contributing to your calibration.
"Centroid" targeting region
- Centroid targeting mode has been added to the "Output" tab to improve object tracking with color pipelines
Dynamic 3D Offset (NT: fiducial_offset_set)
- It is now possible to adjust the 3D Offset without changing pipelines. This is useful for situations in which your "aim point" needs to change based on distance or other properties.
Add Modbus Support
- Limelight OS now has an always-on modbus server for inspection, logistics, and industrial applications
- See the modbus register spec here: https://docs.limelightvision.io/docs/docs-limelight/apis/modbus
- The default modbus server port may be changed in the UI's settings tab
- Through modbus and snapscript python pipelines, completely custom vision applications with bi-directional communication are now supported.
Custom NT server
- The settings tab now contains an entry for a custom NT server.
- This enables a new workflow which includes a glass NT server running on a PC, and Limelight 3G communicating over USB.
Rawfiducial changes
- The "area" value of raw fiducials is now a calibrated, normalized value ranging from ~0-1
All NetworkTables and JSON Changes
-
Add NT getpipetype - Get the current pipeline type string (eg pipe_color, pipe_fiducial)
-
Add NT tcclass - Classifier pipeline detected class name
-
Add NT tdclass - Detector pipeline detected class name
-
Add NT t2d for guaranteed atomic 2d targeting - [valid,targetcount, targetlatency, capturelatency, tx, ty, txnc, tync, ta, targetid, classifierID, detectorID, tlong, tshort, thor, tvert, ts(skew)]
-
Remove NT tlong, tshort, thor, tvert, and ts
-
Add NT 'crosshairs' array [cx0,cy0,cx1,cy1]
-
Remove NT cx0, cy0, cx1, and cy1
-
Add NT rawbarcodes - NT String Array of barcode data. Up to 32 entries.
-
All "raw" arrays allow for up to 32 targets (up from 8)
-
Add fiducial_offset_set dynamic 3d Offset setter
-
Add "pType" to json top-level result
-
Add "stdev_mt1" and "stdev_mt2" to json top-level result (x,y,z,roll,pitch,yaw) (meters, degrees)
Changes to Other File Formats and JSON Dumps
- The calibration file format has been simplified. Old calibrations are auto-converted to the new format upon upload
- One layer of nesting has been removed from Results and Status JSON dumps
Bugfixes
- Previously, if a Google Coral was unplugged while a Neural pipeline was active, the pipeline would permanently revert to "color/retro" mode
- Now, "CHECK CORAL" or "CHECK MODEL" will be printed to the image. The pipeline type will never change
- Previously, tags that successfully passed through the fiducial ID filter were sometimes drawn with a red outline instead of a green outline. This visualization problem has been fixed.
- Apriltag pipelines populate the tcornxy NT array
- Apriltag pipelines now fully respect the min-max area slider. Previously, AprilTag pipelines would filter 2D results based on Tag Area, but not 3D / Localization Results.
Limelight OS 2024.5.0 (4/9/24)
- Upgrade to Linux 6.1
Camera Stack Update
- The entire camera stack has been updated to fix a camera peripheral lock-up on Limelight3G.
- Symptoms include
- Be sure to retune exposure and gain settings after applying this update.
Dynamic Downscaling
- Teams may now set "fiducial_downscale_set" to override the current pipeline's downscale setting
- 0:UI control, 1:1x, 2:1.5x, 3:2x, 4:3x, 5:4x
- Use the new Helpers method with 0.0 (UI Control), 1.0, 1.5, 2.0, 3.0, 4.0
- This is a zero-overhead operation.
- By combining dynamic downscale and dynamic crop, teams can maximize FPS without managing multiple pipelines
MegaTag2 Improvements
- MT2 now works no matter the Limelight orientation, including "portrait" modes with 90 degree and -90 degree rolls
"rawdetections" nt array
- [classID, txnc, tync, ta, corner0x, corner0y, corner1x, corner2y, corner3x, corner3y, corner4x, corner4y]
- corners are in pixel-space without calibration applied
Erode/Dilate Update
- Color pipelines now support up to 10 steps of dilation and 10 steps of erosion
- Color pipelines now have a "reverse morpho" option to reverse the order of the dilation and erosion steps
LimelightLib 1.6 (4/9/24)
- Add void SetFiducialDownscalingOverride(float downscale)
Set to 0 for pipeline control, or one of the following to override your pipeline's downscale setting: 1, 1.5, 2, 3, 4
- Add RawFiducial[] GetRawFiducials()
- Add RawDetection[] GetRawDetections()
Limelight OS 2024.4.0 (4/3/24)
Thanks to all of the teams who contributed ideas for this update.
Megatag 2
Megatag 2 is an ambiguity-free localizer. It has higher accuracy and higher precision than Megatag1, and it was built with the following requirements:
- Eliminate the pose ambiguity problem and increase robustness against image/corner noise.
- Provide excellent pose estimates given one or more tags, no matter the perspective.
- Increase robustness against physical AprilTag placement inaccuracies
- Reduce the amount of robot-side filtering necessary for good pose estimation results
Notice the difference between MegaTag2 (red robot) and Megatag (blue robot) in this highly ambiguous single-tag case:
Megatag2 requires you to set your robot's heading with a new method call. Here's a complete example:
LimelightHelpers.SetRobotOrientation("limelight", m_poseEstimator.getEstimatedPosition().getRotation().getDegrees(), 0, 0, 0, 0, 0);
LimelightHelpers.PoseEstimate mt2 = LimelightHelpers.getBotPoseEstimate_wpiBlue_MegaTag2("limelight");
if(Math.abs(m_gyro.getRate()) > 720) // if our angular velocity is greater than 720 degrees per second, ignore vision updates
{
doRejectUpdate = true;
}
if(mt2.tagCount == 0)
{
doRejectUpdate = true;
}
if(!doRejectUpdate)
{
m_poseEstimator.setVisionMeasurementStdDevs(VecBuilder.fill(.6,.6,9999999));
m_poseEstimator.addVisionMeasurement(
mt2.pose,
mt2.timestampSeconds);
}
Megatag2 provides excellent, ambiguity-free results at any distance given a single tag. This means it is perfectly viable to focus only on tags that are relevant and within your desired placement tolerance. If a tag is not in the correct location or irrelevant, filter it out with the new dynamic filter feature.
Dynamic Apriltag Filtering
- Because MegaTag2 is not desperate to accumulate as many AprilTags as possible, you can safely filter for well-placed and relevant tags:
int[] validIDs = {3,4};
LimelightHelpers.SetFiducialIDFiltersOverride("limelight", validIDs);
Transitioning to MegaTag2
Megatag2 requires your robot heading to work properly. A heading of 0 degrees, 360 degrees, 720 degrees, etc means your robot is facing the red alliance wall. This is the same convention used in PathPlanner, Chorero, Botpose, and Botpose_wpiblue.
Once you have added SetRobotOrientation() to your code, check the built-in 3D visualizer. At close range, Megatag2 and Megatag1 should match closely if not exactly. At long range, Megatag 2 (red robot) should be more accurate and more stable than Megatag1 (blue robot).
Once the built-in visualizer is showing good results, you can safely use Megatag2 to guide your robot during the autonomous period.
The only filter we recommend adding is a "max angular velocity" filter. You may find that at high angular velocities, your pose estimates become slightly less trustworthy.
The examples repo has a Megatag2 example with this filter.
if(Math.abs(m_gyro.getRate()) > 720) // if our angular velocity is greater than 720 degrees per second, ignore vision updates
{
doRejectUpdate = true;
}
if(mt2.tagCount == 0)
{
doRejectUpdate = true;
}
LimelightLib 1.5 (4/3/24)
Add
getBotPoseEstimate_wpiRed_MegaTag2()
getBotPoseEstimate_wpiBlue_MegaTag2()
SetRobotOrientation()
Limelight OS 2024.3.4 (3/20/24)
Thanks to all of the teams who contributed ideas for this update.
Higher-Precision Single Tag Solver
MegaTag's single tag 3D solver has been improved. It is far more stable than before at long range.
JSON Disabled by Default (Breaking Change)
- JSON has been disabled by default to reduce bandwidth usage and across the board for teams using auto-subscribing dashboards such as Shuffleboard.
- This should also reduce RoboRIO NT load and CPU usage.
- Re-enable json per-pipeline in the output tab.
- This updates includes changes that should allow even more teams to transition away from JSON for pose estimation.
Undistorted Area (Breaking Change)
Corners are undistorted before computing the area of any target.
Include Per-Fiducial Metrics in botpose, botpose_wpiblue, and botpose_wpired
[tx, ty, tz, roll, pitch, yaw, tagCount, tagSpan (meters), averageDistance (meters), averageArea (percentage of image), (tags) ]
For every tag used by megatag localization, the above arrays now include (tagID, txnc, tync, ta, distanceToCamera, distanceToRobot, ambiguity)
Ambiguity is a new metric ranging from 0-1 that indicates the ambiguity of the current perspective of the tag. Single-tag-updates with tag ambiguities > .9 should probably be rejected.
"rawtargets" and "rawfiducials" nt arrays (Breaking Change)
- rawtargets - (txnc,tync,ta) per target
- rawfiducials - (tagID, txnc, tync, ta, distanceToCamera, distanceToRobot, ambiguity) per target
- The previous rawtargets NT entries (tx0,ty0, etc) have been removed.
Bugfixes
- Zero-out all single-tag 3D information if the priorityID has not been found. Previously, only Tx, Ta, Ty, and Tv were zeroed-out when the priorityTag was not found
- Zero-out botpose if the only visible tag has been filtered by the UI's "ID Filters" features. Previously, botposes would reset to the center of the field rather than (0,0,0) if the only visible tag was a filtered tag;
- 2024.2 would post NANs to certain networktables entries in some rare instances. This will no longer happen.
LimelightLib 1.4 (3/21/24)
- Add support for 2024.3.4 Raw Fiducials. PoseEstimates now include an array of rawFiducials which contain id, txnc, tync, ta, distanceToCamera, distanceToRobot, and ambiguity
Limelight Hardware Manager 1.4 (3/18/24)
Bugfix
Disovered USB Limelights are properly displayed as a single entry rather than two partial entries.
Limelight OS 2024.2.2 (3/17/24)
Bugfix
TX and TY properly respect the crosshair in NT entries.
Limelight OS 2024.2 (3/8/24)
Zero-Crosshair targeting with Json (tx_nocross, ty_nocross) and NT (txnc, tync)
If you are using tx/ty targeting with custom intrinsics calibration, you are likely still seeing camera-to-camera variation because the Limelight crosshair is not aligned with the principal pixel of the camera. Teams that require greater tx/ty accuracy can either configure the crosshair to match the principal pixel, or use these new metrics.
Potentially breaking change in tx/ty
A bug was introduced earlier this season that broke custom calibration specifically for tx, ty, and tx + ty in json. Limelight OS was reverting to default calibrations in several cases.
Calibration Upgrades
Calibration is now nearly instantaneous, now matter how many images have been captured. We've also fixed a crash caused by having more than around 30 images under certain circumstances.
We're consistently getting a reprojection error of around 1 pixel with 15-20 images of paper targets, and an error of .3 pixels with our high-quality calib.io targets.
Fiducial Filters UI Fix
Fiducial filter textbox now accepts any number of filters.
Misc
Apriltag Generator defaults to "no border" to prevent scaling with 165.1 mm tags.
Limelight OS 2024.1.1 (2/24/24)
- Fix priorityID
Limelight OS 2024.1 (2/24/24)
HW Metrics (hw key in networktables, /status GET request)
- Teams now have the ability to log FPS, CPU Load, RAM usage, and CPU Temp.
- Addresses https://github.com/LimelightVision/limelight-feedback/issues/5
Calibration Improvement
- Fix crash that could occur if a calibration image contained exactly one valid detection. Improve web ui feedback.
Robot Localization Improvement (tag count and more)
-
All networktables botpose arrays (botpose, botpose_wpiblue, and botpose_wpired) now include Tag Count, Tag Span (meters), Average Distance (meters), and Average Area (percentage of image)
-
These metrics are computed with tags that are included in the uploaded field map. Custom and/or mobile AprilTags will not affect these metrics.
-
With device calibration and this botpose array upgrade, we do not believe JSON is necessary for the vast majority of use-cases this year.
-
JSON dump now includes botpose_avgarea, botpose_avgdist, botpose_span, and botpose_tagcount for convenience.
[tx,ty,tz,rx,ry,rz,latency,tagcount,tagspan,avgdist,avgarea]
New Feature: Priority ID (NT Key priorityid)
-
If your robot uses both odometry-based features and tx/ty-based features, you've probably encountered the following UX problem:
-
Before this update, there was no way to easily switch the preferred tag ID for tx/ty targeting.
-
While there is an ID filter in the UI, it
- is not dynamic
- removes tags from megaTag localization.
-
This meant teams were creating several pipelines: one for 3D localization, and one per tx/ty tag (one pipeline for blue-side shooting with tag 7, one for blue-side amping with tag 6, etc.).
-
The new priority ID feature (NT Key priorityid) allows you to tell your Limelight "After all tag detection, filtering, and sorting is complete, focus on the tag that matches the priority ID."
-
This does not affect localization in any way, and it only slightly changes the order of tags in JSON results.
-
If your priority id is not -1, tx/ty/ta will return 0 unless the chosen tag is visible.
Misc
- Fix "x" across the screen while using dual-target mode in a 3D apriltag pipeline
- REST API expanded with neural network label uploads (/uploadlabels)
- Include device nickname in /status json
LimelightLib 1.3
- LimelightLib (Java and CPP) have been updated to make localization easier than ever.
LimelightHelpers.PoseEstimate limelightMeasurement = LimelightHelpers.getBotPoseEstimate_wpiBlue("limelight");
if(limelightMeasurement.tagCount >= 2)
{
m_poseEstimator.setVisionMeasurementStdDevs(VecBuilder.fill(.7,.7,9999999));
m_poseEstimator.addVisionMeasurement(
limelightMeasurement.pose,
limelightMeasurement.timestampSeconds);
}
New resources for Teams
Limelight Feedback and Issue Tracker: https://github.com/LimelightVision/limelight-feedback/issues
Examples Repo: https://github.com/LimelightVision/limelight-examples
Aiming and Ranging with Swerve Example: https://docs.limelightvision.io/docs/docs-limelight/tutorials/tutorial-swerve-aiming-and-ranging
MegaTag Localization Example: https://docs.limelightvision.io/docs/docs-limelight/tutorials/tutorial-swerve-pose-estimation
Thanks to recent contributors jasondaming, Gold876, JosephTLockwood, Andrew Gasser, and virtuald
Limelight 2024 Updates (2/6/24)
Limelight Documentation Upgrade
- The documentation has been rewritten to streamline the setup process
Limelight AprilTag Generator
- https://tools.limelightvision.io/ now features the first-ever online AprilTag generator.
- Select your paper size, marker size, and tag IDs to generate a printable PDF.
- Safari may not properly display tags at the moment.
Limelight Map Builder
- https://tools.limelightvision.io/map-builder
- You can now build custom AprilTag maps with an intuitive UI.
- The default family and tag size have been updated to match the 2024 field.
New Hardware Manager
- The Finder Tool is now the Limelight Hardware Manager
- It has been rewritten from scratch. It now reliably detects Limelights, provides more useful diagnostic information, and does not require restarts to work properly.
- Get it now from the downloads page
Train your own Neural Networks
- You can train your very own detection models for free with RoboFlow, the Limelight Detector Training Notebook, and our new tutorial
2024 AprilTag Map and Note Detector
- The map and detector model have been added to the downloads page and the latest Limelight OS image.