def drive_straight(self):
        while not rospy.is_shutdown():
            drive_msg_stamped = AckermannDriveStamped()
            drive_msg = AckermannDrive()
            drive_msg.speed = 2.0
            drive_msg.steering_angle = 0.0
            drive_msg.acceleration = 0
            drive_msg.jerk = 0
            drive_msg.steering_angle_velocity = 0
            drive_msg_stamped.drive = drive_msg
            self.pub.publish(drive_msg_stamped)

            if (SPEED == 0):
                drive_msg_stamped = AckermannDriveStamped()
                drive_msg = AckermannDrive()
                drive_msg.speed = 0.0
                drive_msg.steering_angle = 0.0
                drive_msg.acceleration = 0
                drive_msg.jerk = 0
                drive_msg.steering_angle_velocity = 0
                drive_msg_stamped.drive = drive_msg
                self.pub.publish(drive_msg_stamped)
                rospy.sleep(5000)

            # don't spin too fast
            rospy.sleep(1.0 / PUBLISH_RATE)
 def stop_vehicle(self):
     msg = AckermannDrive()
     msg.speed = 0
     msg.acceleration = 0
     msg.jerk = 0
     msg.steering_angle = 0
     msg.steering_angle_velocity = 0
     self.pub_ackermann_cmd.publish(msg)
     rospy.signal_shutdown('Made it to goal')
Example #3
0
 def stop(self):
     drive_msg_stamped = AckermannDriveStamped()
     drive_msg = AckermannDrive()
     drive_msg.speed = 0
     drive_msg.steering_angle = 0
     drive_msg.acceleration = 0
     drive_msg.jerk = 0
     drive_msg.steering_angle_velocity = 0
     drive_msg_stamped.drive = drive_msg
     self.drive_pub.publish(drive_msg_stamped)
Example #4
0
 def drive(self, speed, angle):
     drive_msg_stamped = AckermannDriveStamped()
     drive_msg = AckermannDrive()
     drive_msg.speed = speed
     drive_msg.steering_angle = angle
     drive_msg.acceleration = 0
     drive_msg.jerk = 0
     drive_msg.steering_angle_velocity = 0
     drive_msg_stamped.drive = drive_msg
     self.pub.publish(drive_msg_stamped)
Example #5
0
 def apply_control(self, speed, steering_angle):
     self.actual_speed = speed
     drive_msg_stamped = AckermannDriveStamped()
     drive_msg = AckermannDrive()
     drive_msg.speed = speed
     drive_msg.steering_angle = steering_angle
     drive_msg.acceleration = 0
     drive_msg.jerk = 0
     drive_msg.steering_angle_velocity = 0
     drive_msg_stamped.drive = drive_msg
     self.control_pub.publish(drive_msg_stamped)
Example #6
0
 def tape_present(self, msg):
     frame = self.bridge.imgmsg_to_cv2(msg, "mono8")
     white_pixels = cv2.countNonZero(frame)
     if white_pixels < MIN_PIXELS_TO_DRIVE:
         drive_msg_stamped = AckermannDriveStamped()
         drive_msg = AckermannDrive()
         drive_msg.speed = 0.0
         drive_msg.steering_angle = 0.0
         drive_msg.jerk = 0
         drive_msg.steering_angle_velocity = 0
         drive_msg_stamped.drive = drive_msg
         self.pub.publish(drive_msg_stamped)
Example #7
0
 def stop(self):
     print "Stopping"
     drive_msg_stamped = AckermannDriveStamped()
     drive_msg_stamped.header = utils.make_header("/base_link")
     drive_msg = AckermannDrive()
     drive_msg.speed = 0
     drive_msg.steering_angle = 0
     drive_msg.acceleration = 0
     drive_msg.jerk = 0
     drive_msg.steering_angle_velocity = 0
     drive_msg_stamped.drive = drive_msg
     self.control_pub.publish(drive_msg_stamped)
