dimensionalOS / dimensionalOS/dimos

Track structured whole-body motor command gains

Open
#2,436 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

control
Dominant language
Python
Stars
4.5k
Forks
808
Avg merge
3d 5h
Merged PRs (30d)
233

Description

Problem

The G1 GR00T WBC path passes per-joint kp, kd, and tau together in several places, but the contract is still represented as parallel list[float] values. That makes call sites noisy and makes it easier for gains/feedforward arrays to drift out of sync with the joint order.

This came up in review on #2300: the refactor should not block that PR, but should be tracked separately.

Suggested Direction

Introduce a structured whole-body command value/message for per-joint motor control, similar in spirit to existing structured geometry messages like Twist or Pose.

Likely surfaces to evaluate:

  • dimos.hardware.whole_body.spec.MotorCommand
  • dimos.msgs.sensor_msgs.MotorCommandArray
  • transport serialization in dimos.hardware.whole_body.transport.adapter
  • sim SHM write/read APIs that currently pass q, kp, kd, and tau arrays separately
  • whole-body adapters such as G1 real hardware and MuJoCo simulation

Acceptance Criteria

  • The public command contract makes q, dq, kp, kd, and tau grouping explicit.
  • Per-joint arrays are validated together and cannot silently have inconsistent lengths.
  • Existing G1 WBC behavior is preserved.
  • Tests cover serialization/transport boundaries and at least one whole-body adapter call path.

Synced from DIM-995 by summer

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reading dimos.hardware.whole_body.spec.MotorCommand and dimos.msgs.sensor_msgs.MotorCommandArray, then trace serialization in dimos.hardware.whole_body.transport.adapter. Compare the sim SHM APIs and G1 real-hardware and MuJoCo adapters to identify every separate q, dq, kp, kd, and tau path. Done means grouped validation, preserved G1 behavior, and tests at transport boundaries plus one adapter call path.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
embedded-iot, robotics
Issue type
Refactor
Difficulty
5/5
Estimated time
Over a week
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.