7 from actionlib
import SimpleActionClient
10 from geometry_msgs.msg
import Pose, Twist, PoseStamped
11 from move_base_msgs.msg
import MoveBaseGoal, MoveBaseFeedback, MoveBaseAction
13 from caster_base.srv
import SetDigitalOutput
14 from caster_app.msg
import DockAction, DockFeedback, DockResult
26 self.
__base_frame = rospy.get_param(
"~base_frame",
"base_footprint")
41 rospy.loginfo(
"dock_pose:")
45 rospy.loginfo(
"wait for movebase server...")
47 rospy.loginfo(
"movebase server connected")
49 self.
__cmd_pub = rospy.Publisher(
'cmd_vel', Twist, queue_size=10)
58 rospy.loginfo(
"Creating ActionServer [%s]\n", name)
63 ps.header.frame_id =
"dock" 70 rospy.logwarn(
"tf 1error, %s" % e)
82 rospy.logwarn(
"rejected, robot has already docked")
83 gh.set_rejected(
None,
"already docked")
85 rospy.loginfo(
"Docking")
86 gh.set_accepted(
"Docking")
90 rospy.logwarn(
"cancel_all_goals")
97 rospy.logwarn(
"rejected, robot is not on charging")
98 gh.set_rejected(
None,
"robot is not on charging")
100 rospy.loginfo(
"Start undock")
101 gh.set_accepted(
"Start undock")
104 rospy.logwarn(
"unknown dock data type, should be true or false")
107 rospy.loginfo(
"set relay %d" % state)
108 rospy.loginfo(
"check caster base service...")
109 rospy.wait_for_service(
'caster_base_node/set_digital_output')
110 rospy.loginfo(
"service exist")
113 set_digital_output = rospy.ServiceProxy(
'caster_base_node/set_digital_output', SetDigitalOutput)
114 resp = set_digital_output(4, state)
115 except rospy.ServiceException, e:
116 print "Service call failed: %s" % e
120 rospy.logwarn(
"cancel callback")
126 ca_feedback = DockFeedback()
132 rospy.logwarn(
"tf error")
135 while delta_distance < self.
__dock_distance-0.30
and not rospy.is_shutdown():
140 delta_distance = math.sqrt(math.pow(current_pose[0]-last_pose[0],2)+math.pow(current_pose[1]-last_pose[1],2)+math.pow(current_pose[2]-last_pose[2],2))
142 ca_feedback.dock_feedback =
"Moving to Dock, %fm left" % (self.
__dock_distance-delta_distance)
145 rospy.loginfo(
"Moving to Dock, %fm left" % (self.
__dock_distance-delta_distance))
148 rospy.logwarn(
"tf error aa")
150 rospy.Rate(20).sleep()
152 ca_feedback.dock_feedback =
"Stop on Dock" 154 rospy.loginfo(
"stop robot")
165 rospy.loginfo(
"Docked")
169 mb_goal = MoveBaseGoal()
170 mb_goal.target_pose.header.stamp = rospy.Time.now()
171 mb_goal.target_pose.header.frame_id = self.
__map_frame 177 rospy.loginfo(
"arrived __dock_ready_pose")
179 rospy.Rate(1).sleep()
181 mb_goal.target_pose.header.stamp = rospy.Time.now()
182 mb_goal.target_pose.header.frame_id = self.
__map_frame 185 rospy.logwarn(
"dock_ready_pose_2 failed")
191 mb_goal.target_pose.pose = t
193 rospy.logwarn(
"move to dock_ready_pose_2")
197 rospy.loginfo(
"arrived dock_ready_pose_2")
205 ca_feedback = DockFeedback()
211 rospy.logwarn(
"tf error")
214 while delta_distance < self.
__dock_distance and not rospy.is_shutdown():
219 delta_distance = math.sqrt(math.pow(current_pose[0]-last_pose[0],2)+math.pow(current_pose[1]-last_pose[1],2)+math.pow(current_pose[2]-last_pose[2],2))
221 ca_feedback.dock_feedback =
"Undock, %fm left" % (self.
__dock_distance-delta_distance)
224 rospy.loginfo(
"Undock, %fm left" % (self.
__dock_distance-delta_distance))
227 rospy.logwarn(
"tf error aa")
229 rospy.Rate(20).sleep()
231 ca_feedback.dock_feedback =
"Stop on DockReady" 233 rospy.loginfo(
"stop robot")
243 self.
__saved_gh.set_succeeded(
None,
"Undocked")
244 rospy.loginfo(
"UnDocked")
247 rospy.init_node(
"dock_server")
253 if __name__ ==
'__main__':
def publish_feedback(self, status, feedback)
def __goal_callback(self, gh)
def __moveto_dock_ready_allin(self)
def __set_charge_relay(self, state)
def __dock_pose_callback(self, data)
def __cancel_callback(self, gh)