Skip to content

V0.3.0

Choose a tag to compare

@yuecideng yuecideng released this 24 Sep 15:53
99b4b8e

EmbodiChain v0.3.0 Release Notes

EmbodiChain v0.3.0 is a major platform release centered on the introduction of a first-class Newton physics backend and the integration of DexUni, DexForce's unified coupled solver for embodied AI. Newton now runs through DexSim behind EmbodiChain's shared scene, object, sensor, and environment APIs, while DexUni provides the main GPU path for articulated robots interacting with cloth and volume soft bodies. The release also connects declarative Task Program authoring, verified Atomic Skill execution, generative scene construction, batched motion planning, stronger IK and RL tooling, reproducible data generation, and source-backed architecture documentation.

Highlights

  • Introduced a preview of the Embodied Task Program DSL for declarative, reusable task flows that compile Semantic Calls into executable Atomic Skills by @yuecideng in #487, #492, #495, #496, #497, #498, #500, and #563.
  • Added the Newton physics backend and DexUni coupled solver support for articulated robots interacting with cloth and volume soft bodies by @yuecideng in #276.
  • Added batched trapezoidal and jerk-limited Double-S joint trajectory planning, with MotionGenerator integration by @chase6305 in #566 and @yuecideng in #615.
  • Added geometric FEP IK for Franka-compatible arms on CPU and CUDA, then made redundancy-search FEP the default Franka IK preset by @chase6305 in #662 and @yuecideng in #687.
  • Added shared task catalogs and a static HTML gallery for discovering runnable deployments by @yuecideng in #664.
  • Added per-point manipulability visualization, manipulability-guided coverage, and fixed-waypoint trajectory variants for broader motion diversity by @Yuan-Xinyi in #631, #643, and #651.
  • Added seven native locomotion RL tasks for ANYmal-C, G1, H1-2, Go1, Go2, MicroDuck, and Humanoid, with downloadable assets and separate default/Newton PPO configurations by @acrlw in #646.
  • Added a source-backed Architecture Explorer with a system overview, specialist views, relationship evidence, and revision-pinned source links by @yuecideng in #649.

Embodied Task Program (Preview)

Task intent → validated program → Semantic Calls → Atomic Skills → Gym rollout and recording. Task Program lets you describe what a robot should do with scene objects, while a trusted integration binds those names to a physical scene, an embodiment, and an execution policy. The current built-in calls are Pick, Place, and HandOver; bounded sequences, repeats, and parallel branches compose them into a task. Programs can be authored in YAML, JSON, or Python and are checked before live execution.

For the configuration-defined workflow, author task_program/program.yaml for the task flow, task_program/integration.yaml for scene bindings and semantic policies, and a runnable task.<embodiment>.yaml that selects them alongside the environment and robot. Try the included repeated Pick/Place deployment:

embodichain run-env \
  --gym_config embodichain_tasks/configs/tasks/manipulation/repeated_pick_place/task.ur5.yaml \
  --headless

This example uses projected effects for trajectory demonstrations; choose a verified execution policy and provide measured effect monitors when physical success must be established. See the Task Program overview, configuration tutorial, and example program.

Newton Physics Backend and DexUni Solver

The new physics: newton backend runs through DexSim while retaining EmbodiChain's scene and environment APIs. DexUni, developed by the DexForce Simulation Engine Team, is its coupled solver for scenes where articulated robots manipulate cloth or volume soft bodies. AutoSolver selects it for a finalized scene containing both an articulation and a supported deformable; it can also be selected explicitly with solver_cfg={"solver_type": "dexuni"}. DexUni currently requires CUDA and does not solve rigid–rigid or rigid–ground contacts on this path.

Read the Newton backend guide and DexUni Solver guide for configuration, examples, and the current capability limits.

Locomotion Policy Evaluation on Newton

Trained PPO policies for Unitree Go1, Go2, G1, H1-2, and MicroDuck are evaluated with the Newton physics backend and rendered with FastRT. The overlay displays policy and environment settings, velocity commands, and measured body-frame linear and yaw velocities.

Unitree locomotion: Go1 (top left), Go2 (top right), G1 (bottom left), and H1-2 (bottom right).

unitree-newton-2x2.mp4

MicroDuck locomotion: Newton policy evaluation with command and velocity telemetry.

microduck-newton.mp4

Batched Trapezoidal and Double-S Motion Planning

