Duck Duck Goalie
Copyright 2026 Andrew Alexander

This product includes software developed by third parties, listed below. Every
item is used under its stated license; where a license is unclear that is said
plainly rather than assumed.

================================================================================
1. Double D  -  Soren Larson
================================================================================

Duck Duck Goalie is a derivative work of "Double D", an entry to the HIM Arena
Microduck Sports Challenge by Soren Larson, published at:

    https://arena.himrobotics.com/uploads/source_04ad83f49174a90948c4

Licensed under the Apache License, Version 2.0.

Files taken from Double D and used unmodified or nearly so:

    double_d/skills.py          ONNX skill bank and Pollen's 61-D obs contract
    double_d/env.py             single-robot environment and scoring
    double_d/policy.py          striker state machine (see modifications below)
    double_d/render.py          offscreen video capture with phase overlay
    model/scene_double_d.xml    the original single-robot scene
    run.py, run.sh              single-robot evaluation harness
    tests/test_double_d.py      the original test suite

Modifications made to Double D's files:

    double_d/policy.py          SHOT_MARGIN_Y, RETRY_UNTIL_S and the goal
                                celebration were made overridable from the
                                environment so thresholds can be swept without
                                editing the file. Default values are unchanged,
                                so the original behaviour is preserved exactly.

The calibration measurements Double D published in its README - the walking
dead zone, the left/right turn asymmetry, the kick contact window and the
14.5 degree kick deviation - were relied on directly and saved a great deal of
measurement work. They are Soren Larson's findings, not ours.

New work in this project (Apache-2.0, Copyright 2026 Andrew Alexander):

    model/arena_duel.xml        two-robot arena
    double_d/duel_model.py      MjSpec assembly of two prefixed Microducks
    double_d/duel_env.py        duel environment, contact-based SAVE/BLOCKED
                                scoring, keeper instrumentation
    double_d/keeper.py          goalkeeper policies and baselines
    run_duel.py                 duel evaluation and video harness
    sweep_margin.ps1            shot-gate parameter sweep

================================================================================
2. Microduck robot model (MJCF + meshes)  -  Pollen Robotics
================================================================================

Source: https://github.com/pollen-robotics/microduck_rl
        src/mjlab_microduck/robot/microduck/robot_groundcontact.xml,
        ball.xml, and the 38 STL meshes under model/assets/.

The MJCF export and code are Apache-2.0 (see model/LICENSE-pollen-microduck_rl.txt).
The upstream repository states that the 3D models are licensed Creative Commons
BY-SA-NC. The meshes are included here only so that the simulation reproduces.

NOTE ON THE NC TERM: this project is an entry to a challenge that carries a cash
prize, and the archive is published for public download. Whether that is
compatible with a NonCommercial term is not obvious, and we are not asserting
that it is. Permission has been sought from Pollen Robotics; if they ask for
different terms, or for removal, we will comply immediately.

================================================================================
3. Pretrained skill networks (ONNX)  -  Pollen Robotics
================================================================================

Files: policies/BEST_alpha_walking.onnx, BEST_alpha_stand.onnx,
       ball_kick_right.onnx, ball_kick_left.onnx, roulade.onnx

Source: Hugging Face Space pollen-robotics/microduck-simulator (app/public/policies/),
        which credits pollen-robotics/microduck and pollen-robotics/microduck_rl
        as the origin. Trained by Pollen Robotics with PPO in mjlab.

LICENSE STATUS: UNRESOLVED. The Space carries no license file. The training code
and export pipeline are Apache-2.0, but that does not by itself license the
trained weights. These networks are redistributed here in good faith, unmodified,
for inference only, with Pollen Robotics credited as their author, because the
simulation cannot reproduce without them. We make no claim to own them. If Pollen
Robotics asks for different terms, or for removal, we will comply immediately.

No network in this project was trained or fine-tuned by us. All learned behaviour
- walking, standing, kicking, the forward roll - is Pollen's work. Our
contribution is the sport, the two-robot environment, the scoring, the keeper's
scripted play-calling and the evaluation.

================================================================================
4. Software dependencies
================================================================================

MuJoCo (Apache-2.0), onnxruntime (MIT), NumPy (BSD-3), imageio and imageio-ffmpeg
(BSD-2), Pillow (MIT-CMU), pytest (MIT). ffmpeg is used via imageio-ffmpeg's
bundled binary.
