回到首页 返回首页
回到顶部 回到顶部
返回上一页 返回上一页

升级TT飞机,拥有前向避障(超声波传感器) 简单

头像 小怼怼 2021.01.08 788 1

虽然我们的TT已近很棒了,拥有下视传感器。加上扩展件+屏幕还能拥有前向避障。但是取下扩展屏幕以后,前向tof传感器也没有了~幸好我们有很多传感器,可以帮助小飞机飞的更加安全!

本节就跟着小张来为我们心爱的小飞机加一个前向的避障功能~

材料清单

  • TT无人机一个 X1
  • 扩展件一个 X1
  • Urm10超声波 gravity4p线 X1 链接
  • 连接线 X1
  • 双面胶 X1

步骤1 将超声波传感器安装到TT扩展件上面

project-image

一共4个引脚,两个是电源脚。

5V+GND,这个是第一组

第二组是两个数据引脚

一个是周期的发送3KHz的方波

一个引脚是接收回传的数据信息

project-image

注意看这些引脚的排列顺序

project-image

我这个地方是这样插的,看自己的爱好插

project-image

注意选好引脚以后在程序内部的更改

project-image

接着就是固定这个传感器,我建议是用厚双面胶固定。因为是上传模式,所以遮挡摄像头也可以

步骤2 编写逻辑代码

project-image

以上是用Mind+写的积木程序

代码
/*!
 * MindPlus
 * telloesp32
 *
 */
#include <RMTT_Libs.h>
#include <DFRobot_URM10.h>
// 创建对象
RMTT_RGB tt_rgb;
RMTT_Protocol protocol;
DFRobot_URM10 urm10;

// 主程序开始
void setup()
{
    tt_rgb.Init();
    Serial1.begin(1000000, 23, 18, SERIAL_8N1);
    led_effect_init();
    // 此时上电机器显示黄色的灯
    tt_rgb.SetRGB(255, 255, 0);
    delay(2000);
    protocol.startUntilControl();
    delay(2000);
    protocol.sendTelloCtrlMsg("motoron");
    delay(3000);
    protocol.sendTelloCtrlMsg("takeoff");
    // 起飞以后稳定一下
    delay(5000);
    // 此时飞机离地高一米,或者是离起飞平面高一米
    protocol.sendTelloCtrlMsg((char *)String(String("up ") + int(50)).c_str());
}
void loop()
{
    // 因为程序是自动执行的,所以只能按照最小的阈值来构建程序
    protocol.sendTelloCtrlMsg((char *)String(String("forward ") + int(20)).c_str());
    // 传感器可以自由的设置在任意地方。个人推荐在后面,上面以及前面。此时是前向避障。小于25里面的时候
    if (((urm10.getDistanceCM(2, 12)) <= 25))
    {
        // 呼吸灯变红,提醒。这个地方是外接提醒用的传感器。比如蜂鸣器
        led_effect_breath(255, 0, 0, 2.5);
        digitalWrite(13, HIGH);
        // 然后停止运行,悬停
        protocol.sendTelloCtrlMsg("stop");
        // 机器停留3秒,稳定先有状态。
        delay(3000);
        // 此时可以认为前面是有墙。机身旋转270度。完成避障
        protocol.sendTelloCtrlMsg((char *)String(String("cw ") + int(270)).c_str());
    }
    else
    {
        // 再让飞机停留一下
        delay(3000);
        protocol.sendTelloCtrlMsg((char *)String(String("forward ") + int(20)).c_str());
    }
}
project-image

上面的代码可能看着不舒服,我这边是用Vscode作为的编辑器

步骤3 代码讲解

编写程序的时候注意要使用在每一个指令执行过后留有几秒的时间,因为TT的命令都是阻塞型的命令,说人话就是一个接一个命令的运行,上一个没有运行完成的话,下一个是完成不了的。所以可以看到我的程序在编写过程中在每一个命令之间有适当的延时。

还需要注意的一点是,在上传模式编写程序的时候一定要注意加开启飞行控制这个积木,我写好程序调试的手,怎么也起飞不了。后来查询官方文档获得信息

project-image

注释也写的比较清楚,注意程序指令之间的延时。

project-image

这段是主要的逻辑。首先在while循环内的第一个指令是飞机持续的前进,一次20公分。接着是持续的判断超声波传感器的回传信息是否小于25厘米。如果是就RGB变成红色,我其实是想让蜂鸣器响的,但是没有蜂鸣器就没有加这个传感器。接着让飞机悬停并旋转270°。避开前面的障碍物继续飞行

到目前为止,我们就拥有了一台可以前向+向下避障的小飞机了!现在它执行任务的时候你会不会更加的放心呢!

评论

user-avatar
  • Shuin

    Shuin2023.04.21

    相对挑战卡旋转角度程序应该怎么写啊,就是我现在无人机在挑战卡上方,机身相对挑战卡角度有点歪,我想做下矫正让飞机与挑战卡没有偏航角,模块里有一项飞机相对挑战卡旋转角度,我写上之后飞机不按程序运行。。。

    0