寻线小车技术报告

总体来讲,整个算法的设计都基于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)流程控制
实际上,在这个具体的比赛,小车只有两次机会碰到全白,一是刚进隧道时,二是到达起飞点时。
只要把握住了这两个节点,那整个程序就可以被分为两部分: 寻黑线 和 过隧道。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,794评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,050评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,587评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,861评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,901评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,898评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,832评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,617评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,077评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,349评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,483评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,199评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,824评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,442评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,632评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,474评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,393评论 2 352

推荐阅读更多精彩内容