agile_autonomy

GitHub
771 186 困难 1 次阅读 昨天GPL-3.0其他
AI 解读 由 AI 自动生成,仅供参考

agile_autonomy 是一个源自苏黎世大学机器人感知组(RPG)的开源项目,核心代码复现了发表在《Science Robotics》上的研究成果“在野外学习高速飞行”。它主要解决无人机在复杂、未知的自然环境中进行高速自主飞行的难题。传统方法往往依赖高精度地图或受限环境,而 agile_autonomy 利用深度强化学习,让无人机仅凭机载传感器即可在森林等无结构化场景中灵活避障并高速穿梭。

该项目特别适合机器人学研究人员、自动驾驶算法开发者以及高校科研团队使用。其独特的技术亮点在于结合了仿真训练与现实迁移能力:通过高保真仿真器 Flightmare 进行大规模策略训练,并将学到的飞行策略成功部署到真实四旋翼无人机上,实现了从虚拟到现实的无缝跨越。代码库提供了完整的训练、测试及仿真流程,支持用户在 Ubuntu 和 ROS 环境下快速复现论文中的高速飞行效果。无论是想探索端到端飞行控制的前沿学者,还是希望验证强化学习在动态环境中应用效果的工程师,agile_autonomy 都提供了一个坚实且经过验证的技术基线。

使用场景

某无人机研发团队需要在复杂森林环境中测试高速自主飞行算法,但缺乏真实野外试飞的安全条件与数据支撑。

没有 agile_autonomy 时

  • 团队只能依赖传统几何规划器,无人机在遇到突发障碍物(如树枝)时反应迟钝,极易发生碰撞。
  • 高速飞行策略完全依靠人工手写规则调整,难以兼顾速度与稳定性,调试周期长达数周。
  • 缺乏高保真仿真环境,无法在安全条件下复现“野外”复杂光照和动态障碍场景,实机试飞风险极高。
  • 训练数据匮乏,神经网络模型无法从真实世界的混乱场景中学习到有效的避障特征。

使用 agile_autonomy 后

  • 利用论文预训练的感知 - 控制端到端模型,无人机能像专家飞行员一样在密集树林中以高速灵活穿梭。
  • 通过强化学习自动优化飞行策略,无需人工编写繁琐规则,系统自适应能力显著提升,部署时间缩短至几天。
  • 集成 Flightmare 高保真仿真器,团队可在虚拟环境中安全地模拟各种极端野外工况,零风险验证算法鲁棒性。
  • 直接复用官方开源的大规模野外飞行数据集,快速完成模型迁移学习,大幅降低了数据采集门槛。

agile_autonomy 通过将前沿学术研究转化为可执行的仿真与代码框架,让高风险的野外高速飞行算法研发变得安全、高效且可复现。

运行环境要求

操作系统
  • Linux (Ubuntu 20.04)
GPU

执行非必需,但训练推荐 NVIDIA GPU (需安装 tensorflow-gpu==2.4)

内存

未说明

依赖
notes1. 官方仅测试并支持 Ubuntu 20.04 和 ROS Noetic,其他版本不保证兼容。2. 必须将编译器版本设置为 gcc/g++ 7.5.0。3. 网络推理频率需至少达到 15Hz 才能成功飞行。4. 需要手动下载并配置 Flightmare 渲染器及数据集。5. 建议使用 Catkin 构建系统和管理 ROS 工作空间。
python3.7
ROS Noetic
tensorflow-gpu==2.4
rospkg==1.2.3
pyquaternion
open3d
opencv-python
gcc/g++ 7.5.0
libqglviewer-dev-qt5
libzmqpp-dev
libeigen3-dev
agile_autonomy hero image

快速开始

在野外学习高速飞行

此仓库包含与论文《在野外学习敏捷飞行》相关的代码。更多信息请访问项目网页

封面

论文、视频和数据集

如果您在学术环境中使用此代码,请引用以下出版物:

论文:在野外学习高速飞行

视频(带解说):YouTube

数据集:Zenodo

Science期刊论文:DOI

@inproceedings{Loquercio2021Science,
  title={在野外学习高速飞行},
    author={洛奎尔西奥,安东尼奥;考夫曼,埃利亚;兰夫特尔,勒内;穆勒,马蒂亚斯;科尔图恩,弗拉德伦;斯卡拉穆扎,达维德},
      booktitle={Science Robotics}, 
      year={2021}, 
      month={十月}, 
} 

安装

要求

该代码已在Ubuntu 20.04、ROS Noetic、Anaconda v4.8.3以及gcc/g++ 7.5.0环境下测试通过。其他操作系统和ROS版本虽然可能适用,但不在支持范围内。

在开始之前,请确保您的编译器版本与gcc/g++ 7.5.0一致。为此,请执行以下命令:

sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-7 100
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 100

分步操作流程

使用以下命令创建一个新的catkin工作空间和包含所有必要依赖项的虚拟环境。

export ROS_VERSION=noetic
mkdir agile_autonomy_ws
cd agile_autonomy_ws
export CATKIN_WS=./catkin_aa
mkdir -p $CATKIN_WS/src
cd $CATKIN_WS
catkin init
catkin config --extend /opt/ros/$ROS_VERSION
catkin config --merge-devel
catkin config --cmake-args -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS=-fdiagnostics-color
cd src

git clone git@github.com:uzh-rpg/agile_autonomy.git
vcs-import < agile_autonomy/dependencies.yaml
cd rpg_mpl_ros
git submodule update --init --recursive

#安装额外依赖(根据您的操作系统可能需要更多)
sudo apt-get install libqglviewer-dev-qt5

# 为rpg_flightmare安装外部库
sudo apt install -y libzmqpp-dev libeigen3-dev libglfw3-dev libglm-dev

# 为rpg_flightmare渲染器安装依赖
sudo apt install -y libvulkan1 vulkan-utils gdb

# 添加环境变量(小心!请根据您的本地设置修改路径)
echo 'export RPGQ_PARAM_DIR=/home/<path/to/>catkin_aa/src/rpg_flightmare' >> ~/.bashrc

现在打开一个新的终端并输入以下命令。

# 构建并重新加载工作空间
catkin build
. ../devel/setup.bash

# 创建您的学习环境
roscd planner_learning
conda create --name tf_24 python=3.7
conda activate tf_24
pip install tensorflow-gpu==2.4
pip install rospkg==1.2.3 pyquaternion open3d opencv-python

现在下载可在此链接找到的flightmare独立版本,解压后放入flightrender文件夹中。

让我们起飞吧!

安装完依赖后,您将能够使用我们预训练的检查点在仿真环境中飞行。执行时并不一定需要GPU。请注意,如果网络无法以至少15Hz的频率运行,您将无法成功飞行。

启动仿真!打开一个终端并输入:

cd agile_autonomy_ws
source catkin_aa/devel/setup.bash
roslaunch agile_autonomy simulation.launch

在另一个终端中运行网络:

cd agile_autonomy_ws
source catkin_aa/devel/setup.bash
conda activate tf_24
python test_trajectories.py --settings_file=config/test_settings.yaml

更改执行速度或环境

您可以通过更改以下文件来调整策略的平均飞行速度以及环境类型。

环境更改:

rosed agile_autonomy flightmare.yaml

spawn_treesspawn_objects设置为true即可。同时启用两者也是可行的,但会使环境过于密集而难以导航。此外,请根据环境调整test_settings.yaml中的spacings参数。

速度更改:

rosed agile_autonomy default.yaml

编辑test_time_velocitymaneuver_velocity以达到所需的速度。请注意,我们提供的检查点适用于[1,10] m/s范围内的所有速度。然而,若要在特定速度下获得最佳性能,建议在该速度下对检查点进行微调(见下方代码)。

训练您自己的导航策略

有两种方法可以训练您自己的策略:一种较为简单,另一种则更为复杂。 训练好的检查点随后可用于控制实际平台(如果您有的话)。

