Skip to content

Robot.get_manipulator_info silently overrides tcp_frame resolution #30

Description

@jf---

Problem

Robot.get_manipulator_info() in src/tesseract_robotics/planning/core.py:407-440 silently invents a tcp_frame when none is provided:

if tcp_frame is None:
    group = self.env.getKinematicGroup(group_name)
    tcp_frame = list(group.getActiveLinkNames())[-1]

In C++, ManipulatorInfo is a plain data struct — tcp_frame is an explicit required parameter in the constructor. The planner is responsible for frame resolution. This Python wrapper does resolution too early, hiding it behind a convenience API.

Issues

  1. Hides a decision the user should make explicitly — grabbing the last active link is a heuristic that works for serial chains but breaks for branching kinematic trees
  2. Hardcodes working_frame="base_link" — another silent assumption
  3. Caches the guess — once auto-detected for a group, the result is cached and can't be corrected for the same (group, None, working_frame) key

Proposed fix

Make tcp_frame required (no default None), matching the C++ API's intent. Remove the auto-detect heuristic. Users should know which frame they're targeting.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions