Example #1
0
 def noNavigation(self):
     nav_msg = FlightNav()
     nav_msg.header.stamp = rospy.Time.now()
     nav_msg.pos_xy_nav_mode = FlightNav.NO_NAVIGATION
     nav_msg.psi_nav_mode = FlightNav.NO_NAVIGATION
     nav_msg.pos_z_nav_mode = FlightNav.NO_NAVIGATION
     self.navigation(nav_msg)
Example #2
0
    def move_to_xyz_yaw(self,
                        pos_x,
                        pos_y,
                        pos_z,
                        yaw,
                        override_nav_mode=None):
        """move to target x, y position"""
        # send desired position
        nav_msg = FlightNav()

        if override_nav_mode is None:
            nav_mode = self.nav_mode
        else:
            nav_mode = override_nav_mode

        nav_msg.target = nav_msg.COG
        nav_msg.pos_xy_nav_mode = nav_mode
        nav_msg.target_pos_x = pos_x
        nav_msg.target_pos_y = pos_y
        nav_msg.pos_z_nav_mode = nav_msg.POS_MODE
        nav_msg.target_pos_z = pos_z
        nav_msg.psi_nav_mode = nav_msg.POS_MODE
        nav_msg.target_psi = yaw
        time.sleep(self.WAIT_TIME)
        self.nav_control_pub.publish(nav_msg)
        time.sleep(self.WAIT_TIME)
Example #3
0
 def change_yaw(self, psi):
     """ change yaw """
     nav_msg = FlightNav()
     nav_msg.psi_nav_mode = nav_msg.POS_MODE
     nav_msg.target_psi = psi
     time.sleep(self.WAIT_TIME)
     self.nav_control_pub.publish(nav_msg)
     time.sleep(self.WAIT_TIME)
Example #4
0
 def change_height(self, pos_z):
     """ change height """
     nav_msg = FlightNav()
     nav_msg.target = nav_msg.COG
     nav_msg.pos_z_nav_mode = nav_msg.POS_MODE
     nav_msg.target_pos_z = pos_z
     time.sleep(self.WAIT_TIME)
     self.nav_control_pub.publish(nav_msg)
     time.sleep(self.WAIT_TIME)
    def __init__(self):
        self.period = rospy.get_param("~period", 40.0)
        self.radius = rospy.get_param("~radius", 1.0)
        self.init_theta = rospy.get_param("~init_theta", 0.0)
        self.yaw = rospy.get_param("~yaw", True)
        self.loop = rospy.get_param("~loop", False)

        self.nav_pub = rospy.Publisher("uav/nav", FlightNav, queue_size=1)
        self.control_sub = rospy.Subscriber("debug/pose/pid", PoseControlPid,
                                            self.controlCb)

        self.center_pos_x = None
        self.center_pos_y = None

        self.omega = 2 * math.pi / self.period
        self.velocity = self.omega * self.radius

        self.nav_rate = rospy.get_param("~nav_rate", 20.0)  # hz
        self.nav_rate = 1 / self.nav_rate

        self.flight_nav = FlightNav()
        self.flight_nav.target = FlightNav.COG
        self.flight_nav.pos_xy_nav_mode = FlightNav.POS_VEL_MODE
        if self.yaw:
            self.flight_nav.yaw_nav_mode = FlightNav.POS_VEL_MODE

        signal.signal(signal.SIGINT, self.stopRequest)

        time.sleep(0.5)
Example #6
0
 def __init__(self):
     self.x = 0
     self.y = 0
     self.z = 0.5
     self.step = 0.05
     self.uav_nav_pub = rospy.Publisher('/uav/nav', FlightNav, queue_size=1)
     self.desire_nav = FlightNav()
    def goPos(self, target_xy_pos, target_z_pos):
        msg = FlightNav()
        msg.pos_xy_nav_mode = FlightNav.POS_MODE
        msg.psi_nav_mode = FlightNav.NO_NAVIGATION
        msg.pos_z_nav_mode = FlightNav.POS_MODE

        msg.header.stamp = rospy.Time.now()
        msg.control_frame = FlightNav.WORLD_FRAME
        msg.target = FlightNav.COG

        msg.target_pos_x = target_xy_pos[0]
        msg.target_pos_y = target_xy_pos[1]
        msg.target_pos_z = target_z_pos

        self.target_xy_pos_ = target_xy_pos
        self.target_z_pos_ = target_z_pos

        self.uav_nav_pub_.publish(msg)
    def __init__(self):

        self.t = 0
        self.dt = 0.001
        self.z = rospy.get_param("~z", 0.5)
        self.z_diff = rospy.get_param("~z_diff", 0.2)
        self.curve_factor = rospy.get_param("~curve_factor", 0.01)

        self.nav_control_pub = rospy.Publisher("/uav/nav",
                                               FlightNav,
                                               queue_size=1)
        self.desire_nav = FlightNav()
    def __init__(self):

        self.t = 0
        self.dt = 0.01
        self.max = rospy.get_param("~max", 0.8)
        self.min = rospy.get_param("~min", 0.5)
        self.mid = (self.max + self.min) / 2.0
        self.duration = rospy.get_param("~duration", 60)

        self.nav_control_pub = rospy.Publisher("/uav/nav",
                                               FlightNav,
                                               queue_size=1000)
        self.desire_nav = FlightNav()
Example #10
0
    def __init__(self):

        self.t = 0
        self.dt = 0.001
        self.duration = rospy.get_param("~duration", 10)
        self.z = rospy.get_param("~z", 0.5)
        self.z_diff = rospy.get_param("~z_diff", 0.05)

        self.num = 6
        self.nav_control_pub = rospy.Publisher("/uav/nav",
                                               FlightNav,
                                               queue_size=1)
        self.desire_nav = FlightNav()
        while True:
            tar_z = self.mid - (self.max - self.mid) * math.cos(
                2 * math.pi * self.t / self.duration)

            self.desire_nav.pos_z_nav_mode = 2
            self.desire_nav.target_pos_z = tar_z

            self.nav_control_pub.publish(self.desire_nav)
            rospy.sleep(self.dt)

            self.t = self.t + self.dt

            if (self.t > self.duration * 3):
                break


if __name__ == "__main__":

    rospy.init_node("simple_flight_control_sin")

    nav_control_pub = rospy.Publisher("/uav/nav", FlightNav, queue_size=1)
    desire_nav = FlightNav()
    desire_nav.pos_z_nav_mode = 2
    desire_nav.target_pos_z = 0.5
    nav_control_pub.publish(desire_nav)
    rospy.sleep(5.0)

    ceil_approacher = ceil_approach_nav()
    ceil_approacher.tar_track_sin()
Example #12
0
    def goPos(self, frame, target_xy, target_z, target_yaw, gps_mode=False):
        nav_msg = FlightNav()
        if frame == 'global':
            nav_msg.control_frame = nav_msg.WORLD_FRAME
        elif frame == 'local':
            nav_msg.control_frame = nav_msg.LOCAL_FRAME
        else:
            rospy.logerr('invalid frame %s' % (frame))
            return

        target_yaw = (target_yaw + np.pi) % (2 * np.pi) - np.pi

        nav_msg.header.stamp = rospy.Time.now()
        nav_msg.target = FlightNav.BASELINK
        if gps_mode:
            nav_msg.pos_xy_nav_mode = FlightNav.GPS_WAYPOINT_MODE
        else:
            nav_msg.pos_xy_nav_mode = FlightNav.POS_MODE
        nav_msg.pos_z_nav_mode = FlightNav.POS_MODE
        nav_msg.psi_nav_mode = FlightNav.POS_MODE
        if gps_mode:
            nav_msg.target_pos_x = target_xy[0]
            nav_msg.target_pos_y = target_xy[1]
        else:
            nav_msg.target_pos_x = target_xy[0] + self.xy_pos_offset_[0]
            nav_msg.target_pos_y = target_xy[1] + self.xy_pos_offset_[1]
        nav_msg.target_psi = target_yaw
        nav_msg.target_pos_z = target_z

        self.nav_pub_.publish(nav_msg)

        self.target_xy_ = target_xy
        self.target_z_ = target_z
        self.target_yaw_ = target_yaw
