示例#1
0
    def __init__(self):
        self.startpos = [psm.BAM1.pos(), psm.BAM2.pos(), psm.BBM1.pos()]
        self.controllers = [
            PIDController(Scalar=1),
            PIDController(Scalar=1),
            PIDController(Scalar=1)
        ]

        self.setpoints = [0, 0, 0]
示例#2
0
 def __init__(self):
     rospy.Subscriber('/scan', LaserScan, self.laser_callback, queue_size=10)
     self.publisher = rospy.Publisher('/vesc/ackermann_cmd_mux/input/navigation', AckermannDriveStamped, queue_size=10)
     self.rangeStarted = False
     self.drive_msg = AckermannDriveStamped()
     self.pid = PIDController(rospy.Time.now(),  PID_KP,PID_KI,PID_KD)
     self.publish()
示例#3
0
 def __init__(self):
     self.px = 0
     self.py = 0
     self.vx = 0
     self.vy = 0
     self.radius = 30
     self.color = (10,100,230)
     self.pid_controller = PIDController()
示例#4
0
    def __init__(self):
        self.node_name = rospy.get_name()
        self.lane_reading = None

        self.pub_counter = 0

        # Initialize PID parameters
        P_d = -0.8
        I_d = -0.02
        D_d = -0.01
        P_theta = -0.8
        I_theta = -0.02
        D_theta = -0.01

        # Initialize PID controller
        self.pid_d = PIDController(P_d, I_d, D_d)
        self.pid_theta = PIDController(P_theta, I_theta, D_theta)

        # Setup parameters
        self.setGains()

        # Publicaiton
        self.pub_car_cmd = rospy.Publisher("~car_cmd",
                                           Twist2DStamped,
                                           queue_size=1)
        self.pub_debug = rospy.Publisher("~debug", Pose2D, queue_size=1)

        # Subscriptions
        self.sub_lane_reading = rospy.Subscriber("~lane_pose",
                                                 LanePose,
                                                 self.cbPose,
                                                 queue_size=1)

        # safe shutdown
        rospy.on_shutdown(self.custom_shutdown)

        # timer
        self.gains_timer = rospy.Timer(rospy.Duration.from_sec(1.0),
                                       self.getGains_event)
        rospy.loginfo("[%s] Initialized " % (rospy.get_name()))
示例#5
0
    def __init__(self):
        self.error = 0  # initializes the running error counter
        self.d_des = 0.5  # takes desired dist from wall

        self.scan1 = []
        self.scan2 = []
        self.start = True
        self.pidVal = 0
        rospy.init_node("wall_PID", anonymous=False)
        self.sideFlag = 0
        self.pid = PIDController(rospy.Time.now().to_sec(), -1.0, 0.0,
                                 0.0)  #0.00000001,0.12)

        #init the pub/subs
        rospy.Subscriber("/side", Int32, self.sideChange)
        rospy.Subscriber("/scan", LaserScan, self.callback)

        self.angle_pub = rospy.Publisher("/steer_angle_follow",
                                         Float32,
                                         queue_size=1)
示例#6
0
import argparse

parser = argparse.ArgumentParser(
    description='Control Copter and send commands in GUIDED mode ')
parser.add_argument(
    '--connect',
    help=
    "Vehicle connection target string. If not specified, SITL automatically started and used."
)
args = parser.parse_args()

connection_string = args.connect
sitl = None

#PID
pid = PIDController(proportional=0.15, derivative_time=0, integral_time=0)
pid.vmin, pid.vmax = -0.05, 0.05
pid.setpoint = 1, 5  #aTargetAltitude(m)
TAltitude = pid.setpoint
baseVelocity = 0.5

pidout = 0

# Start SITL if no connection string specified
if not connection_string:
    import dronekit_sitl
    sitl = dronekit_sitl.start_default()
    connection_string = sitl.connection_string()

# Connect to the Vehicle
print('Connecting to vehicle on: %s' % connection_string)
示例#7
0
            if not self.manager.isBusy():
                if self.turnState == 0:
                    self.manager.turnLeft(self.turnSpeed, self.turnDuration)
                elif self.turnState == 1:
                    self.manager.turnRight(self.turnSpeed,
                                           self.turnDuration * 2)
                else:
                    self.manager.turnLeft(self.turnSpeed, self.turnDuration)
                    self.turnDuration += self.turnAdd
                self.turnState = (self.turnState + 1) % 3
        else:
            print("Follow Mode")
            if self.sensor.distanceUSEV3() > self.searchDistance:
                self.moveState = 1
                self.turnDuration = 1
                self.turnState = 0
                self.manager.stopAll()
                return
            self.manager.driveStraight(self.controller.step(lastSensorReading),
                                       1)


psm = PiStorms()

MANAGER = MotorManager(psm.BAM1, psm.BAM2, True)
PID = PIDController()
F = Follower(MANAGER, psm.BAS2, PID)

while not psm.isKeyPressed():
    F.step()
F.manager.stopAll()
示例#8
0
from PID import PIDController
import time


# Set up option parsing to get connection string
import argparse  
parser = argparse.ArgumentParser(description='Control Copter and send commands in GUIDED mode ')
parser.add_argument('--connect', 
                   help="Vehicle connection target string. If not specified, SITL automatically started and used.")
args = parser.parse_args()

connection_string = args.connect
sitl = None

#PID
pid_T = PIDController(proportional = 0.15, derivative_time = 10, integral_time=0)
pid_R = PIDController(proportional = 0.15, derivative_time = 10, integral_time=0)
pid_P = PIDController(proportional = 0.15, derivative_time = 10, integral_time=0)

pid_T.vmin, pid_T.vmax = -0.05, 0.05
pid_R.vmin, pid_R.vmax = -1, 1
pid_P.vmin, pid_T.vmax = -1, 1
pid_T.setpoint = 1.0   #aTargetAltitude(m)
TAltitude = pid_T.setpoint
pid_R.setpoint=0 #distance between centre of line and centre of frame
TRoll=pid_R.setpoint
pid_P.setpoint=0 #distance between centre of line and centre of frame
TPitch=pid_P.setpoint
baseThrust = 0.55
baseRoll = 0
basePitch = 0
# greenUpper = (64, 255, 255)
# pts = deque(maxlen = bufferSize)

# greenLower = (20, 139, 21)
# greenUpper = (35, 255, 255)
# greenLower = (20, 117, 166)
# greenUpper = (99, 189, 255)

# greenLower = (29, 88, 161)
# greenUpper = (47, 255, 255)
greenLower = (27, 76, 98)
greenUpper = (87, 255, 255)
camera = cv2.VideoCapture(2)
camera.set(cv2.CAP_PROP_FPS, 60)

pid = PIDController(proportional=25.0, derivative_time=1, integral_time=100)
pid.vmin, pid.vmax = -10000, 10000
pid.setpoint = 600
baseThrust = 43000
rollTrim = 1
pitchTrim = 1.5
yawTrim = 0

cflib.crtp.init_drivers(True)
r = RadioDriver()
# cf_urls = r.scan_interface(None)
# print(cf_urls)
# uri = cf_urls[0][0]
cf = Crazyflie()
cf.open_link("radio://0/90/250K")
cf.commander.send_setpoint(0, 0, 0, 0)
示例#10
0
                                                       distanceError, s, t)
        self.manager.setSpeed(s)
        self.manager.setTurn(t)
        self.manager.step()
        return False


if __name__ == "__main__":
    from PID import PIDController
    from MarcMapper import Mapper
    from PiStorms import PiStorms
    from FloatRangeMotorManager import DynManager
    from time import sleep

    sleep(1)

    psm = PiStorms()
    rPID = PIDController(Kp=1, Ki=0, Kd=0.1, stepSec=0.05, Scalar=1.4)
    dPID = PIDController(Kp=1, Ki=0, Kd=0.15, stepSec=0.05, Scalar=0.001)
    r = Mapper(psm.BAM1, psm.BAM2, psm.BBS1, psm, True)
    m = DynManager(psm.BAM1, psm.BAM2, 8.7)
    p = PointNavigator(m, r, rPID, dPID, psm.BAS2)

    p.setPoint((2000, 0))
    while not psm.isKeyPressed():
        print(psm.BAS2.distanceUSEV3())
        p.step()
        sleep(0.02)
    p.manager.setSpeed(0)
    p.manager.setTurn(0)
    p.manager.step()
示例#11
0
 def __init__(self,r, m):
     self.pixycam = Pixy()
     self.rPID = PIDController(Kp=0.2, Ki=0.05, Kd=0.5, Scalar=0.0002)
     self.dPID = PIDController(Kp=1, Ki=0.01, Kd=0.15, Scalar=0.08)
     self.r = r#Mapper(psm.BAM1, psm.BAM2, psm.BBS1, psm, True)
     self.m = m#DynManager(psm.BAM1, psm.BAM2, 8.7)