赛前指导:第二届未来飞行器挑战赛实践赛道之技术详解

2023-05-16

2022(第二届)四川省大学生未来飞行器挑战赛正在火热进行中,本次挑战赛中的实践类赛道将面向全省高校大学生个人或团队征集未来先进侦察打一体化无人机的实地竞赛,主要考察路劲规划、视觉目标搜索、舵机控制、车机协同等需要团队协作的多方面技术能力。

 

主办方将在赛场内提供 UWB 基站信号覆盖,参赛队伍可以自主选择目标识别和定位方式。阿木实验室作为大赛技术支持方,为给参赛队员提供更全面的指导,在赛事中更好地发挥,我们根据实践类比赛规则做了一版实践类赛道仿真demo,供参赛队员参考~

仿真效果展示

本功能包(future_aircraft)为Prometheus仿真功能包之一,主要用于实现2022(第二届)四川省大学生未来飞行器挑战赛的实践类仿真,仿真效果如下:

2022年四川省大学生未来飞行器挑战赛-实践类赛道仿真demo_哔哩哔哩_bilibili

首先我们需要通过gazebo仿真器搭建比赛区域,增加飞机模型以及相机模型,此时无人机将由H位置一键起飞,起飞后无人机会立即转换为自动模式,开始通过机载传感器(下视相机)自主搜索目标标靶,并在目标标靶上方保持动态跟踪悬停(precision loiter)尽可能模拟投掷子弹状态。

若您对于实践类赛道仿真demo有任何疑问或建议,欢迎在文章下方给我们留言发起讨论~接下来我们将给大家分享该仿真场景的一些代码设计思路。

代码设计思路

该仿真场景的代码设计主要由控制部分和视觉识别部分组成,具体介绍如下:

控制部分

根据比赛要求,我们可以将该比赛区域分割为三部分,如下图所示:

在三部分区域中,设计10种状态机分别为:

当无人机执行起飞命令,起飞完成后会进入航点1阶段,进而进入搜索状态,以绕圈的方式进行搜索目标标靶;如果搜索到目标标靶,就将进入跟踪状态机,跟踪状态机进行跟踪并且在目标标靶上方保持悬停,这时候区域1任务结束。

接着无人机将继续执行区域2任务,先进入航点2阶段,再进入搜索状态,搜索目标标靶,当搜索到目标标靶后会进入跟踪状态并在目标标靶上方保持悬停,此时区域2任务结束。

最后无人机执行任务3进行动态跟踪,首先执行航点3飞行,飞行完成后无人机将在上空进行识别移动的目标标靶,识别到之后进入动态跟踪阶段并实时保持上方动态跟踪,此时区域3任务结束。

视觉部分

视觉部分采用的是椭圆检测识别方法:

​其中图像处理的过程如下:

第一步:图像去噪声,去除图像中的椒盐噪声。

第二步:弧检测,挑选出可能为弧的对象。

第三步:弧分类,判定弧属于四个象限中的哪一类。

​第四步:弧过滤,运用两段弧约束、CNC约束(三段弧约束),过滤不满足要求的弧。

第五步:椭圆估计,在剩下的四个象限的弧中进行排列组合,使用优化算法,通过4个弧线估计一个椭圆。

第六步:椭圆打分,使用特定打分算法,计算椭圆与4个弧线的拟合程度,给椭圆打分,最后选出得分较高的椭圆。

用到了哪些技术

航点状态机的实现,更多的是依赖于如何使用Prometheus控制子模块,因此也建议各位开发者在学习该仿真场景之前,先参考Prometheus使用手册学习Prometheus的控制子模块的内容。以下为用到的技术以及对应的代码实现:

WAY* 航点状态机:使用惯性系或者机体系下的位置控制。

WAY1:
            uav_command.header.frame_id = "ENU";
            uav_command.Agent_CMD = prometheus_msgs::UAVCommand::Move;
            uav_command.Move_mode = prometheus_msgs::UAVCommand::XYZ_POS;
            uav_command.position_ref[0] = waypoint1[0];
            uav_command.position_ref[1] = waypoint1[1];
            uav_command.position_ref[2] = waypoint1[2];

