test.py
Go to the documentation of this file.
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3 import sys
4 import time
5 import rospy
6 ##-- for smach
7 from smach import State,StateMachine
8 import smach_ros
9 ##-- for navigation
10 import yaml
11 import tf
12 import actionlib
13 from actionlib_msgs.msg import *
14 from move_base_msgs.msg import MoveBaseAction, MoveBaseGoal
15 ##-- for find pkg
16 import rospkg
17 ##-- for moveit
18 import moveit_commander
19 import moveit_msgs.msg
20 from geometry_msgs.msg import Pose, PoseStamped
21 import geometry_msgs.msg
22 ##-- for hand control
23 from seed_r7_ros_controller.srv import*
24 
25 
26 ###########################################
27 class NaviAction:
28  def __init__(self):
29  rospack = rospkg.RosPack()
30  rospack.list()
31  path = rospack.get_path('seed_r7_samples')
32  with open(path + '/config/waypoints.yaml') as f:
33  self.config = yaml.load(f)
34  rospy.on_shutdown(self.shutdown)
35  self.ac = actionlib.SimpleActionClient('move_base', MoveBaseAction)
36  while not self.ac.wait_for_server(rospy.Duration(5)):
37  rospy.loginfo("Waiting for the move_base action server to come up")
38  rospy.loginfo("The server comes up");
39  self.goal = MoveBaseGoal()
40 
41  def set_goal(self,_number):
42  rospy.on_shutdown(self.shutdown)
43 
44  rev = dict(self.config[_number]) #List to Dictionary
45 
46  self.goal.target_pose.header.frame_id = 'map'
47  self.goal.target_pose.header.stamp = rospy.Time.now()
48  self.goal.target_pose.pose.position.x = rev['pose']['position']['x']
49  self.goal.target_pose.pose.position.y = rev['pose']['position']['y']
50  self.goal.target_pose.pose.position.z = rev['pose']['position']['z']
51  self.goal.target_pose.pose.orientation.x = rev['pose']['orientation']['x']
52  self.goal.target_pose.pose.orientation.y = rev['pose']['orientation']['y']
53  self.goal.target_pose.pose.orientation.z = rev['pose']['orientation']['z']
54  self.goal.target_pose.pose.orientation.w = rev['pose']['orientation']['w']
55 
56  rospy.loginfo('Sending goal')
57  self.ac.send_goal(self.goal)
58  succeeded = self.ac.wait_for_result(rospy.Duration(60));
59  state = self.ac.get_state();
60  if succeeded:
61  rospy.loginfo("Succeed")
62  return 'succeeded'
63  else:
64  rospy.loginfo("Failed")
65  return 'aborted'
66 
67  def shutdown(self):
68  rospy.loginfo("The robot was terminated")
69  self.ac.cancel_goal()
70 #--------------------------------
71 class GO_TO_PLACE(State):
72  def __init__(self,_place):
73  State.__init__(self, outcomes=['succeeded','aborted'])
74  self.place_ = _place
75 
76  def execute(self, userdata):
77  rospy.loginfo('Going to Place'.format(self.place_))
78  if(na.set_goal(self.place_) == 'succeeded'):return 'succeeded'
79  else: return 'aborted'
80 
81 ###########################################
83  def __init__(self):
84  rospy.loginfo('waiting service')
85  rospy.wait_for_service('/seed_r7_ros_controller/hand_control')
86 
87  def grasp(self):
88  try:
89  service = rospy.ServiceProxy('/seed_r7_ros_controller/hand_control', HandControl)
90  response = service(0,'grasp',100)
91  return True
92  except rospy.ServiceException as e:
93  rospy.logerr('Service call failed: {}'.format(e))
94  return False
95 
96  def release(self):
97  try:
98  service = rospy.ServiceProxy('/seed_r7_ros_controller/hand_control', HandControl)
99  response = service(0,'release',100)
100  return True
101  except rospy.ServiceException as e:
102  rospy.logerr('Service call failed: {}'.format(e))
103  return False
104 
105 
106 
107 ###########################################
109  def __init__(self):
110  self.robot = moveit_commander.RobotCommander()
111  self.scene = moveit_commander.PlanningSceneInterface()
112 
113  self.group = moveit_commander.MoveGroupCommander("rarm_with_torso")
114  self.group.set_pose_reference_frame("base_link")
115 
116  def set_lifter_position(self, x, z, vel=1.0):
117  self.group = moveit_commander.MoveGroupCommander("torso")
118  self.group.set_pose_reference_frame("base_link")
119  self.group.set_end_effector_link("body_link")
120  distance_body_lifter = 1.065 - 0.92
121 
122  listener = tf.TransformListener()
123 
124  while True:
125  try:
126  #listener.waitForTransform('base_link', 'body_link',rospy.Time.now(), rospy.Duration(6.0))
127  (position, quaternion) = listener.lookupTransform('base_link', 'body_link', rospy.Time(0) )
129  continue
130 
131  if(len(position)>0): break
132 
133  target_pose = Pose()
134 
135  target_pose.orientation.x = 0
136  target_pose.orientation.y = 0
137  target_pose.orientation.z = 0
138  target_pose.orientation.w = 1
139 
140  target_pose.position.x = x
141  target_pose.position.y = 0
142  target_pose.position.z = z + distance_body_lifter
143 
144  self.group.set_start_state_to_current_state()
145  self.group.set_pose_target(target_pose)
146  self.group.set_max_velocity_scaling_factor(vel)
147  plan = self.group.plan()
148  if type(plan) is tuple: # for noetic
149  plan = plan[1]
150 
151  if(len(plan.joint_trajectory.points)==0):
152  rospy.logwarn("can't be solved lifter ik")
153  self.group.clear_pose_targets()
154  return 'aborted'
155  else:
156  self.group.execute(plan)
157  return 'succeeded'
158 
159  def set_initial_pose(self):
160  self.group = moveit_commander.MoveGroupCommander("upper_body")
161  self.group.set_named_target("reset-pose")
162  plan = self.group.plan()
163  if type(plan) is tuple: # for noetic
164  plan = plan[1]
165  self.group.go()
166 
167  if(len(plan.joint_trajectory.points)==0):
168  rospy.logwarn("IK can't be solved")
169  self.group.clear_pose_targets()
170  return 'aborted'
171  else:
172  self.group.execute(plan)
173  return 'succeeded'
174 
175 #---------------------------------
176 class MOVE_LIFTER(State):
177  def __init__(self,x,z,vel=1.0):
178  State.__init__(self, outcomes=['succeeded','aborted'])
179  self.x = x
180  self.z = z
181  self.vel = vel
182 
183  def execute(self, userdata):
184  rospy.loginfo('Move Lifter at ({},{}) in scale velocity {}'.format(self.x,self.z,self.vel))
185  if(mc.set_lifter_position(self.x,self.z,self.vel) == 'succeeded'):return 'succeeded'
186  else: return 'aborted'
187 
188 #---------------------------------
189 class INIT_POSE(State):
190  def __init__(self):
191  State.__init__(self, outcomes=['succeeded','aborted'])
192 
193  def execute(self, userdata):
194  rospy.loginfo('initialize wholebody')
195 
196  if(mc.set_initial_pose() == 'succeeded'):return 'succeeded'
197  else: return 'aborted'
198 
199 
200 class FINISH(State):
201  def __init__(self):
202  State.__init__(self, outcomes=['succeeded','aborted'])
203 
204  ## @brief 遷移実行
205  # @param userdata 前のステートから引き継がれた変数。今回は使用しない
206  # @return succeededのみ
207  def execute(self, userdata):
208  rospy.loginfo('FINISHED')
209  return 'succeeded'
210 
211 #==================================
212 #==================================
213 if __name__ == '__main__':
214  rospy.init_node('test_node')
215 
216  na = NaviAction()
219 
220  scenario_play = StateMachine(outcomes=['succeeded','aborted'])
221  with scenario_play:
222  StateMachine.add('DOWN LIFTER', MOVE_LIFTER(0,0.6),\
223  transitions={'succeeded':'FINISH','aborted':'aborted'})
224  StateMachine.add('FINISH', FINISH(),\
225  transitions={'succeeded':'succeeded','aborted':'aborted'})
226 
227  sis = smach_ros.IntrospectionServer('server_name',scenario_play,'/SEED-Noid-Mover Scenario Play')
228  sis.start()
229  scenario_play.execute()
230  time.sleep(0.1)
231  rospy.loginfo('end')
232  sis.stop()
def __init__(self)
Definition: test.py:201
def set_goal(self, _number)
Definition: test.py:41
def set_lifter_position(self, x, z, vel=1.0)
Definition: test.py:116
def grasp(self)
Definition: test.py:87
def __init__(self, _place)
Definition: test.py:72
def release(self)
Definition: test.py:96
def shutdown(self)
Definition: test.py:67
def execute(self, userdata)
Definition: test.py:183
def set_initial_pose(self)
Definition: test.py:159
def __init__(self)
Definition: test.py:190
– for hand control
Definition: test.py:27
def execute(self, userdata)
Definition: test.py:76
def __init__(self)
Definition: test.py:83
def __init__(self)
Definition: test.py:28
def __init__(self)
Definition: test.py:109
def execute(self, userdata)
遷移実行
Definition: test.py:207
def execute(self, userdata)
Definition: test.py:193
def __init__(self, x, z, vel=1.0)
Definition: test.py:177


seed_r7_samples
Author(s):
autogenerated on Sun Apr 18 2021 02:41:07