Skip to content

纳新

概念解释

QGC

From Qwen3.8 MAX

  1. QGC 的核心作用是什么? 当你有一架无人机(特别是使用开源飞控的无人机)时,你无法直接通过代码或复杂的命令行去操控它。QGC 提供了一个直观的图形用户界面(GUI),让你可以通过电脑、平板甚至手机,与无人机进行交互。
  2. QGC 的主要功能 QGC 的功能涵盖了无人机生命周期的各个阶段: 固件刷写(安装系统): 当你买了一块新的飞控板(Flight Controller),它是没有系统的。QGC 可以一键帮飞控下载并安装最新的固件(如 PX4 或 ArduPilot)。 传感器校准: 无人机起飞前必须知道哪边是“北”、哪边是“水平”。QGC 会引导你转动无人机,完成罗盘、陀螺仪、加速度计的校准。 参数配置(调参): 无人机有几百上千个参数(如电机转向、PID 控制参数、失控保护机制等)。QGC 提供了分类清晰的列表和图表,让你调整这些参数。 任务规划(Mission Planning): 你可以在 QGC 的地图上点击设置“航点”(Waypoints),告诉无人机:“飞到A点,高度30米,拍张照;然后飞到B点,降低到10米进行环绕”。设置好后,无人机就能全自动执行任务。 实时飞行监控: 飞行时,QGC 会实时显示无人机的高度、速度、电池电压、卫星数量、姿态角等关键遥测数据,甚至可以接收无人机的 FPV(第一人称视角)实时视频流。 数据分析: 飞行结束后,可以通过 QGC 下载飞控里的“黑匣子”日志(Log),用来分析飞行数据或排查炸机(坠毁)原因。

相当于一个“Debugger”和“操作台”。但是这个遥控器可以运行在主流操作系统上,而且能给人看到飞行时的参数,便于算法调试。更进一步,ai提到了MAVLink这个协议,于是:QGC是MAVLink协议的一个外壳,提供GUI界面和一些封装好的基本操作。

ROS

From Qwen3.8 MAX

它实际上是一个运行在 Linux(通常是 Ubuntu)之上的软件框架(中间件)。它提供了一堆工具和库,帮你更方便地编写机器人代码。它的核心作用是帮你解决不同硬件(如摄像头、雷达)和软件(如避障算法、导航算法)之间“如何互相通信”的问题。

  • 底层 / 小脑(飞控 PX4 / ArduPilot): 负责最核心、最保命的任务。比如以每秒几百次的频率读取陀螺仪数据、控制电机转速让无人机保持平衡、执行简单的“向前飞1米”指令。它通常运行在一块单片机上,通过 MAVLink 协议对外交流。
  • 中层 / 大脑(ROS): 负责高级任务。比如“用摄像头识别前面的树并绕过去”、“多架无人机编队飞行”、“根据地图自主规划路线”。它通常运行在算力更强的机载电脑(如树莓派、NVIDIA Jetson)上。
  • 桥梁(MAVROS): 因为 ROS 听不懂飞控的 MAVLink 语言,所以需要一个“翻译官”叫 MAVROS。它把飞控的状态数据翻译成 ROS 能懂的话题,也把 ROS 的高级指令翻译给飞控执行。
  • 监控 / 仪表盘(QGC): 负责让人类在地面看到无人机的状态,划航线,或者在紧急情况下手动接管。

相当于轮子,就像python的包一样,把一些基本操作和基本算法封装起来,便于高级语言进行调用。

Ubuntu

一个Linux发行版。基于debian。操作系统。

RViz

From Qwen3.8 MAX

当你在开发无人机的自主避障、自动导航或视觉识别算法时,代码都在后台默默运行。你无法直接看到无人机“大脑”里在想什么,也无法看到它“眼里”的世界是什么样的。RViz 就是用来把这些抽象的数据、传感器信息和算法结果,以 3D 图形的形式直观地渲染出来的工具。

可视化工具呗。但好像显示哪些东西也是要设计插件,估计和pyplot同个类别吧。

SLAM

From Qwen3.8 MAX

在无人机和机器人领域,SLAM(全称 Simultaneous Localization and Mapping,同步定位与建图)是最核心、最迷人的研究方向之一。

