Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Curvilinear Joints #22196

Open
mshalm opened this issue Nov 15, 2024 · 1 comment
Open

Curvilinear Joints #22196

mshalm opened this issue Nov 15, 2024 · 1 comment
Assignees
Labels
component: multibody plant MultibodyPlant and supporting code type: feature request

Comments

@mshalm
Copy link

mshalm commented Nov 15, 2024

Is your feature request related to a problem? Please describe.
I would like to simulate robots moving via a motorized carriage on a curved rail, e.g. the Hebco 7th axis system shown below.

MHD-track-car-with-robots-face-with-L-1410x580

Describe the solution you'd like
To us, the most natural description of the motion of these mechanisms is as a single-DoF Joint<T> parameterized by the curve (following this paper), with state capturing distance traveled and tangential velocity along the curve. This allows for existing Joint-based infrastructure like Implicit PD feedback; damping; and reflected inertia to be utilized to simulate the behavior.

All other Joint<T> ’s are implemented to have SI-unit states; following this pattern requires a path-distance-parameterized curve. Generalized forces would then be equivalent to a force pair applied at the rail, tangent to the curve. Our prototype implementation of this joint and suggested strategy for drake is:


  1. To implement a Trajectory<T> which models the curve. We find that piecewise circular arcs / line segments within a plane to be one case where path length parameterization can be analytically calculated efficiently (shown below). This parameterization is also quite general, in that many curves can be approximated with several circular/linear segments.
  2. To implement a corresponding Joint<T> and Mobilizer<T> which are thin wrappers of the trajectory.
  3. To support URDF/SDF parsing of the joint via the radii $r_i$ (equivalently, curvature $\kappa_i = \frac{1}{r_i}$) /lengths $l_i$ of the segments.

Piecewise linear/circular rail birds-eye view:

Screenshot 2024-10-07 at 8 23 00 PM

Isometric view:

Screenshot 2024-10-07 at 8 07 11 PM

We intend to submit 3 PR’s mapping to these 3 components for our prototype, unless Drake developers feel strongly that a different implementation is required.

Describe alternatives you've considered
Another alternative would be to mount the robot to a floating base, and use feedback control to mimic the behavior of the real joint. We expect this to require a very stiff controller, and it adds 12 DoF to the state rather than the 2 required for the direct implementation of the joint. As such it is unlikely to be performant.

Additional context
Reiterating that we intend to send in the PR’s ourselves if Drake developers are happy to receive an implementation of this strategy.

@pathammer pathammer pinned this issue Nov 15, 2024
@jwnimmer-tri jwnimmer-tri unpinned this issue Nov 15, 2024
@jwnimmer-tri jwnimmer-tri added the component: multibody plant MultibodyPlant and supporting code label Nov 15, 2024
@sherm1
Copy link
Member

sherm1 commented Nov 15, 2024

Beautiful!
cc @mitiguy @amcastro-tri

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
component: multibody plant MultibodyPlant and supporting code type: feature request
Projects
None yet
Development

No branches or pull requests

3 participants