【机器人】复现 DualMap 具身导航 | 动态场景 | 双地图机制

【机器人】复现 DualMap 具身导航 | 动态场景 | 双地图机制

本文复现DualMap ,它支持机器人通过自然语言查询动态变化的环境中理解和导航

特点:双地图导航,结合全局抽象地图进行高层次快速选择,以及局部具体地图进行精确目标定位,有效管理和更新环境中的动态变化

论文地址:DualMap: Online Open-Vocabulary Semantic Mapping for Natural Language Navigation in Dynamic Changing Scenes

代码地址:https://github.com/Eku127/DualMap

示例效果:

1、下载工程代码

执行下面的命令,拉取github的代码:

git clone https://github.com/Eku127/DualMap.git cd DualMap/3rdparty/ git clone https://github.com/apple/ml-mobileclip.git cd ml-mobileclip && git checkout 1140b8d

打印信息:

$ git clone   https://github.com/Eku127/DualMap.git正克隆到 'DualMap'...
remote: Enumerating objects: 493, done.
remote: Counting objects: 100% (63/63), done.
remote: Compressing objects: 100% (30/30), done.
remote: Total 493 (delta 43), reused 33 (delta 33), pack-reused 430 (from 2)
接收对象中: 100% (493/493), 86.42 MiB | 14.36 MiB/s, 完成.
处理 delta 中: 100% (165/165), 完成.
.....

$ cd ml-mobileclip && git checkout 1140b8d
注意:正在切换到 '1140b8d'。

您正处于分离头指针状态。您可以查看、做试验性的修改及提交,并且您可以在切换
回一个分支时,丢弃在此状态下所做的提交而不对分支造成影响。

如果您想要通过创建分支来保留在此状态下所做的提交,您可以通过在 switch 命令
中添加参数 -c 来实现(现在或稍后)。例如:

  git switch -c <新分支名>

或者撤销此操作:

  git switch -

通过将配置变量 advice.detachedHead 设置为 false 来关闭此建议

HEAD 目前位于 1140b8d MobileCLIP iOS App.

2、创建Conda环境

通过environment.yml配置文件来创建Conda环境,名字为dualmap_env,python版本为3.10;

environment.yml配置文件,如下所示:

name: dualmap_env channels: - nvidia - pytorch - conda-forge - defaults dependencies: - python=3.10 - cmake - pip - faiss-cpu=1.9.0 - mkl - blas=1.0=mkl - pip: - tyro - open_clip_torch - wandb - h5py - openai - hydra-core - distinctipy - ultralytics==8.3.103 - dill - supervision==0.25.1 - open3d - imageio - natsort - kornia - rerun-sdk==0.22.1 - record3d==1.4.1 - pyliblzfse - pypng - tabulate - pympler - plyfile - "numpy<2.0" - git+https://github.com/ultralytics/CLIP.git 

执行下面命令进行创建:

conda env create -f environment.yml

等待相关的依赖库安装完成,再进入dualmap_env环境:

conda activate dualmap_env

3、安装torch和flash-attn

我们指定安装torch版本为2.5.1+cu118,执行下面命令进行安装:

pip install torch==2.5.1+cu118 torchvision==0.20.1+cu118 --index-url \ https://download.pytorch.org/whl/cu118

等待安装完成~

Successfully installed nvidia-cublas-cu11-11.11.3.6 nvidia-cuda-cupti-cu11-11.8.87 nvidia-cuda-nvrtc-cu11-11.8.89 nvidia-cuda-runtime-cu11-11.8.89 nvidia-cudnn-cu11-9.1.0.70 nvidia-cufft-cu11-10.9.0.58 nvidia-curand-cu11-10.3.0.86 nvidia-cusolver-cu11-11.4.1.48 nvidia-cusparse-cu11-11.7.5.86 nvidia-nccl-cu11-2.21.5 nvidia-nvtx-cu11-11.8.86 sympy-1.13.1 torch-2.5.1+cu118 torchvision-0.20.1+cu118 triton-3.1.0
(dualmap_env) lgp@lgp-MS-7E07:~/2025_project/DualMap$ 

