robot_jogging.py
Go to the documentation of this file.
1 #!/usr/bin/env python
2 import argparse
3 import rospy
4 import actionlib
5 from control_msgs.msg import FollowJointTrajectoryActionFeedback, FollowJointTrajectoryActionResult, \
6  FollowJointTrajectoryAction, FollowJointTrajectoryGoal
7 from trajectory_msgs.msg import JointTrajectory, JointTrajectoryPoint
8 import moveit_commander
9 import moveit_msgs.msg
10 import numpy as np
11 
12 
13 def jog(vx, vy, vz, ang_x, ang_y, ang_z, action_client):
14  desired_twist = np.array([vx, vy, vz, ang_x, ang_y, ang_z])
15 
16  startingPoint = JointTrajectoryPoint()
17  startingPoint.positions = arm_group.get_current_joint_values()
18  startingPoint.time_from_start.secs = 0
19 
20  trajectory = JointTrajectory()
21  trajectory.points = [startingPoint]
22 
23  # parameters
24  N_points = 300
25  Time_total_sec = 5.0
26  dt_point2point = Time_total_sec/N_points
27  time_from_start = 0.0
28 
29  for i in range(1, N_points):
30  point = JointTrajectoryPoint()
31 
32  jacobian = arm_group.get_jacobian_matrix(trajectory.points[i-1].positions)
33  pseudoInverseJacobian = np.linalg.pinv(jacobian)
34  jointVelocities = pseudoInverseJacobian.dot(desired_twist)
35 
36  point.positions = (trajectory.points[i-1].positions + (jointVelocities*dt_point2point)).tolist()
37 
38  time_from_start = time_from_start + dt_point2point
39  point.time_from_start = rospy.Duration.from_sec(time_from_start)
40  trajectory.points.append(point)
41 
42  trajectory.joint_names = ['joint1', 'joint2', 'joint3', 'joint4', 'joint5', 'joint6', 'joint7']
43  goal = FollowJointTrajectoryGoal()
44  goal.trajectory = trajectory
45 
46  action_client.send_goal(goal)
47 
48  action_client.wait_for_result()
49 
50 
51 def redundancy_resolution(q_i_change, q_index, alpha_scale, action_client):
52  desired_twist = np.array([0, 0, 0, 0, 0, 0])
53 
54  startingPoint = JointTrajectoryPoint()
55  startingPoint.positions = arm_group.get_current_joint_values()
56  startingPoint.time_from_start.secs = 0
57  q_i_desired = startingPoint.positions[q_index-1] + q_i_change
58 
59  trajectory = JointTrajectory()
60  trajectory.points = [startingPoint]
61 
62  # parameters
63  N_points = 300
64  Time_total_sec = 5.0
65  dt_point2point = Time_total_sec/N_points
66  time_from_start = 0.0
67 
68  for i in range(1, N_points):
69  point = JointTrajectoryPoint()
70  # compute null space projection
71  jacobian = arm_group.get_jacobian_matrix(trajectory.points[i-1].positions)
72  pseudoInverseJacobian = np.linalg.pinv(jacobian) # this mat is 7 by 6
73  nullSpaceProjector = \
74  np.identity(7) - pseudoInverseJacobian.dot(jacobian) # this mat is 7 by 7, Equation 5.1, I - J+ J
75  q_i_current = trajectory.points[i-1].positions[q_index-1]
76  gradient_q = np.zeros(7)
77  gradient_q[q_index-1] = q_i_current-q_i_desired
78  eta = alpha_scale*gradient_q # this vector is 7 by 1, Notes in Asana
79  jointVelocities = \
80  pseudoInverseJacobian.dot(desired_twist) \
81  + nullSpaceProjector.dot(eta)
82  # add the desired joint positions to the queue
83  point.positions = \
84  (trajectory.points[i-1].positions \
85  + (jointVelocities*dt_point2point)).tolist()
86  time_from_start = time_from_start + dt_point2point
87  point.time_from_start = rospy.Duration.from_sec(time_from_start)
88  trajectory.points.append(point)
89 
90  trajectory.joint_names = ['joint1', 'joint2', 'joint3', 'joint4', 'joint5', 'joint6', 'joint7']
91  goal = FollowJointTrajectoryGoal()
92  goal.trajectory = trajectory
93 
94  action_client.send_goal(goal)
95 
96  action_client.wait_for_result()
97 
98 
99 if __name__ == '__main__':
100  # parsing input arguments
101  parser = argparse.ArgumentParser(description='Redundancy Resolution')
102  parser.add_argument('-q','--q_angle_change', default=-90.0,
103  metavar='[degrees]', type=float,help='desired joint angle change in degrees')
104  parser.add_argument('-i','--index', default=1,
105  metavar='[ith joint]', type=int,
106  help='which joint to set the desired angle (starting from 1st)')
107  parser.add_argument('-a','--alpha', default=-0.5,
108  metavar='[value]', type=float,help='stepsize scaling parameter alpha')
109  args = parser.parse_args()
110  q_angle_change_rad = args.q_angle_change/180.0*np.pi
111  q_index = args.index
112  alpha = -abs(args.alpha)
113 
114  moveit_commander.roscpp_initialize('')
115  rospy.init_node('robot_jogging')
116 
117  client = actionlib.SimpleActionClient('/xarm/xarm7_traj_controller/follow_joint_trajectory',
118  FollowJointTrajectoryAction)
119  client.wait_for_server()
120 
121  arm_group_name = "xarm7"
122  robot = moveit_commander.RobotCommander("robot_description")
123  scene = moveit_commander.PlanningSceneInterface(ns=rospy.get_namespace())
124  arm_group = moveit_commander.MoveGroupCommander(arm_group_name, ns=rospy.get_namespace())
125  display_trajectory_publisher = rospy.Publisher(rospy.get_namespace() + 'move_group/display_planned_path',
126  moveit_msgs.msg.DisplayTrajectory,
127  queue_size=20)
128  redundancy_resolution(q_angle_change_rad, q_index, alpha, client)
129 
def jog(vx, vy, vz, ang_x, ang_y, ang_z, action_client)
def redundancy_resolution(q_i_change, q_index, alpha_scale, action_client)


examples
Author(s):
autogenerated on Wed Dec 2 2020 03:49:07