NetworkTables API
Limelight OS 内置了 NetworkTables 4 客户端。它会根据设置界面中配置的队伍编号/ID 自动连接到 FRC 机器人上运行的 NetworkTables 4 服务器。
所有数据都发布到与设备名称匹配的表中(例如 "limelight")。如果您为相机分配了主机名/昵称,表名将匹配完整的 limelight 名称(例如 "limelight-top")。
LimelightLib WPIJava 和 LimelightLib WPICPP 通过 NetworkTables 与 Limelight 设备进行交互。
基础目标数据
使用以下代码:
- Java
- LabView
- C++
- Python
NetworkTableInstance.getDefault().getTable("limelight").getEntry("<variablename>").getDouble(0);

nt::NetworkTableInstance::GetDefault().GetTable("limelight")->GetNumber("<variablename>",0.0);
NetworkTables.getTable("limelight").getNumber('<variablename>');
来获取以下数据:
| 键名 | 类型 | 描述 |
|---|---|---|
| tv | int | 存在有效目标时为 1,不存在有效目标时为 0 |
| tx | double | 从准星到目标的水平偏移(LL1: -27 度到 27 度 / LL2: -29.8 到 29.8 度) |
| ty | double | 从准星到目标的垂直偏移(LL1: -20.5 度到 20.5 度 / LL2: -24.85 到 24.85 度) |
| txnc | double | 从主点像素到目标的水平偏移(度) |
| tync | double | 从主点像素到目标的垂直偏移(度) |
| ta | double | 目标面积(图像的 0% 到 100%) |
| tl | double | 管线的延迟贡献(毫秒)。加上 "cl" 得到总延迟。 |
| cl | double | 捕获管线延迟(毫秒)。从传感器中间行曝光结束到跟踪管线开始的时间。 |
| t2d | double | 包含多个匹配时间戳统计值的数组:[targetValid, targetCount, targetLatency, captureLatency, tx, ty, txnc, tync, ta, tid, targetClassIndexDetector, targetClassIndexClassifier, targetLongSidePixels, targetShortSidePixels, targetHorizontalExtentPixels, targetVerticalExtentPixels, targetSkewDegrees] |
| getpipe | int | 相机当前活动的管线索引(0 .. 9) |
| getpipetype | string | 管线类型,例如 "pipe_color" |
| json | string | 目标结果的完整 JSON 转储。必须在 'output' 选项卡中为每个管线启用 |
| tclass | string | 主要神 经网络检测器结果或神经网络分类器结果的类名 |
| tc | doubleArray | 获取准星区域(3x3 像素区域)下方的平均 HSV 颜色,以数字数组形式返回 |
| hb | double | 心跳值。每帧增加一次,在 20 亿时重置 |
| hw | doubleArray | 硬件指标 [fps, cpu 温度, 内存使用率, 温度] |
| crosshairs | doubleArray | 2D 准星 [cx0, cy0, cx1, cy1] |
| tcclass | string | 分类器管线计算的类名 |
| tdclass | string | 检测器管线的主要检测名称 |
AprilTag 和 3D 数据
使用以下代码:
- Java
- C++
NetworkTableInstance.getDefault().getTable("limelight").getEntry("<variablename>").getDoubleArray(new double[6]);
nt::NetworkTableInstance::GetDefault().GetTable("limelight")->GetNumberArray("<variablename>",std::vector<double>(6));
来获取以下数据:
| 键名 | 类型 | 描述 |
|---|---|---|
| botpose | doubleArray | 机器人在场地空间中的变换。平移 (X,Y,Z) 单位为米,旋转 (Roll,Pitch,Yaw) 单位为度,总延迟 (cl+tl),标签数量,标签跨度,标签到相机的平均距离,标签平均面积(图像百分比) |
| botpose_wpiblue | doubleArray | 机器人在场地空间中的变换(蓝色驾驶站 WPILIB 原点)。平移 (X,Y,Z) 单位为米,旋转 (Roll,Pitch,Yaw) 单位为度,总延迟 (cl+tl),标签数量,标签跨度,标签到相机的平均距离,标签平均面积(图像百分比) |
| botpose_wpired | doubleArray | 机器人在场地空间中的变换(红色驾驶站 WPILIB 原点)。平移 (X,Y,Z) 单位为米,旋转 (Roll,Pitch,Yaw) 单位为度,总延迟 (cl+tl),标签数量,标签跨度,标签到相机的平均距离,标签平均面积(图像百分比) |
| botpose_orb | doubleArray | 机器人在场地空间中的变换(Megatag2)。平移 (X,Y,Z) 单位为米,旋转 (Roll,Pitch,Yaw) 单位为度,总延迟 (cl+tl),标签数量,标签跨度,标签到相机的平均距离,标签平均面积(图像百分比) |
| botpose_orb_wpiblue | doubleArray | 机器人在场地空间中的变换(Megatag2)(蓝色驾驶站 WPILIB 原点)。平移 (X,Y,Z) 单位为米,旋转 (Roll,Pitch,Yaw) 单位为度,总延迟 (cl+tl),标签数量,标签跨度,标签到相机的平均距离,标签平均面积(图像百分比) |
| botpose_orb_wpired | doubleArray | 机器人在场地空间中的变换(Megatag2)(红色驾驶站 WPILIB 原点)。平移 (X,Y,Z) 单位为米,旋转 (Roll,Pitch,Yaw) 单位为度,总延迟 (cl+tl),标签数量,标签跨度,标签到相机的平均距离,标签平均面积(图像百分比) |
| camerapose_targetspace | doubleArray | 相机在主要可见 AprilTag 坐标系中的 3D 变换(数组 (6))[tx, ty, tz, pitch, yaw, roll](米,度) |
| targetpose_cameraspace | doubleArray | 主要可见 AprilTag 在相机坐标系中的 3D 变换(数组 (6))[tx, ty, tz, pitch, yaw, roll](米,度) |
| targetpose_robotspace | doubleArray | 主要可见 AprilTag 在机器人坐标系中的 3D 变换(数组 (6))[tx, ty, tz, pitch, yaw, roll](米,度) |
| botpose_targetspace | doubleArray | 机器人在主要可见 AprilTag 坐标系中的 3D 变换(数组 (6))[tx, ty, tz, pitch, yaw, roll](米,度) |
| camerapose_robotspace | doubleArray | 相机在机器人坐 标系中的 3D 变换(数组 (6)) |
| tid | int | 主要可见 AprilTag 的 ID |
| stddevs | doubleArray | MegaTag 标准差 [MT1x, MT1y, MT1z, MT1roll, MT1pitch, MT1Yaw, MT2x, MT2y, MT2z, MT2roll, MT2pitch, MT2yaw] |
| camerapose_robotspace_set | doubleArray | 设置相机在机器人坐标系中的位姿。 |
| priorityid | int | 设置 tx/ty 目标跟踪所需的 ID。忽略其他目标。不影响定位 |
| robot_orientation_set | doubleArray | 设置机器人方向和角速度,单位为度和度/秒 [yaw,yawrate,pitch,pitchrate,roll,rollrate] |
| fiducial_id_filters_set | doubleArray | 覆盖定位的有效基准标记 ID(数组) |
| fiducial_offset_set | doubleArray | 设置 3D 兴趣点偏移 [x,y,z] |
相机控制
使用以下代码:
- Java
- LabView
- C++
- Python
NetworkTableInstance.getDefault().getTable("limelight").getEntry("<variablename>").setNumber(<value>);

