diff --git a/action/gotoposition_sensor.action b/action/gotoposition_sensor.action new file mode 100755 index 0000000000000000000000000000000000000000..cacbd29e60cd4cce93443bf43443740370e452d3 --- /dev/null +++ b/action/gotoposition_sensor.action @@ -0,0 +1,8 @@ +#goal definition +geometry_msgs/PoseStamped destination +--- +#result definition +std_msgs/String data +--- +#feedback +geometry_msgs/PoseStamped current_position diff --git a/src/launch/autonomous_offboard_coverage_descend.launch b/src/launch/autonomous_offboard_coverage_descend.launch new file mode 100644 index 0000000000000000000000000000000000000000..8be0a7c5f655c7b51fdd6d401081aea14a1e3f6a --- /dev/null +++ b/src/launch/autonomous_offboard_coverage_descend.launch @@ -0,0 +1,9 @@ +<launch> + <node name="position_control" pkg="autonomous_offboard" type="position_control.py" output="screen" /> + <node name="action_controller_coverage_descend" pkg="autonomous_offboard" type="action_controller_coverage_descend.py" output="screen" /> + <node name="goto_position_server" pkg="autonomous_offboard" type="goto_position_server.py" output="screen" /> + <node name="goto_position_vel_server" pkg="autonomous_offboard" type="goto_position_vel_server.py" output="screen" /> + <node name="tensorflow_detection" pkg="autonomous_offboard" type="tensorflow_hw_mvBlueFox_detection.py" output="screen" /> + <node name="descend_on_object_server" pkg="autonomous_offboard" type="descend_on_object_server.py" output="screen" /> + <node name="obstacle_detection_control" pkg="autonomous_offobard" type="obstacle_detection_control.py" output="screen" /> +</launch> diff --git a/src/launch/autonomous_offboard_gotopos_sensor.launch b/src/launch/autonomous_offboard_gotopos_sensor.launch new file mode 100644 index 0000000000000000000000000000000000000000..7a9b4f948b1c3a806d3986a499a750b3ddadb52b --- /dev/null +++ b/src/launch/autonomous_offboard_gotopos_sensor.launch @@ -0,0 +1,6 @@ +<launch> + <node name="position_control" pkg="autonomous_offboard" type="position_control.py" output="screen" /> + <node name="action_controllerGotopos_sensor" pkg="autonomous_offboard" type="action_controllerGotopos_sensor.py" output="screen" /> + <node name="goto_position_server" pkg="autonomous_offboard" type="goto_position_server.py" output="screen" /> + <node name="gotoposition_sensor_server" pkg="autonomous_offboard" type="gotoposition_sensor_server.py" output="screen" /> +</launch> diff --git a/src/launch/autonomous_offboard_vel_square.launch b/src/launch/autonomous_offboard_vel_square.launch new file mode 100644 index 0000000000000000000000000000000000000000..9602a079e4cdcb3ebcbdb8036c1952e9a42db3d6 --- /dev/null +++ b/src/launch/autonomous_offboard_vel_square.launch @@ -0,0 +1,6 @@ +<launch> + <node name="position_control" pkg="autonomous_offboard" type="position_control.py" output="screen" /> + <node name="action_controller_pid_square" pkg="autonomous_offboard" type="action_controller_pid_square.py" output="screen" /> + <node name="goto_position_server" pkg="autonomous_offboard" type="goto_position_server.py" output="screen" /> + <node name="goto_position_vel_server" pkg="autonomous_offboard" type="goto_position_vel_server.py" output="screen" /> +</launch> diff --git a/src/scripts/action_controllerGotopos_sensor.py b/src/scripts/action_controllerGotopos_sensor.py new file mode 100755 index 0000000000000000000000000000000000000000..5a7ee9638bf0b2deb5c3089596e91c41162e8890 --- /dev/null +++ b/src/scripts/action_controllerGotopos_sensor.py @@ -0,0 +1,37 @@ +#!/usr/bin/env python +import roslib +#roslib.load_manifest('autonomous_offboard') +import rospy +import actionlib +import mavros_state +import time + +from autonomous_offboard.msg import center_on_objectAction, center_on_objectGoal, descend_on_objectAction, descend_on_objectGoal, detect_objectAction, detect_objectGoal,goto_position_velAction, goto_position_velGoal, goto_positionAction, goto_positionGoal, short_grippersAction, short_grippersGoal, long_grippersAction, long_grippersGoal, coverageAction, coverageGoal, gotoposition_sensorAction , gotoposition_sensorGoal + +from std_msgs.msg import Float32 +from geometry_msgs.msg import PoseStamped + +if __name__ == '__main__': + rospy.init_node('action_controllerGotopos_sensor') + gotoposition_sensor_client = actionlib.SimpleActionClient('gotoposition_sensor', gotoposition_sensorAction) + gotoposition_sensor_client.wait_for_server() + gotoposition_sensor_goal = gotoposition_sensorGoal() + mv_state = mavros_state.mavros_state() + print 'Setting offboard' + mv_state.set_mode('OFFBOARD') + print 'Arming vehicle' + mv_state.arm(True) + rospy.loginfo("Taking off") + time.sleep(10) + + rospy.loginfo("First position") + gotoposition_sensor_goal.destination.pose.position.x = 2 + gotoposition_sensor_goal.destination.pose.position.y = 0 + gotoposition_sensor_goal.destination.pose.position.z = 3 + gotoposition_sensor_client.send_goal(gotoposition_sensor_goal) + gotoposition_sensor_client.wait_for_result() + + + time.sleep(10) + + mv_state.land(0.0) diff --git a/src/scripts/action_controller_coverage_descend.py b/src/scripts/action_controller_coverage_descend.py new file mode 100755 index 0000000000000000000000000000000000000000..2709bb59d07ea92927bc2f9d4f65addc6ea4ea8e --- /dev/null +++ b/src/scripts/action_controller_coverage_descend.py @@ -0,0 +1,107 @@ +#!/usr/bin/env python + +import roslib +#roslib.load_manifest('autonomous_offboard') +import rospy +import actionlib +import mavros_state +import time + +from autonomous_offboard.msg import center_on_objectAction, center_on_objectGoal, descend_on_objectAction, descend_on_objectGoal, detect_objectAction, detect_objectGoal,goto_position_velAction, goto_position_velGoal, goto_positionAction, goto_positionGoal, short_grippersAction, short_grippersGoal, long_grippersAction, long_grippersGoal, coverageAction, coverageGoal + +from std_msgs.msg import Float32 +from geometry_msgs.msg import PoseStamped + +if __name__ == '__main__': + rospy.init_node('action_controller_coverage_descend') + goto_position_vel_client = actionlib.SimpleActionClient('goto_position_vel', goto_position_velAction) + goto_position_vel_client.wait_for_server() + goto_position_vel_goal = goto_position_velGoal() + mv_state = mavros_state.mavros_state() + print 'Setting offboard' + mv_state.set_mode('OFFBOARD') + print 'Arming vehicle' + mv_state.arm(True) + rospy.loginfo("Taking off") + time.sleep(10) + + coverage_client = actionlib.SimpleActionClient('coverage', coverageAction) + coverage_client.wait_for_server() + coverage_goal = coverageGoal() + coverage_goal.destination.pose.position.x = 5 + coverage_goal.destination.pose.position.y = 0 + coverage_goal.destination.pose.position.z = 5 + coverage_client.send_goal(coverage_goal) + coverage_client.wait_for_result() + res = PoseStamped() + res = coverage_client.get_result().detected_object_pos + rospy.loginfo("Detected object is at position (x,y,z)=({}, {}, {})".format( + res.pose.position.x, + res.pose.position.y, + res.pose.position.z)) + if res.pose.position.x == float("inf"): + rospy.loginfo("ABORT no object detected. going home") + mv_state.land(0.0) + mv_state.arm(False) + else: + rospy.loginfo("Going to detected position") + goto_position_vel_goal.destination.pose.position.x = coverage_client.get_result().detected_object_pos.pose.position.x + goto_position_vel_goal.destination.pose.position.y = coverage_client.get_result().detected_object_pos.pose.position.y + goto_position_vel_goal.destination.pose.position.z = coverage_client.get_result().detected_object_pos.pose.position.z + goto_position_vel_client.send_goal(goto_position_goal) + goto_position_vel_client.wait_for_result() + rospy.loginfo("Is at position (x,y,z)=({}, {}, {})".format(coverage_client.get_result().detected_object_pos.pose.position.x, + coverage_client.get_result().detected_object_pos.pose.position.y, + coverage_client.get_result().detected_object_pos.pose.position.z)) + + rospy.loginfo("Descending on object") + descend_on_object_client = actionlib.SimpleActionClient('descend_on_object', descend_on_objectAction) + descend_on_object_client.wait_for_server() + rospy.loginfo("Descending server started") + descend_on_object_goal = descend_on_objectGoal() + descend_on_objectGoal = 2.0 + descend_on_object_client.send_goal(descend_on_object_goal) + descend_on_object_client.wait_for_result() + if descend_on_object_client.get_result().position_reached.data: + print("landing") + mv_state.arm(False) + else: + rospy.loginfo("Couldnt land exiting") + + time.sleep(3) + + print 'Setting offboard' + mv_state.set_mode('OFFBOARD') + print 'Arming vehicle' + mv_state.arm(True) + + time.sleep(5) + + rospy.loginfo("Takeoff") + goto_position_goal.destination.pose.position.x = 0 + goto_position_goal.destination.pose.position.y = 0 + goto_position_goal.destination.pose.position.z = 3 + goto_position_client.send_goal(goto_position_goal) + goto_position_client.wait_for_result() + + time.sleep(5) + + rospy.loginfo("Going Home") + goto_position_goal.destination.pose.position.x = -5 + goto_position_goal.destination.pose.position.y = 0 + goto_position_goal.destination.pose.position.z = 3 + goto_position_client.send_goal(goto_position_goal) + goto_position_client.wait_for_result() + + time.sleep(5) + + rospy.loginfo("Landing") + goto_position_vel_goal.destination.pose.position.x = 0 + goto_position_vel_goal.destination.pose.position.y = 0 + goto_position_vel_goal.destination.pose.position.z = -0.1 + goto_position_vel_client.send_goal(goto_position_vel_goal) + goto_position_vel_client.wait_for_result() + rospy.loginfo("Trying to land, 10 second sleep") + time.sleep(10) + + mv_state.arm(False) diff --git a/src/scripts/action_controller_pid_square.py b/src/scripts/action_controller_pid_square.py new file mode 100755 index 0000000000000000000000000000000000000000..c66f2c606440df9dbacf3cb71f91e7d93135d245 --- /dev/null +++ b/src/scripts/action_controller_pid_square.py @@ -0,0 +1,63 @@ +#!/usr/bin/env python +import roslib +#roslib.load_manifest('autonomous_offboard') +import rospy +import actionlib +import mavros_state +import time + +from autonomous_offboard.msg import center_on_objectAction, center_on_objectGoal, descend_on_objectAction, descend_on_objectGoal, detect_objectAction, detect_objectGoal,goto_position_velAction, goto_position_velGoal, goto_positionAction, goto_positionGoal, short_grippersAction, short_grippersGoal, long_grippersAction, long_grippersGoal, coverageAction, coverageGoal + +from std_msgs.msg import Float32 +from geometry_msgs.msg import PoseStamped + +if __name__ == '__main__': + rospy.init_node('action_controller_pid_square') + goto_position_vel_client = actionlib.SimpleActionClient('goto_position_vel', goto_position_velAction) + goto_position_vel_client.wait_for_server() + goto_position_vel_goal = goto_position_velGoal() + mv_state = mavros_state.mavros_state() + print 'Setting offboard' + mv_state.set_mode('OFFBOARD') + print 'Arming vehicle' + mv_state.arm(True) + rospy.loginfo("Taking off") + time.sleep(10) + + rospy.loginfo("First position") + goto_position_vel_goal.destination.pose.position.x = 5 + goto_position_vel_goal.destination.pose.position.y = 0 + goto_position_vel_goal.destination.pose.position.z = 3 + goto_position_vel_client.send_goal(goto_position_vel_goal) + goto_position_vel_client.wait_for_result() + + time.sleep(10) + + rospy.loginfo("Second position") + goto_position_vel_goal.destination.pose.position.x = 0 + goto_position_vel_goal.destination.pose.position.y = -5 + goto_position_vel_goal.destination.pose.position.z = 3 + goto_position_vel_client.send_goal(goto_position_vel_goal) + goto_position_vel_client.wait_for_result() + + time.sleep(10) + + rospy.loginfo("Third position") + goto_position_vel_goal.destination.pose.position.x = -5 + goto_position_vel_goal.destination.pose.position.y = 0 + goto_position_vel_goal.destination.pose.position.z = 3 + goto_position_vel_client.send_goal(goto_position_vel_goal) + goto_position_vel_client.wait_for_result() + + time.sleep(10) + + rospy.loginfo("Fourth position") + goto_position_vel_goal.destination.pose.position.x = 0 + goto_position_vel_goal.destination.pose.position.y = 5 + goto_position_vel_goal.destination.pose.position.z = 3 + goto_position_vel_client.send_goal(goto_position_vel_goal) + goto_position_vel_client.wait_for_result() + + time.sleep(10) + + mv_state.land(0.0) diff --git a/src/scripts/gotoposition_sensor_server.py b/src/scripts/gotoposition_sensor_server.py new file mode 100755 index 0000000000000000000000000000000000000000..213939b31f8be43e17389a6bd47c18d97ca59ea1 --- /dev/null +++ b/src/scripts/gotoposition_sensor_server.py @@ -0,0 +1,94 @@ +#!/usr/bin/env python +import rospy +import actionlib +import math +import tf +import numpy +import time +import autonomous_offboard.msg +from std_msgs.msg import Bool, String, Float32, Float64 +from geometry_msgs.msg import PoseStamped, Quaternion + + + + + + +class gotoposition_sensor_server(): + def __init__(self): + + #---------------Variables---------------# + + self.local_pose = PoseStamped() + self.avoid_pose = PoseStamped() + self.goal_pose = PoseStamped() + self.distance = Float32() + self.yaw = Float32() + + + #---------------Publishers---------------# + self.pose_control = rospy.Publisher('/position_control/set_position', PoseStamped, queue_size=10) + self.mode_control = rospy.Publisher('/position_control/set_mode', String, queue_size=10) + self.vel_control = rospy.Publisher('/position_control/set_velocity', PoseStamped, queue_size=10) + self.velpose_control = rospy.Publisher('/position_control/set_velocityPose',PoseStamped,queue_size=10) + + # ---------------Subscribers---------------# + + rospy.Subscriber('/position_control/distance', Bool, self.distance_reached_cb) + rospy.Subscriber('/position_control/Real_pose', PoseStamped, self._Real_pose_callback) + rospy.Subscriber('/position_control/set_mode', String, self.set_mode_callback) + rospy.Subscriber('/position_control/Yawangle', Float32, self.yaw_callback) + + # ---------------Start---------------# + self.rate = rospy.Rate(20) + self.action_server = actionlib.SimpleActionServer('gotoposition_sensor', autonomous_offboard.msg.gotoposition_sensorAction, + execute_cb=self.execute_cb, auto_start=False) + self.action_server.start() + + def execute_cb(self, goal): + + #Set the orientation before start in position mode. + self.mode_control.publish('velposctr') + Azimut = math.atan2(goal.destination.pose.position.y - self.Real_pose.pose.position.y, + goal.destination.pose.position.x - self.Real_pose.pose.position.x) + quaternion = tf.transformations.quaternion_from_euler(0, 0, Azimut) + goal.destination.pose.orientation.x = quaternion[0] + goal.destination.pose.orientation.y = quaternion[1] + goal.destination.pose.orientation.z = quaternion[2] + goal.destination.pose.orientation.w = quaternion[3] + self.goal_pose = goal.destination + self.velpose_control.publish(goal.destination) + + + while not self.target_reached: + self.rate.sleep() + + rospy.loginfo("Destination reached") + self.action_server.set_succeeded() + + + + def distance_reached_cb(self, data): + self.target_reached = data.data + + def _Real_pose_callback(self, data): + self.Real_pose = data + + + def set_mode_callback(self, data): + self.current_mode = data + + + def yaw_callback(self,data): + self.yaw = data + + + + +if __name__ == '__main__': + try: + + rospy.init_node('gotoposition_sensor_server') + gotoposition_sensor_server() + except rospy.ROSInterruptException: + pass diff --git a/src/scripts/object-detection.pbtxt b/src/scripts/object-detection.pbtxt new file mode 100755 index 0000000000000000000000000000000000000000..e4b0964ee82c2bcf6b341db71c207db31d2cb59f --- /dev/null +++ b/src/scripts/object-detection.pbtxt @@ -0,0 +1,8 @@ +item{ + id: 1 + name: 'UAVFrame' +} +item{ + id: 2 + name: 'UAVCenter' +} diff --git a/src/scripts/object_detection/__init__.pyc b/src/scripts/object_detection/__init__.pyc new file mode 100644 index 0000000000000000000000000000000000000000..76f04a950a6cbb15173c178edca6d055ecf5e35f Binary files /dev/null and b/src/scripts/object_detection/__init__.pyc differ diff --git a/src/scripts/object_detection/core/__init__.pyc b/src/scripts/object_detection/core/__init__.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3a5bc3829bba5d225f3e5eefd2fcd312b281e731 Binary files /dev/null and b/src/scripts/object_detection/core/__init__.pyc differ diff --git a/src/scripts/object_detection/core/standard_fields.pyc b/src/scripts/object_detection/core/standard_fields.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9fa6d9409594225a394faa8026aa207d1e1513ee Binary files /dev/null and b/src/scripts/object_detection/core/standard_fields.pyc differ diff --git a/src/scripts/object_detection/protos/__init__.pyc b/src/scripts/object_detection/protos/__init__.pyc new file mode 100644 index 0000000000000000000000000000000000000000..15d192b685b538b92fb313d2f714fc8f55b7f3cd Binary files /dev/null and b/src/scripts/object_detection/protos/__init__.pyc differ diff --git a/src/scripts/object_detection/protos/string_int_label_map_pb2.pyc b/src/scripts/object_detection/protos/string_int_label_map_pb2.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b1ff27f89c3b50c877b8b6ab799f5a00c6996725 Binary files /dev/null and b/src/scripts/object_detection/protos/string_int_label_map_pb2.pyc differ diff --git a/src/scripts/object_detection/utils/__init__.pyc b/src/scripts/object_detection/utils/__init__.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ea778877dfd133ae4643d44f04215694f9331ebd Binary files /dev/null and b/src/scripts/object_detection/utils/__init__.pyc differ diff --git a/src/scripts/object_detection/utils/label_map_util.pyc b/src/scripts/object_detection/utils/label_map_util.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b4e34170840b7b2e077161fbf2f5432d16c5fd62 Binary files /dev/null and b/src/scripts/object_detection/utils/label_map_util.pyc differ diff --git a/src/scripts/object_detection/utils/visualization_utils.pyc b/src/scripts/object_detection/utils/visualization_utils.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1a8eae62fd32aab5839e9ba436f5a92366ecee2e Binary files /dev/null and b/src/scripts/object_detection/utils/visualization_utils.pyc differ diff --git a/src/scripts/stuff/__init__.pyc b/src/scripts/stuff/__init__.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8077279e27c97a52a8cd785706d20c6c127a1b19 Binary files /dev/null and b/src/scripts/stuff/__init__.pyc differ diff --git a/src/scripts/stuff/helper.pyc b/src/scripts/stuff/helper.pyc new file mode 100644 index 0000000000000000000000000000000000000000..09ac878a88c4ea60668dba0d4b5aefc27d9a1154 Binary files /dev/null and b/src/scripts/stuff/helper.pyc differ