智能车学习日记【二】————十字和斜入十字

智能车学习日记【二】————十字和斜入十字文章目录智能车学习日记【二】————十字和斜入十字前言一、普通十字补线二、斜入十字1.判断是否为斜入十字和斜入十字类型2.找斜入十字拐点总结前言经过了一个多月的学习,小白的我终于也是能较稳定调出了2.8m以上的四轮车,过程中也遇到了很多困难,其中就有十字补线和斜入十字补线。尤其是斜入十字也是困扰了我快一周,现在和大家分享一下我处理斜入十字的方法(我的方法其实还有很多漏洞需要改进,仅供大家参考理解一下,欢迎各位在评论区指点出可
摘要由CSDN通过智能技术生成

智能车学习日记【二】————十字和斜入十字

文章目录


前言

经过了一个多月的学习,小白的我终于也是能较稳定调出了2.8m以上的四轮车,过程中也遇到了很多困难,其中就有十字补线和斜入十字补线。尤其是斜入十字也是困扰了我快一周,现在和大家分享一下我处理斜入十字的方法(我的方法其实还有很多漏洞需要改进,仅供大家参考理解一下,欢迎各位在评论区指点出可改进之处!)


一、普通十字补线

首先,我将十字补线分成了找拐点判断是否需要补线补线3个步骤。斜入十字也是这样判断,只是多了很多限制条件。防止在直道或弯道也补线导致图像错误。代码里的数组可以在我的第一篇文章里找到定义和含义
智能车学习日记【一】

  1. 找拐点
    在这里插入图片描述

正入十字找拐点比较容易,直接贴代码

// 找拐点
if (l_down_flag == 0)

            {
                if (L_black[0] != 185 && L_black[1] != 185 && L_black[3] != 185)
                {
                    for (i = 1; i < 65; i++)
                    {
                        if (abs(L_black[i] - L_black[i - 1]) < 5 && abs(L_black[i + 1] - L_black[i]) < 5 && L_black[i + 2] - L_black[i + 1] > 3 && i + 1 >= 2 && L_black[i + 1] < 180 && i + 1 < 45)  
                        {
                            lefty[0] = (byte)(i + 1);
                            SetText(" 左下拐点 y x +  " + (i + 1) + "   " + L_black[i + 1]);
                            l_down_flag = 1;
                            break;
                        }
                    }
                }

            }
if (r_down_flag == 0)
            {
                if (R_black[0] != 0 && R_black[1] != 0 && R_black[3] != 0)
                {
                    for (i = 1; i < 65; i++)
                    {
                        if (abs(R_black[i] - R_black[i - 1]) < 5 && abs(R_black[i + 1] - R_black[i]) < 5 && R_black[i + 2] - R_black[i + 1] < -3 && i + 1 >= 2 && R_black[i + 1] > 2 && i + 1 < 45)
                        {
                            righty[0] = (byte)(i + 1);
                            SetText(" 右下拐点 y x+  " + (i + 1) + "   " + R_black[i + 1]);
                            r_down_flag = 1;
                            break;
                        }
                    }
                }

            }
if (l_up_flag == 0)
            {
                for (i = 1; i < 65; i++)
                {
                    if (L_black[i] - L_black[i - 1] < -3 && abs(L_black[i + 1] - L_black[i]
  • 8
    点赞
  • 87
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
TC264智能车是一种基于TC264芯片开发的智能车型,拥有多种功能和模块。其中十字识别模块是TC264智能车的一个重要组成部分。下面是一个简单的TC264智能车十字识别的C代码示例: ```c #include <stdio.h> // 定义输入和输出引脚 #define SENSOR_PIN_A 1 #define SENSOR_PIN_B 2 #define SENSOR_PIN_C 3 #define SENSOR_PIN_D 4 #define MOTOR_PIN_LEFT 5 #define MOTOR_PIN_RIGHT 6 // 定义识别结果常量 #define CROSSROAD_NONE 0 #define CROSSROAD_STRAIGHT 1 #define CROSSROAD_LEFT 2 #define CROSSROAD_RIGHT 3 // 十字识别函数 int detectCrossroad() { int result = CROSSROAD_NONE; // 读取传感器数据 int sensorA = readSensor(SENSOR_PIN_A); int sensorB = readSensor(SENSOR_PIN_B); int sensorC = readSensor(SENSOR_PIN_C); int sensorD = readSensor(SENSOR_PIN_D); // 判断十字识别结果 if (sensorA && sensorB && !sensorC && !sensorD) { result = CROSSROAD_STRAIGHT; } else if (!sensorA && !sensorB && sensorC && !sensorD) { result = CROSSROAD_LEFT; } else if (!sensorA && !sensorB && !sensorC && sensorD) { result = CROSSROAD_RIGHT; } return result; } // 控制电机运动函数 void moveMotor(int direction) { if (direction == CROSSROAD_NONE) { stopMotor(); } else if (direction == CROSSROAD_STRAIGHT) { moveForward(); } else if (direction == CROSSROAD_LEFT) { turnLeft(); } else if (direction == CROSSROAD_RIGHT) { turnRight(); } } // 主程序 int main() { while (1) { int crossroad = detectCrossroad(); moveMotor(crossroad); } return 0; } ``` 这段代码实现了TC264智能车十字识别功能。主要包括四个传感器引脚和两个电机引脚的定义。`detectCrossroad()`函数用于读取传感器数据并判断识别结果,根据结果控制电机的运动。`main()`函数中通过循环反复进行十字识别和电机控制,使智能车能够正确行驶在十字路口上。这只是一个简单的示例,具体的代码实现可能会根据具体的智能车硬件平台和应用场景有所不同。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值