Example #8
0
 def apply_control(self, speed, steering_angle):
     self.actual_speed = speed
     drive_msg_stamped = AckermannDriveStamped()
     drive_msg_stamped.header = utils.make_header("/base_link")
     drive_msg = AckermannDrive()
     drive_msg.speed = speed
     # 正为左转,负为右转
     drive_msg.steering_angle = steering_angle
     drive_msg.acceleration = 0
     drive_msg.jerk = 0
     drive_msg.steering_angle_velocity = 0
     drive_msg_stamped.drive = drive_msg
     self.control_pub.publish(drive_msg_stamped)
Example #9
0
def callback(data):
    speed = data.linear.x 
    turn = data.angular.z

    msg = AckermannDrive()


    msg.speed = speed
    msg.acceleration = 1
    msg.jerk = 1
    msg.steering_angle = turn
    msg.steering_angle_velocity = 1

    pub.publish(msg)
Example #10
0
    def drive(self, tags_tan):
        turning_factor = self.get_turning_factor(tags_tan)

        drive_msg_stamped = AckermannDriveStamped()
        drive_msg = AckermannDrive()
        drive_msg.speed = MAX_SPEED - abs(turning_factor / 2)
        drive_msg.steering_angle = self.get_steering_angle(turning_factor)
        drive_msg.acceleration = 0.0
        drive_msg.jerk = 0.0
        drive_msg.steering_angle_velocity = 0.1
        drive_msg_stamped.drive = drive_msg

        self.previous_steering_angle = drive_msg.steering_angle
        self.pub.publish(drive_msg_stamped)
Example #11
0
def driveTest():
	rp.init_node("pleaseWork",anonymous = False)
	pub=rp.Publisher("/vesc/ackermann_cmd_mux/input/navigation",AckermannDriveStamped,queue_size=10)
	rate=rp.Rate(60)
	drive_msg_stamped = AckermannDriveStamped()
	drive_msg = AckermannDrive()
       	drive_msg.speed = 0.8
        drive_msg.steering_angle = 1.0
        drive_msg.acceleration = 0
        drive_msg.jerk = 0
        drive_msg.steering_angle_velocity = 0
	drive_msg_stamped.drive = drive_msg
	while True:
		pub.publish(drive_msg_stamped)
		rate.sleep()
    def path_tracking(self, event):
        if self.path and self.state:
            if self.path.x_states[0] == -100:  # shutdown procedure
                self.stop_vehicle()
            else:
                cx = self.path.x_states
                cy = self.path.y_states
                cyaw = self.path.yaw_states
                # for i in range(len(cyaw)):
                #     cyaw[i] -= math.radians(270)

                #self.target_index = pure_pursuit.calculate_target_index(self.state, cx, cy)
                target_index, mind = stanley_controller.calc_target_index(
                    self.state, cx, cy)

                ai = pure_pursuit.pid_control(self.target_speed, self.state.v)
                #di, self.target_index = pure_pursuit.pure_pursuit_control(self.state,
                #                                                          cx,
                #                                                          cy,
                #                                                          self.target_index)
                di, target_index = stanley_controller.stanley_control(
                    self.state, cx, cy, cyaw, target_index)

                print(self.state.v, di)
                self.state.v = self.state.v + ai * self.dt
                if di > self.max_steering_angle:
                    di = self.max_steering_angle
                if di < -self.max_steering_angle:
                    di = -self.max_steering_angle

                if self.state.v > self.target_speed:
                    self.state.v = self.target_speed

                rospy.loginfo("path_tracking_node: v: " + str(self.state.v) +
                              " steering: " + str(di))
                msg = AckermannDrive()
                msg.speed = 0.50
                msg.acceleration = 0.5
                msg.jerk = 1.0
                msg.steering_angle = di
                msg.steering_angle_velocity = 1

                self.pub_ackermann_cmd.publish(msg)
