Repository navigation
fix(dual-franka): align RLinf v0.4 deployment and control diagnostics (v0.1) - #262
NewYork424 wants to merge 29 commits into
Conversation
| status = model.status(timeout_s=10) | ||
| expected_steps = int(status["config"]["openpi"]["action_chunk"]) | ||
| if expected_steps <= 0: | ||
| raise ValueError("expected action steps must be positive") |
There was a problem hiding this comment.
the default now requires vla.status, but both docs and tests' README.md still describe a fixed 20-step default
| def build_parser(): | ||
| parser = argparse.ArgumentParser(description=__doc__) | ||
| parser.add_argument( | ||
| "--skill", choices=["vla_full_rollout"], default="vla_full_rollout" |
There was a problem hiding this comment.
will "--skill" change execution? Do we need it?
| from robots.dual_franka.tasks import get_dual_franka_task | ||
| from rpent.robots.components.pi05_vla_client import Pi05VLAClient | ||
| from rpent.utils.rpc import make_rpc_client | ||
| from tests.e2e_tests.dual_franka.dual_franka_vla import ( |
There was a problem hiding this comment.
tests/README.md places real-robot diagnostics under tests/e2e_tests. could we put this script alongside dual_franka_vla.py, whose helpers it already uses?
|
|
||
| @pytest.mark.parametrize("embodiment", ["libero", "dual_franka", "robodojo", "yam"]) | ||
| def test_cli_forwards_model_configuration(monkeypatch, embodiment): | ||
| @pytest.mark.parametrize("repo_id", [None, "test/dataset"]) |
There was a problem hiding this comment.
what's this test change for?
| delta_xyz: Annotated[list[float], Field(min_length=3, max_length=3)], | ||
| ) -> ToolResult: | ||
| """Move one Franka TCP by a bounded world-frame xyz delta in meters. | ||
| """Move one Franka TCP by a bounded world-frame xyz delta in meters. Completion indicates execution ended; target_reached and final_error_m report accuracy, not a mandatory retry condition. |
There was a problem hiding this comment.
what's the added comment means?
| { | ||
| "name": "move_delta", | ||
| "description": "Move one Franka TCP by a bounded world-frame xyz delta in meters.", | ||
| "description": "Move one Franka TCP by a bounded world-frame xyz delta in meters. Completion indicates execution ended; target_reached and final_error_m report accuracy, not a mandatory retry condition.", |
There was a problem hiding this comment.
strange description for mcp
| return { | ||
| "ok": error <= self.controller["move_tolerance_m"], | ||
| # Completion describes execution, not target accuracy. | ||
| "ok": True, |
|
Could we tidy up the dual-Franka test directories and file names? They seem a bit scattered and inconsistent. |
| drift_limit = self.controller["rotate_max_drift_m"] | ||
| max_position_error = 0.0 | ||
| exit_reason = "iteration_limit" | ||
| integral = np.zeros(3, dtype=np.float64) |
There was a problem hiding this comment.
could you explain why holding the initial position with the RLinf controller is not enough here? the position and rotation integral corrections add quite a bit of control logic. Can we simplify this while keeping the tracking fixes we actually need?
There was a problem hiding this comment.
Agreed. Removed the position and rotation integral corrections and settling logic. Rotation now holds the initial TCP position and sends bounded orientation references through RLinf’s existing action path, with drift protection retained.
| } | ||
| ) | ||
| controller = flatten_control(CONTROL) | ||
| rotation_hold = _require_mapping(raw.get("rotation_hold", {}), "rotation_hold") |
There was a problem hiding this comment.
Rotation compensation is enabled by default, but rotation_hold is missing from the example config and deployment docs. could we document the settings, how to disable compensation, and the setup used to validate the defaults?
There was a problem hiding this comment.
Integral compensation and its configuration options have been removed. The remaining rotation_hold.max_drift_m guard is documented in the example config and both deployment guides, with a default of 0.03 m. This update includes offline validation, without claiming new real-robot validation of that threshold.
|
I’ve reviewed the implementation. This PR aligns the integration with RLinf, fixes the previously discussed bugs in rotation and other primitives, and adds manual VLA debugging support. These changes have practical value, and I support the functional direction. However, formatting issues still need to be addressed. |
|
|
||
| RPent 会将该机器人配置转换成内部双节点 RLinf cluster 和环境对象。如需使用其他文件,请传入 ``--robot-config /path/to/robot_config.yaml``。 | ||
|
|
||
| ``rotation_hold.max_drift_m`` 默认为 ``0.03`` m。``rotate_delta`` 中,TCP 相对起始位置的漂移超过该值时,会通过现有 RPC 错误通道中止旋转。 |
There was a problem hiding this comment.
add a simple description of the problem solved by this.
| # See the License for the specific language governing permissions and | ||
| # limitations under the License. | ||
|
|
||
| """Manual-only continuous VLA rollout; never registered with the agent toolkit.""" |
There was a problem hiding this comment.
is this file with vla-only? "vla-only" is better than "full-vla"
Description
Align dual-Franka deployment with official RLinf v0.4 robot interfaces while retaining full-resolution observations and the existing primitive result contracts.
move_deltato correct residual position drift beyond the existing 0.006 m position tolerance. Drift aboverotation_hold.max_drift_m(default: 0.10 m) aborts the call before translation compensation. Forward optionalrobot.compliancesettings to the official backend.tests/e2e_tests/dual_franka/dual_franka_vla_only.py, reusing the existing diagnostic validators. It connects to existing services without resetting or recovering the robot and checks Ctrl-C/STOP between individual action RPCs. A read-onlyvla.statusreturns only the prediction chunk length required by this runner.The existing
dual_franka_vla.pyconsole retains its 20-step validation default and explicit--expected-action-stepsoverride. Motion results retain their existing fields; rotation reports success only when compensation, if needed, succeeds and the final position and angle meet their tolerances. During posture recovery, ordinary rotation accuracy remains diagnostic; protective drift errors interrupt the recovery.Validation
lerobot.datasetsdependency, and one depends on this machine's Codex tool list.--deduplicateoption used by--all-files.Both English and Chinese Sphinx builds passed with warnings treated as errors. The example configuration and both deployment guides describe possible drift sources and distinguish the 0.10 m abort threshold from the 0.006 m compensation tolerance. This update does not claim new real-robot validation of its default. A stop request takes effect after any in-flight RPC returns; it is not a hardware emergency stop.
Consolidates #253 and #254, and replaces #252. Earlier discussion remains in #252.