智能车制作

标题: 控制舵机的算法,我这样写: 代码如下,为啥这样写舵机不打角呢,是哪里出问题了 [打印本页]

作者: jianr    时间: 2016-4-15 09:50
标题: 控制舵机的算法,我这样写: 代码如下,为啥这样写舵机不打角呢,是哪里出问题了

把一场图像均分分成三份(总共60行,分为远,中,近,各20行),然后分别求三份的偏差;然后把这三个偏差的均值分别乘以不同的系数,然后相加,得到舵机打角的偏差,然后输出,
我的这个思想正确吗?为啥我不管把系数调多大,舵机抖不打角,,代码如下
        uint8 i,jin = 0,zhong = 0,yuan = 0;
        uint8 img_yuan = 0,img_zhong = 20,img_jin = 40;
        short int Angle_error_jin = 0,Angle_error_zhong = 0,Angle_error_yuan = 0;
        short int Angle_error = 0,Steer_out = 0;
        for(i = 59;i >= img_jin;i --)                    //距摄像头进的20行数据的偏差
        {
                Angle_error_jin += (center[i] - 39);
                jin++;
        }
        Angle_error_jin /= jin;
        for(i = img_jin - 1;i >= img_zhong;i --)          //距摄像头远的20行数据的偏差
        {
                Angle_error_zhong += (center[i] - 39);
                zhong++;
        }
        Angle_error_zhong /= zhong;
    for(i = img_zhong - 1;i >= img_yuan;i --)         //摄像头图像中间进的20行数据的偏差
        {
                Angle_error_yuan += (center[i] - 39);
                yuan++;
        }
        Angle_error_yuan /= yuan;
        Angle_error = 3*Angle_error_jin + 6*Angle_error_zhong + 3*Angle_error_yuan;
        Steer_out = 200*Angle_error;
        if(Steer_out > 1600)
          Steer_out = 1600;
        if(Steer_out < -1600)
          Steer_out = -1600;
        ftm_pwm_init(FTM1, FTM_CH0,100,5400 +  Steer_out);


作者: 第109位梁山好汉    时间: 2016-4-15 12:09
这60行的数据都是有效的吗。
作者: jianr    时间: 2016-4-15 13:03
第109位梁山好汉 发表于 2016-4-15 12:09
这60行的数据都是有效的吗。

额,没计算有效行,但前面20行应该都有效吧





欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2