moveit_publisher.py
Go to the documentation of this file.
00001 #!/usr/bin/python
00002 
00003 import roslib
00004 import rospy
00005 import time
00006 import actionlib
00007 roslib.load_manifest("rwt_moveit")
00008 
00009 from rwt_moveit.msg import MoveGroupPlan
00010 from moveit_msgs.srv import *
00011 from moveit_msgs.msg import RobotState
00012 from moveit_msgs.msg import WorkspaceParameters
00013 from moveit_msgs.msg import JointConstraint
00014 from moveit_msgs.msg import Constraints
00015 from moveit_msgs.msg import MoveGroupAction
00016 from moveit_msgs.msg import MoveGroupGoal
00017 from moveit_msgs.msg import MoveGroupActionGoal
00018 from moveit_msgs.msg import MotionPlanRequest
00019 from geometry_msgs.msg import Vector3
00020 from std_msgs.msg import Float64MultiArray
00021 from std_msgs.msg import Empty
00022 from std_msgs.msg import MultiArrayDimension
00023 from sensor_msgs.msg import JointState
00024 from moveit_msgs.msg import MoveGroupActionResult
00025 
00026 def joint_position_callback(joints):
00027 
00028     global plan_only
00029     fixed_frame = rospy.get_param("/fixed_frame")
00030 
00031     client = actionlib.SimpleActionClient('move_group', MoveGroupAction)
00032     client.wait_for_server()
00033     move_group_goal = MoveGroupGoal()
00034 
00035     try:
00036 
00037         msg = MotionPlanRequest()
00038         workspace_parameters = WorkspaceParameters()
00039         workspace_parameters.header.stamp = rospy.Time.now()
00040         workspace_parameters.header.frame_id = fixed_frame
00041         workspace_parameters.min_corner = Vector3(-1.0, -1.0, -1.0)
00042         workspace_parameters.max_corner = Vector3(1.0, 1.0, 1.0)
00043 
00044         start_state = RobotState()
00045 #        start_state.joint_state.header.stamp = rospy.Time.now()
00046         start_state.joint_state.header.frame_id = fixed_frame
00047         start_state.joint_state.name =  []
00048         start_state.joint_state.position = []
00049 
00050         cons = Constraints()
00051         cons.name = ""
00052         i = 0
00053         for dim in joints.start_joint.layout.dim:
00054             start_state.joint_state.name.append(dim.label)
00055             start_state.joint_state.position.append(joints.start_joint.data[i])
00056 
00057             jc = JointConstraint()
00058             jc.joint_name = dim.label
00059             jc.position = joints.goal_joint.data[i]
00060             jc.tolerance_above = 0.0001
00061             jc.tolerance_below = 0.0001
00062             jc.weight = 1.0
00063             i = i + 1
00064             cons.joint_constraints.append(jc)
00065 
00066 
00067         msg.workspace_parameters = workspace_parameters
00068         msg.start_state = start_state
00069         msg.goal_constraints.append(cons)
00070 
00071         msg.num_planning_attempts = 1
00072         msg.allowed_planning_time = 5.0
00073 
00074         msg.group_name = joints.group_name
00075         move_group_goal.request = msg
00076 
00077 
00078         if joints.plan_only:
00079             plan_only = True
00080             move_group_goal.planning_options.plan_only = True
00081         else:
00082             plan_only = False
00083 
00084         client.send_goal(move_group_goal)
00085         client.wait_for_result(rospy.Duration.from_sec(5.0))
00086 
00087 
00088     except rospy.ROSInterruptException, e:
00089         print "failed: %s"%e
00090 
00091 
00092 def moveit_callback(msg):
00093     pub = rospy.Publisher('/update_joint_position', Float64MultiArray)
00094     stock_pub = rospy.Publisher('/stock_joint_position', Float64MultiArray)
00095 
00096     global plan_only
00097 
00098     r = rospy.Rate(10)
00099     names = msg.result.planned_trajectory.joint_trajectory.joint_names
00100     points = msg.result.planned_trajectory.joint_trajectory.points
00101 
00102     for point in points:
00103         pos_msg = Float64MultiArray()
00104         i = 0
00105         for name in names:
00106             dim = MultiArrayDimension()
00107             dim.label = name
00108             pos_msg.layout.dim.append(dim)
00109         pos_msg.data = point.positions
00110         if rospy.get_param('~sim_mode') and plan_only == False:
00111             pub.publish(pos_msg)
00112         elif plan_only:
00113             stock_pub.publish(pos_msg)
00114         r.sleep()
00115 
00116     if plan_only:
00117         global robot_trajectory
00118         robot_trajectory = msg.result.planned_trajectory
00119 
00120 def execute_callback(msg):
00121     global robot_trajectory
00122     rospy.wait_for_service('execute_kinematic_path')
00123     try:
00124         execute_service = rospy.ServiceProxy('execute_kinematic_path', ExecuteKnownTrajectory)
00125         srv = ExecuteKnownTrajectoryRequest()
00126         srv.trajectory = robot_trajectory
00127         response = execute_service(srv)
00128         print response.error_code
00129     except rospy.ServiceException, e:
00130         print "Service call failed: %s"%e
00131 
00132 
00133 if __name__ == '__main__':
00134     rospy.init_node('moveit_publisher')
00135     rospy.Subscriber("/execute_trajectory", Empty, execute_callback)
00136     rospy.Subscriber("moveit_joint", MoveGroupPlan, joint_position_callback)
00137     rospy.Subscriber("/move_group/result", MoveGroupActionResult, moveit_callback)
00138     rospy.spin()


rwt_moveit
Author(s): Kazuto Murase
autogenerated on Wed Aug 26 2015 16:45:34