如果说 QGC 是“仪表盘”,ROS 是“大脑框架”,RViz 是“透视眼镜”,那么 SLAM 就是无人机大脑里最底层的“空间认知能力”——它解决的是一个最根本的问题:

前面都属于工具,这个是算法设计了吧。

应用分析

单选

B A

简答

1 给定一个范围,只要RGB在范围内即可,此方案可能需要去实地调整最合适的超参数;

​ 或者设计判定条件,比如只要R成分在一定程度上大于GB,即可判定为红色;

​ 再或者做一个NN,用明暗开源数据集训练,反正颜色判定可以压清晰度,做矩阵运算速度还是可 以的。

2 有点奇怪,不过答案可能是两次自主导航AB无法完成。但是这个不能靠CV和加速度传感器重新建图或者靠目标识别和搜索完成任务吗?

3 轨迹规划:路径设计,顶层算法。轨迹跟踪控制:飞行参数控制,偏硬件控制。

4 降低高度悬停后释放,使释放前小球没有速度,而且高度降低。

程序编写

Color Classifier

伪代码如下,使用AI将其转换为Python

const int epl=10 // hyper parameter
void classifier(){

    r,g,b = input()

    case ( r > g + epl and r > b + epl ) output( red )
    case ( g > r + epl and g > b + epl ) output( green )
    case ( b > r + epl and b > g + epl ) output( blue )

}

Python Code

epl = 10  # hyper parameter

r, g, b = map(int, input().split())

if r > g + epl and r > b + epl:
    print("red")
elif g > r + epl and g > b + epl:
    print("green")
elif b > r + epl and b > g + epl:
    print("blue")

高度控制与异常滤波

pseudo-code

const int epl = 20 // hyper parameter
var int confirm = 0

void altitude_control(){
    h = input()

    case ( h < 0 ) output(E)
    case ( 80 <= h <= 120 ) output(A)
    case ( 80 - epl <= h <= 80 or 120 <= h <= 120 + epl ) output(B)
    case ( h <= 80 - epl or h >= 120 + epl ) confirm++

    if ( confirm == 2 ) output(D)
}

Python Code

EPL = 20  # hyper parameter
confirm = 0  # 全局状态变量

def altitude_control():
    global confirm

    h = float(input())

    if h < 0:
        print("E")
    elif 80 <= h <= 120:
        print("A")
    elif (80 - EPL <= h <= 80) or (120 <= h <= 120 + EPL):
        print("B")
    elif h <= 80 - EPL or h >= 120 + EPL:
        confirm += 1

    if confirm == 2:
        print("D")

# 测试调用
# altitude_control()

附加题

Bonus 1

1 关注:来回移动,说明为周期性。可选择悬停一会儿,拟合一个弦波来预测位置。更进一步,可以试试卡尔曼滤波(我原先也不知道,去工大三位一体面试才知道的算法😄),再拟合一个参数 \(\beta\) ,用来控制 偏好(?我的用词可能不是很准确)。

2 障碍物在移动,随时间变化。如果用普通搜索,每一步和step_time,搜索+回溯,时间开销很大。不妨将时间变为状态的一个参数,建一张大图,直接跑最短路,用内存换时间。

3 判断错了就修正,回到1 ,调整参数 \(\beta\) 即可。

Bonus 2

Method 1:根据提示,可能是这个:通过RGB差异(找到所有白色和其他颜色的交界点)画出轮廓线,由于球的对称性,直接算球心(即边界像素点坐标取平均),输出即可。

Method 2:AI给了一个通过计算HSV这三个参数的方法,理由是H决定颜色,S和V决定明暗。

Method 3:可以模仿已有的一系列研究关于 “通过边缘检测的物体识别”,比如 John Canny,1986 的工作,通过降噪后计算”明度“,通过”明度“差异找出轮廓。

Method 4:我记得轮廓线可以直接用CNN画出来,训练的参数都可以直接复用开源权重,方便,画出轮廓线后操作一样。

经历分享

之前 写过(?可能是抄写?)一个自动微分的 算法(?)分别写过两个方法:DualNumber和ComputeGraph,前者相对简单,但计算时无意义开销较大,写后者时遇到bug。程序正常运行,但收敛速度不及预期,经调试发现多项式微分结果不对,单步调试发现不同项对于同一个变量的返回值只写了一个,忘记求和,遂补充。

感想:当时调试时AI尚未如此兴盛,现在发现 AI真好用!😲