智能车制作

 找回密码
 注册

扫一扫,访问微社区

楼主: mxj1005071012
打印 上一主题 下一主题

提取两边黑线程序冒失有点问题 求指点优化 小车只能向一个方向跑

  [复制链接]

20

主题

308

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2157
QQ
威望
1132
贡献
547
兑换币
695
注册时间
2012-11-27
在线时间
239 小时
21#
发表于 2013-3-28 18:47:32 | 只看该作者
加油    坚持住
回复 支持 反对

使用道具 举报

1

主题

169

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3108
威望
1552
贡献
958
兑换币
273
注册时间
2012-3-9
在线时间
299 小时
22#
发表于 2013-3-28 18:55:20 | 只看该作者
一样纠结中,硬件全部做好了,就等我写好程序跑起来,但是巡线感觉一直有问题,不知道怎么修改,现在都停止不前了,纠结,压力好大。
回复 支持 反对

使用道具 举报

21

主题

892

帖子

0

精华

常驻嘉宾

爱板者

Rank: 8Rank: 8

积分
3857

活跃会员奖章优秀会员奖章在线王奖章论坛元老奖章

威望
1833
贡献
1048
兑换币
736
注册时间
2012-12-4
在线时间
488 小时
23#
 楼主| 发表于 2013-3-28 20:38:27 | 只看该作者
1228463834 发表于 2013-3-19 18:10
有时候黑线也不稳定容易找错

是啊 在排除呢 一个一个排除
回复 支持 反对

使用道具 举报

7

主题

111

帖子

0

精华

高级会员

Rank: 4

积分
978
威望
442
贡献
276
兑换币
269
注册时间
2013-2-20
在线时间
130 小时
24#
发表于 2013-3-28 22:30:26 | 只看该作者
没有调试工具吗?可以把你提取的黑线发出来...看到底是不是黑线提取的问题...
回复 支持 反对

使用道具 举报

21

主题

892

帖子

0

精华

常驻嘉宾

爱板者

Rank: 8Rank: 8

积分
3857

活跃会员奖章优秀会员奖章在线王奖章论坛元老奖章

威望
1833
贡献
1048
兑换币
736
注册时间
2012-12-4
在线时间
488 小时
25#
 楼主| 发表于 2013-3-29 13:35:59 | 只看该作者
huanyefeng0809 发表于 2013-3-28 22:30
没有调试工具吗?可以把你提取的黑线发出来...看到底是不是黑线提取的问题...

黑线提取有些地方是不常规的
回复 支持 反对

使用道具 举报

7

主题

111

帖子

0

精华

高级会员

Rank: 4

积分
978
威望
442
贡献
276
兑换币
269
注册时间
2013-2-20
在线时间
130 小时
26#
发表于 2013-3-29 16:45:48 | 只看该作者
mxj1005071012 发表于 2013-3-29 13:35
黑线提取有些地方是不常规的

那就把你用来控制转向的量和给舵机的值给输出来呗....看看关系对不对...你要都不知道是什么地方出问题了还怎么调...
回复 支持 反对

使用道具 举报

21

主题

892

帖子

0

精华

常驻嘉宾

爱板者

Rank: 8Rank: 8

积分
3857

活跃会员奖章优秀会员奖章在线王奖章论坛元老奖章

威望
1833
贡献
1048
兑换币
736
注册时间
2012-12-4
在线时间
488 小时
27#
 楼主| 发表于 2013-3-29 19:47:08 | 只看该作者
huanyefeng0809 发表于 2013-3-29 16:45
那就把你用来控制转向的量和给舵机的值给输出来呗....看看关系对不对...你要都不知道是什么地方出问题了还 ...

是啊 我也这样想 准备用无线模块发数据呢  现在调的速度太慢了
回复 支持 反对

使用道具 举报

24

主题

69

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1868
威望
994
贡献
478
兑换币
399
注册时间
2011-8-5
在线时间
198 小时
28#
发表于 2013-3-30 22:53:24 | 只看该作者
if(!scan_right)
      {
        for(right_count_location=right_pix_temp;right_count_location<l;right_count_location++)            
        {
          //边沿点获取
         // printf("h=%d ",hang_pic);
         //   printf("r=%d ",right_count_location);
            if(*(picpoint[hang_pic]+right_count_location)<color_div_value)
            {
              scan_right=1;
              break;
            }
            if((*(picpoint[hang_pic]+right_count_location)>=color_div_value)&&
                (*(picpoint[hang_pic]+right_count_location+1)>=color_div_value)&&
                 (*(picpoint[hang_pic]+right_count_location+2)<color_div_value)&&
                   (*(picpoint[hang_pic]+right_count_location+3)<color_div_value))
            {
              if(hang_pic==h-1)                     //记录最近一行的位置
              {
                temp_edge[hang_pic].right_edge=right_count_location;
                break;
              }
              if(hang_pic<h-1&&temp_edge[hang_pic+1].right_edge>=right_count_location)      //第二行开始记录位置并且和上一行比较
              {
              temp_edge[hang_pic].right_edge=right_count_location;
              right_add_count++;
           //   printf("rL=%d ",right_count_location);
           //   printf("hang_pic=%d 1\n",hang_pic);
              break;
              }
              else                                      //找到连续方向不一样的时候屏蔽该边,并且停止扫描
              {
                right_use=1;
                scan_right=1;
                right_end=hang_pic;
                break;
              }
            }
           else if(right_count_location>l-5)    //位置在图像边界的4个点内找不到边缘时位置标记为254     
            {
              temp_edge[hang_pic].right_edge=254;
              //printf("0\n");
               if(hang_pic>20)
                  cross_right++;
              break;
            }
          }
      }
      else temp_edge[hang_pic].right_edge=255;                  //标记为结束


