|
| 1 | +# HRC Software Onboarding — Fall 2026 |
| 2 | + |
| 3 | +**Purdue Humanoid Robotics Club · software team** |
| 4 | + |
| 5 | +You are going to build the exact pipeline the club |
| 6 | +uses to make NEMO walk: a MuJoCo robot with a PD controller, a vectorized |
| 7 | +JAX/MJX environment, a Brax PPO training run, an exported numpy policy, and ROS 2 |
| 8 | +nodes running that policy against a simulator through the same interfaces the |
| 9 | +real hardware uses. The robot is a 12-DoF quadruped called **Pup**. By the end |
| 10 | +you will have written a piece of every stage yourself, and you will have a |
| 11 | +walking robot to show for it. |
| 12 | + |
| 13 | + |
| 14 | + |
| 15 | +## The pipeline |
| 16 | + |
| 17 | +```mermaid |
| 18 | +flowchart LR |
| 19 | + S1["<b>Stage 1</b><br/>MuJoCo + PD<br/><i>mujoco, numpy</i>"] |
| 20 | + S2["<b>Stage 2</b><br/>JAX for robotics<br/><i>jax</i>"] |
| 21 | + S3["<b>Stage 3</b><br/>MJX environment<br/><i>mjx, playground</i>"] |
| 22 | + S4["<b>Stage 4</b><br/>Brax PPO + export<br/><i>brax, colab</i>"] |
| 23 | + S5["<b>Stage 5</b><br/>ROS 2 sim2sim<br/><i>ros 2, docker</i>"] |
| 24 | + S1 --> S2 --> S3 --> S4 --> S5 |
| 25 | + S1 -. "same PD equation" .-> S5 |
| 26 | + S3 -. "same 45-dim observation" .-> S5 |
| 27 | +``` |
| 28 | + |
| 29 | +| Stage | Doc | You write | Time | |
| 30 | +|---|---|---|---| |
| 31 | +| 0 | [Setup](docs/00_setup.md) | — | 0.5–1 h | |
| 32 | +| 1 | [MuJoCo and the PD controller](docs/01_mujoco_and_pd.md) | `PDController`, `stand_up`, gain tuning | 2 h | |
| 33 | +| 2 | [JAX for robotics](docs/02_jax_for_robotics.md) | three JAX exercises, quaternion maths | 1.5 h | |
| 34 | +| 3 | [The MJX environment](docs/03_mjx_environment.md) | observation, termination, commands, `step`, three reward terms | 4 h | |
| 35 | +| 4 | [Training with Brax PPO](docs/04_training_with_brax.md) | the training wiring, `export_policy`, `NumpyPolicy` | 2.5 h | |
| 36 | +| 5 | [ROS 2 sim2sim](docs/05_ros2_sim2sim.md) | `policy_node`, the launch file | 3 h | |
| 37 | + |
| 38 | +**Total: ~13.5 hours of hands-on work.** This is a generous estimate, and it very possible to finish in much less time. |
| 39 | + |
| 40 | +Also useful: [glossary](docs/glossary.md) · |
| 41 | +[FAQ and troubleshooting](docs/faq_and_troubleshooting.md) · |
| 42 | +[reading packet](docs/reading_packet.md) |
| 43 | + |
| 44 | +## Start here |
| 45 | + |
| 46 | +```bash |
| 47 | +# 1. Click "Use this template" on GitHub, then: |
| 48 | +git clone https://github.com/<your-username>/onboarding-fall26.git |
| 49 | +cd onboarding-fall26 |
| 50 | + |
| 51 | +# 2. Install |
| 52 | +curl -LsSf https://astral.sh/uv/install.sh | sh # if you don't have uv |
| 53 | +uv python install 3.11 |
| 54 | +uv sync |
| 55 | + |
| 56 | +# 3. Check |
| 57 | +uv run python scripts/check_setup.py |
| 58 | +uv run python scripts/progress.py |
| 59 | +``` |
| 60 | + |
| 61 | +Then open [`docs/00_setup.md`](docs/00_setup.md). |
| 62 | + |
| 63 | +## Experience assumptions |
| 64 | + |
| 65 | +We assume you can program in Python, use `git`, and have seen `numpy` arrays |
| 66 | +before. We assume **no** background in robot control, reinforcement learning, |
| 67 | +JAX, or ROS 2 — every one of those is taught here from zero. |
| 68 | + |
| 69 | +If you have never used the command line for anything beyond `git commit`, this |
| 70 | +will be hard but not impossible; budget extra time for Stage 0 and Stage 5, and |
| 71 | +ask in Discord early rather than late. |
| 72 | + |
| 73 | +## System requirements |
| 74 | + |
| 75 | +| | Minimum | Notes | |
| 76 | +|---|---|---| |
| 77 | +| OS | Linux, macOS, or Windows 11 + WSL2 | Linux native is the smoothest | |
| 78 | +| Python | 3.11 (3.12 works) | not 3.13 — no `jaxlib` wheel | |
| 79 | +| RAM | 8 GB | 16 GB is more comfortable | |
| 80 | +| Disk | ~6 GB | ~2 GB of that is the ROS 2 Docker image | |
| 81 | +| GPU | not required | Stage 4 uses a free Colab T4; everything else is CPU | |
| 82 | +| Docker | required for Stage 5 | or a native ROS 2 Jazzy install | |
| 83 | + |
| 84 | +Stages 1–3 and 5 run on any laptop. Stage 4 is the only one that wants a GPU, |
| 85 | +and there is a Colab notebook for it. |
| 86 | + |
| 87 | + |
| 88 | +## Tests and markers |
| 89 | + |
| 90 | +Your progress bar is: |
| 91 | + |
| 92 | +```bash |
| 93 | +uv run python scripts/progress.py # per-stage checklist |
| 94 | +uv run python scripts/progress.py --slow # also runs the PPO smoke test |
| 95 | +``` |
| 96 | + |
| 97 | +Tests report **▷ NOT STARTED** (the function still raises `NotImplementedError`), |
| 98 | +**✗ FAILED** (you wrote something and it's wrong), or **✓ PASSED**. |
| 99 | + |
| 100 | +| Marker | Needs | Runs by default? | Command | What it covers | |
| 101 | +|---|---|---|---|---| |
| 102 | +| *(none)* | CPU only | yes | `pytest` | Stages 1–3 and the Stage 4 export equivalence check | |
| 103 | +| `slow` | CPU, under a minute | yes | `pytest -m slow` | the Stage 4 `cpu_smoke` PPO run, end to end | |
| 104 | +| `gpu` | an NVIDIA GPU | auto-skipped without one | `pytest -m gpu` | JAX really is on the GPU; vmapped env throughput | |
| 105 | +| `ros` | the ROS 2 container | auto-skipped outside it | `pytest -m ros` inside the container | `policy_node`'s observation, ordering, and 50 Hz publish | |
| 106 | + |
| 107 | +Stage 5 as a whole is checked by `tests/test_05_ros2_smoke.sh`, which runs the |
| 108 | +`ros` tests and then launches the real stack. It runs inside the container: |
| 109 | + |
| 110 | +```bash |
| 111 | +docker compose -f docker/compose.yaml run --rm ros2 /ws/tests/test_05_ros2_smoke.sh |
| 112 | +``` |
| 113 | + |
| 114 | +The default CPU suite finishes in well under ten minutes. |
| 115 | + |
| 116 | +## Submission |
| 117 | + |
| 118 | +1. Commit your work, plus a `results/` directory containing your learning-curve |
| 119 | + PNG, `eval_training.json`, `eval_sim2sim.json`, and your GIFs. |
| 120 | +2. Fill in [`SUBMISSION.md`](SUBMISSION.md) — the stage checklist, your pasted |
| 121 | + `scripts/progress.py` output, your eval numbers, any escape hatches you used, |
| 122 | + the Stage 5 reflection paragraph, and what was hardest. |
| 123 | +3. Push to your own `onboarding-fall26` repository. |
| 124 | +4. **DM the software lead (Henry Tsay) on Discord once you are done or show it at a meeting.** |
0 commit comments