~shadowrobot/sr-manipulation/fuerte

« back to all changes in this revision

Viewing changes to handle_demo_step_action_servers/src/handle_demo_step_action_servers/place_position_selection_server.py

  • Committer: Toni Oliver
  • Date: 2013-01-07 12:29:36 UTC
  • mfrom: (318.1.30 sr_manipulation)
  • Revision ID: toliver.shadow@gmail.com-20130107122936-m7w8ih78ga55dh0h
Added Event Sequence GUI plugin, Master Controller for the simulated handle demo, and action servers for the different steps of the simulated handle demo.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/usr/bin/env python
 
2
#
 
3
# Copyright 2012 Shadow Robot Company Ltd.
 
4
#
 
5
# This program is free software: you can redistribute it and/or modify it
 
6
# under the terms of the GNU General Public License as published by the Free
 
7
# Software Foundation, either version 2 of the License, or (at your option)
 
8
# any later version.
 
9
#
 
10
# This program is distributed in the hope that it will be useful, but WITHOUT
 
11
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 
12
# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
 
13
# more details.
 
14
#
 
15
# You should have received a copy of the GNU General Public License along
 
16
# with this program.  If not, see <http://www.gnu.org/licenses/>.
 
17
 
 
18
# Author: Toni Oliver
 
19
 
 
20
 
 
21
import roslib; roslib.load_manifest('handle_demo_step_action_servers')
 
22
import rospy
 
23
import actionlib
 
24
 
 
25
from handle_demo_step_actions.msg import PlacePositionSelectionAction, PlacePositionSelectionResult, PlacePositionSelectionFeedback
 
26
from handle_demo_step_actions.srv import PlacePositionSelection
 
27
 
 
28
class PlacePositionSelectionServer(object):
 
29
    def __init__(self):
 
30
        self.service_place_position_selection_from_list = None
 
31
        self.server = actionlib.SimpleActionServer('select_place_position', PlacePositionSelectionAction, self.execute, False)
 
32
        self.server.start()
 
33
        rospy.loginfo("Step actionlib servers: place_position_selection server ready")
 
34
 
 
35
    def init_services(self):
 
36
        """Service setup"""
 
37
        srvname = '/decision_services/place_position_selection'
 
38
        rospy.loginfo("Waiting for service " + srvname)
 
39
        rospy.wait_for_service(srvname)
 
40
        self.service_place_position_selection_from_list = rospy.ServiceProxy(srvname, PlacePositionSelection)
 
41
           
 
42
    def execute(self, goal):
 
43
        self.server.publish_feedback(PlacePositionSelectionFeedback(1, "Select a pose"))
 
44
        
 
45
        self.init_services()
 
46
        
 
47
        try:
 
48
            self.selection_srv_response = self.service_place_position_selection_from_list(goal.initial_pose_of_the_object)
 
49
        except rospy.ServiceException, e:
 
50
            print "Service did not process request: %s" % str(e)
 
51
            self.server.publish_feedback(PlacePositionSelectionFeedback(100, "Error: position selection service error"))
 
52
            self.server.set_aborted()
 
53
            return
 
54
        
 
55
         
 
56
        self.server.publish_feedback(PlacePositionSelectionFeedback(100, "Position selected: x=" + str(self.selection_srv_response.selected_place_pose.pose.position.x) + 
 
57
                                                                    " y=" + str(self.selection_srv_response.selected_place_pose.pose.position.y) +
 
58
                                                                    " z=" + str(self.selection_srv_response.selected_place_pose.pose.position.z)))
 
59
 
 
60
        self.server.set_succeeded(PlacePositionSelectionResult(self.selection_srv_response.selected_place_pose))
 
61
 
 
62
 
 
63
if __name__ == '__main__':
 
64
    rospy.init_node('place_position_selection_server')
 
65
    server = PlacePositionSelectionServer()
 
66
    rospy.spin()
 
 
b'\\ No newline at end of file'