For each nonzero joint-path segment, the planner uses a shared scalar progress s(t) from 0 to 1 so all joints reach the waypoint together:

$$ q_i(t)=q_{i,0}+\Delta q_i,s(t),\qquad \bar v=\min_{\Delta q_i\ne0}\frac{v_{i,\max}}{|\Delta q_i|},\qquad \bar a=\min_{\Delta q_i\ne0}\frac{a_{i,\max}}{|\Delta q_i|}. $$

A rest-to-rest trapezoidal profile accelerates, cruises, then decelerates. For the unit-length scalar path, its peak speed and phase durations are:

$$ v_{\mathrm{peak}}=\min(\bar v,\sqrt{\bar a}),\qquad t_{\mathrm{acc}}=\frac{v_{\mathrm{peak}}}{\bar a},\qquad t_{\mathrm{cruise}}=\frac{1-v_{\mathrm{peak}}^2/\bar a}{v_{\mathrm{peak}}}. $$

When the move is too short to reach the velocity limit, t_cruise = 0 and the profile becomes triangular. Choose profile="double_s" for a seven-phase time law that also bounds jerk; the trapezoidal profile has discontinuous acceleration at phase boundaries. The planner returns batched positions, velocities, accelerations, and timing through MotionGenerator. See the TrapezoidalPlanner guide.

Geometric FEP IK for Franka

Franka Panda now uses FEPSolverCfg(redundancy_search=True) as its default IK preset. CPU and CUDA share one Warp implementation that reconstructs and validates screw-axis geometry and fixed transforms from the URDF. The solver can retain up to eight geometric branches and adaptively sample q7 with continuity, arm-angle, and joint-limit preferences. Set ik_solution_selection="nearest" for seed continuity or "manipulability" to rank valid candidates with the shared Yoshikawa metric; near-equal scores use weighted seed distance as a deterministic tie-break. The former PyTorch preset remains available through explicit solver configuration.

The new --solvers franka benchmark compares the default FEP preset with the former PyTorch preset on identical URDF, targets, seeds, limits, and device. On the published Ryzen 9 9950X / RTX 5090 run, both solvers achieved 100% success; warmed median whole-batch latency for the 64-target central workload was:

Device FEP search Former PyTorch Speedup
CPU 4.73 ms 701.72 ms 148.40×
CUDA 1.58 ms 264.07 ms 167.57×

For the same workload, mean translation error was 0.000072 mm with FEP versus 0.146476 mm with PyTorch on CPU, and 0.000070 mm versus 0.144063 mm on CUDA. These figures describe the scripted workloads on that machine and exclude solver construction and Warp compilation time.

The default-preset circle demo completed all 301 CPU targets with a maximum IK position error of 0.0002 mm and a maximum joint step of 0.0373 rad. Run the demo and comparison benchmark with:

python -m examples.sim.motion.solvers.fep_solver \
  --device cpu --radius 0.15 --headless --max-steps 301
python -m scripts.benchmark.robotics.kinematic_solver.run_benchmark \
  --solvers franka

See the FEP solver API reference, example source, solver demonstration, #662, and #687.

Task Catalog and Static Gallery

Task discovery is now simulator-independent. Each logical task can publish catalog.yaml metadata with named deployments, robot and backend choices, matching configuration files, README links, and policy resources. Use show-task to inspect a task before launch, filter the catalog by category, or export the same metadata as a static HTML gallery; catalog resources are packaged with the wheel.

embodichain show-task embodichain_tasks:repeated_pick_place
embodichain list-task \
  --config-root embodichain_tasks=embodichain_tasks/configs/tasks \
  --category manipulation --export-html task-gallery.html

See the task catalog guide and catalog source documentation.

Manipulability-Aware Workspace and Trajectory Variants

Workspace analysis makes per-point Yoshikawa scores inspectable: percentile clipping (default 2–98), optional log10 scaling, raw and clipped ranges, unreachable points kept as distinct grey crosses, and selected-point diagnostics with translational velocity ellipsoids. The same visualization is available through the renderer-free tutorial and analyze-workspace --vis-type manipulability, including native viewer and Viser paths.

Trajectory expansion now has a direct fixed-waypoint workflow. Call expand_trajectory_variants(..., count=N) to keep annotated waypoints, contact windows, and dwell durations exact while varying free motion through joint residuals, cubic-Hermite via points, null-space posture changes, bounded duration scales, and within-phase timing profiles. The Place tutorial exposes the same path through --trajectory_variants; the host still owns collision, dynamics, and task-success validation.

The optional manipulability factor complements those operators. It scores float64 Jacobians, groups candidates into reference-normalized bands, falls back to the nearest reachable band, and uses measured rollout observations—not planned estimates—to enforce per-band coverage quotas. In the GPU tutorial validation, six variants covered all three joint-path operators with 0.00e+00 rad maximum contact-phase deviation; the 100-variant figure run produced 100 distinct geometry families.

Joint trajectories Tool paths
Arm joints for 100 fixed-waypoint trajectory variants Tool paths for 100 fixed-waypoint trajectory variants

See the workspace visualization guide, trajectory variants guide, and trajectory expansion API. See #631, #643, and #651.

Architecture Explorer

Explore the system overview and specialist views, then select a module to inspect its responsibilities, relationships, documentation, and source evidence. This short GIF shows the interface in use. Open the Architecture Explorer to navigate it yourself.

Architecture Explorer demo: system overview, Task Program, and Simulation views

Breaking Changes

  • Renamed the Expert Program surface to Task Program and intentionally removed the legacy semantic-skills, expert-program, and intermediate skill import/configuration paths; migrate callers to embodichain.lab.task_program and program.yaml/integration.yaml by @yuecideng in #563.
  • Decoupled reusable task environments from embodiment-specific deployments; migrate env.<embodiment>.yaml files to task.<embodiment>.yaml and move physical/semantic bindings to their owning components by @yuecideng in #568.
  • Replaced implicit trajectory-error callbacks with typed tracking observations, metric bands, and immutable tracking results by @yuecideng in #501.
  • Made physics backend selection and simulation stepping explicit; callers must use the backend/prepare lifecycle and cannot rely on automatic physics mode by @yuecideng in #276 and #588.
  • Reorganized motion APIs and moved shared numerical computations under embodichain.compute; update imports to the new public paths by @yuecideng in #590 and #592.
  • Unified ONNX deployment dependencies under the policy-deploy extra; update deployment installs that selected the previous dependency groups by @acrlw in #624.

New Features

  • Added reusable physical-effect workflows, declarative placement relations, articulation affordances, Open Door/Hand Over/Pour primitives, and dynamic scene recovery by @yuecideng in #480 and #481, and @matafela in #509, #528, and #554.
  • Added remote articulation control in Gradio, native point-cloud visualization, DexSim Gizmo controllers, and DLSS configuration for window/offscreen rendering by @skywhite1024 in #552, and @yuecideng in #544, #431, and #366.
  • Added simulation-level Affordance sampling by @yuecideng in #644.
  • Added per-point Yoshikawa manipulability analysis by @Yuan-Xinyi in #614.
  • Added geometric FEP IK for Franka-compatible arms on CPU and CUDA, including geometric branch reconstruction, redundancy search, and nearest/manipulability selection by @chase6305 in #662.
  • Added shared task catalogs and a static HTML gallery with show-task, category filtering, deployment metadata, and packageable task resources by @yuecideng in #664.
  • Added per-point manipulability visualization with percentile/log normalization, unreachable-point rendering, and translational inspection ellipsoids by @Yuan-Xinyi in #631.
  • Added fixed-waypoint trajectory variants spanning joint residuals, via points, null-space posture changes, approach perturbations, duration scales, and timing profiles by @Yuan-Xinyi in #651.
  • Added rigidized-articulation semantic bindings and a configured Task Program that picks and places a locked-joint articulated Rubik's Cube by @Yuan-Xinyi in #632.
  • Added eval-policy --pretrained to download a tested policy bundle, matching configurations, and robot assets before running the native evaluator by @acrlw in #678.
  • Added the Aloha Mini 2 Pro robot configuration, downloadable asset, five control parts, documentation, and construction coverage by @matafela in #683.

