ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange
Ask Your Question

PR2 controller joint: control 2 joints with one motor

asked 2011-06-26 22:12:44 -0600

Ugo gravatar image

updated 2011-06-27 18:11:15 -0600

tfoote gravatar image

In our robotics hand, I have to control 2 joints with one motor: the distal and middle joints are mecanically linked together, so you issue a command to a "super joint" which moves both of them (let's call this joint J0).

We have one sensor in each joint (J1 and J2): we add both joint calibrated values to compute the J0 position. It's not possible to move those joints individually.

For the time being my model only contains the "normal" joints (J1 and J2). The problem I have is that the J0 is then not defined, so it's not possible to control it.

What would be the best way to solve my problem?

I was thinking about adding a "dummy" joint J0 in the model (with really small links, so it's not visible / doesn't add collision where it shouldn't), but I guess there must be a better way of doing that. Any help greatly appreciated!


edit retag flag offensive close merge delete

3 Answers

Sort by ยป oldest newest most voted

answered 2011-06-28 07:59:32 -0600

hsu gravatar image

take wrist transmission for example, in propagatePosition, you should update all joint values by writing them back into your joint state js[] vector.

edit flag offensive delete link more


This thread is related to the question as well:
Ugo gravatar image Ugo  ( 2011-09-11 17:35:37 -0600 )edit

answered 2011-06-27 18:11:06 -0600

tfoote gravatar image

You can use a transmission to do this. An example is the PR2 gripper, one actuator, several moving parts. Hopefully someone else can give you a more complete answer and some links.

edit flag offensive delete link more


Thanks Tully, I'll take a look at it (for future reference, the pr2_gripper is in pr2_description/urdf/gripper_v0, and the transmission in pr2_mechanism_model/src/pr2_gripper_transmission.cpp )
Ugo gravatar image Ugo  ( 2011-06-27 22:02:35 -0600 )edit

answered 2011-06-28 02:18:18 -0600

hsu gravatar image

PR2 gripper is quite complicated due to it's nonlinear setup. You might want to take a look at wrist_transmission.cpp as well, it's a bit simpler, controls 2 joints via 2 actuators. But in your case, you could simplify it to 1 actuator.

Is J1 and J2 constrained together mechanically? Is sufficient to specify both joint forces given the actuator (motor torque) command?

edit flag offensive delete link more


J1 and J2 are constrained mechanically yes. The torque is read directly at the actuator, so there's no need of propagating the joint forces to the actuator.
Ugo gravatar image Ugo  ( 2011-06-28 02:24:38 -0600 )edit
I'm now able to read both joints in my custom transmission. I just need to find a way to publish the correct position values to the individual joints (we read the raw position for each joint, calibrate and combine them), but then these need to be published in the joint_states.
Ugo gravatar image Ugo  ( 2011-06-28 02:26:39 -0600 )edit
urdf is preferred, you can also extract is out of pr2_mechanism_model/joint.h from JointState::joint_ which is an urdf::Joint type.
hsu gravatar image hsu  ( 2011-06-29 14:57:00 -0600 )edit

Question Tools

1 follower


Asked: 2011-06-26 22:12:44 -0600

Seen: 884 times

Last updated: Jun 28 '11