Go to the documentation of this file.00001
00002
00003 import numpy as np
00004
00005 import roslib
00006 roslib.load_manifest("hrl_pr2_traj_playback")
00007 import rospy
00008 import rosparam
00009 from std_msgs.msg import Bool
00010
00011 from traj_playback import TrajPlayback
00012 from traj_playback import CTRL_NAME_LOW, CTRL_NAME_NONE, PARAMS_FILE_LOW, PARAMS_FILE_NONE
00013 from msg import TrajPlaybackCmd
00014
00015 HEARTBEAT_TOPIC = '/arm_pose_move_gui/heartbeat'
00016 COMMAND_TOPIC = '/arm_pose_move_gui/command'
00017 MONITOR_RATE = 20
00018 POSE_TRAJ_PARAM_FILE = 'pose_traj_dir.yaml'
00019 POSE_TRAJ_PARAM_PREFIX = '$(find kelsey_sandbox)/params/'
00020
00021 class ArmPoseMoveGuiBackend(object):
00022 def __init__(self):
00023 params = rosparam.get_param("/arm_pose_move")
00024 self.pose_dict = params['poses']
00025 self.traj_dict = params['trajectories']
00026 self.apm_ctrl = TrajPlayback(CTRL_NAME_LOW, PARAMS_FILE_LOW)
00027 rospy.Subscriber(HEARTBEAT_TOPIC, Bool, self.heartbeat_cb)
00028 rospy.Subscriber(COMMAND_TOPIC, ArmPoseMoveCmd, self.cmd_cb)
00029
00030 def heartbeat_cb(self, msg):
00031 pass
00032
00033 def cmd_cb(self, msg):
00034 if msg.type == msg.START:
00035 if not self.apm_ctrl.is_moving():
00036 if msg.is_trajectory:
00037 filename = self.traj_dict[msg.traj_name]['file']
00038 filepath = roslaunch.substitution_args.resolve_args(POSE_TRAJ_PARAM_PREFIX + filename)
00039 if msg.is_setup:
00040 result = self.apm_ctrl.move_to_setup_from_file(filepath,
00041 reverse=not msg.is_forward, blocking=False)
00042 else:
00043 result = self.apm_ctrl.exec_traj_from_file(filepath,
00044 reverse=not msg.is_forward, blocking=False)
00045 else:
00046 filename = self.pose_dict[msg.traj_name]['file']
00047 filepath = roslaunch.substitution_args.resolve_args(POSE_TRAJ_PARAM_PREFIX + filename)
00048 elif msg.type == msg.STOP:
00049 self.apm_ctrl.pause_moving()
00050 elif msg.type == msg.RESET:
00051 self.apm_ctrl.stop_moving()
00052 else:
00053 rospy.logerror("[arm_pose_move_backend] Bad command.")
00054
00055 def main():
00056 rospy.init_node("arm_pose_move_backend")
00057 apm_backend = ArmPoseMoveGuiBackend()
00058 rospy.spin()
00059
00060
00061 if __name__ == "__main__":
00062 main()