Just to clarify for anyone confused, PID is not an algorithm isolated to only lateral movements. PID is a general algorithm that can be implemented for any system that needs to achieve a certain state. For most vex applications, PID is used to get a chassis to a certain position on a field. But PID can be used for things like keeping the temperature in a room constant, or maintaining the position of an arm . Wording such as “PID + inertial” makes it seem like you’re somehow combing two different algorithms.
TL;DR the wording on the name of this thread should be changed and a lot of the conversation going on in this thread can be misleading. It should be something like “What sensor should I use to control turns with PID?”
Note PID is a closed loop, feedback based algorithm meaning you’ll always use some kind of sensor as feedback. There will never be a case with PID where a sensor isn’t being used for the system to respond to.
Hi there! I’m pretty new to PID loops and inertial sensors as well. I think I understand that PID could be used for lateral movement. So for turns, I’m kind of confused about how I could program the inertial sensor; I looked at the VexCode example code but it didn’t really help. Also, once I do figure out the inertial sensor code, would I just run the PID and inertial sensor as needed in the autonomous task? My main question here is how would I code an inertial sensor?
I would say that you need to take a few steps back and answer a few fundamental questions:
What does an IMU actually do?
How does this apply to the robot?
How can I use the relationship between the IMU and the robot to control the robot?
I’ll answer each to make it clear how your thought process should be when solving these kinds of problems instead of just seeking a copy and paste answer.
The IMU is simply a sensor that measures a change in rotation (usually in degrees) of a body it’s attached to. The geometry and shape of the body does not affect the net angular displacement the sensor measures (if the body is fully rigid).
This applies to the robot because the sensor is mounted rigidly to it. The mechanism (for lack of a better word) that allows the robot to turn is a differential-style chassis (tank drive). So by spinning the left side in one direction and the right side in the opposite direction, you can rotate the robot and it is then measured by the sensor.
So how can I create a relationship between the sensor and the mechanism I want to control?
Psuedocode: if(!atAngle) //while the robot is not at the desired angle robot -> spin else robot -> stop
So, with a basic control structure, you can use the sensor values and relate it to rotations of the wheels on the base. Implementing PID in this is essentially the pseudocode with a lot more math. But the basic premise is sort of this: while the robot is not at the target angle, spin towards angle. If you want more insight on the math then look here are all the resources you could need (and feel free to ask more questions):
A PID is basically a series of function that help a program run faster and more effectively.
P is the proportional value
I is the integral value
D is the derivative.
You can use it for both turning and lateral movement but the purpose of this thread was to see if using an Inertial Senor was more viable than a turn PID. There are many other threads on the forums about this topic.
If you do not have any prior experience with coding, I would first get the basics down and use an inertial sensor.
The logic behind it would be something like this.
Ok, so I took the approach that you gave me and I think I got how to use the inertial sensor. So would you recommend using PID for lateral movements? I think I want to use an inertial sensor for turns definitely since I don’t think I understand turns with PID.
Gotcha. I think I figured out how to use an inertial sensor now. I’m still considering using PID for lateral movements though. Would you recommend this? And also do you think a PD control loop would be more effective than a PID control loop?
Yes using a PID will greatly increase your auton score.
Without the integral controller your robot may not reach the target value sometimes but people still find a way around it.
Using a PID controller is better than a PD controller just because of accuracy.
Not really… It’s decreases the settling time of the controller and prevents steady state error. If you look more into PID this will make sense. The resources have been linked above
Yes and no. I think both return the same degree of precision or at least more than you’ll need for a robot. Both are prone to drifting, but it’s been reported that the IMU drifts less. Correcting for drift has something to do with integrating error over time from the drift rate calculation during calibration (or something along those lines). I haven’t done this so don’t ask me how it works, but I have used the IMU for over a year now and haven’t really had any serious issues.
There’s more thorough discussion here, but you can always ask @jpearman for specifics