再安装flash-attn版本为2.5.9.post1

pip install flash-attn==2.5.9.post1 --no-deps 

4、安装MobileCLIP

执行下面命令进行安装:

cd 3rdparty/mobileclip pip install -e . --no-deps cd ../..

打印信息:

(dualmap_env) lgp@lgp-MS-7E07:~/2025_project/DualMap$ 
(dualmap_env) lgp@lgp-MS-7E07:~/2025_project/DualMap$ cd 3rdparty/mobileclip
(dualmap_env) lgp@lgp-MS-7E07:~/2025_project/DualMap/3rdparty/mobileclip$ pip install -e . --no-deps
Obtaining file:///home/lgp/2025_project/DualMap/3rdparty/mobileclip
  Installing build dependencies ... done
  Checking if build backend supports build_editable ... done
  Getting requirements to build editable ... done
  Preparing editable metadata (pyproject.toml) ... done
Building wheels for collected packages: mobileclip
  Building editable for mobileclip (pyproject.toml) ... done
  Created wheel for mobileclip: filename=mobileclip-0.1.0-0.editable-py3-none-any.whl size=5659 sha256=d77226ca58cd1636890ac92db7d575e83673fc29796d9f2e2ba70f4af05d268c
  Stored in directory: /tmp/pip-ephem-wheel-cache-1jfolsbp/wheels/26/a9/56/6bc77673ac3574dff1d51b7f0096f3f85b8a8ff6f8ff6d73d3
Successfully built mobileclip
Installing collected packages: mobileclip
Successfully installed mobileclip-0.1.0

(dualmap_env) lgp@lgp-MS-7E07:~/2025_project/DualMap/3rdparty/mobileclip$ 
(dualmap_env) lgp@lgp-MS-7E07:~/2025_project/DualMap/3rdparty/mobileclip$ cd ../..

(dualmap_env) lgp@lgp-MS-7E07:~/2025_project/DualMap$

5、下载Replica数据集

首先创建一个目录dataset,用于存放数据集,然后进行目录

mkdir dataset && cd dataset

执行下面命令下载Replica数据集:

wget https://cvg-data.inf.ethz.ch/nice-slam/data/Replica.zip

得到的Replica.zip大约12.5G左右,然后解压文件后的目录结构为:

dataset/

├── Replica/

│ ├── office0/

│ │ ├── results/ # RGB-D frames (depth + RGB)

│ │ └── traj.txt # Trajectory file

│ ├── office1/

│ ├── ...

│ └── room2/

6、构建地图

执行下面命令进行模型推理:

python -m applications.runner_dataset

首次运行时会联网下载一些权重,包括:open_clip_model.safetensors、yolov8l-world.pt、mobile_sam.pt、FastSAM-s.pt

运行的打印信息:

(dualmap_env) lgp@lgp-MS-7E07:~/2025_project/DualMap$ python -m applications.runner_dataset
[2025-11-16 20:53:21,457] [INFO] [real_accelerator.py:203:get_accelerator] Setting ds_accelerator to cuda (auto detect)
UserWarning: WARNING: failed to get cudart_version from onnxruntime build info.
2025-11-16 20:53:22,051 - WARNING - [Runner Dataset]
============================================================
Log Path                       : /home/lgp/2025_project/DualMap/output/map_results/log/log_20251116_205322.log
Output Dir                     : ./output/map_results
Map Save Dir                   : ./output/map_results/replica_office1/map
Class List Path                : ./config/class_list/gpt_indoor_general.txt
Use FastSAM for OV?            : True
Running Concrete Map Only?     : True
Save Concrete Map?             : True
Save Global Map?               : False
Use Preload Global Map?        : False
Use Rerun for Visualization?   : True
============================================================
FutureWarning: Importing from timm.models.layers is deprecated, please import via timm.layers

Processing: 100%|█████████████████████████████████████████████| 200/200 [00:42<00:00,  4.65it/s]
Done