我自己写的,觉得还有些情况没弄上去,这里只是一边
回复 支持 反对

使用道具 举报

21

主题

892

帖子

0

精华

常驻嘉宾

爱板者

Rank: 8Rank: 8

积分
3857

活跃会员奖章优秀会员奖章在线王奖章论坛元老奖章

威望
1833
贡献
1048
兑换币
736
注册时间
2012-12-4
在线时间
488 小时
29#
 楼主| 发表于 2013-3-31 09:25:23 | 只看该作者
p141592653 发表于 2013-3-30 22:53
if(!scan_right)
      {
        for(right_count_location=right_pix_temp;right_count_location=color ...

考虑的很全面
回复 支持 反对

使用道具 举报

24

主题

69

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1868
威望
994
贡献
478
兑换币
399
注册时间
2011-8-5
在线时间
198 小时
30#
发表于 2013-3-31 17:23:16 | 只看该作者
mxj1005071012 发表于 2013-3-31 09:25
考虑的很全面

我再发最新的,已经没有什么问题了,边沿提取精确
if(!right_end_flag)
      {
          if(!scan_right)
          {
            for(right_count_location=right_pix_temp;right_count_location<l;right_count_location++)            
            {
              //边沿点获取
             // printf("h=%d ",hang_pic);
             //   printf("r=%d ",right_count_location);
                if(*(picpoint[hang_pic]+l/2)<color_div_value)    //开始扫描的点不是白色的则关闭扫描
                {
                  scan_right=1;
                 // printf("h=%d no color=%d\n",hang_pic,*(picpoint[hang_pic]+right_count_location));
                  break;
                }
                if((*(picpoint[hang_pic]+right_count_location)>=color_div_value)&&                  //找到边沿点
                    (*(picpoint[hang_pic]+right_count_location+1)>=color_div_value)&&
                     (*(picpoint[hang_pic]+right_count_location+2)<color_div_value)&&
                       (*(picpoint[hang_pic]+right_count_location+3)<color_div_value))
                {
                  if(hang_pic==h-1)                     //记录最近一行的位置
                  {
                    temp_edge[hang_pic].right_edge=right_count_location;
             //       printf("h=%d rLOne=%d color=%d\n",hang_pic,right_count_location,*(picpoint[hang_pic]+right_count_location));
                    break;
                  }
                  if((hang_pic<h-1) && (temp_edge[hang_pic+1].right_edge>=right_count_location))      //第二行开始记录位置并且和上一行比较
                  {
                  temp_edge[hang_pic].right_edge=right_count_location;
                  right_add_count++;
            //      printf("h=%d rL=%d color=%d\n",hang_pic,right_count_location,*(picpoint[hang_pic]+right_count_location));
                  break;
                  }
                  else                                      //找到连续方向不一样的时候屏蔽该边,并且停止扫描
                  {
                    right_use=1;
                    scan_right=1;
                    right_end=hang_pic;
                    //printf("h=%d end=%d\n",hang_pic,right_end);
                    break;
                  }
                }
               else if(right_count_location>l-5)    //位置在图像边界的4个点内找不到边缘时位置标记为256   
                {
                  if(hang_pic<l-3 && temp_edge[hang_pic+1].right_edge==256 && temp_edge[hang_pic+2].right_edge<256)
                  {
                    right_end_flag=1;
                    break;
                  }
                  temp_edge[hang_pic+1].right_edge=256;
             //     printf("h=%d end1=%d\n",hang_pic,temp_edge[hang_pic+1].right_edge);
                   if(hang_pic>=20)
                      cross_right++;
                  break;
                }
              }
          }
          else
          {
            temp_edge[hang_pic].right_edge=257;                  //标记为结束
           // printf("final=%d loc=%d\n",hang_pic+1,temp_edge[hang_pic].right_edge);
            right_end_flag=1;
          }
      }
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2025-1-12 02:57 , Processed in 0.049213 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表