Example #13
0
    def init(self):
        rospy.init_node('hydrus_tracking_controller', anonymous=True)

        self.__hydrus_controller_freq = rospy.get_param('~hydrus_controller_freq', 100.0)
        self.__control_mode = rospy.get_param('~control_model', POS_VEL)
        self.__mpc_flag = rospy.get_param('~mpc', False)
        self.__mpc_horizon = rospy.get_param('~mpc_horizon', 1.0)

        if self.__mpc_flag:
            rospy.loginfo("[hydrus_tracking_controller] MPC mode")
            self.__control_mode = MPC
        self.__hydrus_odom = Odometry()
        self.__object_odom = Odometry()
        self.__primitive_params = PrimitiveParams()
        self.__primitive_recv_flag = False
        self.__hydrus_init_process = True

        self.__object_odom_sub = rospy.Subscriber("/vision/object_odom", Odometry, self.__objectOdomCallback)
        self.__hydrus_odom_sub = rospy.Subscriber("/uav/cog/odom", Odometry, self.__hydrusOdomCallback)
        self.__primitive_params_sub = rospy.Subscriber("/track/primitive_params", PrimitiveParams, self.__primitiveParamsCallback)

        self.__hydrus_motion_init_flag_pub = rospy.Publisher('/track/hydrus_motion_init_flag', Empty, queue_size=1)
        self.__hydrus_start_pub = rospy.Publisher('/teleop_command/start', Empty, queue_size=1)
        self.__hydrus_takeoff_pub = rospy.Publisher('/teleop_command/takeoff', Empty, queue_size=1)
        self.__hydrus_nav_cmd_pub = rospy.Publisher("/uav/nav", FlightNav, queue_size=1)
        self.__hydrus_joints_ctrl_pub = rospy.Publisher("/hydrus/joints_ctrl", JointState, queue_size=1)
        self.__mpc_stop_flag_pub = rospy.Publisher('/mpc/stop_cmd', Bool, queue_size=1)
        self.__mpc_target_waypoints_pub = rospy.Publisher('/mpc/target_waypoints', MpcWaypointList, queue_size=1)
        rospy.sleep(1.0)
        self.__hydrus_nav_cmd = FlightNav()
        self.__hydrus_nav_cmd.header.stamp = rospy.Time.now()
        self.__hydrus_nav_cmd.header.frame_id = "world"
        self.__hydrus_nav_cmd.control_frame = self.__hydrus_nav_cmd.WORLD_FRAME
        self.__hydrus_nav_cmd.target = self.__hydrus_nav_cmd.COG
        self.__hydrus_nav_cmd.pos_xy_nav_mode = self.__hydrus_nav_cmd.POS_MODE
        self.__hydrus_nav_cmd.target_pos_x = 0.0
        self.__hydrus_nav_cmd.target_pos_y = 0.0
        self.__hydrus_nav_cmd.pos_z_nav_mode = self.__hydrus_nav_cmd.POS_MODE
        self.__hydrus_nav_cmd.target_pos_z = 2.0
        self.__hydrus_nav_cmd.psi_nav_mode = self.__hydrus_nav_cmd.POS_MODE
        self.__hydrus_nav_cmd.target_psi = -math.pi / 2.0 # 0.0

        self.__hydrus_joints_ctrl_msg = JointState()
        self.__hydrus_joints_ctrl_msg.name.append("joint1")
        self.__hydrus_joints_ctrl_msg.name.append("joint2")
        self.__hydrus_joints_ctrl_msg.name.append("joint3")
        self.__hydrus_joints_ctrl_msg.position.append(math.pi / 2.0)
        self.__hydrus_joints_ctrl_msg.position.append(math.pi / 2.0)
        self.__hydrus_joints_ctrl_msg.position.append(math.pi / 2.0)

        ## hydrus start and takeoff
        if self.__hydrus_init_process:
            rospy.sleep(1.0)
            self.__hydrus_start_pub.publish(Empty())
            rospy.sleep(1.0)
            self.__hydrus_takeoff_pub.publish(Empty())
            rospy.loginfo("Hydrus arming and takeoff command is sent.")
            rospy.sleep(21.0)
            rospy.loginfo("Hydrus takeoff finsihed.")
            self.__hydrus_nav_cmd_pub.publish(self.__hydrus_nav_cmd)
            rospy.sleep(9.0)
            rospy.loginfo("Hydrus moved to initial position.")
            if self.__control_mode == MPC:
                mpc_stop_msg = Bool()
                mpc_stop_msg.data = True
                self.__mpc_stop_flag_pub.publish(mpc_stop_msg)
                rospy.sleep(0.2)
                self.__sendMpcTargetOdom([0.0, 0.0, 0.0], self.__mpc_horizon)
                rospy.sleep(0.2)
                mpc_stop_msg.data = False
                self.__mpc_stop_flag_pub.publish(mpc_stop_msg)
                rospy.loginfo("Start MPC control.")
                rospy.sleep(0.2)
                self.__mpc_start_odom = self.__hydrus_odom

        self.__hydrus_motion_init_flag_pub.publish(Empty())
        rospy.Timer(rospy.Duration(1.0 / self.__hydrus_controller_freq), self.__hydrusControllerCallback)
    ## hawk fly to the fixed position
    hawk_pose_cmd_msg = PoseStamped()
    hawk_pose_cmd_msg.header.frame_id = "world"
    hawk_pose_cmd_msg.pose.position.x = 2.0
    hawk_pose_cmd_msg.pose.position.y = 2.0
    hawk_pose_cmd_msg.pose.position.z = 2.5
    hawk_pose_cmd_pub.publish(hawk_pose_cmd_msg)
    rospy.loginfo("guard robot flys to fixed position")
    rospy.sleep(5)
    rospy.loginfo("guard robot arrives")
    rospy.sleep(15)
    rospy.loginfo("pirate robot takeoffs")

    ## hydrus fly to the fixed position
    hydrus_cmd_msg = FlightNav()
    hydrus_cmd_msg.control_frame = hydrus_cmd_msg.WORLD_FRAME
    hydrus_cmd_msg.target = hydrus_cmd_msg.COG
    hydrus_cmd_msg.pos_xy_nav_mode = hydrus_cmd_msg.POS_MODE
    hydrus_cmd_msg.pos_z_nav_mode = hydrus_cmd_msg.POS_MODE
    hydrus_cmd_msg.psi_nav_mode = hydrus_cmd_msg.POS_MODE
    hydrus_cmd_msg.target_pos_x = 2.0
    hydrus_cmd_msg.target_pos_y = 2.0 - 0.6 * 0.707
    hydrus_cmd_msg.target_pos_z = 2.05
    hydrus_cmd_msg.target_psi = -0.7850
    hydrus_nav_cmd_pub.publish(hydrus_cmd_msg)
    rospy.loginfo("pirate robot flys to grub treasure")
    rospy.sleep(10)

    ## hydrus fly back to the safe position
    hydrus_cmd_msg.target_pos_x = 0.0