Skip to content

COMPAS FAB 2.0 release#458

Open
gonzalocasas wants to merge 512 commits into
mainfrom
prep-release
Open

COMPAS FAB 2.0 release#458
gonzalocasas wants to merge 512 commits into
mainfrom
prep-release

Conversation

@gonzalocasas

@gonzalocasas gonzalocasas commented May 19, 2026

Copy link
Copy Markdown
Member
image image

This PR superceedes #456 and contains the entire Project Theseus + ROS 2 / MoveIt 2 support.

What type of change is this?

  • Bug fix in a backwards-compatible manner.
  • New feature in a backwards-compatible manner.
  • Breaking change: bug fix or new feature that involve incompatible API changes.
  • Other (e.g. doc update, configuration, etc)

Checklist

Put an x in the boxes that apply. You can also fill these out after creating the PR. If you're unsure about any of them, don't hesitate to ask. We're here to help! This is simply a reminder of what we are going to look for before merging your code.

  • I added a line to the CHANGELOG.md file in the Unreleased section under the most fitting heading (e.g. Added, Changed, Removed).
  • I ran all tests on my computer and it's all green (i.e. invoke test).
  • I ran lint on my computer and there are no errors (i.e. invoke lint).
  • I added new functions/classes and made them available on a second-level import, e.g. compas_fab.robots.CollisionMesh.
  • I have added tests that prove my fix is effective or that my feature works.
  • I have added necessary documentation (if appropriate)

gonzalocasas and others added 30 commits June 4, 2026 09:44
`MoveItPlanner.robot_cell` previously raised AttributeError because
only `AnalyticalKinematicsPlanner` defined the property locally (as
a passthrough to its client). Callers like the `Cf_InverseKinematics`
fallback path that derive a zero-config start_state from the planner's
cell were therefore broken against the MoveIt backend.

Lifted the two properties to `PlannerInterface` itself, where they
delegate to `self._client.robot_cell` / `self._client.robot_cell_state`.
Safe when `_client` is None (returns None). Every concrete backend
planner (MoveIt, PyBullet, AnalyticalKinematics, AnalyticalPyBullet)
inherits the same accessor for free; the local override in
`AnalyticalKinematicsPlanner` becomes redundant and is removed.

Also folds in a test rename that finishes the earlier check_collision
migration: `test_04_inverse_kinematics_allow_collision_example` →
`test_04_inverse_kinematics_check_collision_example`, with the option
flipped to `check_collision: False` so the ROS integration test now
exercises the canonical key instead of the legacy alias.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Collapse the planned/unplanned PlanStep split into a single Action class
wrapping start_state + optional trajectory + optional explicit post_state.
A trajectory makes it planned (post-state derived); no trajectory makes it
an unplanned/state-change action (post-state explicit). Single-class model
means backtracking just clears the trajectory instead of swapping types.

Action carries a free-form attributes bag with tags as the default,
first-class key to drive differentiated downstream execution.

MotionPlan -> ActionChain: same state-threading and serialization
optimization (strip the duplicated start_state, re-thread on load), now
mirroring Action.start_state onto the contained trajectory.start_state.
Surface renamed: actions / iter_actions / action_by_name / append_action.

MotionPlan/PlanStep were unreleased, so this is a clean rename with no
back-compat aliases.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Cf_TrajectoryStep -> Cf_TrajectoryAction, Cf_StateChangeStep ->
Cf_StateChangeAction (both now emit an Action and accept an optional
comma-separated `tags` input that lands on the action's attributes),
Cf_MotionPlan -> Cf_ActionChain (takes `actions`, emits `chain`).

Component code.py/metadata.json updated to the Action/ActionChain API;
icons carried over unchanged. Userobject regeneration is a separate step.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Rename developer/motion_plan.md -> developer/action.md and rewrite it;
update concepts.md, developer/index.md, backends/{ros,pybullet}.md, the
two 08_*pick_and_place example scripts, the icon-system catalog labels,
and mkdocs nav. Fold the rename + new tags feature into the existing
Unreleased CHANGELOG bullets.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
PR #459 targets the prep-release integration branch, not main, so the
build workflow (and its build-cpython-components artifact job) was not
running. Add prep-release to the push/pull_request branch filters so the
Grasshopper userobjects are built and uploaded as an artifact for this PR.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Finish the Action rename in the icon catalog (glyph keys trajectoryStep
-> trajectoryAction, stateChangeStep -> stateChangeAction, motionPlan ->
actionChain). Redesign the "from library" glyphs around a stack-of-books
motif (cell/tool/body), add a dedicated toolFromMesh glyph, and re-render
the affected component icon.png files. Bump the catalog count to 37.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants