Quote:
Originally Posted by Geek 2.0
I'm actually in the process of doing that, and just found a strange problem...
I found this in the PIDController class in WPILibJ:
Code:
if (((m_totalError + m_error) * m_I < m_maximumOutput)
&& ((m_totalError + m_error) * m_I > m_minimumOutput))
{
m_totalError += m_error;
}
m_result = (m_P * m_error + m_I * m_totalError + m_D * (m_error - m_prevError));
m_prevError = m_error;
By the looks of it, it's saying that it won't add the error to the total error if the result would be outside the maximum and minimum output. Does that seem wrong to anyone else? Shouldn't it add the error no matter what, and then clip off the result to fit in the max and min output?
|
That is usually how it's done. There are a few things in WPI's implementation that don't make sense, but overall it's fairly useful.
In terms of your original question, even if you used WPI's implementation, your output doesn't have to feed straight into a motor. If you have them as separate outputs, then decide yourself how to feed them into the speed controllers, there shouldn't be any problem.