Default Controls (Arms currently non-functional)


This tab contains the original controls from the Robot's for Humanity web interface. You may select a portion of the robot to control, and then command the movement of that portion using the number pad or 'touchpad'. All movements of the buttons can be scaled using the sliding bar to the left of the controls. The scale setting for each portion of the robot will be retained during a browser session (but will be lost if you refresh).

The touchpad allows for commands along diagonal (whereas each button moves along a given axis). The magnitude of the motion is determined by the distance from the center of the axes. The axes of the touchpad always control the same functions as the top-center, bottom-center, center-left, and center-right buttons of the buttonpad (positions 8, 2, 4, and 6 respectively on a numerical keypad).

All of these controls, except for the base, command a discrete movement for each click, and a click will not be registered until the mouse button is released. The base controls will command a desired velocity while the mouse button is pressed, causing the robot to move (click and hold). Movement should stop when the button is released, or if the mouse moves out of the button region (even while held down). Because of transmission delays, it is not recommended to hold the button down for extended periods (more than a few seconds). You may notice a delay before motion begins, and possibly a delay before motion stops.

AR Servoing

This tab contains controls for using the AR-Tag servoing utility.



Please use the Trajectory Playback tools on the trajectory playback tab to put the robot into the desired servoing configuration (arms down by the sides, with the forearm cameras up and forward).

Detect Tag

This button detects a tag in the view of the left forearm camera. If a tag is visible, you should see a text confirmation that a tag was found. However, because the AR Tag detection and localization can be inconsistent, a camera view is provided with the detected tag overlaid on the image. The imaged tag should be aligned with the real tag in the image (correctly identified). If this is the case, you may begin servoing. If this is not the case, you should try to 'detect tag' again, and may need to adjust the position of the robot using the manual (or other available) driving/navigation controls.

The range of the tag detection is limited to a few feet, and can be dependent upon the illumination of the tag. Because of this, the AR Servoing is intended to provide accurate and consistent position relative to a fixed tag, rather than being used for long-range driving or navigation.


This button starts the robot servoing. The robot should move slowly toward the tag. While moving, the robot will watch for collisions with the arms and base laser, and will stop and notify you (in the text log) if such a collision is detected. The same will occur if the view of the tag is lost.


The stop button will cause the robot to stop moving. If the servoing is stopped, you must re-detect the tag (this should be quick, though). The stop is intended to allow user control of the motion, and prevent unintended collisions in case of obstacles not seen by the arms or laser, or in the case of failure.

=== Trajectory Playback ===


The trajectory Playback tab allows you to play pre-recorded joint trajectories. The trajectories are currently recorded by physically moving the robot's arms through a desired motion, and therefore must be recorded by an able-bodied user.

Select Trajectory

This drop-down menu allows you to select the particular pre-recorded trajectory that you wish to replay. The trajectories should have descriptive names, telling you what each one does. Each trajectory is associated with the arm on which it was recorded (this is a direct re-play). The arm is denoted as [R] or [L] at the beginning of the descriptive label in the drop-down menu. Similar motions exist for many trajectories, one for each arm.


The reverse selector allows the selected trajectory to be used in reverse. The end-point of the original trajectory is treated as the start-point, and vice-versa. The trajectory will move from the original end-point, to the original start-point, running the path is reverse.

Move to Setup

The setup option causes the robot to move the arm slowly and directly to the first position in the selected trajectory (the last position, if 'reverse' is selected). Once it has reached this position, the robot will stop. This action can be used at any time, and will not behave intelligently regarding obstacles/collisions.

Execute Trajectory

This button will cause the robot to execute the selected trajectory, in the selected direction. If the robot's arm is not near the beginning of the trajectory, the trajectory will not play, and nothing will happen. This behavior strictly replays the recorded arm motion, and does not do behave intelligently regarding obstacles/collisions.

Setup and Execute

This button combines the two above: the robot moves the arm in a straight line to the setup position for the requested trajectory, and then executes that trajectory. This is the default behavior.


This will begin the requested action.


