资讯详情

flybody视觉引导飞行任务实战:32×32“眼睛“相机如何教会果蝇飞行

📅 2026/10/22 1:53:04 | 华诺云谱 👁 阅读
flybody视觉引导飞行任务实战:32×32“眼睛“相机如何教会果蝇飞行
【免费下载链接】flybodyMuJoCo fruit fly body model and locomotion RL tasks项目地址https://gitcode.com/gh_mirrors/fl/flybody点击查看免费下载flybody 是一个为 MuJoCo 物理模拟器打造的果蝇Drosophila melanogaster全身模型与运动强化学习任务库。其中最硬核的任务是视觉引导飞行vision-guided flight果蝇仅靠头部两只32×32 像素的眼睛相机和惯性传感器学习在随机生成的丘陵或蜿蜒沟壑上方保持目标高度与速度飞行。本文将带你拆解这个任务的完整机制眼睛相机如何定义、奖励函数如何设计、单一标量动作如何控制 218Hz 的翅膀拍频以及如何用 Ray 分布式训练。 flybody 是什么一只可以活过来的仿真果蝇flybody 由 Google DeepMind 与 HHMI Jeline 研究院合作开发其模型包含头部、胸部、腹部、6 条腿、翅膀、平衡棒与口器等解剖学细节见 flybody/fruitfly/assets/fruitfly.xml。模型支持飞行模式翅膀使用力控执行器 椭圆流体模型fluidshapeellipsoid模拟空气动力物理步长仅5e-5秒行走模式腿足带摩擦与粘附执行器可在球面上行走任务抽象所有任务基于 dm_control 的composer.Task观察量observables以传感器方式声明。任务工厂集中在 flybody/fly_envs.py视觉飞行任务由vision_guided_flight()函数一行创建from flybody.fly_envs import vision_guided_flight env vision_guided_flight(bumps_or_trenchtrench) # 或 bumps️ 32×32眼睛相机视觉输入的真相视觉任务的核心观察量是两只眼睛。相机在果蝇模型的 XML 中定义位于头部两侧flybody/fruitfly/assets/fruitfly.xmlcamera nameeye_right fovy140 pos0.0219 0.0131 0 quat0.474 0.688 -0.344 -0.429/ camera nameeye_left fovy140 pos-0.0219 0.0131 0 quat0.474 0.688 0.344 0.429/关键参数由任务构造函数控制见 flybody/tasks/vision_flight.py参数默认值含义eye_camera_size32每只眼睛的分辨率32×32 像素eye_camera_fovy150°眼睛垂直视场角宽视角类似昆虫复眼target_height_range(0.5, 0.8)随机目标飞行高度米target_speed_range(20, 40)随机目标速度cm/s在 flybody/fruitfly/fruitfly.py 中left_eye与right_eye被实现为observable.MJCFCamera观察量——每次env.step()时直接从仿真场景渲染 32×32 的 RGB 图像作为策略网络的输入。分辨率极低是刻意设计真实果蝇单眼的光感受器数量与之相当这也是任务难度来源之一。一个有趣的细节视觉任务会移除场景中所有光源vision_flight.py中对light节点的清空循环并调小znear/zfar/force等渲染参数见 flybody/tasks/base.py 的注释对视觉引导飞行任务至关重要迫使果蝇只能依靠地形本身的光照与轮廓来判断障碍。️ 两种地形bumps 与 trenchvision_guided_flight()支持两种可随机再生的竞技场见 flybody/tasks/arenas/hills.pybumps丘陵SineBumps生成碗状地形 正弦波状隆起波长 10~15m、振幅 0.5~1.0m 每回合随机采样果蝇需要看前方地形起伏来维持高度trench沟壑SineTrench在碗状地形上开出一条蜿蜒的正弦形沟渠果蝇需要沿沟中线飞行且地形参数经过约束width 2*amplitude 0.604*width_factor0.604 正是果蝇翅展杜绝直线穿越的平凡解。每个回合开始时目标高度与目标速度随机重采样并通过task_input观察量目标高度 目标速度2 个标量告诉策略这轮飞多高、多快。 奖励与动作七个因子 × 一个标量奖励函数7 个因子的几何平均get_reward_factors()flybody/tasks/vision_flight.py返回 7 项容忍度tolerance奖励因子总奖励为其乘积height相对地形的当前高度逼近随机目标高度容差 ±0.15mx_speed世界系 x 方向速度不低于目标速度speed合速度模长逼近目标速度side_speed自身坐标系下横向速度为 0不许侧滑world_zaxis机体竖直轴对齐目标姿态果蝇飞行时身体前倾 47.5°来自真实飞行数据center_of_trenchtrench 任务中保持贴近沟渠中心线retract_legs飞行时保持腿部收拢向折叠参考角度看齐。此外触碰地面直接终止回合floor_contacts_fatalTrue坠机是最快的失败方式。动作空间一个数字控制拍翅频率整个策略只输出1 个标量动作a ∈ [-1, 1]其余动作由拍翅模式发生器WingBeatPatternGenerator, WBPG自动生成。before_step中的控制律flybody/tasks/vision_flight.pyctrl_freq base_freq * (1 rel_range * a) # base_freq 218 Hz即动作将基础拍频 218Hz 上下调节 ±5%。WBPG 根据拍频查表/生成翅膀位置指令再转换为力控制驱动 6 个翅膀关节左/右 × yaw/roll/pitch。这意味着策略的全部自由度只有扇翅膀快一点还是慢一点——俯仰、偏航姿态全部涌现自翅膀流体力学与机体耦合这正是该任务对生物启发控制研究的价值所在。观察量清单策略每步控制步长 2e-4s单回合上限 0.4s看到左右眼 32×32 RGB 图像各 3072 维前庭传感器陀螺仪、加速度计、测速计、世界 z 轴本体感觉关节位置/速度、执行器激活状态task_input目标高度 目标速度。 快速上手5 分钟跑通视觉飞行环境# 1. 克隆仓库并安装含 ML 依赖 git clone https://gitcode.com/gh_mirrors/fl/flybody cd flybody conda create --name flybody -c conda-forge python3.10 pip conda activate flybody pip install -e .[tf] # 训练再装 .[ray] export MUJOCO_GLeglimport numpy as np from flybody.fly_envs import vision_guided_flight env vision_guided_flight(bumps_or_trenchbumps) timestep env.reset() # 随机策略飞一会儿预期很快坠地 for _ in range(50): action np.random.uniform(-1, 1) timestep env.step(action) if timestep.last(): break # 看一眼果蝇的视角 print(双眼输入:, timestep.observation[walker/left_eye].shape) # (32, 32, 3)想直观查看三类任务环境的运行效果官方示例 notebook 是 docs/fly-env-examples.ipynb飞行模仿 / 行走模仿 / 视觉引导飞行。️ 分布式训练Ray DMPO真正教会果蝇飞的是强化学习。flybody/train_dmpo_ray.py 提供了基于Ray的分布式DMPODeep Memory Policy Optimization训练脚本python flybody/train_dmpo_ray.py --test # 轻量模式单 actor每 10 秒打印统计 python flybody/train_dmpo_ray.py # 全量模式32 actors 独立 learner默认配置 32 个并行 actor、batch size 256、replay buffer 上限 400 万样本。脚本本身任务无关——把environment_factory里的walk_on_ball()换成vision_guided_flight(...)即可训练视觉任务。DMPO 的分布式实现Learner / ReplayServer / EnvironmentLoop位于 flybody/agents/ray_distributed_dmpo.py。 进阶技巧控制器复用Controller Reuse官方还有一个值得学习的两阶段方案docs/controller-reuse-vision-flight.ipynb先学技能用飞行模仿任务flight_imitation训练低层飞行控制器学会如何飞冻结复用在视觉任务中加载并冻结低层控制器权重只训练一个高层策略——高层网络吃双眼图像输出 1 个拍频标量驾驶冻结的低层控制器完成导航。这种技能库 高层决策的分层架构避免了从零学习飞行的巨大样本量开销也是该工作发表在 Nature 论文中的核心方法论之一。 关键文件导航文件说明flybody/tasks/vision_flight.py视觉飞行任务类VisionFlightImitationWBPG奖励、终止、眼睛观察量flybody/fly_envs.pyvision_guided_flight()环境工厂bumps / trenchflybody/fruitfly/fruitfly.py果蝇 walker 与left_eye/right_eye相机观察量flybody/fruitfly/assets/fruitfly.xml果蝇 MuJoCo 模型与双眼相机定义flybody/tasks/arenas/hills.pySineBumps/SineTrench随机地形生成flybody/tasks/pattern_generators.py拍翅模式发生器 WBPGflybody/train_dmpo_ray.pyRay 分布式 DMPO 训练入口docs/fly-env-examples.ipynb三类 RL 任务环境演示 notebookdocs/controller-reuse-vision-flight.ipynb控制器复用视觉导航示例总结为什么这个任务值得研究flybody 的视觉引导飞行任务把生物约束压到了极致32×32 的低分辨率双眼、一个标量动作、0.4 秒的回合、坠地即死。在这种信息带宽下策略必须学会从像素流中提取地形高度与走向并用拍翅频率这一单一操纵面完成六自由度飞行——这正是果蝇神经系统真正做的事。对 RL 研究者而言它是检验感知-运动耦合与分层控制的绝佳基准对仿真爱好者一行vision_guided_flight()就能启动这个任务。赞分享【免费下载链接】flybodyMuJoCo fruit fly body model and locomotion RL tasks项目地址https://gitcode.com/gh_mirrors/fl/flybody点击查看免费下载相关推荐PX4-Autopilot 飞行指南从首飞准备、手动飞行到自主任务全流程实战PX4 Autopilot 飞行指南从首飞准备、手动飞行到自主任务全流程实战 本篇技术指南以 PX4 Autopilot 官方文档「Flying飞行」章节无人机嵌入式机器人智能硬件如何用代码画一只会飞的果蝇DesktopFly程序化3D建模与三足步态动画实战如何用代码画一只会飞的果蝇DesktopFly程序化3D建模与三足步态动画实战 DesktopFly 是一个 macOS 桌面 3D 果蝇宠物它的身体完全由PX4 飞行任务Flight Task框架实战指南架构原理与自定义飞行任务开发PX4 飞行任务Flight Task框架实战指南架构原理与自定义飞行任务开发 飞行任务Flight Task是 PX4 飞行模式Flight Mo无人机嵌入式机器人智能硬件上一篇EulerLauncher深度解析为什么它是openEuler开发者的必备神器下一篇HTML5 游戏免费上线GitHub Pages 三步部署创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