Modeling arm capabilities

kind of yes, I will respond in more detail in the thread about architecture. (I want to keep this thread to just talking about what arms are)

In my first post I explained why I think they are separate capabilities: an iswap arm can rotate (“OrientableArm”) whereas the core grippers cannot (proposing to make just a base Arm for them).

I will also respond to ’ if it’s just star.arm and then the user picks the mechanism through a kwarg like use_arm="iswap"’ in the other thread

yes this is the crux of what I want to discuss here

With “arm” I meant something that moves resources around in an arbitrary space. In that sense, a core gripper is an arm, even though it does not have joints. The iswap is kind of an interesting case since it has some joints, but also works on a x/y/z gantry rather than being a real scara / articulated arm. That is why I thought we should have the middle layer of OrientableArm. Do you think these levels make sense?

The naming is somewhat separate, and I agree that it is a little confusing right now. Maybe we should just call the base capability like ResourceHandler or something? And then have OrientableResourceHandler with JointArm as a subclass of that?