Improvements

  • Added closed-loop atomic-action execution, segment-aware demonstrations, adaptive settling, explicit timing, planner benchmarks, and planner-selectable tutorials by @yuecideng in #449, #460, #470, #525, #520, and #616.
  • Added official-task organization by domain and identity, unified CLI adapters, richer task/progress output, and shared Expert Program runtime assembly by @yuecideng in #550, #565, #569, #598, and #551.
  • Added K=1–5 NMG benchmarking and differentiable rollout support by @yangchen73 in #623.
  • Made the atomic-action benchmark suite runnable by @Yuan-Xinyi in #620.
  • Batched pose NMS tiles and skipped suppressed references by @Yuan-Xinyi in #617.
  • Added impact-based partial CI test selection by @yuecideng in #622.
  • Added manipulability-guided residual proposals and per-band coverage quotas for trajectory augmentation by @Yuan-Xinyi in #643.
  • Updated the microwave asset and synchronized the Open Door, Twist, and Press examples and benchmarks by @matafela in #668.
  • Added optional X-Y target tracking, per-robot camera presets, and a tracking/free-view toggle to native locomotion policy evaluation by @acrlw in #674.
  • Made FEPSolverCfg(redundancy_search=True) the default Franka Panda IK preset and added a comparable CPU/CUDA benchmark against the former PyTorch preset by @yuecideng in #687.

Bug Fixes

  • Fixed trajectory velocity targets, tutorial startup/shutdown and obstacle recovery, dataset saves, solver warnings, and rendering/progress regressions by @yuecideng in #595, #618, #529, #561, #572, #511, and #587.
  • Fixed Gym pose/qpos utility failures, grasp backend selection, cuRobo sphere fitting, and handover execution by @Anai-Guo in #596 and #597, and @matafela in #468, #580, and #602.
  • Fixed RL joint isolation and exposed batched simulation controls by @acrlw in #635.
  • Adapted mass properties to matrix tensors and batched Newton reads by @acrlw in #639.
  • Fixed motion strategy dispatch by @yuecideng in #640.
  • Fixed USD articulation import by @matafela in #636.
  • Fixed UR solver memory allocation by @matafela in #604.
  • Fixed UR assets by @matafela in #626.
  • Fixed joint-control previews for the DexSim joint-description API by @skywhite1024 in #630.
  • Restored configured mesh collision-decomposition method propagation through Spawn descriptors by @yuecideng in #656.
  • Shared render-state publication across windows, cameras, recording, and Viser while eliminating unnecessary publication for headless state-only RL by @acrlw in #667.

Documentation

  • Expanded interactive simulation, motion-planning, Task Program, Scene Engine, backend, API-coverage, and contribution-tooling documentation by @yuecideng in #508, #524, #530, #512, and #593.
  • Added source-backed architecture documentation by @yuecideng in #649.
  • Streamlined agent-context maintenance and prevented PR-driven content growth by @yuecideng in #648.
  • Defined the atomic-action benchmark measurement standard, including staged success, physical tolerances, robustness, and adaptability reporting by @Yuan-Xinyi in #641.
  • Linked the interactive architecture visualization from the README by @yuecideng in #661.
  • Documented the opt-in workflow for publishing review-pr findings to pull requests by @yuecideng in #671.
  • Added a delegated expert-review protocol with stable roles, bounded subagent tasks, lead verification, deduplication, and explicit fallback reporting by @yuecideng in #677.

All Commits Since v0.2.4

The categorized change list below is generated from the GitHub compare range and includes the complete merged-PR history on main since v0.2.4.

What's Changed

🚀 New Features

  • Add trajectory variants between fixed waypoints by @Yuan-Xinyi in #651
  • Support PickUp on an articulated Rubik's cube asset by @Yuan-Xinyi in #632
  • Add automatic download and evaluation of pretrained policies by @acrlw in #678
  • Add Aloha Mini 2 Pro by @matafela in #683
  • Add geometric FEP IK for Franka on CPU and CUDA by @chase6305 in #662
  • Add shared task catalog and static gallery by @yuecideng in #664
  • Visualize per-point manipulability with inspection ellipsoids by @Yuan-Xinyi in #631

🐛 Bug Fixes

  • Share render-state publication across active visual consumers by @acrlw in #667
  • Fix stale GitHub Pages release deployments by @yuecideng in #464
  • Preserve keyframes during trajectory interpolation by @yuecideng in #465
  • Fix Viser rendering for simulation axis markers by @yuecideng in #511
  • Fix interrupted tutorial shutdown by @wu-simulab in #529
  • Fix Python 3.10 unified CLI imports by @skywhite1024 in #560
  • Fix partial vector LeRobot dataset saves by @yuecideng in #561
  • Fix UR tutorial solver limit warnings by @yuecideng in #572
  • Add background texture material asset by @yuecideng in #583
  • Fix run task segment progress bars by @yuecideng in #587
  • Support post-release versions and release branch CI by @yuecideng in #609
  • Fix velocity targets for timed motion trajectories by @yuecideng in #595
  • Fix atomic tutorial startup and obstacle recovery by @yuecideng in #618
  • Fix joint control preview for DexSim get_joint_desc API by @skywhite1024 in #630
  • Improve CI impact coverage for tutorial scripts by @yuecideng in #633
  • Fix motion strategy dispatch and simplify motion documentation by @yuecideng in #640
  • Make the atomic-action benchmark suite runnable by @Yuan-Xinyi in #620
  • Skip Pages deployment when docs artifact is absent by @yuecideng in #650
  • fix(sim): Adapt mass properties to mat33 and batch Newton reads by @acrlw in #639
  • Fix RL joint isolation and expose batched simulation controls by @acrlw in #635
  • Fix VisACD selection propagation through Spawn by @yuecideng in #656
  • Fix Humanoid policy action dimensions by @acrlw in #658

🔧 Improvements

  • Use FEP as the default Franka IK solver by @yuecideng in #687
  • Add X-Y camera tracking to native locomotion evaluation by @acrlw in #674
  • Use manipulability to diversify trajectory augmentation by @Yuan-Xinyi in #643
  • Update microwave asset by @matafela in #668
  • Add extensible free-space motion benchmark by @yuecideng in #451
  • Show all sensor and record camera previews in Viser by @yuecideng in #467
  • Add Viser frame controls for trajectory replay by @yuecideng in #466
  • Add adaptive dynamic object settling by @yuecideng in #470
  • Derive control timing from simulation cadence by @yuecideng in #472
  • Refactor atomic actions for typed planning and recovery by @yuecideng in #448
  • Add segment-aware demonstration episodes by @yuecideng in #460
  • Add closed-loop atomic-action execution runner by @yuecideng in #449
  • Add Open Drawer task and passive articulation defaults by @yuecideng in #473
  • Add dynamic scene recovery for atomic actions by @yuecideng in #450
  • Refine atomic action planning architecture by @yuecideng in #475
  • Add Franka drawer manipulation tutorial by @yuecideng in #513
  • Simplify atomic action planning contracts by @yuecideng in #517
  • feat(sim): add declarative scene and robot skill foundation by @yuecideng in #487
  • Support Franka in atomic-action tutorials by @yuecideng in #519
  • Simplify declarative skill foundation code by @yuecideng in #523
  • Add codebase navigation to project context skill by @yuecideng in #526
  • Require explicit timing for atomic action trajectories by @yuecideng in #525
  • refactor(atomic-actions): generalize runtime endpoints by @yuecideng in #488
  • Improve log output and environment initialization summary by @yuecideng in #527
  • Add public API documentation coverage workflow by @yuecideng in #530
  • feat(sim): add semantic skill IR and compiler by @yuecideng in #492
  • feat(atomic-actions): add verified effect-aware runtime by @yuecideng in #495
  • Add native point-cloud visualization by @yuecideng in #544
  • feat(sim): add semantic runtime effects and parallelism by @yuecideng in #496
  • feat(gym): add declarative expert program runtime by @yuecideng in #497
  • feat(agents): add strict expert program frontend by @yuecideng in #498
  • feat(tasks): add declarative task slices and rollout validation by @yuecideng in #500
  • refactor(atomic-actions): add typed tracking contracts by @yuecideng in #501
  • feat(expert-program): add pre-simulation runtime catalog by @yuecideng in #504
  • feat(skills): add physical-effect workflows and recovery by @yuecideng in #480
  • feat(skills): add declarative placement relations by @yuecideng in #481
  • feat(expert-program): validate parallel joint segments by @yuecideng in #482
  • Unify Expert Program runtime integration by @yuecideng in #551
  • Add remote Articulation backend to Gradio by @skywhite1024 in #552
  • Refactor official tasks around domain and task identity by @yuecideng in #550
  • Simplify atomic action scene context setup by @yuecideng in #558
  • Organize unified CLI command adapters by @yuecideng in #565
  • Introduce the Embodied Task Program DSL by @yuecideng in #563
  • Decouple task environments from embodiment deployments by @yuecideng in #568
  • Improve list-task output details by @yuecideng in #569
  • Add EmbodiChain pull request review skill by @yuecideng in #574
  • Add outcome-aware dataset fragments by @yuecideng in #547
  • feat(gym): make event randomization reproducible by @yuecideng in #581
  • Use CobotMagic Arm V4 assets by @yuecideng in #582
  • Add VisACD defaults for DexSim 0.5 by @yuecideng in #586
  • Remove automatic physics mode and require explicit stepping by @yuecideng in #588
  • Integrate dexsim gizmo controllers by @yuecideng in #431
  • Organize shared computations under compute by @yuecideng in #592
  • docs(agent): improve context coverage and progressive routing by @yuecideng in #593
  • Refactor sim motion packages and add trajectory augmentation core by @yuecideng in #590
  • Configure DLSS for window and offscreen rendering by @yuecideng in #366
  • Improve run-task progress output by @yuecideng in #598
  • Use joint-range midpoint as default IK seed by @Yuan-Xinyi in #600
  • Add database-driven IK seed selection sampler by @Yuan-Xinyi in #599
  • Add planner-oriented atomic skill benchmark by @yuecideng in #520
  • Improve PPO training stability by @acrlw in #612
  • Integrate TrapezoidalPlanner with MotionGenerator by @yuecideng in #615
  • Add planner selection to atomic-action tutorials by @yuecideng in #616
  • Improve workspace batching and analytic IK buffer reuse by @yuecideng in #606
  • Batch pose NMS tiles and skip suppressed references by @Yuan-Xinyi in #617
  • Add impact-based partial CI test selection by @yuecideng in #622
  • Add per-point Yoshikawa manipulability to workspace analysis by @Yuan-Xinyi in #614
  • Streamline agent context and prevent PR-driven content growth by @yuecideng in #648
  • Add simulation-level Affordance sampling by @yuecideng in #644
  • Add a source-backed architecture explorer to the documentation by @yuecideng in #649
  • Add locomotion RL tasks with downloadable robot assets by @acrlw in #646

