Getting Started with Kinesthetic Teaching

Or “Teaching your robot from demonstration”

Kinesthetic Teaching is an extremely powerful tool in robotics.

Kinesthetic Teaching is a training paradigm in which a complex task or movement is executed in hands-on way with an expert. Humans use this information to learn about the task generally, but robots can learn that movement exactly. This makes teaching a robot a new task or a complex movement very simple.

Svenzva has designed an interactive GUI and extendable library that makes will help you get up-and-running with kinesthetic teaching with ROS. Our robot, Revel, has a gravity compensation mode that allows the arm to hold itself up against its own weight, while allowing outside forces to act on it. This makes moving the arm through space and training tasks all the easier.

Teaching and playing back your first Interaction

In this tutorial we’ll go through recording and playing back a wave action for the robot.

Prerequisites for this tutorial

  1.  and installed svenzva_ros codebase
  2. a ROS ready PC
  3. a Revel Robot


Teaching an Interaction

In order to teach an interaction, the arm must be on and we must start the driver. For convenience, we’ll put the arm in gravity mode when starting the driver. In one terminal, launch the Revel driver:

 roslaunch svenzva_drivers svenzva_bringup.launch mode:=gravity

In another terminal, we’ll start the Kinesthetic Teaching Console interface with

 rosrun svenzva_utils

which should start the interface. Your terminal should display the menu as below.

Kinesthetic Teaching interface 1

The first thing we need to do is to set the interaction name. This will be the name of the file the interaction data is saved to. Its best to have these be descriptive.

Kinesthetic Teaching interface 2

Move the cursor so that Set interaction name is highlighted, press Enter, enter a valid name (no ‘./ ), and press Enter again.

Now we can navigate to the Teaching submenu. On the main menu screen, select Record a new interaction and press Enter.

Kinesthetic Teaching interface 3

which brings us to a screen that looks like this

Kinesthetic Teaching interface 4


Once the Save robot pose item is pressed, the current position of the robot is saved which we call a keyframe. So we can go ahead and move the robot to the first position of the wave, and then select Save robot pose.

Once we do this, we’re asked to name the pose

Kinesthetic Teaching interface 5

which here we call wave_start. This name is not used by the KT program, rather it is for your benefit in the event that you want to replace or remove that keyframe from the interaction.

At this point, you can move the robot and add keyframes as many times as you want until you feel the arm’s wave will be sufficient. Keep in mind that the robot will interpolate between frames, so the frames don’t need too close together.

Here is a gif of what teaching the wave looks like.

Teaching a robot to wave


Playing back an Interaction

Having taught an interaction by adding robot keyframes, we can now play it back to see the fruit of our labor. To do this, the arm needs to be in position control mode. A fast way of doing this is by setting the mode when launching the driver. i.e.

 roslaunch svenzva_drivers svenzva_bringup.launch mode:=position

We can run the KT teaching interface in a new terminal

 rosrun svenzva_utils

Now we need to select the interaction file we want to play back. We can do this by selecting Set interaction name in the menu. Since we just taught a wave in the previous tutorial, that’s what we’ll enter here.

Kinesthetic Teaching interface 7

Now we select the Playback submenu from the main menu.

Kinesthetic Teaching interface 8

Finally, a screen will confirm the name of the interaction file. If the file name is the one you want played back, press Enter.

Kinesthetic Teaching interface 9

The robot will start playing back the interaction which will look like this

Playing back an interaction on the robot

Congrats! You just taught a robot how to say hello! One step closer to sentience…


Using Demonstrations Programmatically

The used in these tutorials has been designed to work both as a front end and as a back end for your programs that utilize Kinesthetic Teaching.

For instance, you can use the console interface for teaching an interaction, as we did for the wave. Then, as part of a larger Friendly Greeting program, import the as a library to playback that interaction programmatically.

An example of how to do this is in the program in the svenzva_demo package.


Leave a Reply

Your email address will not be published. Required fields are marked *