看到可视化界面,在逐渐构建详细3D环境信息:

运行过程:

最终完成构建:

如果想换其他场景,可以修改config/base_config.yaml文件

具体是修改scene_id变量,Replica数据集支持:office0、office1、office2、office3、room0、room1等

# ============================================================ # DATASET CONFIG # ============================================================ ## Replica Dataset dataset_name: replica scene_id: office1 dataset_path: dataset/Replica dataset_conf_path: config/data_config/dataset/replica.yaml dataset_gt_path: dataset/Replica-Dataset/Replica_original # ============================================================ # OUTPUT CONFIG # ============================================================ # output directory output_path: ./output/map_results # ============================================================ # LOGGING CONFIG # ============================================================ # logging config logging_config: ./config/support_config/logging_config.yaml

其他场景的运行效果1:

其他场景的运行效果2:

7、模型推理——导航查找物体

然后我们需要基于构建好的地图信息,来导航查找物体;

python -m applications.offline_local_map_query

打印信息:

(dualmap_env) lgp@lgp-MS-7E07:~/2025_project/DualMap$ python -m applications.offline_local_map_query
Loading classes id --> colors from: ./config/class_list/gpt_indoor_general_id_colors.json
Loading classes id --> names  from: ./config/class_list/gpt_indoor_general.txt
Loading saved obj results from: ./output/map_results/replica_room0/map
Loading viewpoint from: ./output/map_results/replica_room0/map/viewpoint.json
Successfully loaded 58 objects
Loading CLIP model
[2025-11-16 21:42:16,868][root][INFO] - Parsing model identifier. Schema: None, Identifier: MobileCLIP-S2
[2025-11-16 21:42:16,868][root][INFO] - Loaded built-in MobileCLIP-S2 model config.
[2025-11-16 21:42:17,485][httpx][INFO] - HTTP Request: HEAD https://hf-mirror.com/apple/MobileCLIP-S2-OpenCLIP/resolve/main/open_clip_model.safetensors "HTTP/1.1 302 Found"
[2025-11-16 21:42:17,488][root][INFO] - Instantiating model architecture: CustomTextCLIP
[2025-11-16 21:42:18,065][root][INFO] - Loading full pretrained weights from: /home/lgp/.cache/huggingface/hub/models--apple--MobileCLIP-S2-OpenCLIP/snapshots/8e8a808316aeb7c24d0400e1cf8f74b6937832aa/open_clip_model.safetensors
[2025-11-16 21:42:18,115][root][INFO] - Final image preprocessing configuration set: {'size': (256, 256), 'mode': 'RGB', 'mean': (0.0, 0.0, 0.0), 'std': (1.0, 1.0, 1.0), 'interpolation': 'bilinear', 'resize_mode': 'shortest', 'fill_color': 0}
[2025-11-16 21:42:18,115][root][INFO] - Model MobileCLIP-S2 creation process complete.
/home/lgp/anaconda3/envs/dualmap_env/lib/python3.10/site-packages/timm/models/layers/__init__.py:48: FutureWarning: Importing from timm.models.layers is deprecated, please import via timm.layers
  warnings.warn(f"Importing from {__name__} is deprecated, please import via timm.layers", FutureWarning)
[2025-11-16 21:42:18,535][root][INFO] - Parsing tokenizer identifier. Schema: None, Identifier: MobileCLIP-S2
[2025-11-16 21:42:18,535][root][INFO] - Attempting to load config from built-in: MobileCLIP-S2
[2025-11-16 21:42:18,535][root][INFO] - Using default SimpleTokenizer.
Done initializing CLIP model.
Obj Map length: 58

        Keybindings:
        Q - Quit the application
        R - Display the point cloud with RGB colors
        C - Display the point cloud with semantic colors
        F - Enter a query to find top similarity objects
        H - Display this help message
        N - Highlight objects based on previous query results
        M - Colored objects based on previous query results
        S - Save the current viewpoint

        Press the corresponding key to perform the action.

