# pidkit **Repository Path**: lyworkspace/pidkit ## Basic Information - **Project Name**: pidkit - **Description**: pid工具集合 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-05-14 - **Last Updated**: 2025-05-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # PID 工作集 ## 简介 提供常用的 PID 算法集,提供更编译的开发支持 # PIDController 使用说明 ## 简介 `PIDController` 是一个通用的 PID 控制器模板类,支持浮点类型和整数类型的输入输出。它提供了完整的 PID 控制功能,包括比例(P)、积分(I)、微分(D)控制,以及输出限幅和积分限幅等功能。 ## 基本用法 ### 1. 创建控制器 ```cpp // 使用默认参数创建控制器 PIDController pid; // 使用指定参数创建控制器 // 参数说明:kp(比例系数), ki(积分系数), kd(微分系数), dt(时间间隔) PIDController pid(1.0f, 0.1f, 0.01f, 0.05f); ``` ### 2. 配置参数 ```cpp // 设置 PID 参数 pid.set_parameters(1.0f, 0.1f, 0.01f); // 单独设置 P、I、D 参数 pid.set_p(1.0f); pid.set_i(0.1f); pid.set_d(0.01f); // 设置时间间隔 pid.set_dt(0.05f); // 50ms // 设置输出限幅 pid.set_output_limits(-100, 100); // 设置积分限幅 pid.set_integral_limit(50.0f); ``` ### 3. 使用控制器 ```cpp // 计算 PID 输出 float output = pid.compute(target_value, current_value); // 使用指定时间间隔计算 float output = pid.compute(target_value, current_value, 0.05f); ``` ### 4. 重置控制器 ```cpp // 重置控制器状态(清除积分项和上次误差) pid.reset(); ``` ## 高级用法 ### 1. 使用整数类型 ```cpp // 创建整数类型的 PID 控制器 PIDController pid(1.0f, 0.1f, 0.01f); int32_t output = pid.compute(target_value, current_value); ``` ### 2. 获取当前状态 ```cpp // 获取当前 PID 参数 float kp = pid.get_kp(); float ki = pid.get_ki(); float kd = pid.get_kd(); // 获取当前积分值 float integral = pid.get_integral(); // 获取上次误差 float last_error = pid.get_last_error(); ``` ## 实际应用示例 ### 位置控制示例 ```cpp class PositionController { public: PositionController() { // 配置 PID 控制器 __pid_controller.set_parameters(4.0f, 0.0001f, 0.0f); __pid_controller.set_output_limits(-30000, 30000); __pid_controller.set_dt(0.05f); // 50ms } void update() { // 获取当前位置和目标位置 float current_pos = get_current_position(); float target_pos = get_target_position(); // 计算控制输出 float output = __pid_controller.compute(target_pos, current_pos); // 应用控制输出 apply_control(output); } private: PIDController __pid_controller; }; ``` ## 注意事项 1. 时间间隔(dt)的选择: - 建议根据实际控制周期设置 - 过小的时间间隔可能导致积分项累积过快 - 过大的时间间隔可能导致控制响应滞后 2. PID 参数调优: - P(比例)参数:控制响应速度,过大会导致震荡 - I(积分)参数:消除静态误差,过大会导致超调 - D(微分)参数:抑制震荡,过大会放大噪声 3. 输出限幅: - 建议根据实际执行器的能力设置 - 可以防止执行器过载 - 有助于系统稳定性 4. 积分限幅: - 可以防止积分饱和 - 有助于改善系统动态响应 - 建议根据实际需求设置 ## 常见问题 1. 系统震荡: - 检查 P 参数是否过大 - 考虑增加 D 参数 - 适当减小时间间隔 2. 响应滞后: - 检查时间间隔是否合适 - 适当增加 P 参数 - 考虑减小 D 参数 3. 静态误差: - 检查 I 参数是否合适 - 确保积分限幅设置合理 - 检查执行器是否有死区