INDRBT / ENGINEERING

INDRBT / Reading room

Validation report

Digital engineering model. Payload and repeatability are design targets. All ordinary guide reading, figures and PDFs work here. Links marked Source file lead to the public engineering repository.
On this page

Retained digital evidence · results/validation/validation_report.json · SHA-256 45a2228a42fcecdc712e66acd1afd16c42188586946f683bf2f0dfed062101cb

This readable record comes from the engineering project. Its assumptions, sampling and rule scope remain part of the result.

{
  "executed_utc": "2026-10-28T13:01:53.486556+00:00",
  "project_version": "1.2.0",
  "project_status": "DIGITAL SCOPE COMPLETE",
  "checks": [
    {
      "name": "KiCad ERC / PCB DRC / connectivity",
      "result": "PASS",
      "evidence": {
        "exit_code": 0,
        "output": "Found 0 violations\nSaved ERC Report to erc_report.json\n\nPlotted to '<electronics>\\exports\\joint_interface.svg'.\nDone.\nPlotted to 'exports\\joint_interface.pdf'.\nDone.\nPASS: 44 components, 28 nets, 118 pin assignments, 22 topology checks, 0 ERC violations\nFound 0 violations\nFound 0 unconnected items\nFound 0 schematic parity issues\nSaved DRC Report to pcb_drc_report.json\nSaved board\nPlotted to 'fabrication\\joint_interface-F_Cu.gtl'.\nPlotted to 'fabrication\\joint_interface-In1_Cu.g1'.\nPlotted to 'fabrication\\joint_interface-In2_Cu.g2'.\nPlotted to 'fabrication\\joint_interface-B_Cu.gbl'.\nPlotted to 'fabrication\\joint_interface-F_Paste.gtp'.\nPlotted to 'fabrication\\joint_interface-F_Silkscreen.gto'.\nPlotted to 'fabrication\\joint_interface-B_Silkscreen.gbo'.\nPlotted to 'fabrication\\joint_interface-F_Mask.gts'.\nPlotted to 'fabrication\\joint_interface-B_Mask.gbs'.\nPlotted to 'fabrication\\joint_interface-Edge_Cuts.gm1'.\nCreated file 'fabrication\\joint_interface-PTH.drl'\nCreated file 'fabrication\\joint_interface-NPTH.drl'\nCreated file 'fabrication\\joint_interface-PTH-drl_map.pdf'.\nCreated file 'fabrication\\joint_interface-NPTH-drl_map.pdf'.\nDone.\nWrote position data to 'fabrication\\assembly_positions.csv'.\nSuccessfully created IPC-D-356 file\nPlotted to 'exports\\pcb_top.svg'.\nDone.\nPlotted to 'exports\\pcb_bottom.svg'.\nDone.\nPlotted to 'exports\\pcb_ground_plane.svg'.\nDone.\nPlotted to 'exports\\pcb_power_plane.svg'.\nDone.\nPlotted to 'exports\\pcb_assembly.svg'.\nDone.\nPlotted to 'exports\\pcb_layers.pdf'.\nDone.\nPASS: 44 schematic footprints + 4 mechanical, 28 connected nets, 265 tracks, 32 vias; 0 DRC violations, 0 unconnected items, 0 schematic parity issues\n"
      }
    },
    {
      "name": "Automated numerical/CAD tests",
      "result": "PASS",
      "evidence": {
        "exit_code": 0,
        "output": "........................................................................ [ 79%]\n...................                                                      [100%]\n91 passed in 42.03s\n"
      }
    },
    {
      "name": "Configuration validation",
      "result": "PASS",
      "evidence": {
        "name": "INDRBT"
      }
    },
    {
      "name": "FK / IK / Jacobian random trials",
      "result": "PASS",
      "evidence": {
        "status": "VERIFIED DIGITALLY",
        "trials": 60,
        "seed": 1052026,
        "seeds": "Targets sampled within limits; seeds perturbed by Gaussian sigma .28 rad, not copied target joints",
        "ik_max_position_error_m": 2.700008801532618e-11,
        "ik_max_orientation_error_rad": 6.50370020913975e-12,
        "ik_max_matrix_error": 1.885938627488315e-11,
        "jacobian_max_abs_error": 2.51663800909796e-10,
        "independent_planar_fk_max_error_m": 2.5438405243138006e-16,
        "acceptance_limits": {
          "ik_max_position_error_m": 1e-05,
          "ik_max_orientation_error_rad": 0.0001,
          "ik_max_matrix_error": 0.0001,
          "jacobian_max_abs_error": 1e-06,
          "independent_planar_fk_max_error_m": 1e-10
        }
      }
    },
    {
      "name": "CAD / task / parameter consistency",
      "result": "PASS",
      "evidence": {
        "cad_components": 54,
        "task_samples_recomputed": 1041,
        "named_poses": 6,
        "configuration_sha256": "fde183861589ceaa492879da6e6114c80fdd659dcff6adcf46fc734b3a50934f",
        "pcb_footprints": 48
      }
    },
    {
      "name": "Code lint",
      "result": "PASS",
      "evidence": {
        "exit_code": 0,
        "output": "All checks passed!\n"
      }
    },
    {
      "name": "Documentation links and coverage",
      "result": "PASS",
      "evidence": {
        "required_documents": 23,
        "broken_local_links": []
      }
    },
    {
      "name": "Validation source revision consistency",
      "result": "PASS",
      "evidence": {
        "files_bound": 76
      }
    }
  ],
  "scope_limitations": [
    "Collision evidence is representative and sampled, not a continuous swept collision certificate",
    "Payload and repeatability remain design targets; no physical robot was built",
    "Analytical structure and independent-axis control are the documented educational models",
    "The conceptual PCB has no physical thermal, EMC, ESD or functional-safety validation"
  ],
  "source_sha256": {
    "analysis/__init__.py": "cdfe798bb4eb801809e84f07441eb56869f44e4758dc94cc69748958791937da",
    "analysis/joint_torque_analysis.py": "8ccad6e712becb109c60d3729b73e4fdc1854cf54ea1f1982937704a3dcb21fa",
    "analysis/research_experiments.py": "cc19bd4668ee7467037ae61d28e7e977e894f6a9d8c15188f3d443f408db2c93",
    "analysis/structural_analysis.py": "d276cbad4885a10c1850a1f3b2bbf646f40e3425c2b53835ac2c7dfc390779f8",
    "cad/build123d/assembly.py": "ab331015a96668f5c9eb73fdccd46cc386fd6b050448eed1cc2901cc0866f84f",
    "cad/build123d/check_assembly.py": "16aad10d458771f8787ae8b28494dcd62169b18a0643d2107e0eb1d5eb166ae6",
    "cad/build123d/check_motion.py": "513d7217ba978a62ff2bb44506814af85be71d05e59e2ea1b90693d4696cc17d",
    "cad/build123d/compose_poses.py": "f5a2b1b65331b70ad9bfb165c95c5dc7d6ee807c8c15aed0a2a833703ee01558",
    "cad/build123d/drawings.py": "f0741684f92000069eeb6f6d3403628bd93ab657e4823b55bde578a6b2576d70",
    "cad/build123d/export_all.py": "d29e0471cd2822c09003df9b2ad74bba482068acda58268e0ae059c55e535d97",
    "cad/build123d/geometry.py": "efeddd26543a9a2545a3244b931579d474aa0775b80c48ab82dbaa48fd5cbb8a",
    "cad/build123d/inspect_blender.py": "9e699e720268631b310db58eda99c93de26ef0e91f99199ee9d8d453f4cc096c",
    "cad/build123d/parameters.py": "78db1770d9ed6471f7226bf11b3b180eaca02c2740a672997efa137453a3ccbe",
    "cad/build123d/render_blender.py": "d2a03a7ecc2d331eae65f9f5dfc788f9b078e39154f7aaea4fbc7ad63266afc3",
    "cad/freecad/inspect_step.py": "85d019b367be3e062f93ceb5b5726eed97f1b4982eea21bda1d18b0c9ccd55c3",
    "config/robot.yaml": "fde183861589ceaa492879da6e6114c80fdd659dcff6adcf46fc734b3a50934f",
    "electronics/electrical_assumptions.json": "9202510ae922c7257e5023e94fbe6bca7f1c2884ba05142f2dd61fadc04a01c0",
    "electronics/fp-lib-table": "8706529c4bffd1ff95ca451dc6eb37b535753379b2e98f465347d15e4ec123f0",
    "electronics/fuse_selection.json": "d7307e63b43cddd03fb902a2b001f3feb4cad1ad048f4b07752ae3dd67d95abf",
    "electronics/generate_interface.py": "b9e9524872e02b0d346adc02183530644ea3a6a5efdb7d4b89c368dfd84437af",
    "electronics/generate_pcb.py": "cd00e5c1ffc7c79d592e2dc447368adc477529ba658dded79b5885f2b6d0cbd4",
    "electronics/INDRBT_Interface.pretty/PTC_Bourns_MF-NSMF025X_1206.kicad_mod": "9acc77d33b95c382fade04f49c573996e7b85eb81b4c761ceacf350d77f2757b",
    "electronics/interface_analysis.py": "5a08ee6a9a19fb78dcdf82b3d5d5c213dd04727658894885126889f4df8fe868",
    "electronics/joint_interface.kicad_dru": "72afecaf275113ea1933885f575e19720a433f4028c2282d8bdac265d51b80cd",
    "electronics/joint_interface.kicad_pcb": "1046bd78d82cd37f4eb656b654840edead73e625d1d94488c067a607fa495aba",
    "electronics/joint_interface.kicad_pro": "1cbe4d95a46fe4c8e8a28a635cd5d81d293c97451c79740726e6cffe839bdd1a",
    "electronics/joint_interface.kicad_sch": "17d7f75f067bb735ad2a5a8c1007acfb8115b868c983112e39b75b617fe1129e",
    "electronics/review_electronics.py": "6bc96c9c85be7afef008dc5bfcc427221a6880e0dcf7ebc0f5ab6bf73821d57f",
    "electronics/run_checks.py": "3d24542fba1aab64a2494ec7fc71ee0c3b6b47e51f78547a1bc1383e1726d36e",
    "electronics/run_pcb_checks.py": "9b5b8a242ca7109bfee9c042db36c1b0c2393f00df30e0592f00383f3732b813",
    "electronics/verify_netlist.py": "381317b0341f5a650c2fad1a1b5540d7ef2a42ea1167a8eb1d2d417477cafd47",
    "electronics/verify_pcb.py": "5e76152f2e4011ee798088c597125f698948abf71b9002f7d857d8316a5154e6",
    "MANIFEST.in": "e3886bccab05728479229c775b1e2b960e2bd847ad699d8bded6dc9bf043cd67",
    "pyproject.toml": "4f1ca1c78c0815f6cc87211745adfe20db5241d5a33e37a43bf27192ad7c108d",
    "requirements-lock.txt": "4a2622f1d02cdf2ab4cf8539b5b92b7151630fa1f4ca00e5dc506945ea9aa1fe",
    "scripts/audit_repository.py": "1baa8a11feb28f35481848a349044635aef5f8d5a105cbb64a56d1ea87213180",
    "scripts/build_viewer.py": "aa17e1bebfe79b8cea72329fc1da54861e7a7ec834b59b88ba3b756932adfae4",
    "scripts/evidence.py": "d1a3006bb0aba935e573b698a86663911b10bdeba6a57e0cd333c36574ef7f4c",
    "scripts/generate_cad.py": "429f6142bd3ddf60ef3178eea4237d3f8973e1555882ccba9020bf64bc131be5",
    "scripts/generate_results.py": "7d956c93547bbddc1461798a188d18d1a997873dd1476ac2820ae36d01d87933",
    "scripts/open_project.ps1": "67e997327120aa8e2c6776ace5070e8dd393c5ffef81a4653e0d28bdb32203cc",
    "scripts/refresh_cad.py": "41c7d03c6a7536e6ea39e891841f22b96662e6ade6701cdf8505b8dab04f85ea",
    "scripts/review_cad.py": "b58e658fbfccd4be5368af54f7e23ebf7bb9bc31dc2bb02cfb6cddd00a57a405",
    "scripts/review_theory.py": "a9d653050edc926727931d32449e874e99ed09af42223b6899d4c3ca8788acdc",
    "scripts/run_validation.py": "7ee0fbe70498942eb5476181ba05c5b68595e2ecf2198a5661d95d8305eae860",
    "scripts/sync_presentation.py": "df050504f36d9266eb92d5bf8a4125cb51b85447f7be826fce0cee570f5296ce",
    "scripts/update_report.py": "5c3caddc8115444c78da1599711c99581d25b9a541af67ef11f9de9d6ecaf4b9",
    "scripts/verify_presentation.py": "a0fdc5a2a8779c8909a99a17317541d1cb7ca7172766e84c5fb3b19e8fafcd4a",
    "scripts/verify_viewer.cjs": "4fb5beb3d8d05f355c70f579acfec610ba954a39743564113dd646391cdfe07b",
    "scripts/verify_wheel_install.py": "70b828114ac806d9ca9ea0b4b2d21c0a09419110f4890234a79dc60d1d7cd252",
    "setup.py": "b6611d11260d4d714e7c792749e6f1d5a339bf3aa4818dfa5cd620e494465f65",
    "simulations/viewer.js": "1adf58241e794e4bb3e5ea6f963de3af28e242d27dafe1bf1477cb5a32e053c2",
    "src/robotarm/__init__.py": "46afb8805dbb9ada5960abab654f7c1e447f659de7a92fcb9ef11ed9e72a86bb",
    "src/robotarm/config.py": "0ef8974921d8cdfb4fbd822c5cd0d4002496cf0d5e3d136c848b75733ee3ae51",
    "src/robotarm/control/__init__.py": "09295050f5dbdb15796e85b7e06a392c60a516717eb82cbba0578ec719085be6",
    "src/robotarm/control/pid.py": "e379778f8ca9161877d42fb637baf1b4b26de0fb98118ef15de53c917178fa6c",
    "src/robotarm/demo.py": "168e010b3f8d295cea48e0d66d17e0c765ab7d2def50117d6379d4e12ed31936",
    "src/robotarm/gripper/__init__.py": "7ad75d79c06c3682fbe2f3ee9481f44609954b26266bd4b7ebda183b20540854",
    "src/robotarm/gripper/model.py": "4152eb1ea321ec2a6ce6a8cca6941ec8c32afceecfcba61a1f15b0164409b160",
    "src/robotarm/kinematics/__init__.py": "8af5ce84125e2f79044b727d3854f3a51b2ff84a92327b9cd8821b03e635c3f7",
    "src/robotarm/kinematics/model.py": "6a8d563ef7230e96ed517df15bd8ce59358417b1bbfe5653f7fdefff49e3e1f3",
    "src/robotarm/planning/__init__.py": "ab7934d1672e5422fcff5aec0c83b984bb8945bc5726623b535239ab839bda74",
    "src/robotarm/planning/trajectories.py": "986cd32bf077d8deba937a2cbbc77f266da6044c9a84b1e53d278e8e6d64642c",
    "src/robotarm/simulation/__init__.py": "49bdb29c40b42fb72a486c244a0d7a0fb45a8c6be9d524e043b2218e771cf248",
    "src/robotarm/simulation/tasks.py": "84078daff0f28ffb8348259e5d2717c069a272a2eec5d753fbad61014a9ef97e",
    "src/robotarm/visualization/__init__.py": "4a7ccc94c44c682fa4d86d475c1b887c949f07106e0a4754b40a8efcd8803b79",
    "src/robotarm/visualization/plots.py": "f21def4070657b6490a208d1dd7ce6764bc7d419222e1b8427a5da1a2d4bbb8b",
    "tests/test_cad.py": "c800a999a61ff3ea0a02472802f8badda1d5833b81a32aafaab6eaa605022bdc",
    "tests/test_config.py": "3104f66c14a44c61bf4a7f4f33bf6d8724d12aaebb7feb3e9b0984c8ce8f0e00",
    "tests/test_control.py": "cb5c1930e1ca74680868a9a7a9809952a934e7ad549e4353ed1c8c189f24df44",
    "tests/test_electronics.py": "8c10cbc3ece3680635fc3d64678ce752df115b48eaf9218911d8a5f0101d95a7",
    "tests/test_gripper.py": "e4a0a8214d711dcabcc66f2a088242d43adce3bb62621cb7c551754dfc959f59",
    "tests/test_kinematics.py": "35575c0b826f4b54be97a050e8eec206b73b9bc72e8b8fae35151bc7f0e438f2",
    "tests/test_mechanical.py": "2fc6c83978b9940772180b4d6056e9e4cb3eed4a71acc1950c88aefed1c162c7",
    "tests/test_planning.py": "29f4397aaeaa9513ff58b6644221cc0b483a2dab3645d23134c0fddd6d0e42e4",
    "tests/test_validation.py": "ec793f4e34ecd7357e5cd57473af03c4ec47705a48958296b07c71a3817bbe83"
  },
  "test_totals": {
    "tests": 91,
    "failures": 0,
    "errors": 0,
    "skipped": 0
  },
  "configuration_sha256": "fde183861589ceaa492879da6e6114c80fdd659dcff6adcf46fc734b3a50934f"
}