看到可视化界面:

点击可视化界面,按下C键,查看三维点云的可视化:

点击可视化界面,按下F键,输入查找目标,比如:desk lamp(台灯)

Enter your query: desk lamp
Top 5 similar objects:
1. No. 17 lamp: 0.546

能看到找到了:

也可以输入中文的,点击可视化界面,按下F键,输入查找目标,比如:花 

Enter your query: 花 
Top 5 similar objects:
1. No. 35 unknown: 0.465

能看到找到了:

分享完成~

Read more

不只是 Copilot:Kimi Code 正在改变写代码的方式

不只是 Copilot:Kimi Code 正在改变写代码的方式

之前介绍过,在 Claude Code 中使用 Kimi,现在Kimi也推出自己的 CLI 了。但是目前是会员专供! Kimi Code 是由 Moonshot AI(Kimi) 推出的下一代 AI 编程助手/代码智能体,作为 Kimi 会员订阅中专为开发者设计的增值权益,旨在帮助开发者更快、更智能、更高效地完成编程任务。它可以直接融入开发流程、终端工具和主流 IDE,让 AI 编程能力成为日常开发的一部分。 核心定位:你的 AI 代码伙伴 Kimi Code 不只是简单的补全工具,而是一个智能编程代理(AI Code Agent): * 自动理解问题和代码结构,回答开发者的问题。 * 辅助编写、调试、重构和测试代码,覆盖开发生命周期。 * 直接运行在终端与

告别 Copilot 时代:Cursor, Kiro 与 Google Antigravity 如何重新定义编程?

如果说 GitHub Copilot 开启了 AI 辅助编程的“副驾驶”时代,那么 2024-2025 年则是 AI Agent(智能体) 全面接管 IDE 的元年。 现在的开发者不再满足于简单的代码补全,我们需要的是能理解整个项目架构、能自主规划任务、甚至能像真人同事一样工作的“编程搭子”。 今天,我们盘点三款目前最受瞩目、处于风口浪尖的 AI 编程工具:Cursor、Kiro 以及 Google 的重磅新品 Antigravity。无论你是想提升效率,还是想尝鲜最前沿的 Agentic Workflow,这三款神器都不容错过。 1. Cursor:当下体验最好的 AI 代码编辑器 定位:目前最成熟、最流畅的 VS Code 替代者 Cursor

llama.cpp + llama-server 的安装部署验证

飞桨AI Studio星河社区-人工智能学习与实训社区 用的是 魔塔的免费资源 不太稳定 我的Notebook · 魔搭社区 cat /etc/os-release  Ubuntu 22.04.5 LTS (Jammy Jellyfish) —— 这是一个长期支持(LTS)且完全受支持的现代 Linux 发行版,非常适合部署 llama.cpp + llama-server。Ubuntu 22.04 自带较新的 GCC(11+)、CMake(3.22+)和 Python 3.10+,无需手动升级工具链,部署过程非常顺畅。 一、安装系统依赖 sudo apt update sudo apt install -y

彻底解决 Codex / Copilot 修改中文乱码【含自动化解决方案】

彻底解决 Codex / Copilot 修改中文乱码【含自动化解决方案】

引言 在使用 GitHub Copilot 或 OpenAI Codex 自动重构代码时,你是否遇到过这样的尴尬:AI 生成的代码逻辑完美,但原本注释里的中文却变成了 我爱中文 这样的乱码?有时候这种字符甚至会污染正确的代码,带来巨大的稳定性隐患。 一、 问题核心:被忽视的“终端中转” 乱码的根源不在于 AI 的大脑,也不在于编辑器的显示,而在于执行链路的编码不一致。 Copilot/Codex 在执行某些修改任务(如:重构整个文件或批量替换)时,往往会通过终端调用系统指令。由于 Windows 终端(PowerShell/CMD)默认使用 GBK 编码,它在处理 AI 传来的 UTF-8 字节时会发生“误读”,导致写入文件的内容从源头上就损坏了。