16 from geometry_msgs.msg
import PoseStamped
20 from rclpy.duration
import Duration
25 'shelf_A': [8.21, 1.3, 1.57],
26 'shelf_B': [11.6, 1.3, -1.57],
27 'shelf_C': [12.6, 4.0, -1.57],
28 'shelf_D': [19.0, 4.0, 1.57],
32 shipping_destinations = {
33 'frieght_bay_1': [-6.0, 5.0, 3.14],
34 'frieght_bay_2': [-6.0, 0.0, 3.14],
35 'frieght_bay_3': [-6.0, -5.0, 3.14],
39 Basic item picking demo. In this demonstration, the expectation
40 is that there is a person at the item shelf to put the item on the robot
41 and at the pallet jack to remove it
42 (probably with some kind of button for 'got item, robot go do next task').
51 request_item_location =
'shelf_A'
52 request_destination =
'frieght_bay_3'
57 navigator = BasicNavigator()
60 initial_pose = PoseStamped()
61 initial_pose.header.frame_id =
'map'
62 initial_pose.header.stamp = navigator.get_clock().now().to_msg()
63 initial_pose.pose.position.x = 0.0
64 initial_pose.pose.position.y = 0.0
65 initial_pose.pose.orientation.z = 0.0
66 initial_pose.pose.orientation.w = 1.0
67 navigator.setInitialPose(initial_pose)
70 navigator.waitUntilNav2Active()
72 shelf_item_pose = PoseStamped()
73 shelf_item_pose.header.frame_id =
'map'
74 shelf_item_pose.header.stamp = navigator.get_clock().now().to_msg()
75 shelf_item_pose.pose.position.x = shelf_positions[request_item_location][0]
76 shelf_item_pose.pose.position.y = shelf_positions[request_item_location][1]
78 if shelf_positions[request_item_location][2] > 0:
79 shelf_item_pose.pose.orientation.z = 0.707
80 shelf_item_pose.pose.orientation.w = 0.707
82 shelf_item_pose.pose.orientation.z = -0.707
83 shelf_item_pose.pose.orientation.w = 0.707
84 print(f
'Received request for item picking at {request_item_location}.')
85 navigator.goToPose(shelf_item_pose)
91 while not navigator.isTaskComplete():
93 feedback = navigator.getFeedback()
94 if feedback
and i % 5 == 0:
96 'Estimated time of arrival at '
97 + request_item_location
100 Duration.from_msg(feedback.estimated_time_remaining).nanoseconds
106 result = navigator.getResult()
107 if result == TaskResult.SUCCEEDED:
110 + request_item_location
111 +
'! Bringing product to shipping destination ('
112 + request_destination
115 shipping_destination = PoseStamped()
116 shipping_destination.header.frame_id =
'map'
117 shipping_destination.header.stamp = navigator.get_clock().now().to_msg()
118 shipping_destination.pose.position.x = shipping_destinations[
121 shipping_destination.pose.position.y = shipping_destinations[
124 shipping_destination.pose.orientation.z = 1.0
125 shipping_destination.pose.orientation.w = 0.0
126 navigator.goToPose(shipping_destination)
128 elif result == TaskResult.CANCELED:
130 f
'Task at {request_item_location} was canceled. Returning to staging point...'
132 initial_pose.header.stamp = navigator.get_clock().now().to_msg()
133 navigator.goToPose(initial_pose)
135 elif result == TaskResult.FAILED:
136 print(f
'Task at {request_item_location} failed!')
139 while not navigator.isTaskComplete():
145 if __name__ ==
'__main__':