使用预先收集的数据集

第一种方法最为简便,即使用我们预先收集的数据集。该数据集可在此链接找到。此数据集用于训练我们提供的模型,采集时的平均速度为7 m/s。为此,请将train_settings.yaml文件指向训练和测试文件夹,并运行:

cd agile_autonomy_ws
source catkin_aa/devel/setup.bash
conda activate tf_24
python train.py --settings_file=config/train_settings.yaml

您可以自由地分析每个参数的影响!

收集您自己的数据集

您可使用以下命令在仿真环境中生成数据,并以此训练您的模型。请注意,从零开始训练策略可能需要大量数据,且根据您的机器性能,这可能需要数天时间。因此,我们始终建议您根据自身需求对提供的检查点进行微调。一般来说,从零开始训练策略需要与我们相当规模的数据集,而微调则只需十分之一的数据量。

生成数据

要训练或微调策略,请使用以下命令:

在第一个终端中启动仿真:

cd agile_autonomy_ws
source catkin_aa/devel/setup.bash
roslaunch agile_autonomy simulation.launch

在另一个终端中启动数据收集(使用 DAgger 算法):

cd agile_autonomy_ws
source catkin_aa/devel/setup.bash
conda activate tf_24
python dagger_training.py --settings_file=config/dagger_settings.yaml

可以在文件 dagger_settings.yaml 中更改参数(例如回放缓次数、DAgger 算法的常数、是否跟踪全局轨迹等)。请注意,如果更改了网络或输入,还需要相应地调整文件 test_settings.yaml,以确保兼容性。

从零开始训练时,建议遵循预先计算好的全局轨迹,以便提供一致的标签。要启用此功能,需要将 default.yamllabel_generation.yaml 中的 perform_global_planning 标志设置为 true。需要注意的是,这样做会降低仿真速度(因为每次迭代都需要重新计算全局规划)。网络将无法访问该全局规划路径,而只能看到直线参考轨迹(可能与障碍物发生碰撞)。

可视化数据

可以使用 open3d 和脚本 visualize_trajectories.py 来可视化生成的轨迹。

python visualize_trajectories.py --data_dir /PATH/TO/rollout_21-09-21-xxxx --start_idx 0 --time_steps 100 --pc_cutoff_z 2.0 --max_traj_to_plot 100

结果大致如下所示:

Labels

测试网络

要测试您训练的网络,请在 test_settings.yaml 中更新新的检查点路径。为了加快仿真速度,您可以考虑将 default.yaml 中的 perform_global_planning 标志重新设置为 false。然后按照上文“让我们起飞!”部分的说明进行测试。

致谢

我们感谢 Yunlong Song 和 Selim Naji 在仿真环境实现方面提供的帮助。全局规划的代码深受 基于搜索的 SE(3) 中激进飞行运动规划 的启发。

常见问题

相似工具推荐

ML-For-Beginners

ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。

85.1k|★★☆☆☆|昨天
图像数据工具视频

funNLP

funNLP 是一个专为中文自然语言处理(NLP)打造的超级资源库,被誉为"NLP 民工的乐园”。它并非单一的软件工具,而是一个汇集了海量开源项目、数据集、预训练模型和实用代码的综合性平台。 面对中文 NLP 领域资源分散、入门门槛高以及特定场景数据匮乏的痛点,funNLP 提供了“一站式”解决方案。这里不仅涵盖了分词、命名实体识别、情感分析、文本摘要等基础任务的标准工具,还独特地收录了丰富的垂直领域资源,如法律、医疗、金融行业的专用词库与数据集,甚至包含古诗词生成、歌词创作等趣味应用。其核心亮点在于极高的全面性与实用性,从基础的字典词典到前沿的 BERT、GPT-2 模型代码,再到高质量的标注数据和竞赛方案,应有尽有。 无论是刚刚踏入 NLP 领域的学生、需要快速验证想法的算法工程师,还是从事人工智能研究的学者,都能在这里找到急需的“武器弹药”。对于开发者而言,它能大幅减少寻找数据和复现模型的时间;对于研究者,它提供了丰富的基准测试资源和前沿技术参考。funNLP 以开放共享的精神,极大地降低了中文自然语言处理的开发与研究成本,是中文 AI 社区不可或缺的宝藏仓库。

