{
  "schemaVersion": 1,
  "version": "0.1.0",
  "released": "2026-08-10",
  "title": "Robot Battery and Actuator Telemetry: Two 4.3-Hour Traces, One Unloaded Boundary",
  "canonical": "https://robotcomponentindex.com/research/robot-battery-actuator-telemetry-audit/",
  "source": {
    "title": "RoboBATT: Multirate Robot Battery and Actuator Telemetry Traces",
    "recordUrl": "https://zenodo.org/records/21853137",
    "apiUrl": "https://zenodo.org/api/records/21853137",
    "versionDoi": "10.5281/zenodo.21853137",
    "conceptDoi": "10.5281/zenodo.21853136",
    "sourceVersion": "v1.0.0",
    "publicationDate": "2026-08-08",
    "creators": [
      {
        "name": "Guo, Feng",
        "orcid": "0000-0002-5141-8672",
        "affiliation": "Flemish Institute for Technological Research"
      },
      {
        "name": "Liu, Hongxing",
        "affiliation": "Southwest Jiaotong University"
      }
    ],
    "archiveAnalyzed": "robobatt_10hz_release_v1.0.0.zip",
    "archiveBytes": 185123569,
    "archiveSha256": "f3b98405f9689f35a740da38a7f6626416328d68dc1c040bf01fee14cf94de1a",
    "archiveMd5FromZenodo": "e0c2fe1cbf504e561601615034049549",
    "upstreamDataLicense": "CC BY 4.0",
    "upstreamDataLicenseUrl": "https://creativecommons.org/licenses/by/4.0/",
    "upstreamCodeLicense": "MIT",
    "verifiedDate": "2026-08-10"
  },
  "integrity": {
    "manifestRecordCount": 138,
    "actualFileCount": 141,
    "missing": [],
    "sizeMismatches": [],
    "hashMismatches": [],
    "unlistedFiles": [
      "metadata/file_manifest_sha256.csv",
      "metadata/public_release_validation.json",
      "metadata/validation_report.json"
    ],
    "allListedFilesPass": true
  },
  "verification": {
    "upstreamValidatorRerun": {
      "command": "python code/validate_public_release.py --dataset-root .",
      "allChecksPass": true,
      "runtime": {
        "python": "3.12.13",
        "pandas": "2.2.3",
        "numpy": "2.3.5"
      },
      "boundary": "This confirms that the deposited package reproduces its own validation contract; it is not the RCI analysis result."
    },
    "rciIndependentRecomputation": {
      "manifestHashesRecomputed": true,
      "batteryAggregatesRecomputedFromPublicTenHertzTables": true,
      "motionAggregatesRecomputedFromPublicLatestMessageTables": true,
      "upstreamDerivedSummaryTablesUsedAsNumericInputs": false,
      "declaredCleanWindowTimestampsReused": true
    }
  },
  "analysisBoundary": {
    "input": "Public RoboBATT 10 Hz convenience release only; native HDF5 streams were not downloaded or analyzed.",
    "windowSelection": "The upstream fixed clean-analysis start/end timestamps are reused as declared boundaries; every aggregate is recomputed by RCI from the public battery and latest-message joint/chassis tables.",
    "sampling": "Ten hertz is the configured controller polling/recording cadence and public grid, not evidence of internal BMS sensing bandwidth.",
    "calibration": "No independent voltage, current, SOC, temperature or actuator-channel calibration record is present.",
    "payload": "Both traces are unloaded scripted operation. Results do not represent payload capacity, dynamic task efficiency, battery life, ageing or production duty cycles.",
    "causality": "Battery-current and motion metrics are descriptive associations on a shared grid, not causal energy attribution to joints."
  },
  "sourceContext": {
    "robotManufacturer": "AGIBOT Innovation (Shanghai) Technology Co., Ltd.",
    "robotModel": "G2 Pro",
    "robotModelEvidence": "operator-provided for both traces",
    "physicalRobotContinuityAcrossConditions": "unknown",
    "batteryChemistry": "lithium iron phosphate (LFP)",
    "batteryConfigurationPerCondition": "two 48 V, 17 Ah packs in simple parallel",
    "batteryConfigurationEvidence": "operator-provided test metadata",
    "batteryPackManufacturerModel": "unknown",
    "bmsManufacturerModel": "unknown",
    "externalVoltageCurrentReference": "none documented",
    "ambientConditions": "unknown",
    "conditionAPayload": "no object in either hand",
    "conditionBPayload": "no external payload"
  },
  "conditionCount": 2,
  "combinedCleanRepresentedHours": 8.630472,
  "combinedCleanBmsRows": 310697,
  "conditions": [
    {
      "conditionId": "A",
      "conditionLabel": "unloaded repetitive counter-phase dual-arm motion",
      "declaredCleanWindow": {
        "startUtc": "2026-06-03T02:51:23.200000+00:00",
        "endUtc": "2026-06-03T07:11:15.500000+00:00",
        "upstreamDeclaredRowCount": 155924
      },
      "fullBatteryRecord": {
        "rowCount": 162077,
        "startUtc": "2026-06-03T02:46:26+00:00",
        "endUtc": "2026-06-03T07:16:33.600000+00:00",
        "spanHoursBetweenFirstAndLastBin": 4.502111111,
        "representedHoursAtPointOneSecondPerRow": 4.502138889,
        "strictTenHertzGrid": true,
        "nonPointOneSecondGapCount": 0,
        "minimumDeltaSeconds": 0.1,
        "maximumDeltaSeconds": 0.1,
        "missingBmsRows": 1,
        "observedBmsRows": 162076
      },
      "cleanBatteryRecord": {
        "rowCount": 155924,
        "startUtc": "2026-06-03T02:51:23.200000+00:00",
        "endUtc": "2026-06-03T07:11:15.500000+00:00",
        "spanHoursBetweenFirstAndLastBin": 4.331194444,
        "representedHoursAtPointOneSecondPerRow": 4.331222222,
        "strictTenHertzGrid": true,
        "nonPointOneSecondGapCount": 0,
        "minimumDeltaSeconds": 0.1,
        "maximumDeltaSeconds": 0.1,
        "declaredRowCountMatches": true,
        "missingBmsRows": 0,
        "observedBmsRows": 155924,
        "retainedStateAgeMedianSeconds": 1.8,
        "retainedStateAgeP95Seconds": 3.9,
        "retainedStateAgeMaximumSeconds": 17.4,
        "rowsWithRetainedStateAgeOverOneSecond": 109751,
        "rowsWithRetainedStateAgeOverOneSecondPercent": 70.387496,
        "stateAgeBoundary": "State age is time since the first public 10 Hz row carrying the same retained BMS field state. It is not BMS response latency, update age or sensing bandwidth.",
        "currentOnPointOneAmpereGrid": true,
        "observedPackCurrentIncrementA": 0.1,
        "voltageOnPointFiveVoltGrid": true,
        "observedPackVoltageIncrementV": 0.5,
        "maximumPackSumErrorA": 0,
        "packCurrentPairTransitionCount": 4238,
        "consecutiveRowsWithUnchangedPackCurrentPairPercent": 97.281992,
        "packCurrentPairRunMedianSeconds": 3.5,
        "packCurrentPairRunP95Seconds": 7,
        "packCurrentPairRunMaximumSeconds": 17.5,
        "currentRunBoundary": "Runs use exact equality of the two stored pack-current fields. Repetition can reflect reporting quantization and unchanged values; it does not prove that the BMS stopped sensing or communicating."
      },
      "currentAndEnergy": {
        "meanTotalCurrentA": 6.964825,
        "medianTotalCurrentA": 6.7,
        "p95TotalCurrentA": 9.6,
        "maximumTotalCurrentA": 15.1,
        "positiveTotalCurrentFraction": 0.999993587,
        "chargeThroughputAh": 30.166206,
        "bmsFieldProductEnergyWh": 1461.967537,
        "energyBoundary": "The Wh value is an RCI integral of paired BMS-reported pack voltage and current fields, not an independently calibrated energy measurement."
      },
      "packEndpoints": {
        "pack0": {
          "socStartPercent": 100,
          "socEndPercent": 0,
          "voltageStartV": 50,
          "voltageEndV": 46.5,
          "temperatureStartC": 34,
          "temperatureEndC": 36,
          "temperatureMinimumC": 34,
          "temperatureMaximumC": 36,
          "bmsReportedSohPercent": 92
        },
        "pack1": {
          "socStartPercent": 100,
          "socEndPercent": 7.6,
          "voltageStartV": 50,
          "voltageEndV": 47,
          "temperatureStartC": 33,
          "temperatureEndC": 35,
          "temperatureMinimumC": 33,
          "temperatureMaximumC": 35,
          "bmsReportedSohPercent": 93
        },
        "identityBoundary": "Pack indices are local array positions. Physical pack continuity across the two conditions is unknown, so cross-condition SOH values are not an ageing trend."
      },
      "motionAssociation": {
        "activityDefinition": "sum of absolute 100 ms joint-position changes across channels whose p01-to-p99 clean-window position range is at least 0.05 rad, divided by 0.1 s; then averaged into complete one-second bins",
        "activeJointChannelRangeStatistic": "p99 minus p01 within the declared clean window",
        "activeJointChannelThresholdRad": 0.05,
        "activeJointChannelCount": 14,
        "activeJointChannels": [
          "position_rad_08",
          "position_rad_09",
          "position_rad_10",
          "position_rad_11",
          "position_rad_12",
          "position_rad_13",
          "position_rad_14",
          "position_rad_15",
          "position_rad_16",
          "position_rad_17",
          "position_rad_18",
          "position_rad_19",
          "position_rad_20",
          "position_rad_21"
        ],
        "jointRowsInCleanWindow": 155924,
        "jointMissingBinRows": 0,
        "alignedPointOneSecondRows": 155924,
        "completeOneSecondBinCount": 15591,
        "activityP25RadPerSecond": 4.210708,
        "activityP75RadPerSecond": 7.041014,
        "lowActivitySecondCount": 3898,
        "highActivitySecondCount": 3898,
        "lowActivityMeanCurrentA": 6.847414,
        "highActivityMeanCurrentA": 7.055357,
        "highMinusLowMeanCurrentA": 0.207943,
        "highVsLowMeanCurrentPercent": 3.036804,
        "sameSecondPearson": 0.095021,
        "sameSecondSpearman": 0.039157,
        "withinMinuteDemeanedPearson": 0.000017,
        "withinMinuteComparisonCount": 259,
        "withinMinuteHighMinusLowMeanCurrentMedianA": -0.034667,
        "withinMinuteHighMinusLowMeanCurrentP25A": -0.16,
        "withinMinuteHighMinusLowMeanCurrentP75A": 0.097,
        "interpretation": "Descriptive same-clock association only. It does not identify causal actuator energy, compensate for current-response latency, or separate motion from controllers, compute, fans, sensors and other loads.",
        "activeChannelThresholdSensitivity": [
          {
            "activeJointChannelThresholdRad": 0.01,
            "activeJointChannelCount": 14,
            "highMinusLowMeanCurrentA": 0.207943,
            "sameSecondPearson": 0.095021,
            "withinMinuteDemeanedPearson": 0.000017,
            "withinMinuteHighMinusLowMeanCurrentMedianA": -0.034667
          },
          {
            "activeJointChannelThresholdRad": 0.05,
            "activeJointChannelCount": 14,
            "highMinusLowMeanCurrentA": 0.207943,
            "sameSecondPearson": 0.095021,
            "withinMinuteDemeanedPearson": 0.000017,
            "withinMinuteHighMinusLowMeanCurrentMedianA": -0.034667
          },
          {
            "activeJointChannelThresholdRad": 0.1,
            "activeJointChannelCount": 14,
            "highMinusLowMeanCurrentA": 0.207943,
            "sameSecondPearson": 0.095021,
            "withinMinuteDemeanedPearson": 0.000017,
            "withinMinuteHighMinusLowMeanCurrentMedianA": -0.034667
          }
        ]
      },
      "chassisTelemetry": null,
      "sourceFiles": {
        "condition_a_repetitive_dual_arm/battery_bms_10hz_zoh.csv.gz": {
          "bytes": 1558452,
          "sha256": "5bdc5ec6259c445f1e2d6b5d9be7c5e57bd3d307dc55ecdc100d99b5df265574"
        },
        "condition_a_repetitive_dual_arm/joint_state_10hz_last_message.csv.gz": {
          "bytes": 94323818,
          "sha256": "06dd9ffc83f528de52a170bddc96638ceb062b97ad33db2441ef48c19d8eda30"
        }
      }
    },
    {
      "conditionId": "B",
      "conditionLabel": "unloaded repeated multijoint motion with chassis telemetry",
      "declaredCleanWindow": {
        "startUtc": "2026-06-08T05:34:21.200000+00:00",
        "endUtc": "2026-06-08T09:52:18.400000+00:00",
        "upstreamDeclaredRowCount": 154773
      },
      "fullBatteryRecord": {
        "rowCount": 156614,
        "startUtc": "2026-06-08T05:32:53.600000+00:00",
        "endUtc": "2026-06-08T09:53:54.900000+00:00",
        "spanHoursBetweenFirstAndLastBin": 4.350361111,
        "representedHoursAtPointOneSecondPerRow": 4.350388889,
        "strictTenHertzGrid": true,
        "nonPointOneSecondGapCount": 0,
        "minimumDeltaSeconds": 0.1,
        "maximumDeltaSeconds": 0.1,
        "missingBmsRows": 1,
        "observedBmsRows": 156613
      },
      "cleanBatteryRecord": {
        "rowCount": 154773,
        "startUtc": "2026-06-08T05:34:21.200000+00:00",
        "endUtc": "2026-06-08T09:52:18.400000+00:00",
        "spanHoursBetweenFirstAndLastBin": 4.299222222,
        "representedHoursAtPointOneSecondPerRow": 4.29925,
        "strictTenHertzGrid": true,
        "nonPointOneSecondGapCount": 0,
        "minimumDeltaSeconds": 0.1,
        "maximumDeltaSeconds": 0.1,
        "declaredRowCountMatches": true,
        "missingBmsRows": 0,
        "observedBmsRows": 154773,
        "retainedStateAgeMedianSeconds": 1.8,
        "retainedStateAgeP95Seconds": 5.1,
        "retainedStateAgeMaximumSeconds": 14,
        "rowsWithRetainedStateAgeOverOneSecond": 107486,
        "rowsWithRetainedStateAgeOverOneSecondPercent": 69.447513,
        "stateAgeBoundary": "State age is time since the first public 10 Hz row carrying the same retained BMS field state. It is not BMS response latency, update age or sensing bandwidth.",
        "currentOnPointOneAmpereGrid": true,
        "observedPackCurrentIncrementA": 0.1,
        "voltageOnPointFiveVoltGrid": true,
        "observedPackVoltageIncrementV": 0.5,
        "maximumPackSumErrorA": 0,
        "packCurrentPairTransitionCount": 4038,
        "consecutiveRowsWithUnchangedPackCurrentPairPercent": 97.391001,
        "packCurrentPairRunMedianSeconds": 3.5,
        "packCurrentPairRunP95Seconds": 7,
        "packCurrentPairRunMaximumSeconds": 14.1,
        "currentRunBoundary": "Runs use exact equality of the two stored pack-current fields. Repetition can reflect reporting quantization and unchanged values; it does not prove that the BMS stopped sensing or communicating."
      },
      "currentAndEnergy": {
        "meanTotalCurrentA": 7.149466,
        "medianTotalCurrentA": 6.5,
        "p95TotalCurrentA": 10.7,
        "maximumTotalCurrentA": 16.5,
        "positiveTotalCurrentFraction": 0.999541264,
        "chargeThroughputAh": 30.737342,
        "bmsFieldProductEnergyWh": 1487.78462,
        "energyBoundary": "The Wh value is an RCI integral of paired BMS-reported pack voltage and current fields, not an independently calibrated energy measurement."
      },
      "packEndpoints": {
        "pack0": {
          "socStartPercent": 100,
          "socEndPercent": 2,
          "voltageStartV": 50,
          "voltageEndV": 47,
          "temperatureStartC": 33,
          "temperatureEndC": 33,
          "temperatureMinimumC": 32,
          "temperatureMaximumC": 33,
          "bmsReportedSohPercent": 94
        },
        "pack1": {
          "socStartPercent": 97.6,
          "socEndPercent": 0,
          "voltageStartV": 50,
          "voltageEndV": 47,
          "temperatureStartC": 33,
          "temperatureEndC": 34,
          "temperatureMinimumC": 32,
          "temperatureMaximumC": 34,
          "bmsReportedSohPercent": 94
        },
        "identityBoundary": "Pack indices are local array positions. Physical pack continuity across the two conditions is unknown, so cross-condition SOH values are not an ageing trend."
      },
      "motionAssociation": {
        "activityDefinition": "sum of absolute 100 ms joint-position changes across channels whose p01-to-p99 clean-window position range is at least 0.05 rad, divided by 0.1 s; then averaged into complete one-second bins",
        "activeJointChannelRangeStatistic": "p99 minus p01 within the declared clean window",
        "activeJointChannelThresholdRad": 0.05,
        "activeJointChannelCount": 19,
        "activeJointChannels": [
          "position_rad_00",
          "position_rad_01",
          "position_rad_02",
          "position_rad_03",
          "position_rad_04",
          "position_rad_08",
          "position_rad_09",
          "position_rad_10",
          "position_rad_11",
          "position_rad_12",
          "position_rad_13",
          "position_rad_14",
          "position_rad_15",
          "position_rad_16",
          "position_rad_17",
          "position_rad_18",
          "position_rad_19",
          "position_rad_20",
          "position_rad_21"
        ],
        "jointRowsInCleanWindow": 154773,
        "jointMissingBinRows": 12,
        "alignedPointOneSecondRows": 154773,
        "completeOneSecondBinCount": 15474,
        "activityP25RadPerSecond": 0.431278,
        "activityP75RadPerSecond": 11.461313,
        "lowActivitySecondCount": 3869,
        "highActivitySecondCount": 3869,
        "lowActivityMeanCurrentA": 6.38611,
        "highActivityMeanCurrentA": 8.172489,
        "highMinusLowMeanCurrentA": 1.786379,
        "highVsLowMeanCurrentPercent": 27.97288,
        "sameSecondPearson": 0.416902,
        "sameSecondSpearman": 0.462545,
        "withinMinuteDemeanedPearson": 0.377104,
        "withinMinuteComparisonCount": 257,
        "withinMinuteHighMinusLowMeanCurrentMedianA": 1.365333,
        "withinMinuteHighMinusLowMeanCurrentP25A": 0.666,
        "withinMinuteHighMinusLowMeanCurrentP75A": 2.25,
        "interpretation": "Descriptive same-clock association only. It does not identify causal actuator energy, compensate for current-response latency, or separate motion from controllers, compute, fans, sensors and other loads.",
        "activeChannelThresholdSensitivity": [
          {
            "activeJointChannelThresholdRad": 0.01,
            "activeJointChannelCount": 19,
            "highMinusLowMeanCurrentA": 1.786379,
            "sameSecondPearson": 0.416902,
            "withinMinuteDemeanedPearson": 0.377104,
            "withinMinuteHighMinusLowMeanCurrentMedianA": 1.365333
          },
          {
            "activeJointChannelThresholdRad": 0.05,
            "activeJointChannelCount": 19,
            "highMinusLowMeanCurrentA": 1.786379,
            "sameSecondPearson": 0.416902,
            "withinMinuteDemeanedPearson": 0.377104,
            "withinMinuteHighMinusLowMeanCurrentMedianA": 1.365333
          },
          {
            "activeJointChannelThresholdRad": 0.1,
            "activeJointChannelCount": 18,
            "highMinusLowMeanCurrentA": 1.786017,
            "sameSecondPearson": 0.416795,
            "withinMinuteDemeanedPearson": 0.377051,
            "withinMinuteHighMinusLowMeanCurrentMedianA": 1.366
          }
        ]
      },
      "chassisTelemetry": {
        "cleanWindowRowCount": 154773,
        "missingBinRows": 13,
        "activeRawPositionChannelThreshold": 0.01,
        "activeRawPositionChannelCount": 4,
        "activeRawPositionChannels": [
          "position_raw_00",
          "position_raw_01",
          "position_raw_02",
          "position_raw_03"
        ],
        "binsWithReportedDuplicateSourceTimestamps": 3146,
        "reportedDuplicateSourceTimestampCount": 3270,
        "boundary": "Chassis position fields are retained in source-native raw units and are not added to the radian joint-activity index."
      },
      "sourceFiles": {
        "condition_b_multijoint_chassis/battery_bms_10hz_zoh.csv.gz": {
          "bytes": 1512804,
          "sha256": "5aa83fe092a2993656deba34e56a8b7cf4b983eb91bd6ef690ff49587523e314"
        },
        "condition_b_multijoint_chassis/joint_state_10hz_last_message.csv.gz": {
          "bytes": 69847326,
          "sha256": "82c614611b116922d3b1f7bc73bde74c9284f3421193e3b302b6cbb017dd385d"
        },
        "condition_b_multijoint_chassis/chassis_state_10hz_last_message.csv.gz": {
          "bytes": 7246683,
          "sha256": "94540e678713fdb1b5d63433b27600e26bee7cd6b5025162e78f10b291061769"
        }
      }
    }
  ],
  "method": {
    "chargeThroughput": "sum(total_output_current_A × 0.1 s) / 3600",
    "energyProxy": "sum((pack0 current × pack0 voltage + pack1 current × pack1 voltage) × 0.1 s) / 3600",
    "motionActivity": "sum of absolute 100 ms joint-position changes across channels whose p01-to-p99 clean-window position range is at least 0.05 rad, divided by 0.1 s; then averaged into complete one-second bins",
    "associationAggregation": "Only complete ten-row one-second bins are used. Global bottom/top activity quartiles and same-second correlations are reported separately from within-minute de-meaned comparisons.",
    "crossConditionPooling": "None. Conditions are reported independently because physical robot and pack continuity are unverified."
  },
  "suggestedCitation": "Robot Component Index. Robot Battery and Actuator Telemetry: Two 4.3-Hour Traces, One Unloaded Boundary. RCI 025, research dataset v0.1.0, 2026-08-10. https://robotcomponentindex.com/research/robot-battery-actuator-telemetry-audit/"
}