【機器人】復現 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.pswp.cn/news/906028.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/906028.shtml
英文地址,請注明出處:http://en.pswp.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)是按照數據結構來組…