蒟蒻need help
调智能车pid的时候遇到的问题,串级pid的外环值不会被约束在期望值0左右波动,而是在+175或-175附近波动。
形象地说就是车只会边摇晃着边向前进或向后退,而不是前后摇晃定在原地。
请问一下这是什么原因,具体的解决措施是什么
![](https://profile-avatar.csdnimg.cn/63567e8d6440440e96d1f41f2a6cbab8_qq_59343219.jpg!4)
智能车串级pid调参
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
22条回答 默认 最新
关注
获得0.90元问题酬金 引自免费微信小程序:皆我百晓生
在调试智能车的串级PID控制器时,如果外环输出值在+175或-175附近大幅度波动而不是稳定在期望值(例如0)附近,这通常意味着存在以下几个问题:
-
外环设定点(目标值)设置不正确:首先检查你的外环设定点是否已经设置为期望车辆保持的位置。确保在进行PID控制时,给定的目标位置是准确无误的。
-
外环PID参数不合适:外环PID控制器负责调节智能车的整体方向和速度以达到目标位置。当P、I、D参数设置不当时,可能会导致系统不稳定或者饱和。例如,P(比例项)过大可能导致输出震荡;I(积分项)过大可能导致积分饱和进而造成大范围波动;D(微分项)过大则可能加剧系统的灵敏度,导致过度反应。
- 解决方案:调整外环PID参数。通常需要逐步调整,并通过观察系统的响应来优化。可以先从较大的P值开始,逐渐减小直到系统响应快速但不过于激进;然后适当地增加I值以消除稳态误差,同时要注意防止积分饱和;最后根据实际情况加入适量的D以改善动态性能并减少超调。
-
内环PID与外环PID配合不佳:串级PID中,内环主要负责更精细的控制,比如舵机的角度控制,而外环负责整体定位。如果内外环之间的耦合不协调,也可能导致外环输出大幅波动。
- 解决方案:确保内环PID参数也已优化,并且其输出能够很好地适应外环的需求。内环应快速响应以消除扰动对系统的影响,从而让外环能更好地稳定在目标位置附近。
由于无法直接提供代码示例,我将给出一个基本的串级PID算法框架概念,你可将其应用到单片机编程环境里:
// 假设外环PID类 class OuterPID { public: void setTarget(float targetPos); float update(float currentPos, float dt); private: float kp_out, ki_out, kd_out; float errorIntegral, lastError; }; // 假设内环PID类 class InnerPID { public: void setTarget(float targetAngle); float update(float currentAngle, float dt); private: float kp_in, ki_in, kd_in; float errorIntegral, lastError; }; // 更新过程伪代码 void loop() { // 获取当前实际位置和角度信息 float currentPos = getCurrentPosition(); float currentAngle = getCurrentAngle(); // 更新内环PID innerPID.setTarget(getDesiredAngle(currentPos)); float desiredServoAngle = innerPID.update(currentAngle, deltaTime); // 更新外环PID outerPID.setTarget(desiredPosition); float motorSpeed = outerPID.update(currentPos, deltaTime); // 将控制量应用于执行器(如电机、舵机) controlMotors(motorSpeed); controlServo(desiredServoAngle); } // 调整PID参数的过程需结合实验和分析,确保系统稳定
在实际操作中,请确保:
- 对内外环PID分别独立地进行参数整定;
- 检查传感器数据的有效性和准确性;
- 确保执行器(电机、舵机等)的响应范围没有超出限制,否则也会导致输出饱和。
针对您的情况,首先尝试降低外环的比例系数P和积分系数I,看是否能缓解振荡现象,再进一步细致调整内外环PID参数。若有必要,还可以考虑引入抗饱和措施以及限幅功能来保证输出在合理范围内。
解决 无用评论 打赏 举报 编辑记录-
悬赏问题
- ¥15 cv2 morphologyEx函数报错
- ¥15 有没有知道鸿蒙OS高级开发者新题答案的
- ¥15 有没有人能帮我一下android
- ¥20 做一个干部信息管理系统 软件
- ¥15 通过4G模块EC600N向阿里云物联网平台物模型上面发送字符串,现在发送int数据是成功的,发送字符串就是不成功
- ¥15 IDA反编译,代码识别失败
- ¥70 matlab代码修改
- ¥15 有没有下面符合以下条件的电子时钟的代码
- ¥15 LMV844QMAX/NOPB(IS)问题判定
- ¥15 主成分分析中的原始数据矩阵行列分别代表什么