智能车竞赛元素方案设计(锁元素)

本文分享了一种智能车竞赛中的元素识别方案,通过锁定不同赛道元素的方式提高识别准确性,减少误判,适用于初次参赛者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    今天给大家分享一个智能车竞赛的元素方案,我们组队员都是第一次参赛,略微有些经验不足最后只拿了省二的成绩,但是还是有些不错的方案可以分享下。

下面贴一张17届的线上赛道图片

摄像头顺时针方向跑为例,元素顺序依次为斑马线 > 十字路口  > 左环 > 三叉 最后斑马线车辆跑完一圈,当我们吧所有元素的识别都完成之后会发现,有时候会在十字路口误判三叉,当车辆速度较快,姿态不是很稳定时,非常容易在十字掉头;

以我们之前的方案将所有元素都放在路径判断的程序中识别,识别到相应元素,这种方案很明显简单,容易实现,但出错率也高;因此我们便采用的锁元素,即给每个元素都加一个标号,程序每次路径判断只判断一种元素,元素完成之后将判断改成下一个元素的标号;

简单理解就是:小车从车库出发,此时元素只判断十字路口,跑完两个十字之后开启左环的判断关闭十字的判断(每次只判断一种元素),依次左环出环之后开启三叉的判断,第二次出三叉之后开启斑马线的判断;

这种方案的优势就是相对比较稳定,元素的识别比较准确,当然前提肯定要元素本身识别准确,而锁元素的目的时节省资源和元素识别之间不冲突。

//元素锁

void Lock_road()
{
    if(road_lock==0)
    {
        if(element==5&&element_data==0)
        {
            road_lock=1;
        }
    }
    else if(road_lock==1)
    {
        if(element==6&&element_data==0&&(fork_time_flag_1==2||fork_time_flag_1==0))
        {
            road_lock=2;
        }
    }
    else if(road_lock==2)
    {
        if(element==8&&element_data==0)
        {
            road_lock=0;
        }
    }

}

/*
 * 道路元素判断
 * 0 直道
 * 1 左弯道
 * 2 右弯道
 * 4 右环
 * 5 左环
 * 6 三岔口
 * 7 十字
 * 8 斑马线
 * 9 坡道
 */
void Road_judgment()
{
    static uint8_t zebra_flag_1 = 0;
    //出赛道检测
    if(Out_Threshold<=80)
    {
        mode = 0;
        mode_flag=1;
    }
    Lock_road();//根据赛道解锁元素

    Star();//起步固定角度-只执行一次 尾车在斑马线前发车使用

    if(element_data==0)//特殊元素时不进行道路判断
    {
        if(Dynamic_value>=20||(loss_left_line>=5||loss_right_line>=5||loss_all_line>=5))//利用前瞻和ADC的值对弯道进行判断
        {
            if(loss_left_line>=5||loss_right_line>=5)
            {
                //对动态前瞻点进行判断
                if((loss_left_line>15&&loss_right_line<=5))
                {
                    element = 1;//左弯
                }
                else if((loss_left_line<5&&loss_right_line>=15))
                {
                    element = 2;//右弯
                }
                else
                {
                    element = 3;
                }
            }
        }
        else element = 0;  // 直道
    }
    //十字判断
    if((element_data==0||element==7))
    {
        if(Cross())
        {
            element = 7;
            element_data=1;
        }
        else element_data=0;
    }
    //斑马线检测
    if((element_data==0||element==8)
        &&road_lock==2&&(Encoder_stop==1||fork_time_flag_1==2)//第二圈不开启斑马线检测,防止误判
            )
    {
        if(Zebra())
        {
            zebra_flag=1;
            element = 8;
            element_data=1;
        }
        else
        {
            if(zebra_flag==1)
            {
                zebra_flag_1++;
                zebra_flag=0;
            }
            element_data=0;
        }
    }

    //三岔口判断
    if((element_data==0||element==6)
            &&road_lock==1
            )
    {
        if(Fork_lookup(90,20,left_l,right_l,midline))
        {
            element = 6;
            element_data=1;
        }
        else element_data=0;
    }
    //圆环判断
//    if((element_data==0||element==4)&&road_lock==0)
//    {
//        if(Ring_lookup_right(60,40,left_l,right_l,midline))//判断是否是右圆环
//        {
//            element = 4;
//            element_data=1;
//        }
//        else element_data=0;
//    }

    if((element_data==0||element==5)
            &&road_lock==0
      )
    {
        if(Ring_lookup_left(60,40,left_l,right_l,midline))  //判断是否是左圆环
        {
            element = 5;
            element_data=1;
        }
        else element_data=0;
    }


    Beep_set(element,1);
}

本次内容主要是提供一种方案,不包括具体元素内容,有需要的伙伴可以私聊交流

智能车多车组

后面有时间会发布下元素识别和电机舵机控制,可以留言交流

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值