Example #13
0
    def drive(self):
        while not rospy.is_shutdown():
            if self.received_data is None or self.parsed_data is None:
                rospy.sleep(0.5)
                continue

            if np.any(self.parsed_data['front'][:, 0] < MIN_FRONT_DIST):
                rospy.loginfo("stoping!")
                drive_msg_stamped = AckermannDriveStamped()
                drive_msg = AckermannDrive()
                drive_msg.speed = 0.0
                drive_msg.steering_angle = 0.0
                drive_msg.acceleration = 0
                drive_msg.jerk = 0
                drive_msg.steering_angle_velocity = 0
                drive_msg_stamped.drive = drive_msg
                self.pub.publish(drive_msg_stamped)

            rospy.sleep(.1)
Example #14
0
    def drive(self):
        while not rospy.is_shutdown():
            if self.received_data is None or self.parsed_data is None:
                rospy.sleep(0.5)
                continue

            if np.any(self.parsed_data['front'][:, 0] < MIN_FRONT_DIST):
                rospy.loginfo("stoping!")
                # this is overkill to specify the message, but it doesn't hurt
                # to be overly explicit
                drive_msg_stamped = AckermannDriveStamped()
                drive_msg = AckermannDrive()
                drive_msg.speed = 0.0
                drive_msg.steering_angle = 0.0
                drive_msg.acceleration = 0
                drive_msg.jerk = 0
                drive_msg.steering_angle_velocity = 0
                drive_msg_stamped.drive = drive_msg
                self.pub.publish(drive_msg_stamped)

            # don't spin too fast
            rospy.sleep(.1)
Example #15
0
    def __init__(self):
        self.pub = rospy.Publisher("ackermann_cmd",\
                AckermannDriveStamped, queue_size =1 )
        while not rospy.is_shutdown():

            drive_msg_stamped = AckermannDriveStamped()
            drive_msg = AckermannDrive()
            header_msg = Header()
            drive_msg.speed = 1
            drive_msg.steering_angle = 0.1
            drive_msg.acceleration = 0
            drive_msg.jerk = 0
            drive_msg.steering_angle_velocity = 0
            drive_msg_stamped.drive = drive_msg

            header_msg.stamp = rospy.Time.now()
            header_msg.frame_id = '1'
            drive_msg_stamped.header = header_msg

            pub = rospy.Publisher('/ackermann_cmd',
                                  AckermannDriveStamped,
                                  queue_size=1)
            pub.publish(drive_msg_stamped)
Example #16
0
    def apply_control(self):
        while not rospy.is_shutdown():
            if self.control is None:
                print "No control data"
                rospy.sleep(0.5)
            else:
                self.steering_hist.append(self.control[0])
                # smoothed_steering = self.steering_hist.mean()
                smoothed_steering = self.steering_hist.median()

                # print smoothed_steering, self.control[0]
                
                drive_msg_stamped = AckermannDriveStamped()
                drive_msg = AckermannDrive()
                drive_msg.speed = self.control[1]
                drive_msg.steering_angle = smoothed_steering
                drive_msg.acceleration = 0
                drive_msg.jerk = 0
                drive_msg.steering_angle_velocity = 0
                drive_msg_stamped.drive = drive_msg
                self.pub.publish(drive_msg_stamped)

                rospy.sleep(1.0/PUBLISH_RATE)
Example #17
0
def talker():
    angle_new = 0.5
    angle_old = 0.4
    acceleration = 0.5
    velocity = 0
    deltat = 0.1
    pub = rospy.Publisher('/carla/ego_vehicle/ackermann_cmd', AckermannDrive, queue_size=10)
    rospy.init_node('CAV_talker', anonymous=True)
    rate = rospy.Rate(10) # 10hz
    angle_vel = 2
    speed = 10
    jerk = 1
    while not rospy.is_shutdown():
        # control_cmd = "{steering_angle: %f, steering_angle_velocity: %f, speed: %f, acceleration: %f, jerk: 0.0}" % (angle_new,angle_vel,speed,acceleration)
        #control_cmd = ['%f'%(angle_new),'%f'%(angle_vel),'%f'%(speed),'%f'%(acceleration),'%f'%(jerk)]
        control_cmd = AckermannDrive()
        control_cmd.steering_angle = angle_new
        control_cmd.steering_angle_velocity = angle_vel
        control_cmd.speed = speed
        control_cmd.acceleration = acceleration
        control_cmd.jerk = jerk
        rospy.loginfo(control_cmd)
        pub.publish(control_cmd)
        rate.sleep()
Example #18
0
    def drive(self):
        while not rospy.is_shutdown():
            if self.received_data is None or self.parsed_data is None:
                rospy.sleep(0.5)
                continue

            if np.any(self.parsed_data['front'][:, 0] < MIN_FRONT_DIST):
                rospy.loginfo("stoping!")
                msg = String()
                msg.data = 'stop_event'
                self.failsafe_pub.publish(msg)
                # just in case
                drive_msg_stamped = AckermannDriveStamped()
                drive_msg = AckermannDrive()
                drive_msg.speed = 0
                drive_msg.steering_angle = 0
                drive_msg.acceleration = 0
                drive_msg.jerk = 0
                drive_msg.steering_angle_velocity = 0
                drive_msg_stamped.drive = drive_msg
                self.pub.publish(drive_msg_stamped)

            # don't spin too fast
            rospy.sleep(.1)
def main_fonk(data, a):
    global x, y, paylas
    global cur_pos, q_goal, angular_speed, linear_speed, linear_unit, angular_unit
    global cur_action, next_action_time

    linear_speed = 0.5
    angular_speed = 0.5
    linear_unit = 0.5
    rate = rospy.Rate(20)
    angular_unit = math.pi / 6.

    # Initialize points
    cur_pos.x = x
    cur_pos.y = y
    start_position = cur_pos
    q_goal.z = 0.0

    # Bayraklar
    cur_action = 'gf'  # 'tl': sola dön; 'tr': sağa dön; 'fw': düz ilerle

    # Set parameters for actions
    next_action_time = rospy.Time.now()  # zaman hareketi başlıyor
    safe_distance = 2.0  # bir engele yakalaşılacak min nokta
    goal_tolarence = 1.5  # hedefe olan tolerans

    if a == True:
        print("\nAraç hedefe yöneliyor!")
        i = 0
        for p in data:
            q_goal.x = p[0]
            q_goal.y = p[1]
            if paylas == False:
                break
            # eğer hedefe uzaksam ve ros kapanmadı ise döngüye başla (kontrol döngüsü)
            while get_distance_between(
                    cur_pos,
                    q_goal) > goal_tolarence and not rospy.is_shutdown():
                global regions_
                get_goal_direction()  # yön bul

                ackerman = AckermannDrive()
                ackerman.steering_angle_velocity = 0.0
                ackerman.acceleration = 0.5
                ackerman.jerk = 0.0
                if cur_action == 'tr':
                    ackerman.speed = linear_speed
                    ackerman.steering_angle = -angular_speed
                elif cur_action == 'tl':
                    ackerman.speed = linear_speed
                    ackerman.steering_angle = angular_speed
                elif cur_action == 'gf':
                    ackerman.steering_angle = 0.0
                    ackerman.speed = linear_speed
                elif cur_action == 'lgf':
                    ackerman.steering_angle = 0.0
                    ackerman.steering_angle = angular_speed + 0.25  #geriye dönerken yönünü daha fazla çevirir
                    ackerman.speed = -linear_speed
                elif cur_action == 'rgf':
                    ackerman.steering_angle = 0.0
                    ackerman.steering_angle = -angular_speed - 0.25  #geriye dönerken yönünü daha fazla çevirir
                    ackerman.speed = -linear_speed
                else:
                    print("[Hata Durumu]")
                    break

                cmd_vel_pub.publish(ackerman)
                rate.sleep()

                # pozisyon güncellendi
                cur_pos.x = x
                cur_pos.y = y

                # hedefe ulaşmak kontrol ediliyor
                if get_distance_between(cur_pos, q_goal) <= goal_tolarence:
                    i = i + 1
                    print i, ". hedefe ulaşıldı!!!"
                    break

    elif paylas == False:
        a = False
        print("Araç yeni hedef bekliyor!")
        cur_action = 'stop'
        ackerman = AckermannDrive()
        ackerman.steering_angle_velocity = 0.0
        ackerman.acceleration = 0.0
        ackerman.jerk = 0.0
        if cur_action == 'stop':
            ackerman.speed = 0.0
            ackerman.steering_angle = 0.0
            cmd_vel_pub.publish(ackerman)