搜索状态机的实现,绕圆运动进行搜寻:


SEARCH:
            // sleep(10);
            //坐标系
            uav_command.header.frame_id = "ENU";
            // Move模式
            uav_command.Agent_CMD = prometheus_msgs::UAVCommand::Move;
            // Move_mode
            uav_command.Move_mode = prometheus_msgs::UAVCommand::XY_VEL_Z_POS;
            //无人机按照圆形轨迹飞行
            uav_command.velocity_ref[0] = -line_velocity * std::sin(count * angle_increment);
            uav_command.velocity_ref[1] = line_velocity * std::cos(count * angle_increment);
            uav_command.velocity_ref[2] = 0;
            uav_command.position_ref[2] = 1.5;

跟踪状态机的实现,使用对无人机速度控制的P调节:


TRACKING:
            if (!is_detected)
            {
                --loss_count;
                if(loss_count < 0)
                    exec_state = RETURN;
                    PCOUT(0, YELLOW, "Return");
            }
            //坐标系
            uav_command.header.frame_id = "BODY";
            // Move模式
            uav_command.Agent_CMD = prometheus_msgs::UAVCommand::Move;
            // 机体系下的速度控制
            uav_command.Move_mode = prometheus_msgs::UAVCommand::XY_VEL_Z_POS_BODY;
            uav_command.velocity_ref[0] = -0.9 * ellipse_det.sight_angle[0];
            uav_command.velocity_ref[1] = 0.9 * ellipse_det.sight_angle[1];
            uav_command.velocity_ref[2] = 0;
            uav_command.position_ref[2] = 1.5;

视觉端数据的处理,坐标系变化:

