def main():
"""SDK Navigator Example
Demonstrates Navigator by echoing input values from wheels and
buttons.
Uses the intera_interface.Navigator class to demonstrate an
example of using the register_callback feature.
Shows Navigator input of the arm for 10 seconds.
"""
arg_fmt = argparse.ArgumentDefaultsHelpFormatter
parser = argparse.ArgumentParser(formatter_class=arg_fmt)
parser.add_argument(
"-n", "--navigator", dest="nav_name", default="right",
choices=["right", "head"],
help='Navigator on which to run example'
)
args = parser.parse_args(rospy.myargv()[1:])
rospy.init_node('sdk_navigator', anonymous=True)
echo_input(args.nav_name)
return 0
python类myargv()的实例源码
def main():
"""Intera RSDK Joint Velocity Example: Wobbler
Commands joint velocities of randomly parameterized cosine waves
to each joint. Demonstrates Joint Velocity Control Mode.
"""
arg_fmt = argparse.RawDescriptionHelpFormatter
parser = argparse.ArgumentParser(formatter_class=arg_fmt,
description=main.__doc__)
parser.parse_args(rospy.myargv()[1:])
print("Initializing node... ")
rospy.init_node("rsdk_joint_velocity_wobbler")
wobbler = Wobbler()
rospy.on_shutdown(wobbler.clean_shutdown)
wobbler.wobble()
print("Done.")
def main():
"""RSDK Head Example: Wobbler
Nods the head and pans side-to-side towards random angles.
Demonstrates the use of the intera_interface.Head class.
"""
arg_fmt = argparse.RawDescriptionHelpFormatter
parser = argparse.ArgumentParser(formatter_class=arg_fmt,
description=main.__doc__)
parser.parse_args(rospy.myargv()[1:])
print("Initializing node... ")
rospy.init_node("rsdk_head_wobbler")
wobbler = Wobbler()
rospy.on_shutdown(wobbler.clean_shutdown)
print("Wobbling... ")
wobbler.wobble()
print("Done.")
def main():
parser = argparse.ArgumentParser()
parser.add_argument("-t", "--timeout", type=lambda t:abs(float(t)),
default=60.0, help="[in seconds] Time to wait for joints to home")
parser.add_argument("-m", "--mode", type=str.upper, default="AUTO",
choices=['AUTO', 'MANUAL'], help="Mode to home the robot's joints")
enable_parser = parser.add_mutually_exclusive_group(required=False)
enable_parser.add_argument("-e", "--enable", action='store_true', dest='enable',
help="Try to enable the robot before homing.")
enable_parser.add_argument("-n", "--no-enable", action='store_false', dest='enable',
help="Avoid trying to enable the robot before homing.")
enable_parser.set_defaults(enable=True)
args = parser.parse_args(rospy.myargv()[1:])
rospy.init_node('home_joints_node')
if args.enable:
rs = intera_interface.RobotEnable(CHECK_VERSION)
rs.enable()
cmd_mode = HomingCommand.MANUAL if args.mode == 'MANUAL' else HomingCommand.AUTO
rospy.loginfo("Homing joints in '{0}' mode".format(args.mode.capitalize()))
home_jnts = HomeJoints()
state = home_jnts.home_robot(mode=cmd_mode, timeout=args.timeout)
rospy.loginfo("{0} in homing the robot's joints".format("Succeeded" if state else "Failed"))
def main():
"""Intera SDK Lights Example: Blink
Toggles the Lights interface on then off again
while printing the state at each step. Simple demonstration
of using the intera_interface.Lights class.
Run this example with default arguments and watch the green
light on the head blink on and off while the console
echos the state. Use the light names from Lights.list_all_lights()
to change lights to toggle.
"""
epilog = """ Intera Interface Lights """
arg_fmt = argparse.RawDescriptionHelpFormatter
parser = argparse.ArgumentParser(formatter_class=arg_fmt,
description=main.__doc__,
epilog=epilog)
parser.add_argument(
'-l', '--light_name', dest='light_name',
default='head_green_light',
help=('name of Light component to use'
' (default: head_green_light)')
)
args = parser.parse_args(rospy.myargv()[1:])
rospy.init_node('sdk_lights_blink', anonymous=True)
test_light_interface(args.light_name)
def main():
"""RSDK Gripper Example: Keyboard Control
Use your dev machine's keyboard to control and configure grippers.
Run this example to command various gripper movements while
adjusting gripper parameters, including calibration, velocity,
and force. Uses the intera_interface.Gripper class and the
helper function, intera_external_devices.getch.
"""
epilog = """
See help inside the example with the '?' key for key bindings.
"""
rp = intera_interface.RobotParams()
valid_limbs = rp.get_limb_names()
if not valid_limbs:
rp.log_message(("Cannot detect any limb parameters on this robot. "
"Exiting."), "ERROR")
return
arg_fmt = argparse.RawDescriptionHelpFormatter
parser = argparse.ArgumentParser(formatter_class=arg_fmt,
description=main.__doc__,
epilog=epilog)
parser.add_argument(
"-l", "--limb", dest="limb", default=valid_limbs[0],
choices=valid_limbs,
help="Limb on which to run the gripper keyboard example"
)
args = parser.parse_args(rospy.myargv()[1:])
print("Initializing node... ")
rospy.init_node("sdk_gripper_keyboard")
map_keyboard(args.limb)
def main():
"""SDK Joint Position Waypoints Example
Records joint positions each time the navigator 'OK/wheel'
button is pressed.
Upon pressing the navigator 'Rethink' button, the recorded joint positions
will begin playing back in a loop.
"""
arg_fmt = argparse.RawDescriptionHelpFormatter
parser = argparse.ArgumentParser(formatter_class=arg_fmt,
description=main.__doc__)
parser.add_argument(
'-s', '--speed', default=0.3, type=float,
help='joint position motion speed ratio [0.0-1.0] (default:= 0.3)'
)
parser.add_argument(
'-a', '--accuracy',
default=intera_interface.settings.JOINT_ANGLE_TOLERANCE, type=float,
help='joint position accuracy (rad) at which waypoints must achieve'
)
args = parser.parse_args(rospy.myargv()[1:])
print("Initializing node... ")
rospy.init_node("sdk_joint_position_waypoints", anonymous=True)
waypoints = Waypoints(args.speed, args.accuracy)
# Register clean shutdown
rospy.on_shutdown(waypoints.clean_shutdown)
# Begin example program
waypoints.record()
waypoints.playback()
joint_trajectory_action_server.py 文件源码
项目:intera_sdk
作者: RethinkRobotics
项目源码
文件源码
阅读 18
收藏 0
点赞 0
评论 0
def main():
rp = intera_interface.RobotParams()
valid_limbs = rp.get_limb_names()
if not valid_limbs:
rp.log_message(("Cannot detect any limb parameters on this robot. "
"Exiting."), "ERROR")
return
# Add an option for starting a server for all valid limbs
all_limbs = valid_limbs
all_limbs.append("all_limbs")
arg_fmt = argparse.ArgumentDefaultsHelpFormatter
parser = argparse.ArgumentParser(formatter_class=arg_fmt)
parser.add_argument(
"-l", "--limb", dest="limb", default=valid_limbs[0],
choices=all_limbs,
help="joint trajectory action server limb"
)
parser.add_argument(
"-r", "--rate", dest="rate", default=100.0,
type=float, help="trajectory control rate (Hz)"
)
parser.add_argument(
"-m", "--mode", default='position_w_id',
choices=['position_w_id', 'position', 'velocity'],
help="control mode for trajectory execution"
)
args = parser.parse_args(rospy.myargv()[1:])
start_server(args.limb, args.rate, args.mode, valid_limbs)
def main():
parser = argparse.ArgumentParser()
parser.add_argument('-l', '--limb',
choices=['left', 'right'], default="right",
help="Calibrate the specified arm")
args = parser.parse_args(rospy.myargv()[1:])
arm = args.limb
print("Initializing node...")
rospy.init_node('sdk_calibrate_arm_{0}'.format(arm), disable_signals=True)
rospy.loginfo("Preparing to Calibrate...")
gripper_warn = ("IMPORTANT: Make sure to remove grippers and other"
" attachments before running Calibrate.")
rospy.loginfo(gripper_warn)
if not gripper_removed(args.limb):
return 1
ca = CalibrateArm(arm)
error = None
goal_state = "unreported error"
rospy.loginfo("Running Calibrate on {0} arm".format(arm))
try:
goal_state = ca.start_calibration()
except KeyboardInterrupt, e:
error = e
goal_state = ca.stop_calibration()
if error == None and "success" in str(goal_state).lower():
rospy.loginfo("Calibrate arm finished successfully. Please reboot your robot to use this calibration data.")
else:
error = True
rospy.logerr("Calibrate arm failed with {0}".format(goal_state))
rospy.logerr("Please re-run this Calibration request.")
return 0 if error == None else 1
def main():
"""RSDK URDF Fragment Example:
This example shows a proof of concept for
adding your URDF fragment to the robot's
onboard URDF (which is currently in use).
"""
arg_fmt = argparse.RawDescriptionHelpFormatter
parser = argparse.ArgumentParser(formatter_class=arg_fmt,
description=main.__doc__)
required = parser.add_argument_group('required arguments')
required.add_argument(
'-f', '--file', metavar='PATH', required=True,
help='Path to URDF file to send'
)
required.add_argument(
'-l', '--link', required=False, default="right_hand",
help='URDF Link already to attach fragment to (usually <left/right>_hand)'
)
required.add_argument(
'-j', '--joint', required=False, default="right_gripper_base",
help='Root joint for fragment (usually <left/right>_gripper_base)'
)
parser.add_argument("-d", "--duration", type=lambda t:abs(float(t)),
default=5.0, help="[in seconds] Duration to publish fragment")
args = parser.parse_args(rospy.myargv()[1:])
rospy.init_node('rsdk_configure_urdf', anonymous=True)
if not os.access(args.file, os.R_OK):
rospy.logerr("Cannot read file at '%s'" % (args.file,))
return 1
send_urdf(args.link, args.joint, args.file, args.duration)
return 0
def __init__(self, name):
"""
:param name: the name of the ROS node
"""
super(NaoqiNode, self).__init__()
# A distutils.version.LooseVersion that contains the current verssion of NAOqi we're connected to
self.__naoqi_version = None
self.__name = name
## NAOqi stuff
# dict from a modulename to a proxy
self.__proxies = {}
# Initialize ros, before getting parameters.
rospy.init_node(self.__name)
# If user has set parameters for ip and port use them as default
default_ip = rospy.get_param("~pip", "127.0.0.1")
default_port = rospy.get_param("~pport", 9559)
# get connection from command line:
from argparse import ArgumentParser
parser = ArgumentParser()
parser.add_argument("--pip", dest="pip", default=default_ip,
help="IP/hostname of parent broker. Default is 127.0.0.1.", metavar="IP")
parser.add_argument("--pport", dest="pport", default=default_port, type=int,
help="port of parent broker. Default is 9559.", metavar="PORT")
import sys
args, unknown = parser.parse_known_args(args=rospy.myargv(argv=sys.argv)[1:])
self.pip = args.pip
self.pport = args.pport
## ROS stuff
self.__stop_thread = False
# make sure that we unregister from everything when the module dies
rospy.on_shutdown(self.__on_ros_shutdown)
def main():
"""RSDK Joint Torque Example: Joint Springs
Moves the default limb to a neutral location and enters
torque control mode, attaching virtual springs (Hooke's Law)
to each joint maintaining the start position.
Run this example and interact by grabbing, pushing, and rotating
each joint to feel the torques applied that represent the
virtual springs attached. You can adjust the spring
constant and damping coefficient for each joint using
dynamic_reconfigure.
"""
# Querying the parameter server to determine Robot model and limb name(s)
rp = intera_interface.RobotParams()
valid_limbs = rp.get_limb_names()
if not valid_limbs:
rp.log_message(("Cannot detect any limb parameters on this robot. "
"Exiting."), "ERROR")
robot_name = intera_interface.RobotParams().get_robot_name().lower().capitalize()
# Parsing Input Arguments
arg_fmt = argparse.ArgumentDefaultsHelpFormatter
parser = argparse.ArgumentParser(formatter_class=arg_fmt)
parser.add_argument(
"-l", "--limb", dest="limb", default=valid_limbs[0],
choices=valid_limbs,
help='limb on which to attach joint springs'
)
args = parser.parse_args(rospy.myargv()[1:])
# Grabbing Robot-specific parameters for Dynamic Reconfigure
config_name = ''.join([robot_name,"JointSpringsExampleConfig"])
config_module = "intera_examples.cfg"
cfg = importlib.import_module('.'.join([config_module,config_name]))
# Starting node connection to ROS
print("Initializing node... ")
rospy.init_node("sdk_joint_torque_springs_{0}".format(args.limb))
dynamic_cfg_srv = Server(cfg, lambda config, level: config)
js = JointSprings(limb=args.limb)
# register shutdown callback
rospy.on_shutdown(js.clean_shutdown)
js.attach_springs()
torque_controller.py 文件源码
项目:cu-perception-manipulation-stack
作者: correlllab
项目源码
文件源码
阅读 18
收藏 0
点赞 0
评论 0
def main():
"""Joint Torque Example: Joint Springs
Moves the specified limb in torque control mode,
attaching virtual springs (Hooke's Law)
to each joint maintaining the start position.
"""
arg_fmt = argparse.RawDescriptionHelpFormatter
parser = argparse.ArgumentParser(formatter_class=arg_fmt,
description=main.__doc__)
parser.add_argument(
'-l', '--limb', dest='limb', required=True, choices=['left', 'right'],
help='limb on which to attach joint springs'
)
args = parser.parse_args(rospy.myargv()[1:])
print("Initializing node... ")
rospy.init_node("rsdk_joint_torque_springs_%s" % (args.limb,))
dynamic_cfg_srv = Server(JointSpringsExampleConfig,
lambda config, level: config)
js = JointSprings(args.limb, dynamic_cfg_srv)
# register shutdown callback
rospy.on_shutdown(js.clean_shutdown)
js._get_data() # get data from file
js.move_to_neutral()
#while not rospy.is_shutdown() and js.i<len(js.data):
while len(js.data) and not rospy.is_shutdown():
js.attach_springs()
def start_proxies():
parser = argparse.ArgumentParser()
parser.add_argument('url', help='The url address of robot cloud.')
parser.add_argument('--services', '--srv', nargs='+', help='Services provided by ROSBridge server')
parser.add_argument('--published_topics', '--pub', nargs='+', help='Topics published to ROSBridge server')
parser.add_argument('--subscribed_topics', '--sub', nargs='+', help='Topics subscribed from ROSBrdge server')
parser.add_argument('--actions', nargs='+', help='Actions provided by ROSBridge server')
parser.add_argument('-q', '--queue_size', type=int, default=1000, help='ROS message queue size on each topic')
parser.add_argument('-t', '--test', action='store_true', default=False, help='Use if server and client are using the same ROS master for testing. Client service and topic names will have _ws appended.')
parser.add_argument('-i', '--image_id', help='Unique image id on the robot cloud.', default="")
args = parser.parse_args(rospy.myargv()[1:])
if not args.url.startswith('http'):
args.url = 'http://' + args.url
httpurl = args.url + '/getinstance/' + args.image_id
try:
req = urllib2.Request(httpurl)
url_and_containerid = urllib2.urlopen(req).read()
wsurl = url_and_containerid.split(" ")[0]
containerid = url_and_containerid.split(" ")[1]
except Exception, e:
rospy.logerr('Failed to get websocket address for image %s from %s. Reason: %s', args.image_id, httpurl, str(e))
return
flask_url = args.url + '/ping/' + str(containerid)
print "&&&&&"+flask_url+"%%%%%%"
proxy = keep_container_live(flask_url)
proxy.start()
rospy.init_node('cloud_proxy', anonymous=True)
for topic_name in args.subscribed_topics:
proxy = SubscribedTopicProxy(topic_name, wsurl, args.queue_size, args.test)
proxy.start()
for topic_name in args.published_topics:
proxy = PublishedTopicProxy(topic_name, wsurl, args.test)
proxy.start()
if args.services != None:
for service_name in args.services:
proxy = CallServiceProxy(service_name, wsurl, args.test)
proxy.start()
rospy.spin()
def main():
"""SDK Gripper Button Control Example
Connects cuff buttons to gripper open/close commands:
'Circle' Button - open gripper
'Dash' Button - close gripper
Cuff 'Squeeze' - turn on Nav lights
Run this example in the background or in another terminal
to be able to easily control the grippers by hand while
using the robot. Can be run in parallel with other code.
"""
rp = RobotParams()
valid_limbs = rp.get_limb_names()
if not valid_limbs:
rp.log_message(("Cannot detect any limb parameters on this robot. "
"Exiting."), "ERROR")
return
if len(valid_limbs) > 1:
valid_limbs.append("all_limbs")
arg_fmt = argparse.RawDescriptionHelpFormatter
parser = argparse.ArgumentParser(formatter_class=arg_fmt,
description=main.__doc__)
parser.add_argument('-g', '--gripper', dest='gripper', default=valid_limbs[0],
choices=[valid_limbs],
help='gripper limb to control (default: both)')
parser.add_argument('-n', '--no-lights', dest='lights',
action='store_false',
help='do not trigger lights on cuff grasp')
parser.add_argument('-v', '--verbose', dest='verbosity',
action='store_const', const=rospy.DEBUG,
default=rospy.INFO,
help='print debug statements')
args = parser.parse_args(rospy.myargv()[1:])
rospy.init_node('sdk_gripper_cuff_control_{0}'.format(args.gripper),
log_level=args.verbosity)
arms = (args.gripper,) if args.gripper != 'all_limbs' else valid_limbs[:-1]
grip_ctrls = [GripperConnect(arm, args.lights) for arm in arms]
print("Press cuff buttons for gripper control. Spinning...")
rospy.spin()
print("Gripper Button Control Finished.")
return 0
def main():
"""SDK Gripper Example: Joystick Control
Use a game controller to control the grippers.
Attach a game controller to your dev machine and run this
example along with the ROS joy_node to control gripper
using the joysticks and buttons. Be sure to provide
the *joystick* type you are using as an argument to setup
appropriate key mappings.
Uses the intera_interface.Gripper class and the helper classes
in intera_external_devices.Joystick.
"""
epilog = """
See help inside the example with the "Start" button for controller
key bindings.
"""
rp = intera_interface.RobotParams()
valid_limbs = rp.get_limb_names()
if not valid_limbs:
rp.log_message(("Cannot detect any limb parameters on this robot. "
"Exiting."), "ERROR")
return
arg_fmt = argparse.RawDescriptionHelpFormatter
parser = argparse.ArgumentParser(formatter_class=arg_fmt,
description=main.__doc__,
epilog=epilog)
required = parser.add_argument_group('required arguments')
required.add_argument(
'-j', '--joystick', required=True, choices=['xbox', 'logitech', 'ps3'],
help='specify the type of joystick to use'
)
parser.add_argument(
"-l", "--limb", dest="limb", default=valid_limbs[0],
choices=valid_limbs,
help="Limb on which to run the gripper joystick example"
)
args = parser.parse_args(rospy.myargv()[1:])
joystick = None
if args.joystick == 'xbox':
joystick = intera_external_devices.joystick.XboxController()
elif args.joystick == 'logitech':
joystick = intera_external_devices.joystick.LogitechController()
elif args.joystick == 'ps3':
joystick = intera_external_devices.joystick.PS3Controller()
else:
# Should never reach this case with proper argparse usage
parser.error("Unsupported joystick type '%s'" % (args.joystick))
print("Initializing node... ")
rospy.init_node("sdk_gripper_joystick")
map_joystick(joystick, args.limb)
def main():
"""SDK Joint Recorder Example
Record timestamped joint and gripper positions to a file for
later play back.
Run this example while moving the robot's arm and gripper
to record a time series of joint and gripper positions to a
new csv file with the provided *filename*. This example can
be run in parallel with any other example or standalone
(moving the arms in zero-g mode while pressing the cuff
buttons to open/close grippers).
You can later play the movements back using one of the
*_file_playback examples.
"""
epilog = """
Related examples:
joint_position_file_playback.py; joint_trajectory_file_playback.py.
"""
arg_fmt = argparse.RawDescriptionHelpFormatter
parser = argparse.ArgumentParser(formatter_class=arg_fmt,
description=main.__doc__,
epilog=epilog)
required = parser.add_argument_group('required arguments')
required.add_argument(
'-f', '--file', dest='filename', required=True,
help='the file name to record to'
)
parser.add_argument(
'-r', '--record-rate', type=int, default=100, metavar='RECORDRATE',
help='rate at which to record (default: 100)'
)
args = parser.parse_args(rospy.myargv()[1:])
print("Initializing node... ")
rospy.init_node("sdk_joint_recorder")
print("Getting robot state... ")
rs = intera_interface.RobotEnable(CHECK_VERSION)
print("Enabling robot... ")
rs.enable()
recorder = JointRecorder(args.filename, args.record_rate)
rospy.on_shutdown(recorder.stop)
print("Recording. Press Ctrl-C to stop.")
recorder.record()
print("\nDone.")
def main():
"""RSDK Joint Torque Example: Joint Springs
Moves the default limb to a neutral location and enters
torque control mode, attaching virtual springs (Hooke's Law)
to each joint maintaining the start position.
Run this example and interact by grabbing, pushing, and rotating
each joint to feel the torques applied that represent the
virtual springs attached. You can adjust the spring
constant and damping coefficient for each joint using
dynamic_reconfigure.
"""
# Querying the parameter server to determine Robot model and limb name(s)
rp = intera_interface.RobotParams()
valid_limbs = rp.get_limb_names()
if not valid_limbs:
rp.log_message(("Cannot detect any limb parameters on this robot. "
"Exiting."), "ERROR")
robot_name = intera_interface.RobotParams().get_robot_name().lower().capitalize()
# Parsing Input Arguments
arg_fmt = argparse.ArgumentDefaultsHelpFormatter
parser = argparse.ArgumentParser(formatter_class=arg_fmt)
parser.add_argument(
"-l", "--limb", dest="limb", default=valid_limbs[0],
choices=valid_limbs,
help='limb on which to attach joint springs'
)
args = parser.parse_args(rospy.myargv()[1:])
# Grabbing Robot-specific parameters for Dynamic Reconfigure
config_name = ''.join([robot_name,"JointSpringsExampleConfig"])
config_module = "intera_examples.cfg"
cfg = importlib.import_module('.'.join([config_module,config_name]))
# Starting node connection to ROS
print("Initializing node... ")
rospy.init_node("sdk_joint_torque_springs_{0}".format(args.limb))
dynamic_cfg_srv = Server(cfg, lambda config, level: config)
js = JointSprings(dynamic_cfg_srv, limb=args.limb)
# register shutdown callback
rospy.on_shutdown(js.clean_shutdown)
js.move_to_neutral()
js.attach_springs()
def main():
parser = argparse.ArgumentParser()
parser.add_argument('-s', '--state', const='state',
dest='actions', action='append_const',
help='Print current robot state')
parser.add_argument('-e', '--enable', const='enable',
dest='actions', action='append_const',
help='Enable the robot')
parser.add_argument('-d', '--disable', const='disable',
dest='actions', action='append_const',
help='Disable the robot')
parser.add_argument('-r', '--reset', const='reset',
dest='actions', action='append_const',
help='Reset the robot')
parser.add_argument('-S', '--stop', const='stop',
dest='actions', action='append_const',
help='Stop the robot')
args = parser.parse_args(rospy.myargv()[1:])
if args.actions == None:
parser.print_usage()
parser.exit(0, "No action defined")
rospy.init_node('sdk_robot_enable')
rs = intera_interface.RobotEnable(intera_interface.CHECK_VERSION)
try:
for act in args.actions:
if act == 'state':
print rs.state()
elif act == 'enable':
rs.enable()
elif act == 'disable':
rs.disable()
elif act == 'reset':
rs.reset()
elif act == 'stop':
rs.stop()
except Exception, e:
rospy.logerr(e.strerror)
return 0
joint_trajectory_file_playback.py 文件源码
项目:cu-perception-manipulation-stack
作者: correlllab
项目源码
文件源码
阅读 20
收藏 0
点赞 0
评论 0
def main():
"""Joint Trajectory Example: File Playback
Plays back joint positions honoring timestamps recorded
via the joint_recorder example.
Run the joint_recorder.py example first to create a recording
file for use with this example. Then make sure to start the
joint_trajectory_action_server before running this example.
This example will use the joint trajectory action server
with velocity control to follow the positions and times of
the recorded motion, accurately replicating movement speed
necessary to hit each trajectory point on time.
"""
arg_fmt = argparse.RawDescriptionHelpFormatter
parser = argparse.ArgumentParser(formatter_class=arg_fmt,
description=main.__doc__)
parser.add_argument(
'-f', '--file', metavar='PATH', required=True,
help='path to input file'
)
parser.add_argument(
'-l', '--loops', type=int, default=1,
help='number of playback loops. 0=infinite.'
)
# remove ROS args and filename (sys.arv[0]) for argparse
args = parser.parse_args(rospy.myargv()[1:])
print("Initializing node... ")
rospy.init_node("rsdk_joint_trajectory_file_playback")
print("Getting robot state... ")
rs = baxter_interface.RobotEnable(CHECK_VERSION)
print("Enabling robot... ")
rs.enable()
print("Running. Ctrl-c to quit")
traj = Trajectory()
traj.parse_file(path.expanduser(args.file))
#for safe interrupt handling
rospy.on_shutdown(traj.stop)
result = True
loop_cnt = 1
loopstr = str(args.loops)
if args.loops == 0:
args.loops = float('inf')
loopstr = "forever"
while (result == True and loop_cnt <= args.loops
and not rospy.is_shutdown()):
print("Playback loop %d of %s" % (loop_cnt, loopstr,))
traj.start()
result = traj.wait()
loop_cnt = loop_cnt + 1
print("Exiting - File Playback Complete")