美文网首页
寻线小车技术报告

寻线小车技术报告

作者: yingshaoxo | 来源:发表于2019-12-24 11:03 被阅读0次

总体来讲,整个算法的设计都基于PID动态控制


寻线算法:

假设我们有三个寻线传感器分别叫做 A、B、C。

如果小车处于最佳状态,error == 0,那么A、B、C就应该等于0,1,0。

如果小车向右偏离黑线,error == -1, 那么A、B、C就应该等于1,0,0。

如果小车向左偏离黑线,error == 1, 那么A、B、C就应该等于0,0,1。

控制方法:

经过无数的尝试,发现只有用差速转弯的方式,才能完美的贴合曲线。

当 error == 0, 左右轮速度相等,假设都为 50% PWM。

若 error == -1,右轮速度应快于左轮,才能将小车拉回赛道,所以右轮 60% PWM、左轮 40 % PWM。

若 error == 1,左轮速度应快于右轮,才能将小车拉回赛道,所以左轮 60% PWM、右轮 40 % PWM。

We will keep calculating the errors, and we will move the car according to the errors. So in this way, the car will always stay on the black line.

伪代码看起来像这样:

int A = 0;
int B = 0;
int C = 0;

float Kp = 0;
float Ki = 0;
float Kd = 0;
float error=0, P_value = 0, I_value = 0, D_value = 0, PID_value = 0;
float previous_error = 0;

int initial_motor_power = 50;

void calculate_PID() {
    P_value = error;
    I_value = I_value + error;
    D_value = error - previous_error;
    PID_value = (Kp * P_value) + (Ki * I_value) + (Kd * D_value);
    previous_error = error;
}

void setup() {
}

void loop() {
    if (A == 0 && B == 1 && C == 0) {
        error = 0;
    } else if (A == 1 && B == 0 && C == 0) {
        error = -1;
    } else if (A == 1 && B == 0 && C == 0) {
        error = 1;
    }

    calculate_PID();

    if (round(PID_value * 10) == 0) {
        go_straight(initial_motor_power, initial_motor_power);
    }
    else if (PID_value < 0) {
        speed1 = initial_motor_power - abs(PID_value)
        speed2 = initial_motor_power + abs(PID_value)
        constrain(speed1, 0, 100)
        constrain(speed2, 0, 100)
        go_right(speed1, speed2) // speed1 < speed2 here
    }
    else if (PID_value > 0) {
        speed1 = initial_motor_power + abs(PID_value)
        speed2 = initial_motor_power - abs(PID_value)
        constrain(speed1, 0, 100)
        constrain(speed2, 0, 100)
        go_left(speed1, speed2) // speed1 > speed2 here
    }
}

下面是重复内容

503陆空两栖机器人巡航 项目(冠/亚/季军)技术报告
南京铁道职业技术学院 胡英杰,孙雅斌
指导教师: 杨杰

摘要 通过PID算法,不断测试,寻出最优参数,从而达到最好的效果
关键词 PID;树莓派;差速转弯;智能小车;Pix无人机

1.引言
现今是一个不断发展的年代,一切过时的东西都将消失在岁月的尘埃之中。唯有那些不断开拓的人,才能立足自我,不断创新,从而在激烈的社会竞争中取得不败之地。
有时候我想想都能笑出来,接近2020年,有些人还在拿着51单片机做开发。51单片机能联网吗?51单片机支持面向对象编程吗?51单片机可以使用成千上万的开源库吗?这种现象只能说明大部分的人是不思进取的,不愿前进的。
而本队恰恰相反,从一开始就立足最新科技成果,采用了树莓派+Px4这种高级的组合。且不说树莓派自带的网络属性(暗指你可以通过 IP packets 的方式对它进行控制),就算凭着它深度集成的 Python 开发环境,就能从软件开发上占足优势(毕竟Python 1分钟, C 写2小时不是瞎说的)
另外,由于采用了开源飞控 PX4,我们不需要花大量的精力进行飞机平衡调参,省下来的不少时间可以全用在对赛道本身的研究上。
如此一来,事情就变得美妙而简单了。

2.作品的总体设计
2.1 小车部分
(1) 小车的设计思想
轻: 不轻就飞不起来了
机动性强: 轮子反应要快,马力要足

(2) 小车的组成
红外巡线模块→树莓派→电机驱动
超声波模块→树莓派→电机驱动

带孔铝合金自制框架
树莓派3b+
TT减速电机
数字巡线模块
超声波传感器
自制万向轮
轮胎
电机驱动板
LED灯

2.2 无人机部分
(1)选购原则
尽量购买开源产品,因为资源丰富,容易上手。

(2)硬件组成
Pixhawk2.4.8飞控
F330机架
好盈乐电调
YH2212电机
减震架
8045浆
乐迪遥控器
4000mh电池

2.3 程序设计
(1) 小车巡线算法
假设我们有三个寻线传感器分别叫做 A、B、C。
如果小车处于最佳状态,error == 0,那么A、B、C就应该等于0,1,0。
如果小车向右偏离黑线,error == -1, 那么A、B、C就应该等于1,0,0。
如果小车向左偏离黑线,error == 1, 那么A、B、C就应该等于0,0,1

(2)小车控制方法
经过无数的尝试,发现只有用差速转弯的方式,才能完美的贴合曲线。
当 error == 0, 左右轮速度相等,假设都为 50% PWM。
若 error == -1,右轮速度应快于左轮,才能将小车拉回赛道,所以右轮 60% PWM、左轮 40 % PWM。
若 error == 1,左轮速度应快于右轮,才能将小车拉回赛道,所以左轮 60% PWM、右轮 40 % PWM。
We will keep calculating the errors, and we will move the car according to the errors. So in this way, the car will always stay on the black line.

(3)核心代码

int A = 0;
int B = 0;
int C = 0;

float Kp = 0;
float Ki = 0;
float Kd = 0;
float error=0, P_value = 0, I_value = 0, D_value = 0, PID_value = 0;
float previous_error = 0;

int initial_motor_power = 50;

void calculate_PID() {
    P_value = error;
    I_value = I_value + error;
    D_value = error - previous_error;
    PID_value = (Kp * P_value) + (Ki * I_value) + (Kd * D_value);
    previous_error = error;
}

void setup() {
}

void loop() {
    if (A == 0 && B == 1 && C == 0) {
        error = 0;
    } else if (A == 1 && B == 0 && C == 0) {
        error = -1;
    } else if (A == 1 && B == 0 && C == 0) {
        error = 1;
    }

    calculate_PID();

    if (round(PID_value * 10) == 0) {
        go_straight(initial_motor_power, initial_motor_power);
    }
    else if (PID_value < 0) {
        speed1 = initial_motor_power - abs(PID_value)
        speed2 = initial_motor_power + abs(PID_value)
        constrain(speed1, 0, 100)
        constrain(speed2, 0, 100)
        go_right(speed1, speed2) // speed1 < speed2 here
    }
    else if (PID_value > 0) {
        speed1 = initial_motor_power + abs(PID_value)
        speed2 = initial_motor_power - abs(PID_value)
        constrain(speed1, 0, 100)
        constrain(speed2, 0, 100)
        go_left(speed1, speed2) // speed1 > speed2 here
    }
}

(4)流程控制
实际上,在这个具体的比赛,小车只有两次机会碰到全白,一是刚进隧道时,二是到达起飞点时。
只要把握住了这两个节点,那整个程序就可以被分为两部分: 寻黑线 和 过隧道。

相关文章

  • 寻线小车技术报告

    总体来讲,整个算法的设计都基于PID动态控制 寻线算法: 假设我们有三个寻线传感器分别叫做 A、B、C。 如果小车...

  • 巡线小车

    开写 使用51单片机制作一个简单的巡线小车,这个很多人都有制作过,废话不多说,直接上电路图。 模块介绍 5个模块,...

  • Scratch自动巡线小车

    要怎么实现一个可以按照指定路线行走的小车 绘制清晰巡线背景 绘制小车:头部侦测区域用 不同或者相同 颜色区分 1....

  • 《2017地平线报告》发布:未来5年教育发展动向——六项主要趋势

    民小编说 2017地平线报告基础教育版新鲜出炉了。报告聚焦最有可能影响今后五年(2017—2021)技术规划和决策...

  • 蓝鹏轧钢测径仪专业解析

    摘要:测量小车是轧钢测径仪的重要组成部分,测量小车的优劣,关乎着其测量精度。 关键词:轧钢测径仪;测量小车;热轧线...

  • 黎泽寻:3.11黄金原油投资布林线详解和趋势线分析

    黎泽寻:黄金原油投资怎样看趋势线分析? 技术分析方法繁多,能相互印证固然好,但若遇上技术指标钝化、浪型不清晰的时候...

  • 混合学习将是未来的主流学习方式

    《地平线报告》是美国新媒体联盟组织每年发布的关于信息技术及在教育中应用情况的前瞻报告,十几年来,新媒体联盟组织都要...

  • 云端寻线

    空中走廊漫步 不见鸟儿路过用温暖穿过最好时光 心中的诗挂着奋斗的人

  • 寻线记

    再过一个多月,就是春节,又到给小辈发红包的时候了。 自从迷上手工包后,每年春节前必买红包材料包,缝制布艺红包,给孩...

  • Flutter技术学习贴

    1,flutter技术调研 Flutter技术调研报告

网友评论

      本文标题:寻线小车技术报告

      本文链接:https://www.haomeiwen.com/subject/zgwtgctx.html