예제 #1
0
    def cbPose(self, lane_pose_msg):
        self.lane_reading = lane_pose_msg
        #rospy.loginfo(self.lane_reading.d)
        self.phi = self.lane_reading.phi
        self.d = self.lane_reading.d  #3*(self.lane_reading.d -0.125)

        self.list_d.append(self.d)
        self.list_d.pop(0)
        self.list_phi.append(self.phi)
        self.list_phi.pop(0)
        avg_d = sum(self.list_d) / float(len(self.list_d))
        avg_phi = sum(self.list_phi) / float(len(self.list_phi))
        rospy.loginfo("D:       " + str(avg_d))
        rospy.loginfo("Phi:     " + str(avg_phi))
        # Distance between wheels
        b = 0.1
        # Standard velocity
        gain = 0.5
        v0g = 0.2
        v0 = 0.145 / 0.3 * v0g
        gain_p = 2
        #self.s = b/2/v0 * avg_d*gain - b*avg_phi*gain
        self.s = b / 2 / v0 * self.d * gain - b * self.phi * gain_p

        header = std_msgs.msg.Header()
        header.stamp = rospy.Time.now()
        wcs = WheelsCmdStamped()
        wcs.header = header
        wcs.vel_left = v0g - self.s / 2
        wcs.vel_right = v0g + self.s / 2
        self.pub_wheels_cmd.publish(wcs)
예제 #2
0
 def cbTimer(self, event):
     header = std_msgs.msg.Header()
     header.stamp = rospy.Time.now()
     wcs = WheelsCmdStamped()
     wcs.header = header
     wcs.vel_left = 0.2 + 0.15 * math.cos(time.time() * 2 * math.pi / 2)
     wcs.vel_right = 0.2 + 0.05 * math.sin(time.time() * 2 * math.pi / 2)
     self.pub_wheels_cmd.publish(wcs)
예제 #3
0
 def on_shutdown(self):
     rospy.loginfo("[%s] Shutting down." % (self.node_name))
     h = std_msgs.msg.Header()
     h.stamp = rospy.Time.now()
     wcs = WheelsCmdStamped()
     wcs.header = h
     wcs.vel_left = 0
     wcs.vel_right = 0
     self.pub_wheels_cmd.publish(wcs)
    def carCmdCallback(self, msg_car_cmd):
        [d_L, d_R] = self.ik.evaluate(msg_car_cmd.omega, msg_car_cmd.v)

        # Put the wheel commands in a message and publish
        msg_wheels_cmd = WheelsCmdStamped()
        msg_wheels_cmd.header = msg_car_cmd.header

        msg_wheels_cmd.vel_left = d_L
        msg_wheels_cmd.vel_right = d_R
        self.pub_wheels_cmd.publish(msg_wheels_cmd)
예제 #5
0
    def carCmdCallback(self, msg_car_cmd):
        [d_L, d_R] = self.ik.evaluate(msg_car_cmd.omega, msg_car_cmd.v)

        # Put the wheel commands in a message and publish
        msg_wheels_cmd = WheelsCmdStamped()
        msg_wheels_cmd.header = msg_car_cmd.header

        msg_wheels_cmd.vel_left = d_L
        msg_wheels_cmd.vel_right = d_R
        self.pub_wheels_cmd.publish(msg_wheels_cmd)
예제 #6
0
    def cbDetections(self, detections_msg):
        if self.too_close:
            minDist = 999999999999999999999.0
            offset = 0.0
            # + -> offset to left in lane
            # - -> offset to right in lane
            for projected in detections_msg.list:
                # ~0.23 is the lane width

                # goes through each object- duckie or cone
                # add if statement here to handle duckie different than cone
                if projected.type.type == ObstacleType.DUCKIE:
                    stop = WheelsCmdStamped()
                    stop.header = bool_msg.header
                    stop.vel_left = 0.0
                    stop.vel_right = 0.0
                    #stop while the object is still there, and move when the coast is clear
                else:
                    if projected.distance < minDist and abs(
                            projected.location.y) < 0.15:
                        minDist = projected.distance
                        y = projected.location.y
                        # + y -> obstacle to the left, drive right (set offset negative)
                        # - y -> obstacle to the right, drive left (set offset positive)
                        if y > 0:
                            offset = (-0.15 - y) * 1.5
                        else:
                            offset = (0.15 - y) * 1.5
                    # add else here
                #Hijack the param for seting offset of the lane

                rospy.set_param("lane_controller_node/d_offset", offset)
        else:
            #Reset offset of lane to 0
            rospy.set_param("lane_controller_node/d_offset", 0.0)
        # stop = WheelsCmdStamped()
        # stop.header = bool_msg.header
        # stop.vel_left = 0.0
        # stop.vel_right = 0.0

        # Slow it down so it's easier to see what's going on for now
        self.lane_control.vel_left = self.lane_control.vel_left
        self.lane_control.vel_right = self.lane_control.vel_right
        self.pub_wheels_cmd.publish(self.lane_control)