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

Expose actuator commands in gripper-like subdevices #228

Open
PeterBowman opened this issue Aug 5, 2019 · 2 comments
Open

Expose actuator commands in gripper-like subdevices #228

PeterBowman opened this issue Aug 5, 2019 · 2 comments

Comments

@PeterBowman
Copy link
Member

Stemming from #211, it would be nice to enable some sort of self-description behavior to grippers: LacqueyFetch, TextilesHand and Dextra+CAN (#227).

PR roboticslab-uc3m/kinematics-dynamics#181 introduced an actuator command to our cartesian controller interface. This command accepts a vocab describing one of several possible action. In roboticslab-uc3m/kinematics-dynamics#115 (comment), I propose that gripper devices could expose their supported actions, and act upon them when requested, via IRemoteVariables.

For simpler devices, the vocab list could live in a header. Cons: might easily become out-dated from time to time, it's virtually impossible to cover all possible use cases for actuators - not just mere grippers. Also, not sure what to do with AMOR, whose gripper implementation is embedded in the cartesian controller itself.

For Dextra, keep in mind the forthcoming translator device/tool (what I used to call IK).

@PeterBowman
Copy link
Member Author

PeterBowman commented Sep 17, 2019

Robot tools of all kinds, especially grippers and more complex hands, could be interfaced on the YARP network through a dedicate port in which the only motor nodes exposed are the ones used by the tool itself: #211 (comment). In contrast, we currently control six joint motors and one Lacquey motor via the same /teo/leftArm port, for instance.

This separation clears the path for wrapping complex behavior in dedicated client devices which implement the specific behavior for the gripper type it is meant for. In other words, to illustrate this:

  • CanBusControlboard handles the YARP-motor-id-to-CAN-node-id association, manages all CAN traffic and instantiates the raw subdevice.

  • The raw subdevice (e.g. LacqueryFetch or DextraCan) assings all motor ids it needs per CAN id (Dextra is a multi-joint device in that one CAN node controls six motors) and forwards motor commands to the physical device.

  • The YARP controlboard wrapper maps motor ids to YARP ports. For the sake of this example, let's say that we configure our launcher app via .ini to create a controlboardwrapper2 per hand, that is, it will open a /teo/leftHand with six motor joints (same for the right hand).

  • A new client device could connect to these YARP ports and expose a gripper-specific C++ interface in which handy commands are available, say, openHand(), makeGesture() and so on. Regarding the Dextra hand, this same device could properly handle the subactuation problem: translate motor commands to finger joint angles and vice versa.

  • This additional client layer would help us abstracting the higher-level control of devices which are managed differently on the lower-level layer: the real Dextra exposes six motor ids versus the OpenRAVE controller exposes fifteen joints.

Since the physical implementation is transparent to this client layer, the IRemoteVariables interface would render useful in identifying whether the remote device is actually the gripper type the client device is trying to connect to.

@PeterBowman
Copy link
Member Author

  • A new client device could connect to these YARP ports and expose a gripper-specific C++ interface in which handy commands are available, say, openHand(), makeGesture() and so on.

This can be nicely done with Thrift, e.g. see our SpeechIDL and its server implementation.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant