コード例 #1
0
    def loop(self):
        # distance away from point in NE
        t = rospy.Time.now().to_sec() % self.circle_period
        added_circle = np.array([self.circle_radius * np.cos(2*np.pi * t / self.circle_period),
                                 self.circle_radius * np.sin(2*np.pi * t / self.circle_period)])

        if self.point_source == SOURCE_NAV_REAL:
            if self.point_ll is None:
                return
            self.ne = fm.geo2ne(self.point_ll, self.circler_origin, self.geo_radius)

        elif self.point_source == SOURCE_NAV_SIM:
            if self.ne is None:
                return

        # elif self.point_source == SOURCE_STATIC:
        #     pass

        req_position = np.zeros(6)
        req_position[0:2] = self.ne + added_circle

        pr = PilotRequest()
        pr.header.stamp = rospy.Time.now()
        pr.position = req_position

        self.pos_req_pub.publish(pr)
コード例 #2
0
    def loop(self):
        if self.switch is False:
            return

        if self.points is None:
            return

        if self.index >= len(self.points):
            rospy.loginfo('%s: Path complete!', self.name)
            self.clear_path()
            return

        if rospy.Time.now().to_sec() - self.t_start > self.timeout:
            rospy.logwarn('%s: Timeout! Clearing the path!', self.name)
            self.clear_path()
            self.send_zero_req()
            return

        des_point = self.points[self.index]

        if self.point_reached(des_point):
            rospy.loginfo('%s: Point reached: %s.', self.name, des_point[0:2])
            self.index += 1
        else:
            pr = PilotRequest()
            pr.header.stamp = rospy.Time.now()
            pr.position = des_point
            self.position_pub.publish(pr)
コード例 #3
0
    def parse_body_req(self, payload_type, id, dispatch_time, body, origin_address):
        values = struct.unpack(FORMAT[payload_type], body)

        pilot_msg = PilotRequest()
        pilot_msg.header.stamp = rospy.Time.from_sec(dispatch_time)
        pilot_msg.position = list(values[0:6])

        self.pub_body.publish(pilot_msg)
コード例 #4
0
    def _do_hover_callback(self, req):
        goal = req.goal.values
        rospy.loginfo(
            "DoHover: received goal [{0}, {1}, {2}, {4}, {5}]".format(
                goal[0], goal[1], goal[2], goal[3], goal[4], goal[5]))
        action_start_time = rospy.get_time()
        timeoutReached = False
        # take the received goal and push it to the motor controls semantics
        # get a publisher
        pub = rospy.Publisher("/pilot/position_req", PilotRequest)

        goalNED = NED()
        goalNED.north, goalNED.east, goalNED.depth = goal[0], goal[1], goal[2]
        goalRPY = RPY()
        goalRPY.roll, goalRPY.pitch, goalRPY.yaw = goal[3], goal[4], goal[5]

        # repeatedly call world waypoint req to move the robot to the goal
        # while the robot is not at teh desired location
        while not (rospy.is_shutdown()
                   or self._nav != None and utils.epsilonEqualsNED(
                       self._nav.position, goalNED, 0.5, depth_e=0.6)
                   and utils.epsilonEqualsY(self._nav.orientation, goalRPY, .2)
                   # we compare on just pitch and yaw for 5 axis robot
                   ):

            # publish the goal repeatedly
            pilotMsg = PilotRequest()
            pilotMsg.position = list(goal)
            pub.publish(pilotMsg)
            # rospy.loginfo("Sent Goal!!")
            rospy.sleep(0.5)

            if timeoutReached:
                return DoHoverResponse(False)
        print("Sleeping for a while ...")
        rospy.sleep(4)
        # pub and subscriber will be removed at the end of executes context
        rospy.loginfo("DoHover: complete")
        return DoHoverResponse(True)
コード例 #5
0
    rospy.sleep(2)

    logNav(log_nav=True, dir_path="/tmp/", file_name_descriptor=str(0))

    for wp in wps:
        wp_msg = PilotRequest()
        wp_msg.disable_axis = [0, 1, 0, 0, 0, 0]
        goal_msg = BehavioursGoal()
        cnt = 0
        while not rospy.is_shutdown():

            if wp != wps[0]:
                angle = math.atan2(wp[1] - _stats.position.east,
                                   wp[0] - _stats.position.north)
                # new_heading = environment.raw_angle_to_goal + _stats.orientation.yaw
                wp_msg.position = [wp[0], wp[1], 0, 0, 0, angle]
            else:
                wp_msg.position = [wp[0], wp[1], 0, 0, 0, wp[2]]

            goal_msg.goal_position = Vector6(
                values=[wp[0], wp[1], 0, 0, 0, wp[2]])

            pub_wp.publish(wp_msg)
            pub_behaviour_goal.publish(goal_msg)

            rospy.sleep(PUBLISH_RATE)

            print("cnt: {0}\ndistance: {1}".format(
                cnt, environment.distance_to_goal))

            if abs(_stats.orientation.yaw - wp[2]) < 0.1:
コード例 #6
0
 def pilotPublishPositionRequest(self, pose):
     request = PilotRequest()
     request.position = pose
     self.pilot_position_request.publish(request)
コード例 #7
0
 def send_zero_req(self):
     br = PilotRequest()
     br.header.stamp = rospy.Time.now()
     br.position = np.zeros(6).tolist()
     rospy.loginfo('%s: Sending stay request at: %s', self.name, self.pose[0:2])
     self.body_pub.publish(br)