nt::NetworkTableInstance::GetDefault().GetTable("limelight")->PutNumber("<variablename>",<value>);
NetworkTables.getTable("limelight").putNumber('<variablename>',<value>)
来设置以下数据:
| ledMode | 设置 limelight 的 LED 状态 |
|---|---|
| [0] | 使用当前管线中设置的 LED 模式 |
| [1] | 强制关闭 |
| [2] | 强制闪烁 |
| [3] | 强制开启 |
| pipeline | 设置 limelight 的当前管线 |
|---|---|
| 0 .. 9 | 选择管线 0..9 |
| stream | 设置 limelight 的流模式 |
|---|---|
| 0 | 标准 - 如果 Limelight 连接了网络摄像头,则并排显示流 |
| 1 | 画中画主 - 副摄像头流放置在主摄像头流的右下角 |
| 2 | 画中画副 - 主摄像头流放置在副摄像头流的右下角 |
| crop | (数组)设置裁剪矩形。管线必须在网页界面中使用默认裁剪矩形。数组必须正好有 4 个元素。 |
|---|---|
| [0] | X0 - 裁剪矩形的最小或最大 X 值(-1 到 1) |
| [1] | X1 - 裁剪矩形的最小或最大 X 值(-1 到 1) |
| [2] | Y0 - 裁剪矩形的最小或最大 Y 值(-1 到 1) |
| [3] | Y1 - 裁剪矩形的最小或最大 Y 值(-1 到 1) |
| throttle_set | (int)我们建议在禁用时将此值设置为 100-200。设置处理帧之间跳过的帧数以降低温度上升。跳过的帧期间输出不会归零。 |
|---|
- Java
- C++
double[] cropValues = new double[4];
cropValues[0] = -1.0;
cropValues[1] = 1.0;
cropValues[2] = -1.0;
cropValues[3] = 1.0;
NetworkTableInstance.getDefault().getTable("limelight").getEntry("crop").setDoubleArray(cropValues);
wip
IMU 控制
| 键名 | 类型 | 描述 |
|---|---|---|
| imumode_set | int | 设置 imu 模式。0 - 使用外部 imu,1 - 使用外部 imu 并初始化内部 imu,2 - 使用内部,3 - 使用内部并配合 MT1 辅助收敛,4 - 使用内 部 IMU 并配合外部 IMU 辅助收敛 |
| imuassistalpha_set | double | 互补滤波器 alpha / 强度。较高的值会使内部 imu 更快地收敛到辅助源。默认设置为较低的值 0.001,因为我们现在比以前更信任内部 IMU。辅助模式旨在非常轻柔地将内部 imu "拉向" 所选的辅助源。 |
Python
Python 脚本允许任意的入站和出站数据。
| llpython | 由 python 脚本发送的数字数组。可在机器人代码中访问。 |
| llrobot | 由机器人发送的数字数组。可在 python SnapScripts 中访问。 |
原始数据
角点:
在 "Output" 选项卡中启用 "send contours" 以流式传输角点坐标:
| tcornxy | 角点坐标的数字数组 [x0,y0,x1,y1......] |
原始目标:
Limelight 向 NetworkTables 发布三个不受分组模式影响的原始轮廓。也就是说,它们使用您的管线参数进行过滤,但从不分组。X 和 Y 以归一化屏幕空间(-1 到 1)而非度数返回。
| rawtargets | [txnc,tync,ta,txnc2,tync2,ta2....] |
原始基准标记:
获取所有有效(未过滤)的基准标记
| rawfiducials | [id, txnc, tync, ta, distToCamera, distToRobot, ambiguity, id2.....] |
原始检测:
获取所有有效(未过滤)的神经网络检测结果
| rawdetections | [id, txnc, tync, ta, corner0x, corner0y, corner1x, corner1y, corner2x, corner2y, corner3x, corner3y, id2.....] |
原始条形码:
获取所有有效(未过滤)的条形码结果
| rawbarcodes | 条形码数据的字符串数组 |