两轮平衡小车心得(四)位置式PID

  1. C的官方编译器gcc下载地址:https://github.com/skeeto/w64devkit/releases
    这个很难下载,可以用msys2提供的仿linux系统下的C,下载地址:https://www.msys2.org/,下载完成后在shell里输入以下语句:
pacman -Syu
pacman -Su
pacman -S --needed base-devel mingw-w64-x86_64-toolchain

然后在安装包里找到gcc的PATH,写入环境变量就可以了;

  1. 用C写个PID控制器;
#include <iostream>

float pid(float setpoint, float pv, float dt) {
    float kp=0.9,ki=0.1,kd=0.001,previous_error = 0,integral=0,derivative=0;
    float error = setpoint - pv;
    integral += error * dt;
    derivative = (error - previous_error) / dt;
    previous_error = error;
    float output = kp * error + ki * integral + kd * derivative;
    std::cout << "pv: " << pv << "\t"<< "Error: " << error << std::endl;
    return output;
}

int main() {
    float setpoint = 100, pv = 0,output=0;
    for (int i = 0; i < 10; i++) {
        std::cout << i << "\t";
        output = pid(setpoint, pv, 1);
        pv += output*1.23;
    }
    return 0;
}

输出:

0   pv: 0   Error: 100
1   pv: 123.123 Error: -23.123
2   pv: 94.6533 Error: 5.34673
3   pv: 101.236 Error: -1.23633
4   pv: 99.7141 Error: 0.285873
5   pv: 100.066 Error: -0.0661011
6   pv: 99.9847 Error: 0.0152817
7   pv: 100.004 Error: -0.00353241
8   pv: 99.9992 Error: 0.000816345
9   pv: 100 Error: -0.000190735

可以看到偏差迅速波动变小,直到输出控制量为0;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容