Skip to content

Integration of Articutool System and Dockerized Workflow (Jose's Master's Thesis)#219

Merged
eddienini merged 552 commits intoros2-develfrom
jjaime2/articutool-integration
Feb 3, 2026
Merged

Integration of Articutool System and Dockerized Workflow (Jose's Master's Thesis)#219
eddienini merged 552 commits intoros2-develfrom
jjaime2/articutool-integration

Conversation

@jjaime2
Copy link
Contributor

@jjaime2 jjaime2 commented Dec 22, 2025

Description:

This merge integrates the complete software stack for the Articutool, representing the culmination of my Master's thesis work. It significantly updates the system architecture to support the new hardware capabilities while improving reproducibility for new researchers.

Key Changes:

  • Dockerized Workflow: Replaced manual host installation with a standardized Docker container (articutool-dev). This ensures the code "just works" on lab machines and drastically reduces onboarding time.

  • Articutool Behaviors: Added a suite of Behavior Tree nodes for Articutool control, including orientation locking, active leveling, and controller switching.

  • Robust Planning: Implemented a "Plan-Then-Verify" idiom. The system now validates Articutool kinematics, dynamic feasibility, and "elbow-up" configurations before attempting movement.

  • Analytic Solvers: Included custom analytic IK solvers for the Articutool's leveling tasks to ensure the food remains stable against gravity.

Note on Backward Compatibility: This update optimizes the system for the Articutool hardware.

  • For Articutool Users: Follow the new "New Researcher Workflow" in the updated README.md.

  • For Original ADA Users: If you need the pre-Articutool system, please checkout the release tag v1.0.0-hri25a.

Testing:

  • Tested extensively on Ubuntu 22.04 / ROS 2 Humble.

  • Verified with both mock simulation and real hardware execution.

  • System has been demoed successfully in person multiple times.

Before opening a pull request

  • pre-commit run --all-files
  • Run your code through pylint. pylint --recursive=y --rcfile=.pylintrc .. All warnings but fixme must be addressed.

Before Merging

  • Squash & Merge

… tool tip to level, and vertically offset from the plate
… tool tip to level, and vertically offset from the plate
…n constraint, and increase granularity of Jaco EE pitch candidates
The 'Resting' stage was the primary bottleneck in the benchmark, with a
high rate of immediate planning failures. Diagnostics revealed this was
caused by using a static orientation path constraint with a fixed yaw.

If the robot's starting orientation had a different yaw, the error
calculation (when converted to Euler angles) would produce large,
non-intuitive pitch and roll errors, causing the start state to
violate the constraint and the planner to fail.

This commit resolves the issue by implementing a dynamic, yaw-aware path
constraint for the transport stages:

- Before planning, the robot's current end-effector orientation and yaw
  are calculated using Forward Kinematics.
- A new target orientation for the path constraint is constructed on the
  fly. This new target is perfectly level (zero pitch/roll) but has the
  *exact same yaw* as the robot's starting pose.
- This dynamic constraint ensures the start state is always valid from
  the planner's perspective, eliminating the immediate failures.

Additionally, this commit adds a `compute_moveit_orientation_error`
helper function to provide detailed logging and analysis of constraint
satisfaction, which was instrumental in diagnosing this issue.
…ld choose a solution where the tool tip was pointing up or down, instead of just up
Extracted monolithic internal sequences from `AcquireFoodTree` into reusable idioms in `ada_feeding/idioms/acquisition.py`. This refactor aligns the code structure with the "High-Level Task Orchestration" architecture.

Key Changes:
- **Plan-Then-Verify Abstraction**: Moved the robust transport planning logic into `get_robust_move_above_sequence`, encapsulating the IK and dynamic feasibility checks.
- **Articutool Primitives**: Abstracted localized primitive execution into `get_articutool_move_into_sequence` and `get_post_retract_primitive_sequence`.
- **Active Leveling**: Moved the post-acquisition leveling logic (FK -> IK -> Plan) into `get_post_acquisition_leveling_sequence`.
- **Tree Orchestration**: Cleaned up `acquire_food_tree.py` to function as a high-level orchestrator, improving readability and maintainability.
@eddienini eddienini self-requested a review February 2, 2026 23:57
@eddienini eddienini merged commit 0e91e8d into ros2-devel Feb 3, 2026
1 check passed
@eddienini eddienini deleted the jjaime2/articutool-integration branch February 3, 2026 00:00
@eddienini eddienini restored the jjaime2/articutool-integration branch February 3, 2026 00:42
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.

2 participants

Comments