【机器人】复现 WMNav 具身导航 | 将VLM集成到世界模型中

WMNav 是由VLM视觉语言模型驱动的,基于世界模型对象目标导航框架

设计一种预测环境状态记忆策略,采用在线好奇心价值图来量化存储,目标在世界模型预测的各种场景中出现的可能性。

本文分享WMNav复现和模型推理的过程~

下面是一个查找床示例:

目录

1、创建Conda环境

2、安装habitat模拟器

3、安装WMNav的src

4、安装依赖库

5、准备数据集HM3D和MP3D

6、准备Gemini VLM

7、修改配置文件

8、进行模型推理


1、创建Conda环境

首先创建一个Conda环境,名字为wmnav,python版本为3.9

进入wmnav环境

conda create -n wmnav python=3.9 cmake=3.14.0
conda activate wmnav

然后下载代码,进入代码工程:https://github.com/B0B8K1ng/WMNavigation

git clone https://github.com/B0B8K1ng/WMNavigation
cd WMNavigation

2、安装habitat模拟器

我需要安装habitat-sim==0.3.1、headless 和 withbullet

conda install habitat-sim=0.3.1 withbullet headless -c conda-forge -c aihabitat

等待安装完成~

3、安装WMNav的src

执行下面命令进行安装:

pip install -e .

使用setup.py文件进行安装的:

from setuptools import setup, find_packagessetup(name='WMNav',version='0.1',packages=find_packages('src'),package_dir={'': 'src'},
)

 对应的源码文件:

4、安装依赖库

执行下面命令进行安装:

pip install -r requirements.txt

主要依赖下面的库(torch==2.2.2、python-dotenv==1.0.1、Flask==3.0.3等)

Flask==3.0.3
magnum==0.0.0
matplotlib==3.8.4
networkx==3.2.1
numpy==1.23.5
numpy_quaternion==2023.0.3
opencv_python==4.9.0.80
opencv_python_headless==4.10.0.84
pandas==2.2.3
Pillow==11.0.0
protobuf==3.20.3
python-dotenv==1.0.1
PyYAML==6.0.2
regex==2024.4.16
Requests==2.32.3
scipy==1.13.1
seaborn==0.13.2
sympy==1.12
torch==2.2.2
transformers==4.43.3
google-generativeai==0.8.3
wandb==0.18.5

等待安装完成~

5、准备数据集HM3D和MP3D

该工程代码是基于 Habitat 模拟器 ,HM3D 和 MP3D数据集可 在此处 获得。

将下载的 HM3D v0.1、HM3D v0.2 和 MP3D 文件夹移动到以下配置中:

├── data
│  ├── hm3d_v0.1/
│  │  ├── val/
│  │  │  ├── 00800-TEEsavR23oF/
│  │  │  │  ├── TEEsavR23oF.navmesh
│  │  │  │  ├── TEEsavR23oF.glb
│  │  ├── hm3d_annotated_basis.scene_dataset_config.json
│  ├── objectnav_hm3d_v1/
│  │  ├── val/
│  │  │  ├── content/
│  │  │  │  ├──4ok3usBNeis.json.gz
│  │  │  ├── val.json.gz
│  ├── hm3d_v0.2/
│  │  ├── val/
│  │  │  ├── 00800-TEEsavR23oF/
│  │  │  │  ├── TEEsavR23oF.basis.navmesh
│  │  │  │  ├── TEEsavR23oF.basis.glb
│  │  ├── hm3d_annotated_basis.scene_dataset_config.json
│  ├── objectnav_hm3d_v2/
│  │  ├── val/
│  │  │  ├── content/
│  │  │  │  ├──4ok3usBNeis.json.gz
│  │  │  ├── val.json.gz

│  ├── mp3d/
│  │  ├── 17DRP5sb8fy/
│  │  │  ├── 17DRP5sb8fy.glb
│  │  │  ├── 17DRP5sb8fy.house
│  │  │  ├── 17DRP5sb8fy.navmesh
│  │  │  ├── 17DRP5sb8fy_semantic.ply
│  │  ├── mp3d_annotated_basis.scene_dataset_config.json
│  ├── objectnav_mp3d/
│  │  ├── val/
│  │  │  ├── content/
│  │  │  │  ├──2azQ1b91cZZ.json.gz
│  │  │  ├── val.json.gz

这里可以准备三个数据集,然后逐个测试和验证;

也可以下载其中一个进行验证,比如 HM3D v0.2

hm3d_v0.2下载地址:https://github.com/matterport/habitat-matterport-3dresearch

选择的下载文件:hm3d-val-habitat-v0.2.tar

然后需要下载对应的objectnav_hm3d_v2, 下载地址:

https://github.com/facebookresearch/habitat-lab/blob/main/DATASETS.md

6、准备Gemini VLM

默认使用Gemini VLM,需要将基本 URL 和 api 密钥粘贴到 .env 文件 名为 GEMINI_BASE_URL 和 GEMINI_API_KEY 的变量的 中。 

我们还可以尝试其他 VLM,方法是修改 api.py(使用 OpenAI 库)

api的申请地址:https://aistudio.google.com/app/apikey

需要使用谷歌帐号登陆,然后点击“创建API密码”进行创建API密匙

后面需要填写:GEMINI_BASE_URL、GEMINI_API_KEY

7、修改配置文件

修改.env文件的,主要是GEMINI_BASE_URL、GEMINI_API_KEY、DATASET_ROOT

GEMINI_BASE_URL= "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=GEMINI_API_KEY"GEMINI_API_KEY= "AIzaSyA-DDe-xxxxxxxxxxxxx" #INSERT API KEY
DATASET_ROOT= "./data/"
MAGNUM_LOG=quiet
GLOG_minloglevel=4
HABITAT_SIM_LOG=quiet
HABITAT_LOG_LEVEL=error

修改 config/WMNav.yaml配置文件(可选)

# 任务类型:目标导航任务
task: ObjectNav
# 使用的智能体类
agent_cls: WMNavAgent
# 使用的环境类
env_cls: WMNavEnv# 智能体配置
agent_cfg:# 导航性模式:'none'(无导航能力),'depth_estimate'(使用 ZoeDepth 进行深度估计),'segmentation'(使用 Segformer 进行分割),'depth_sensor'(使用深度传感器)navigability_mode: 'depth_sensor'  # 上下文历史记录数量,这里设置为 0context_history: 0# 探索偏差,用于调整智能体的行为explore_bias: 4 # 智能体可执行的最大动作距离max_action_dist: 1.7# 智能体可执行的最小动作距离min_action_dist: 0.5# 动作距离裁剪比例,避免智能体过于靠近障碍物clip_frac: 0.66 # 智能体停止后继续执行的动作长度stopping_action_dist: 1.5 # 默认动作距离,当 VLM 选择的动作无效时,智能体向前移动的距离default_action: 0.2 # 视野范围与角度增量的比率spacing_ratio: 360 # 考虑的动作角度数量num_theta: 60 # 图像边缘阈值,当动作投影在图像边缘的 4% 范围内时不进行投影image_edge_threshold: 0.04 # 智能体转向冷却时间,即智能体在转向后需要等待的步数turn_around_cooldown: 3 # 可导航性高度阈值,从地面开始计算的可导航性高度navigability_height_threshold: 0.2 # 地图比例尺,每米对应的像素数量map_scale: 100 # 视觉语言模型(VLM)配置vlm_cfg:# 使用的模型类model_cls: GeminiVLM# 模型参数model_kwargs:# 使用的模型名称model: gemini-1.5-pro# 是否启用全景填充panoramic_padding: False# 仿真环境配置
sim_cfg:# 智能体的高度agent_height: 0.88# 智能体的半径agent_radius: 0.18# 是否允许滑动allow_slide: true# 是否使用目标图像智能体use_goal_image_agent: false# 传感器配置sensor_cfg:# 传感器高度height: 0.88# 传感器俯仰角pitch: -0.25# 传感器视野范围fov: 79# 传感器图像高度img_height: 480# 传感器图像宽度img_width: 640# 环境配置
env_cfg:# 总共的剧集数量(任务数量)num_episodes: 1# 每个剧集的最大步数max_steps: 40# 日志记录频率log_freq: 1# 数据集划分方式,这里使用验证集split: val# 成功阈值,智能体与目标之间的距离小于该值时认为任务成功success_threshold: 1.0# 数据集实例数量,将数据集划分为多个实例instances: 1 # 当前运行的实例编号instance: 0 # 是否并行运行parallel: false# 环境名称name: default# Flask 服务器端口,用于聚合来自不同实例的结果port: 5000 

