唐宋404 2024-03-03 22:16 采纳率: 30%
浏览 48
已结题

智能车串级pid调参

蒟蒻need help
调智能车pid的时候遇到的问题,串级pid的外环值不会被约束在期望值0左右波动,而是在+175或-175附近波动。
形象地说就是车只会边摇晃着边向前进或向后退,而不是前后摇晃定在原地。
请问一下这是什么原因,具体的解决措施是什么

  • 写回答

22条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-03-03 22:17
    关注
    获得0.90元问题酬金

    引自免费微信小程序:皆我百晓生

    在调试智能车的串级PID控制器时,如果外环输出值在+175或-175附近大幅度波动而不是稳定在期望值(例如0)附近,这通常意味着存在以下几个问题:

    1. 外环设定点(目标值)设置不正确:首先检查你的外环设定点是否已经设置为期望车辆保持的位置。确保在进行PID控制时,给定的目标位置是准确无误的。

    2. 外环PID参数不合适:外环PID控制器负责调节智能车的整体方向和速度以达到目标位置。当P、I、D参数设置不当时,可能会导致系统不稳定或者饱和。例如,P(比例项)过大可能导致输出震荡;I(积分项)过大可能导致积分饱和进而造成大范围波动;D(微分项)过大则可能加剧系统的灵敏度,导致过度反应。

      • 解决方案:调整外环PID参数。通常需要逐步调整,并通过观察系统的响应来优化。可以先从较大的P值开始,逐渐减小直到系统响应快速但不过于激进;然后适当地增加I值以消除稳态误差,同时要注意防止积分饱和;最后根据实际情况加入适量的D以改善动态性能并减少超调。
    3. 内环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参数。若有必要,还可以考虑引入抗饱和措施以及限幅功能来保证输出在合理范围内。

    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 3月11日
  • 创建了问题 3月3日

悬赏问题

  • ¥15 有没有人会打学生成绩管理系统呀
  • ¥15 在使用Fiddler和夜神模拟器抓包的时候一直出现443该怎么办啊QAQ搜了好几个笔记都没有解决
  • ¥15 3x7的二维数组A、B、C,A中的任意1个数组元素与B的任意1个数组元素、同时又与C的任意1个数组元素比较,把不同位置出现相同数的比较称为无意义,反之称为有意义,把有意义的比较打印输出。
  • ¥20 预测模型怎么处理原始数据(随机森林)
  • ¥20 请问discuz3.5如何实现插入ckplayer全能播放器功能呢?
  • ¥15 thingsboard代码编译出错误
  • ¥15 博途v18仿真报错怎么解决
  • ¥15 欧姆龙plc枕式包装机 ST编程
  • ¥15 为啥快手广告联盟的广告这么难出来
  • ¥15 k8s集群重启后,kubelet一直报systemctl restart kubelet.service "Failed to delete cgroup paths"