Example #20
0
    def timer_cb(self, event):
        cmd_msg = AckermannDrive()
        current_time = rospy.get_time()
        # delta_t = current_time - self.time
        delta_t = self.time_step
        # delta_t = 0.05
        self.time = current_time
        jerk = 2.0

        # cmd_msg.header.stamp = rospy.Time.now()
        cmd_msg.steering_angle = 0.0
        cmd_msg.steering_angle_velocity = 0.0
        cmd_msg.speed = 0.0
        cmd_msg.acceleration = 0.0
        cmd_msg.jerk = jerk

        if self.pathReady and self.stateReady:
            pos_x, pos_y = self.state.get_position()

            # pick target w/o collision avoidance, closest point on the traj and one point ahead
            _, idx = self.path_tree.query([pos_x, pos_y])
            # Target point for steering
            if idx < self.traj_steps - 3:
                target_pt = self.path_tree.data[idx + 3, :]
                # str_idx = idx + 2
            else:
                target_pt = self.path_tree.data[-1, :]
                # str_idx = self.vel_path.shape[0] - 1
                print("CONTROLLER: at the end of the desired waypoits!!!")
            # Target point for velocity
            if idx < self.traj_steps:
                target_vel = self.vel_path[idx, :]
                # str_idx = idx + 2
            else:
                target_vel = self.vel_path[-1, :]
                # str_idx = self.vel_path.shape[0] - 1

            target_speed = np.linalg.norm(target_vel)

            speed_diff = target_speed - self.state.get_speed()
            # pos_diff = target_pt - self.state.get_position()
            # acceleration = cmd_msg.acceleration + 2.0*(
            #     pos_diff/self.time_step**2.0 - speed_diff/self.time_step
            # )
            acceleration = abs(speed_diff) / (2.0 * delta_t)
            cmd_msg.acceleration = np.min([1.5, acceleration])
            steer = self.compute_ackermann_steer(target_pt)

            steer_diff = abs(steer - self.steer_prev)
            if steer_diff >= 0.3:
                print("      0.3")
                steer = self.steer_prev
            elif steer_diff >= 0.05:
                print("          0.05")
                acceleration = 0.0
                target_speed = target_speed / 5.0

            self.steer_prev = steer

            if self.state.get_speed() - target_speed > 0.0:
                # cmd_msg.acceleration = acceleration - 5
                acceleration = -100.0
                cmd_msg.speed = target_speed / 5.0
                jerk = 1000.0
            elif target_speed - self.state.get_speed() > 0.2:
                acceleration = np.min([3.0, acceleration])
            else:
                acceleration = 0.0

            cmd_msg.steering_angle = steer
            cmd_msg.speed = target_speed
            cmd_msg.acceleration
            cmd_msg.jerk = jerk

            # Print out some debugging information
            if abs(target_speed - self.max_speed) > 2.0:
                # print("Posit diff:", pos_diff)
                print("Speed diff:", speed_diff)
                print("Current speed:", self.state.get_speed())
                print("Desired speed:", target_speed)
                print("Desired accel:", acceleration)
                print("Desired jerk:", jerk)
                print("Speed (sent):", cmd_msg.speed)
                print("Accel (sent):", cmd_msg.acceleration)
                print("Jerk  (sent):", cmd_msg.jerk)
                print("delta t:", delta_t)

            # for visualization purposes and debuging control node
            mk_msg = Marker()
            mk_msg.header.stamp = rospy.Time.now()
            mk_msg.header.frame_id = 'map'
            mk_msg.pose.position.x = target_pt[0]
            mk_msg.pose.position.y = target_pt[1]
            mk_msg.type = Marker.CUBE
            mk_msg.scale.x = 3
            mk_msg.scale.y = 3
            mk_msg.scale.z = 3
            mk_msg.color.a = 1.0
            mk_msg.color.r = 1
            mk_msg.color.b = 1
            self.tracking_pt_viz_pub.publish(mk_msg)

        # self.vehicle_cmd_pub.publish(vehicle_cmd_msg)
        self.command_pub.publish(cmd_msg)