⚠️ Breaking Changes

  • Unify ONNX deployment dependencies under policy-deploy by @acrlw in #624

📚 Documentation

  • Add delegated expert review protocol by @yuecideng in #677
  • Define the atomic-action benchmark measurement standard by @Yuan-Xinyi in #641
  • docs(rl): document EmbodiChain and RLinf integration by @yuecideng in #621
  • Link interactive architecture visualization by @yuecideng in #661
  • Add locomotion task catalogs and policy evaluation guidance by @acrlw in #663
  • Document opt-in PR review publication by @yuecideng in #671
  • Update roadmap across rendering, physics, data, and training by @yuecideng in #469
  • Add stacked pull request workflow by @yuecideng in #476
  • Reorganize interactive simulation documentation by @yuecideng in #508
  • Document Codex and Claude Code contribution support by @yuecideng in #512
  • Remove private index from cuRobo install commands by @yuecideng in #518
  • docs: support NVIDIA 595 and refresh documentation by @yuecideng in #524
  • test(tasks): gate cube physical recovery by @yuecideng in #483
  • Add cross-disciplinary reviewer identities by @yuecideng in #575

Other Changes

  • Fixed coordinate placement by @matafela in #514

  • Added axis alignment, pour, and hand-over actions by @matafela in #528

  • Enhanced Pink IK solver robustness and null-space posture control by @chase6305 in #549

  • Added the open-door action by @matafela in #554

  • Removed the lower-x position constraint from axis alignment by @matafela in #557

  • Enhanced atomic actions by @matafela in #559

  • Added automatic articulation-action axis generation by @matafela in #573

  • Fixed grasp-pose selection for the antipodal backend by @matafela in #580

  • Fixed is_pose_flip raising UnboundLocalError on every call by @Anai-Guo in #597

  • Fixed hand-over atomic-action execution by @matafela in #602

  • Removed the DexSim get_resources_data_path dependency by @matafela in #605

  • Added the Scene Engine and Gradio workspace by @XuanchaoPENG in #457

  • Added text-based Scene Engine editing by @MuziWong in #545

  • Improved SRS IK arm-angle search and CPU/CUDA parity by @chase6305 in #548

  • Added hierarchical image-conditioned scene generation with articulated objects by @MuziWong in #562

  • Bumped the package version to v0.3.0 by @yuecideng in #688

New Contributors

Full Changelog: v0.2.4...v0.3.0