系列文章

智能车复工日记【1】——菜单索引回顾
智能车复工日记【2】——普通PID、变结构PID、微分先行PID、模糊PID、专家PID
智能车复工日记【3】:图像处理——基本扫线和基本特征提取和十字补线

问题1:环岛判断函数,last方差,find_guaidian()函数放置位置不同

在上位机中,每帧图像的处理放在ImageProcess()函数中,

        void ImageProcess()
        {
            //int straight_search_line = 13;
            //int curve_search_line = 11;
            //int feedback = 0;
            findcenterline_mode5();//找拐点            
            if (break_hangshu <= 0) break_hangshu = 50;
            juge_right_succesive_and_if_k_limit();
            juge_left_succesive_and_if_k_limit();
            //将方差记录
            last_rou_of_left = rou_of_left;
            last_rou_of_right = rou_of_right;
            //small_guaidian();
            //small_s_jiaodian_fangcha();
            //if (curve_guai[0] != 0 && flag_small_S != 1) SetText("弯道拐点: " + curve_guai[0] + "  " + curve_guai[1]);
            //只有在不是环岛的时候才判断道路,才启用判断小s和中s
            if (huandao_flag == 0)
            {
                //SMALL_s_line();
                find_guaidian();
                //juge_street(5, 20);
            }
            SetText("centerline:" + centerline[1]);
            //【计算PID】
            //feedback = LocPIDcalc_new(1, (centerline[straight_search_line - 1] + centerline[straight_search_line] + centerline[straight_search_line + 1]) / 3);
            //if (steer_middle_pwm - feedback >= steer_left_pwm) feedback = steer_middle_pwm - steer_left_pwm;
            //else if (steer_middle_pwm - feedback <= steer_right_pwm) feedback = steer_middle_pwm - steer_right_pwm;
            //SetText("feedback" + feedback);
            //【展示当前道路状态】
            show_road_type();
            SetText("没有卡循环!!!");
        }

而下位机中只有一个findcenterline_mode5();
所以导致修改ImageProcess()函数中程序时,下位机的程序并没有调整到位,这里做个记录并且进行修改,将上位机调整成和下位机一样:

        void ImageProcess()
        {
            findcenterline_mode5();//找拐点            
            //【计算PID】
            //feedback = LocPIDcalc_new(1, (centerline[straight_search_line - 1] + centerline[straight_search_line] + centerline[straight_search_line + 1]) / 3);
            //if (steer_middle_pwm - feedback >= steer_left_pwm) feedback = steer_middle_pwm - steer_left_pwm;
            //else if (steer_middle_pwm - feedback <= steer_right_pwm) feedback = steer_middle_pwm - steer_right_pwm;
            //SetText("feedback" + feedback);
            //【展示当前道路状态】
            show_road_type();
            SetText("没有卡循环!!!");
        }

注意上位机中的juge_street保留在 findcenterline_mode5()中,而下位机则不需要(下位机的juge保存在电机控制中)
。修改完毕,明天去实验室看看是不是这样的问题,如果还有调整其他问题,则继续保持记录。