Example #21
0
    def convert_to_ackermann(self, joy_msg):
        axes = joy_msg.axes
        buttons = joy_msg.buttons

        if buttons[7] == 1:  # button a clicked
            self.start_autonomous = not self.start_autonomous
            bool_msg = Bool()
            bool_msg = self.start_autonomous
            self.pub_start_autonomous.publish(bool_msg)

            if self.start_autonomous:
                rospy.loginfo("joy_to_ackermann: start autonomous mode")
                self.timer.shutdown()
            else:
                rospy.loginfo("joy_to_ackermann: start manual mode")
                self.timer = rospy.Timer(rospy.Duration(0.1), self.publish_cmd)

        if buttons[3] == 1:  # button y clicked
            self.front_camera = not self.front_camera
            bool_msg = Bool()
            bool_msg = self.front_camera
            self.pub_switch_cameras.publish(bool_msg)

        if axes[-1] == 1:  # up on the D pad
            self.max_motor_vel += 0.05
            rospy.loginfo(
                "joy_to_ackermann: max motor velocity increased to: " +
                str(self.max_motor_vel))
            msg = Float32()
            msg.data = self.max_motor_vel
            self.pub_max_vel.publish(msg)
        elif axes[-1] == -1:  # down on the D pad
            self.max_motor_vel -= 0.05
            rospy.loginfo(
                "joy_to_ackermann: max motor velocity increased to: " +
                str(self.max_motor_vel))
            msg = Float32()
            msg.data = self.max_motor_vel
            self.pub_max_vel.publish(msg)

        if buttons[2] == 1:  # button x clicked
            motor_velocity = 0
            steering_angle = 0

        else:
            steering_axis = axes[0]
            reverse_trigger = axes[2]
            gas_trigger = axes[5]

            # convert to speed
            if gas_trigger == 1 and reverse_trigger == 1:
                motor_velocity = 0
            elif reverse_trigger != 1:
                motor_velocity = -1 * abs(reverse_trigger * self.max_motor_vel)
            else:
                motor_velocity = abs(gas_trigger * self.max_motor_vel)

            # convert to steering angle and reverse it since
            # the xbox controller returns right in the negatives
            steering_angle = steering_axis * self.max_steering_angle
            steering_angle *= -1

        msg = AckermannDrive()
        msg.speed = motor_velocity
        msg.acceleration = 1
        msg.jerk = 1
        msg.steering_angle = -1 * steering_angle
        msg.steering_angle_velocity = 1
        self.current_cmd_msg = msg
        print(msg)
from ackermann_msgs.msg import AckermannDrive



car_ctrl = e2o_ctrl()
car_ctrl.Accel = 0
car_ctrl.Brake = 0
car_ctrl.Steer = 0
car_ctrl.RNDB = 'N'

ackermann_ctrl = AckermannDrive()
ackermann_ctrl.steering_angle_velocity = 1
ackermann_ctrl.speed = 0 
ackermann_ctrl.steering_angle = 0 
ackermann_ctrl.acceleration = 0
ackermann_ctrl.jerk = 0 

last_speed = 0
a1	= 0.2			# if input acceleration is "'a' then top speed that can be reached is a*a1
a2	= 0.02/50		# increment speed by a2*a
a3	= 0.005/50		# decrement speed by a3*a
b1	= 1.0/1500		# decrement speed by b1*brake %
c1	= 1.0/1000		# when gear is neutral, decrement speed by c1

print("a1 ", a1)
print("a2 ", a2)
print("a3 ", a3)
print("b1 ", b1)
print("c1 ", c1)