for(auto &ellipes : msg->detection_infos)
    {
        ellipse_det = ellipes;
        if (ellipse_det.detected && ellipse_det.object_name == "T")
        {
            num_regain++;
            num_lost = 0;
        }
        else{
            num_regain = 0;
            num_lost++;
        }
        if(num_lost > VISION_THRES)
        {
            is_detected = false;
            // PCOUT(1, GREEN, "no detect");
        }
        if(num_regain > VISION_THRES){
            is_detected = true;
            // PCOUT(1, GREEN, "detected");
        }
        ellipse_det.sight_angle[0] = ellipes.sight_angle[1];
        ellipse_det.sight_angle[1] = ellipes.sight_angle[0];

更多详情请参考:https://github.com/amov-lab/Prometheus/tree/main/Modules/future_aircraft

可能存在的问题

1、动态跟踪只有P调节的速度控制,跟踪效果并非理想情况,控制算法还需要针对比赛实际情况进行优化。

2、目前的仿真场景下暂时没有办法模拟子弹投掷至目标标靶,因此我们采取的替代方式是让无人机在目标标靶上方保持悬停一段时间,如果是在真实比赛场景下,还需要新增投掷标靶状态机。

电脑配置要求

以上内容均为阿木实验室仿真演示,各位开发者如需复现,对电脑配置会有一定的要求,Prometheus仿真环境配置主要有两种方式,分别是通过虚拟机或者实体机。

虚拟机安装的电脑配置要求

以笔者电脑为例:

具体的虚拟机安装方式可参考Prometheus使用手册中第2.2章节内容。

实体机安装的电脑配置要求

实体机的要求相对于虚拟机要低一些,具体为:内存 8GB;硬盘空间 60GB;CPU 6核12线。实体机的具体安装方式可参考Prometheus使用手册中第2.1章节内容。

这里我们推荐实体机的安装方式,相对虚拟机来说,实体机可以将全部的硬件资源利用起来,运行速度更快,bug也会更少。

Prometheus使用手册:https://wiki.amovlab.com/public/prometheus-wiki/

相关代码与资料

码云链接:https://gitee.com/amovlab/Prometheus/tree/main/Modules/future_aircraft

GitHub链接:https://github.com/amov-lab/Prometheus/tree/main/Modules/future_aircraft

与本届飞行器挑战赛实践赛道相关的代码都在“ Prometheus/Modules/future_aircraft”目录下,具体运行及使用可参考“readme”:https://github.com/amov-lab/Prometheus/blob/main/Modules/future_aircraft/readme.md

若大家在学习过程中遇到无法解决的使用场景或bug,可以在文末下方给我们留言,我们将为您提供解决思路~

如需探讨更多关于本届未来飞行器大赛的相关技术,可添加微信“jiayue199506”申请进入赛事交流群~

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

赛前指导:第二届未来飞行器挑战赛实践赛道之技术详解 的相关文章

随机推荐

  • 技术分享 | ROS与Gazebo的通信机制

    做机器人算法的相信大家对ROS和Gazebo都不陌生 xff0c 可以说是我们的两大利器 xff0c ROS全称机器人操作系统 xff0c 它为我们提供了软件操作平台 xff0c 我们可以方便的在ROS的软件框架下编写我们自己的机器人算法
  • 技术分享 | 避坑指南-无人机自主降落代码解析

    前言 本主要讲解promtheus仿真环境中静态目标的自主降落 涉及整体逻辑 识别降落点 坐标系变换 不会涉及仿真环境搭建 本人之前的属于纯作计算机视觉工作的 如果你和我一样在此之前没有接触过机器人控制 无人机相关的内容 那这篇文章对于入门
  • Airsim动态 | 安装ROS包装器(AirSim ROS Wrapper)

    本期内容我们将带来在Airsim环境下使用ROS Wrapper的相关教程 xff0c 以下是AirSim客户端库上的一些ROS Wrapper相关配置 一 启动 以下步骤适用于 Linux 系统 如果是在 Windows 上运行 AirS
  • 技术分享 | 如何在ROS中使用Serial包?

    首先 xff0c 这个Serial 是一个跨平台 简单易用的库 xff0c 用于在计算机上使用串行端口 该库提供了一个 C 43 43 面向对象的接口 xff0c 用于与 Linux 和 Windows 上的类似 RS 232 的设备进行交
  • 新品发布 | P230开源无人机一台深度相机实现无人机VINS定位及ego导航

    P230 视觉导航 室内编队无人机开发平台 Prometheus 230 xff08 P230 xff09 是阿木实验室专为科研工作者与航天器开发者打造的小型化无人机开发平台 xff0c 适用于无GPS环境下基于视觉的无人机定位 导航 避障
  • 学习方法 | 买科研无人机之前你需要考虑的七件事

    买科研无人机之前你需要考虑的七件事 xff0c 很多客户都有买过我们的科研无人机P系列 Z系列等等 从最开始的P100 到后期的P200 xff0c 再到现在的P450 P230 P600 2020年后 xff0c 网络上也出现了更多种类和
  • 零基础同学的福利,带你走进Airsim 的大门

    初识AirSim仿真开发 正式上线 大纲如下 xff1a 第一课时 在ubuntu中编译AirSim UE4 ROS 简单介绍AirSimUE4 ROS AirSim编译的流程介绍环境编译中会出现哪些问题 xff0c 以及如何寻找解决方法
  • 技术分享 | 三种无人机精准降落方案

    1 概述 无人机自诞生以来 xff0c 主要应用于军事方面 xff0c 作为智能化和信息化的武器 xff0c 无人机在侦察 监视 通信 远距离攻击等方面发挥了重要的作用 近年来 xff0c 无人机在民用方面的应用也越来越多 xff0c 各国
  • 技术分享 | 玩转Jetson NX内核(四)

    上期我们讲解了玩转Jetson NX内核 xff08 三 xff09 xff0c 本期我们开始将mipi相机移植到NX xff0c 我们已经搭建好各种编译环境 xff0c 如有问题可参考之前的系列文章 1 4 mipi相机在NX上应用 mi
  • 远程连接TX2的ubuntu系统(没有显示器):网线+路由器解决

    我的到手TX2是没有显示器的 xff0c 要么用HDMI线接上显示器 xff0c 要么在一个wifi网络下使用nomachine远程桌面 我没有显示器也没有HDMI线 xff0c 只能远程桌面连接 问题是想要远程连接就必须让TX2和我的电脑
  • 技术分享 | GPS无人机集群位置自主纠偏功能升级

    新的一年 xff0c 又是新的开始 xff0c 在这里 xff0c 祝大家在新的一年有更多的收获 xff0c 有更好的发展 过新年 xff0c 大家都会买新衣服穿 xff0c 我们的GPS无人机集群套件同样也要上新功能 近期 xff0c 我
  • 技术分享 | 遥控器控制(Joystick)

    一 遥控器控制 在真实飞行过程中 xff0c 我们使用真实的遥控器作为控制无人机的主要操作来源 xff0c 遥控器始终拥有最高的权限 xff0c 精湛的遥控器操作手法可以保证无人机安稳着陆 xff0c 但对于很多非专业人士来说 xff0c
  • 技术分享 | Airsim初探-用游戏引擎做仿真

    谈到无人机 无人车仿真 xff0c 首先想到的大概就是gazebo xff0c 但现在都快进入元宇宙时代了 xff08 手动狗头 xff09 xff0c 还再继续使用gazebo这种上个时代的产品就显得不够hack xff0c 是时候了解和
  • 技术分享 | Airsim和PX4远程配置连接教程

    前言 xff1a 远程配置是指一台计算机上安装windows版airsim xff0c 作为服务器 xff0c 另一台计算机上安装ubuntu的px4 xff0c 作为客户端 没有采用ubuntu的airsim是因为windows版的air
  • 调试达人 | 史上最全PX4固件无人机无法解锁问题合集

    很多同学在到手一台或者根据网上教程组装了一台PX4固件的无人机后 xff0c 最迫切的一件事是否是让无人机解锁飞上蓝天 xff1f 但就是在这一步却遇到各种各样的问题导致无法解锁而四处查找资料 xff1f 本文由阿木实验室有多年无人机调试经
  • 常见激光雷达分类

    一 激光雷达的原理 激光雷达的原理类似于声呐 xff0c 只不过这里我们用光代替声音 xff0c 来衡量激光雷达与障碍物之间的距离 主要工作原理是向目标发射激光束 xff08 单线 多线 xff09 xff0c 然后将反射信号与发射信号比较
  • Mini Homer——几百块钱也能搞到一台远距离图数传链路?

    在一些远程操控的场景中 xff0c 图数传链路的选择一直是比较重要的问题 传统的WIFI方式 xff0c 传输距离近50到100米 xff0c 不能满足测试要求 xff0c 更不能在工业现场使用 即便是一些专用的图数传方案 xff0c 传输
  • F200——搭载基于模型设计的国产开源飞控系统无人机

    一 F200简介 F200是目前基于FMT开源自驾仪项目开发的第一款无人机产品 xff0c 旨在为广大无人机爱好者和科研工作者提供一个理想的无人机研发与测试平台 支持室外定高 定点 xff0c 一键起飞 xff0c 一键降落 xff0c 一
  • Prometheus-v2新增地面站,助力高效研发!

    Prometheus地面站是基于Prometheus系统的人机交互界面 xff0c 地面站采用TCP UDP通信进行发送和接收数据 xff0c 而在机载端中则采用ROS MSG消息进行通信 xff0c 该地面站可以更快地让用户复现Prome
  • 赛前指导:第二届未来飞行器挑战赛实践赛道之技术详解

    2022 xff08 第二届 xff09 四川省大学生未来飞行器挑战赛正在火热进行中 xff0c 本次挑战赛中的实践类赛道将面向全省高校大学生个人或团队征集未来先进侦察打一体化无人机的实地竞赛 xff0c 主要考察路劲规划 视觉目标搜索 舵