79.9k|★☆☆☆☆|2天前
语言模型数据工具其他

cs-video-courses

cs-video-courses 是一个精心整理的计算机科学视频课程清单,旨在为自学者提供系统化的学习路径。它汇集了全球知名高校(如加州大学伯克利分校、新南威尔士大学等)的完整课程录像,涵盖从编程基础、数据结构与算法,到操作系统、分布式系统、数据库等核心领域,并深入延伸至人工智能、机器学习、量子计算及区块链等前沿方向。 面对网络上零散且质量参差不齐的教学资源,cs-video-courses 解决了学习者难以找到成体系、高难度大学级别课程的痛点。该项目严格筛选内容,仅收录真正的大学层级课程,排除了碎片化的简短教程或商业广告,确保用户能接触到严谨的学术内容。 这份清单特别适合希望夯实计算机基础的开发者、需要补充特定领域知识的研究人员,以及渴望像在校生一样系统学习计算机科学的自学者。其独特的技术亮点在于分类极其详尽,不仅包含传统的软件工程与网络安全,还细分了生成式 AI、大语言模型、计算生物学等新兴学科,并直接链接至官方视频播放列表,让用户能一站式获取高质量的教育资源,免费享受世界顶尖大学的课堂体验。

79.8k|★☆☆☆☆|2天前
其他图像数据工具

ragflow

RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。

77.1k|★★★☆☆|1周前
Agent图像开发框架

PaddleOCR

PaddleOCR 是一款基于百度飞桨框架开发的高性能开源光学字符识别工具包。它的核心能力是将图片、PDF 等文档中的文字提取出来,转换成计算机可读取的结构化数据,让机器真正“看懂”图文内容。 面对海量纸质或电子文档,PaddleOCR 解决了人工录入效率低、数字化成本高的问题。尤其在人工智能领域,它扮演着连接图像与大型语言模型(LLM)的桥梁角色,能将视觉信息直接转化为文本输入,助力智能问答、文档分析等应用场景落地。 PaddleOCR 适合开发者、算法研究人员以及有文档自动化需求的普通用户。其技术优势十分明显:不仅支持全球 100 多种语言的识别,还能在 Windows、Linux、macOS 等多个系统上运行,并灵活适配 CPU、GPU、NPU 等各类硬件。作为一个轻量级且社区活跃的开源项目,PaddleOCR 既能满足快速集成的需求,也能支撑前沿的视觉语言研究,是处理文字识别任务的理想选择。

75.3k|★★★☆☆|今天
语言模型图像开发框架

awesome-machine-learning

awesome-machine-learning 是一份精心整理的机器学习资源清单,汇集了全球优秀的机器学习框架、库和软件工具。面对机器学习领域技术迭代快、资源分散且难以甄选的痛点,这份清单按编程语言(如 Python、C++、Go 等)和应用场景(如计算机视觉、自然语言处理、深度学习等)进行了系统化分类,帮助使用者快速定位高质量项目。 它特别适合开发者、数据科学家及研究人员使用。无论是初学者寻找入门库,还是资深工程师对比不同语言的技术选型,都能从中获得极具价值的参考。此外,清单还延伸提供了免费书籍、在线课程、行业会议、技术博客及线下聚会等丰富资源,构建了从学习到实践的全链路支持体系。 其独特亮点在于严格的维护标准:明确标记已停止维护或长期未更新的项目,确保推荐内容的时效性与可靠性。作为机器学习领域的“导航图”,awesome-machine-learning 以开源协作的方式持续更新,旨在降低技术探索门槛,让每一位从业者都能高效地站在巨人的肩膀上创新。

72.1k|★☆☆☆☆|1周前
开发框架其他