Joint Trajectory Playback Example - RethinkRobotics/sdk-docs GitHub Wiki

Summary

Enable the robot joint trajectory interface, parse a file created using the joint position recorder example, and send a the resulting joint trajectory to the action server.

Quickstart

Verify that the robot is enabled from an RSDK terminal session, ex:

    $ rosrun baxter_tools enable_robot.py -e

Record a joint position file using the joint_recorder.py example, ex:

 $ rosrun baxter_examples joint_recorder.py -f <example_file>

The recorder is now recording joint positions with corresponding timestamps for both arms. Move the arms while holding the cuffs.

NOTE: You can open and close the grippers while recording by using Baxter's cuff buttons: Oval = Close, Circle = Open

Press any key to exit when done recording.

Start the joint trajectory controller, ex:

 $ rosrun baxter_interface joint_trajectory_action_server.py

In another RSDK terminal session, Run the joint trajectory playback example program, ex:

    $ rosrun baxter_examples joint_trajectory_file_playback.py -f <example_file>

Both arms will then be commanded to repeat the trajectory recorded during the joint position recording. The difference between this example and the joint_position playback example is that the trajectory controller has the ability to honor the velocities (due to the timestamps) to more accurately repeating the recorded trajectory.

Overview

A commonly used ROS method for robot arm motion control is the joint trajectory action interface. The trajectory_controller and it's corresponding joint trajectory action server is the baxter_interface implementation to support this action interface. This example shows usage for launching the joint trajectory action server, and parsing of a text file describing timestamped joint position goals into a joint trajectory action call to be commanded to the joint trajectory action server.

For more information on Baxter's arms, see Using the Arms.

Usage

See the trajectory controller's usage on the command line by passing trajectory_controller.py the -h, help argument:

    $ rosrun baxter_interface joint_trajectory_action_server.py -h

Usage:

joint_trajectory_action_server.py [-h] [-l LIMB]

Optional Arguments
-h, --help - show this help message and exit
-l LIMB, --limb LIMB - trajectory controller limb [both | left | right] (default: both)
-r RATE, --rate RATE - trajectory control rate (Hz) (default: 100.0)


See the trajectory test example's usage on the command line by passing trajectory_test.py the '-h', help argument:

    $ rosrun baxter_examples joint_trajectory_file_playback.py -h

Usage:

joint_trajectory_file_playback.py [-h] -l LIMB

Required Arguments
-f FILE, --file FILE - input file

Optional Arguments
-h, --help - show this help message and exit -l LOOPS, --loops LOOPS - number of playback loops. 0=infinite.

Interfaces

ROS APIs

See the API Reference page for details.

  • Joint Trajectory Action Server - /robot/limb/right/follow_joint_trajectory [control_msgs/FollowJointTrajectoryAction]
  • Joint Trajectory Action Server - /robot/limb/left/follow_joint_trajectory [control_msgs/FollowJointTrajectoryAction]

baxter_interface APIs

  • JointTrajectoryActionServer class: joint_trajectory_action_server.py

Troubleshooting

###The arm is not executing the trajectory Verify that the robot is enabled:

rosrun baxter_tools enable_robot.py -e

Verify that the trajectory controller has been started:

rosrun baxter_interface joint_trajectory_action_server.py