This will pause the current trajectory action, either moving to a setup position or playing a trajectory, without losing track of the current position. Pressing play or pause again will resume the trajectory.


This button will stop the current trajectory action, and loses the current place. Pressing pause after a stop has no effect, as their is no longer a 'current' trajectory to resume. Pressing play after stop will cause the action to start over.

Ellipsoidal Control

The ellipsoidal control tab contains controls for using the ellipsoidal-space control scheme designed for operating a tool around your head.


Register Head

The register head button is used to register a saved point-cloud of the user's head to the current view of them, which defines the position of the ellipse around which the controller operates. A registration must be present for the controller to be used. When you click this button, you will be prompted to select your face in the video feed, to initialize the alignment. You will be shown an image stream with the saved point-cloud of the face overlaid on the live image to show where the registration believes your head is located. The two images should line up closely (your face should be covered by your face). If this is not the case, please click the register head button again and re-register until you achieve satisfactory results.

Ellipsoid Controller

The controller for the ellipsoidal motion must be active for the controls to work. The command buttons will not be made available unless the controller is active (and they are not functional if it is inactive, anyway). The controller will be deactivated if you leave this tab (as other tabs require other controllers), so if you return, you will need to re-select this button to re-activate the controller.

Zero FT Sensor

This button allows you to set the zero-level of the force-torque sensor at the wrist of the robot. This can be necessary as the reported values tend to wander over time (by a few Newtons in 10-15 minutes, typically), causing phantom contacts (the force looks higher than it really is), which can cause the safety features to be overly conservative. You should only re-zero the force-torque sensor when it is NOT in contact with anything, as the relative force will be large when that contact is removed. In rare cases, it may be necessary to use the default controls to extricate the robot's end effector before re-zeroing the force-torque sensor and resuming use of the ellipsoidal control.

Tool Power

This button toggles the power to the razor on/off.

Move to Selection

This select box provides a series of locations on the face which have been pre-recorded. By selecting a location and clicking 'move to selection' the ellipsoidal controller will bring the tool to that point on the face.

Shaving Process

Global Approach

Use external navigation controls (such as rviz) or the default controls for driving to bring the robot to within a few feet of the side of the wheelchair, on which you want to perform shaving. Turn the robot so that it is facing the AR Tags on the wheelchair.

AR Servoing Approach

Setup Arms for Servoing

Use the Trajectory Playback tools to bring the left arm to the 'servo setup' position (the trajectory is simply holding the desired position).

Confirm AR Tag Detection

Use the AR Servoing tab to detect the AR Tag, adjusting the position of the base manually as necessary to achieve a good detection. Confirm that the tag is detected in the correct location by checking the position overlaid on the camera feed in 'AR Tag Confirmation' camera view. Proceed once the tag is properly detected.

AR Servoing

Use the AR Servoing tab tools to detect the tag on the wheelchair, and command the robot to approach the wheelchair. This should stop when finished and in position.

Register Head

When the robot is in position, click on the image, or use the head controls, to bring your head to the middle of the Kinect camera's view. Select 'Register Head' under the Ellipsoidal Control tab, and then select a point on your face in the image, as instructed by the alert. Confirm that the registration is accurate using the overlaid point cloud in the video feed. Re-register if it seems inaccurate, and proceed once satisfied.

Untuck to Shaving Position

Shaving Arm

Use the Trajectory Playback tools to run the [L] Shaving setup for the appropriate cheek (depending on the side of the face). This should bring the left arm from the servoing setup position to a position somewhat near the face.

Mirror Arm

Then, use the Trajectory Playback tools to run the [R] arm setup to mirror position, to bring the mirror out to approximately the correct position, so that you can get a good look at your own shave.

Activate Ellipsoidal Control

On the Ellipsoidal Control Tab, click the Ellipsoidal Controller button to activate the controller. The remaining commands will not be made available until the controller is active.


Use the global (Move to Selection) and local (arrows) move commands to move the shaver around in the ellipsoidal space near your head.

Wiki: robhum/shaving_tutorial (last edited 2012-06-15 14:25:15 by PhillipGrice)