# 避障机器人6--后退

房间里的沙发比较矮,你伸在上面的手摸不到,但是你有预感,划划手真的碰到了沙发。
沙发两边可能是另外两个小沙发,于是你后退了一步,转身继续寻找……

# 情景分析

  1. 超声波传感器是有盲区的,意味着可能会忽略掉一些东西。幸运的时候,障碍物可能在某些条件下突然被检测到了,这时机器人离障碍物已经太靠近了,不一定有足够的空间转弯,所以我们决定先后退一步。

# 流程解析

  1. 上一节的程序if(距离小于350毫米){随机转弯;等待}……
  2. 在随机转弯前插入入后退过程。while(靠得太近了){后退}
uml diagram

# 参考程序

  • oseppBlock IDE程序

  • Arduino IDE程序
#include <oseppRobot.h>

OseppRangeFinder U(2);
OseppTBMotor L(12, 11, HIGH);  //左边轮子,如果方向不对,要把HIGH换成LOW
OseppTBMotor R(8, 3, LOW);     //右边轮子,如果方向不对,要把LOW换成HIGH

void setup() {}

void loop() {
    if (U.ping() < 350) {
        while (U.ping() < 100) {
            //检测距离只要小于100mm,就一直后退
            L.backward(150);//后退速度稍微慢一些
            R.backward(150);
        }
        L.forward(200);
        R.backward(200);
        while (U.ping() < 400) {
            delay(25);
        }
    } else if (U.ping() <= 700) {
        L.forward(map(U.ping(), 350, 700, 80, 200));
        R.forward(map(U.ping(), 350, 700, 80, 200));
    } else {
        L.forward(200);
        R.forward(200);
    }
    delay(25);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

# 运行结果

接通电源,上传程序后,拔掉USB线。打开电池开关,将机器人放到地上,机器人自由行动,如果你突然挡在它前面,它会向后退再转身。

# 课程解读

  1. 我们已经学会了控制机器人前进,转弯,后退。机器人并不像平常玩的遥控车,遥控车通过轮子的角度来实现转弯,而我们的机器人是通过给两个轮子不同的转动方向来控制。这种方式叫做差速控制。它可以原地转弯哦。

# oseppBlock操作视频

# ArduinoIDE操作视频