Ejemplo n.º 1
0
int main()
{
	// Handle CTLR + C
	struct sigaction sigIntHandler;
	sigIntHandler.sa_handler = handleSignal;
	sigemptyset(&sigIntHandler.sa_mask);
	sigaction(SIGINT, &sigIntHandler, NULL);

	quit = false;
	auto lead = new car("lead");
	auto follower = new car("follower");
	auto controller = new pidController();

	follower->setSpeed(0);
	lead->setSpeed(0);
	controller->setSetPoint(lead->getSpeed());

	controller->setKi(1);
	controller->setKd(1);
	controller->setKp(.2);

	auto pvThread = std::thread(runPv, controller);
	auto pidThread = std::thread(runPid, controller);
	auto simThread = std::thread(runSim, lead, follower, controller);

	std::random_device rd;     // only used once to initialise (seed) engine
	std::mt19937 rng(rd());    // random-number engine used (Mersenne-Twister in this case)
	std::uniform_int_distribution<int> uni(0,4); // guaranteed unbiased

	while (!quit)
	{
		int randomSpeed = uni(rng);

		lead->setSpeed(randomSpeed);
		controller->setSetPoint(lead->getSpeed());

		sleepSim(2);
	}

	pvThread.join();
	simThread.join();
	pidThread.join();

	delete lead;
	delete follower;
	delete controller;

	return 0;
}
Ejemplo n.º 2
0
	void PID::setWeights(const float &Kp, const float &Ki, const float &Kd) {
		setKp(Kp);
		setKi(Ki);
		setKd(Kd);
    }