Difference between revisions of "Arm Control"

From Wiki for iCub and Friends
Jump to: navigation, search
(The arm)
(Commands to the arm)
Line 28: Line 28:
  
 
Both ports send a vector of 7 doubles, degrees and electric currents respectively.
 
Both ports send a vector of 7 doubles, degrees and electric currents respectively.
 +
 +
In the following example we use yarp write to move the arm to four different positions:
 +
 +
  E:\dev\iCub\bin>yarp write /dummywriter /james/armcontrol/i
 +
  Port /dummywriter listening at tcp://192.168.0.100:10072
 +
  yarp: Sending output from /dummywriter to /james/armcontrol/i using tcp
 +
  0.0 80.0 0.0 0.0 0.0 0.0 0.0
 +
  0.0 80.0 0.0 -90.0 0.0 0.0 0.0
 +
  0.0 0.0 0.0 -90.0 0.0 0.0 0.0
 +
  -90.0 0.0 0.0 -90.0 0.0 0.0 0.0

Revision as of 10:55, 25 July 2006

Arm control should be coming online today. This page is a start at documenting your interface to it.

The arm

The arm has 7 joints. We number those joints based on distance from the body. Joint number 0 is closest to the body, in the shoulder, and joint 6 is furthest from the body, at the wrist (shoulder yaw, shoulder pitch, shoulder roll, elbow, wrist pitch, wrist yaw, wrist roll).

You will have limited control of these joints. We are enforcing fairly conservative limits on the joint ranges in order to avoid unfortunate accidents.

The arm starts in the configuration:

  [0, 40, 0, -10, 0, 0, 0]

The arm is limited within the range:

  MAX: [0, 80, 90, -10, 10, 70, 30]
  MIN: [-120, 40, 0, -90, -100, 0, -70]

Commands that are not within these range are automatically thresholded to fit the ranges.

Commands to the arm

You can command the arm with a Bottle or Vector of 7 doubles. These numbers should be angles (in degrees) relative to a rest position. The first number controls the joint closest to the body, the last number controls the joint closest to the hand.

The arm controller listens for commands on a port called:

  /james/armcontrol/i

The program reads the currents and the encoders from the arm and broadcast them to two ports called, respectively:

  /james/armcontrol/encoders
  /james/armcontrol/currents

Both ports send a vector of 7 doubles, degrees and electric currents respectively.

In the following example we use yarp write to move the arm to four different positions:

  E:\dev\iCub\bin>yarp write /dummywriter /james/armcontrol/i
  Port /dummywriter listening at tcp://192.168.0.100:10072
  yarp: Sending output from /dummywriter to /james/armcontrol/i using tcp
  0.0 80.0 0.0 0.0 0.0 0.0 0.0
  0.0 80.0 0.0 -90.0 0.0 0.0 0.0
  0.0 0.0 0.0 -90.0 0.0 0.0 0.0
  -90.0 0.0 0.0 -90.0 0.0 0.0 0.0