8、进行模型推理

执行下面命令:

python scripts/main.py

在logs目录下,运行结果示例:

 分享完成~

相关文章推荐:

UniGoal 具身导航 | 通用零样本目标导航 CVPR 2025-CSDN博客

【机器人】复现 UniGoal 具身导航 | 通用零样本目标导航 CVPR 2025-CSDN博客

【机器人】复现 ECoT 具身思维链推理-CSDN博客

【机器人】复现 SG-Nav 具身导航 | 零样本对象导航的 在线3D场景图提示-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/906028.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

英语学习5.17

attract 👉 前缀:at-(朝向) 👉 含义:吸引(朝某处拉) 例句:The flowers attract bees. (花吸引蜜蜂。) distract 👉 前缀&#xff…

【软考 McCabe度量法】

McCabe度量法(McCabe’s Cyclomatic Complexity)是由Thomas McCabe提出的一种用于衡量程序模块环路复杂性的软件度量方法。它通过分析代码的控制流结构来评估程序的复杂度,帮助开发者识别难以维护或测试风险较高的代码区域。 一、McCabe度量法…

解读 TypeScript 枚举Enum

TypeScript 枚举通过命名常量、类型安全和结构化组织,显著提升代码质量。使用时需根据场景选择合适的类型(数字、字符串或常量枚举),并权衡性能与动态访问需求。掌握其特性和使用的场景,能在复杂项目中有效提升代码的可…

MODBUS RTU通信协议详解与调试指南

一、MODBUS RTU简介 MODBUS RTU(Remote Terminal Unit)是一种基于串行通信(RS-485/RS-232)的工业标准协议,采用二进制数据格式,具有高效、可靠的特点,广泛应用于PLC、传感器、变频器等工业设备…

TCP/UDP协议原理和区别 笔记

从简单到难吧 区别就是TCP一般用于安全稳定的需求,UDP一般用于不那么需要完全数据的需求,比如说直播,视频等。 再然后就是TPC性能慢于UDP。 再然后我们看TCP的原理(三次握手,数据传输,四次挥手&#xff0…

Jackson使用详解

JSON Jackson是java提供处理json数据序列化和反序列的工具类,在使用Jackson处理json前,我们得先掌握json。 JSON数据类型 类型示例说明字符串(String)"hello"双引号包裹,支持转义字符(如 \n&a…

C语言| 指针变量的定义

C语言| 指针的优点-CSDN博客 * 表示“指向”,为了说明指针变量和它所指向的变量之间的联系。 int * i;//表示指针变量i里面存放的地址,所指向的存储单元里的【数据】。 【指针变量的定义】 C语言规定所有变量,在使用前必须先定…

Java 快速转 C# 教程

以下是一个针对 Java 开发者快速转向 C# 的简明教程,重点对比 Java 与 C# 的异同,帮助你快速上手。 项目结构: .sln :解决方案文件,管理多个项目之间的依赖关系。.csproj :项目文件,定义目标框…

EasyExcel详解

文章目录 一、easyExcel1.什么是easyExcel2.easyExcel示例demo3.easyExcel read的底层逻辑~~4.easyExcel write的底层逻辑~~ 二、FastExcel1.为什么更换为fastExcel2.fastExcel新功能 一、easyExcel 1.什么是easyExcel 内容摘自官方:Java解析、生成Excel比较有名的…

jvm安全点(三)openjdk17 c++源码垃圾回收之安全点结束,唤醒线程

1. VMThread::inner_execute() - 触发安全点​​ cpp 复制 void VMThread::inner_execute(VM_Operation* op) { if (op->evaluate_at_safepoint()) { SafepointSynchronize::begin(); // 进入安全点,阻塞所有线程 // ...执行GC等操作... SafepointSynchronize::…

102. 二叉树的层序遍历递归法:深度优先搜索的巧妙应用

二叉树的层序遍历是一种经典的遍历方式,它要求按层级逐层访问二叉树的节点。通常我们会使用队列来实现层序遍历,但递归法也是一种可行且有趣的思路。本文将深入探讨递归法解决二叉树层序遍历的核心难点,并结合代码和模拟过程进行详细讲解。 …

首个窗口级无人机配送VLN系统!中科院LogisticsVLN:基于MLLM实现精准投递

导读 随着智能物流需求日益增长,特别是“最后一公里”配送场景的精细化,传统地面机器人逐渐暴露出适应性差、精度不足等瓶颈。为此,本文提出了LogisticsVLN系统——一个基于多模态大语言模型的无人机视觉语言导航框架,专为窗户级别…

WPF Datagrid 数据加载和性能

这篇文章并非讨论 WPF Datagrid 的性能数据,而只是简单介绍一下为了使其性能良好,你需要注意哪些方面。我不太想使用性能分析器来展示实际数据,而是尽可能地使用了 Stopwatch 类。这篇文章不会深入探讨处理海量数据的技术,例如分页…

matlab求矩阵的逆、行列式、秩、转置

inv - 计算矩阵的逆 用途:计算一个可逆矩阵的逆矩阵。 D [1, 2; 3, 4]; % 定义一个2x2矩阵 D_inv inv(D); % 计算矩阵D的逆 disp(D_inv);det - 计算矩阵的行列式 用途:计算方阵的行列式。 E [1, 2; 3, 4]; determinant det(E); % 计算行列式 disp…

ridecore流水线解读

文章目录 流水线stage分属前后端PCpipelineIFIDDPDP 与 SW 中间没有latchSWCOM 源码地址 流水线stage分属前后端 IF -> ID -> DP -> SW -> EX -> COM分类阶段说明前端IF指令获取阶段。PC 使用分支预测器,访问指令存储器。典型前端操作。前端ID解码并…

【SpringBoot】关于MP使用中配置了数据库表前缀的问题

problem 使用MP时,在application.yml配置文件中配置了MP匹配数据库表中的表名时的前缀作了规定,如下: 那么当我运行时报错了错误,报错信息如下: 因为我数据库表的书类表名是book,MP在匹配时使用了表名前…

印度Rummy游戏支付通道申请策略:技巧类游戏的合规与创新

本文为印度支付申请科普文,自去年开始,印度Rummy类游戏申请印度支付都需要拥有AIGF的会员及产品证书。 如需要rummy可以通过AIGF审核的源。码,或咨询AIGF的相关内容,可以联。系老妙。 印度作为全球棋牌类游戏增长最快的市场之一&…

日志与策略模式

什么是设计模式 IT⾏业 ,为了让 菜鸡们不太拖⼤佬的后腿, 于是⼤佬们针对⼀些经典的常⻅的场景, 给定了⼀些对应的解决⽅案, 这个就是 设计模式 日志认识 计算机中的⽇志是记录系统和软件运⾏中发⽣事件的⽂件,主要作⽤是监控运⾏状态、记录异常信 息&#xff…

解锁Ubuntu高效部署!自动安装配置文件YAML全解析

我们之前介绍了两种Ubuntu系统的安装方式,分别对应桌面版(准备搞OpenStack了,先装一台最新的Ubuntu 23.10)和服务器版(Ubuntu 22.04 LTS服务器版本安装演示)。但对于有些用户,因为技术问题&…

关系代数和关系数据库语言(SQL)

阅读提示:本篇文章较长,建议从目录上选取想看的内容。代码上的话,我习惯用小写,如果看不习惯建议跳过。有问题欢迎讨论!!! 一、基础概念 1.1数据库的概念 数据库(Database)是按照数据结构来组…