#INITIALISE VARIABLES
Example #23
0
#!/usr/bin/env python
import rospy
from std_msgs.msg import String
from ackermann_msgs.msg import AckermannDrive
import numpy as np

t = AckermannDrive()
t.steering_angle_velocity = 1
t.speed = 0
t.steering_angle = 0
t.acceleration = 0
t.jerk = 0

key_mapping = {
    'w': [0, 1],
    'x': [0, -1],
    'a': [-1, 0],
    'd': [1, 0],
    's': [0, 0]
}


def keys_cb(msg, twist_pub):

    if len(msg.data) == 0 or not key_mapping.has_key(msg.data[0]):
        return  # unknown key
    vels = key_mapping[msg.data[0]]

    if msg.data[0] == 'w':
        t.speed += 0.05
Example #24
0
 def drive(self):
     while not rospy.is_shutdown():
         if self.received_data is None or self.parsed_data is None:
             rospy.sleep(0.5)
             continue
         
         print "front", self.range_hist_front.mean()#, self.parsed_data["front"][:,0] 
         print "left", self.range_hist_left.mean()#, self.parsed_data["left"][:,0]
         print "right", self.range_hist_right.mean()#, self.parsed_data["right"][:,0]
         
         
         if (np.any(self.parsed_data['front'][:,0] < MIN_FRONT_DIST) or (not self.status)):
             #print "stop!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
             rospy.loginfo("stoping!")
             # this is overkill to specify the message, but it doesn't hurt
             # to be overly explicit
             drive_msg_stamped = AckermannDriveStamped()
             drive_msg = AckermannDrive()
             
             self.steer = 0.0
             
             if(self.right_is_long):
                 self.steer = LEFT_STEER
             else:
                 self.steer = RIGHT_STEER
             
             drive_msg.steering_angle = self.steer
             drive_msg.acceleration = 0
             drive_msg.jerk = 0
             drive_msg.steering_angle_velocity = 0
             drive_msg_stamped.drive = drive_msg
             
             #if GEAR:
             #    print "GEAR>>>>>"
             #    for i in range(390, 500):
             #        print "BACK>>>>>>>>>"
             #        drive_msg.speed = 403
             #        self.pub.publish(drive_msg_stamped)
             
             GEAR = 0
             
             drive_msg.speed = BACKWARD_SPEED
             self.pub.publish(drive_msg_stamped)
             rospy.sleep(.4)
             
         
         elif np.any(self.parsed_data['front'][:,0] < CHANGE_FRON_DIST):
             rospy.loginfo("change!")
             GEAR = 1
             
             if np.sum(self.range_hist_left.mean() > self.range_hist_right.mean()):
                 self.right_is_long = False
                 self.left_is_long = True
                 #print "turn left"
                 #print np.sum(self.parsed_data['left'][:,0]), np.sum(self.parsed_data['right'][:,0])
                 #print self.parsed_data['right'][:,0]
                 drive_msg_stamped = AckermannDriveStamped()
                 drive_msg = AckermannDrive()
                 drive_msg.speed = DEFAULT_SPEED
                 
                 #PID CONTROL
                 ERROR_CURRENT = LEFT_STEER - self.steer # 0 - 260
                 E_DIFF = ERROR_CURRENT - self.error_last
                 self.error_last = ERROR_CURRENT
                 
                 result = KP*ERROR_CURRENT - KD*E_DIFF
                 self.steer = result
                 #print "steer : ", self.steer
                 #print "error_last : ", self.error_last
                 #print "error_current : ", ERROR_CURRENT
                 #print "e_diff : ", E_DIFF
                 #print "error_last : ", self.error_last
                 print "turn left PID result>>>> ", result
                 
                 #self.steering_hist.append(result)
                 self.steer = result
                 drive_msg.steering_angle = self.steer
                 
                 drive_msg.acceleration = 0
                 drive_msg.jerk = 0
                 drive_msg.steering_angle_velocity = 0
                 drive_msg_stamped.drive = drive_msg
                 self.pub.publish(drive_msg_stamped)
             else:
                 self.right_is_long = True
                 self.left_is_long = False
                 #print "turn right"
                 #print np.sum(self.parsed_data['left'][:,0]), np.sum(self.parsed_data['right'][:,0])
                 #print self.parsed_data['right'][:,0]
                 drive_msg_stamped = AckermannDriveStamped()
                 drive_msg = AckermannDrive()
                 drive_msg.speed = DEFAULT_SPEED
                 
                 #PID CONTROL
                 ERROR_CURRENT = RIGHT_STEER - self.steer
                 E_DIFF = ERROR_CURRENT - self.error_last
                 self.error_last = ERROR_CURRENT
                 
                 result = KP*ERROR_CURRENT - KD*E_DIFF
                 #print "steer : ", self.steer
                 #print "error_current : ", ERROR_CURRENT
                 #print "e_diff : ", E_DIFF
                 #print "error_last : ", self.error_last
                 print "turn right PID result>>>> ", result
                 
                 self.steer = result
                 drive_msg.steering_angle = self.steer
                 
                 drive_msg.acceleration = 0
                 drive_msg.jerk = 0
                 drive_msg.steering_angle_velocity = 0
                 drive_msg_stamped.drive = drive_msg
                 self.pub.publish(drive_msg_stamped)
                 
         else:
             
             #print "drive~!!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
             self.right_is_long = False
             self.left_is_long = False
             GEAR = 1
             drive_msg_stamped = AckermannDriveStamped()
             drive_msg = AckermannDrive()
             drive_msg.speed = DEFAULT_SPEED
             #PID CONTROL
             ERROR_CURRENT = FRONT_STEER - self.steer
             E_DIFF = ERROR_CURRENT - self.error_last
             self.error_last = ERROR_CURRENT
             
             result = KP*ERROR_CURRENT - KD*E_DIFF
             #print "steer : ", self.steer
             #print "error_current : ", ERROR_CURRENT
             #print "e_diff : ", E_DIFF
             #print "error_last : ", self.error_last
             print "go straight PID result>>>> ", result
             
             self.steer = result
             drive_msg.steering_angle = self.steer
             
             drive_msg.acceleration = 0
             drive_msg.jerk = 0
             drive_msg.steering_angle_velocity = 0
             drive_msg_stamped.drive = drive_msg
             self.pub.publish(drive_msg_stamped)
             
         # don't spin too fast
         rospy.sleep(.1)
            key = getKey()
            if key in keyBindings.keys():
                x = keyBindings[key][0]
                th = keyBindings[key][1]
            else:
                x = 0
                th = 0
                if (key == '\x03'):
                    break
            msg = AckermannDrive()
            #  msg.header.stamp = rospy.Time.now();
            #  msg.header.frame_id = "base_link";

            msg.speed = x * speed
            msg.acceleration = 1
            msg.jerk = 1
            msg.steering_angle = th * turn
            msg.steering_angle_velocity = 1

            pub.publish(msg)

    except:
        print 'error'

    finally:
        msg = AckermannDrive()
        # msg.header.stamp = rospy.Time.now();
        # msg.header.frame_id = "base_link";

        msg.speed = 0
        msg.acceleration = 1
Example #26
0
import rospy as rp
import numpy as np
import cv2
import random
from sensor_msgs.msg import LaserScan, Image
from cv_bridge import CvBridge, CvBridgeError
from ackermann_msgs.msg import AckermannDriveStamped, AckermannDrive

bridge = CvBridge()

drive_msg_stamped = AckermannDriveStamped()
drive_msg = AckermannDrive()
drive_msg.speed = 0.4
drive_msg.steering_angle = -1.0
drive_msg.acceleration = 1
drive_msg.jerk = 0
drive_msg.steering_angle_velocity = 0
drive_msg_stamped.drive = drive_msg
global proportional_error
global integral_error
global derivative_error

global active_lidar_in
global inactive_lidar_in
global left_lidar_pts
global right_lidar_pts
global previous_error


def callback2(data):
    global prepSwitch