MCforever13 2024-01-25 23:32 采纳率: 0%
浏览 33

摄像头小车;环岛相关判断问题

我们现在的智能摄像头小车,运用如下的代码:


 unsigned char threshold = 128;            // threshold for binary
      for(int i = 0;i < IMAGEH;i++)                    //图像的高为120,即IMAGEH=120
      {
          for(int j = 0;j < IMAGEW;j++)          //图像的宽度为188.即IMAGEW=188
          {
              if(Camera_Output[i][j] > threshold)
              {
                binary[i][j] = 255;
              }
              else
              {
                  binary[i][j] = 0;
              }
          }
      }

           int mid[120];
           int left1[120]={0};
           int right1[120]={0};
           left1[119]=0;
           right1[119]=187;
           for (int i = IMAGEH -1 ; i >= 0; i--)
           {
                mid[i] = (left1[i] + right1[i]) / 2;
                if (i == 0)
                    {
                        break;
                    }
                for (int j = mid[i]; j > 0; j--)
                    {
                        if ((binary[i-1][j - 1] == 0 && binary[i-1][j] == 255 && binary[i-1][j + 1] == 255) || j == 1)
                        {
                             left1[i - 1] = j;
                             break;
                        }
                    }
                for (int j = mid[i]; j <IMAGEW; j++)
                    {
                        if ((binary[i-1][j - 1] == 255 && binary[i-1][j] == 255 && binary[i-1][j + 1] == 0) || j == IMAGEW-1)
                        {
                            right1[i - 1] = j;
                            break;
                        }
                     }
            }
 
           int sum1 = 0;
           for (int i = 0; i < 120; i++)
           {
                sum1 += abs(94 - mid[i]);
           }
           if (sum1 / 120 < 100)
           {
                my_duty=10;          //35  //50
                motor_duty(my_duty);
           }
           else
           {
                my_duty=20;          //25     //50
                motor_duty(my_duty);
           }
           int sum2 = 0;
           for (int i = 30; i < 60; i++)
           {
               sum2 += mid[i]-94;
           }
           float auto_angle = sum2/k_steer;                                       //k_steer是一个经多次尝试得到的一个合理的系数
           steer_angle(auto_angle);

现在上述代码已经能实现简单的弯道自动拐弯,直线也能走直,但是环岛的话可以进去但是一直会循环转圈出不来。
在订阅了您的专栏后,发现里面的环岛相关代码对于我们来说太过复杂困难,因此我们想请教您,想问问基于如上代码的逻辑,如何有一个判断环岛的条件?这样只要我们能编出这个条件的话,我们就用最最原始的方法:定时打满方向来绕一个环岛然后在定一段时间直走的,直到完全将环岛通过之后再换用上面这套弯道自动拐弯程序。

我们时间从零开始造小车只有7天,明天下午就要截止测试了,在此殷切盼望您能帮忙指点我们环岛条件判断的方法,越简单越好,非常感谢,麻烦您了

  • 写回答

2条回答 默认 最新

  • MCforever13 2024-01-25 23:33
    关注

    555555,急啊,有无热心的大佬啊5555555

    评论

报告相同问题?

问题事件

  • 创建了问题 1月25日