96 lines
4.0 KiB
Markdown
96 lines
4.0 KiB
Markdown
# 语义推理与导航
|
||
|
||
卡片名称:办公室场景下的小车语义推理与导航
|
||
|
||
描述:基于 `VLM`、`RRT*`、`Nav2` 和视觉语言模型的语义导航项目,把仿真导航、目标检测、语义记忆库和自然语言导航串成一条完整链路。
|
||
|
||
这是一个基于 `ROS 2 Humble`、`Gazebo Sim`、`Nav2` 和视觉语言模型的语义导航项目。系统把仿真导航、目标检测、语义记忆库和自然语言导航串成一条完整链路:机器人先在环境中自主移动并识别目标物体,把高置信度的语义结果保存为 JSON 记忆库;随后用户输入自然语言目标,系统从记忆库中检索最匹配的语义对象,并调用 Nav2 完成导航。
|
||
|
||

|
||
|
||
## 项目能力
|
||
|
||
本项目包含以下核心能力:
|
||
|
||
- 使用 `TurtleBot3 + Gazebo Sim` 构建室内办公场景导航仿真
|
||
- 使用自定义 `RRT*` 全局规划器接入 Nav2
|
||
- 使用 `VLM` 目标检测节点进行语义目标标注
|
||
- 基于 RGB-D 与 TF 估计物体在地图中的位置并生成语义记忆库
|
||
- 将检测结果保存为 JSON 文件,支持后续复用
|
||
- 接收自然语言输入,匹配语义目标并导航到目标附近的可行接近点
|
||
|
||
## 整体流程
|
||
|
||
项目运行分为两个阶段:
|
||
|
||
1. 语义记忆构建阶段
|
||
机器人在仿真环境中移动,检测节点从相机图像中识别目标物体,并把标签、置信度和目标坐标写入 JSON 语义记忆库。
|
||
|
||
2. 语义导航阶段
|
||
用户输入自然语言目标,例如 `water dispenser`、`sofa`、`refrigerator`,系统将语义文本映射到已保存的目标条目,选取目标附近的可达点,并通过 Nav2 发送导航目标。
|
||
|
||
## 核心模块
|
||
|
||
### 1. 导航与仿真
|
||
|
||
- `src/TurtleBot-RRT-Star/`:自定义 `RRT*` 全局规划器,包名为 `nav2_rrtstar_planner`
|
||
- `src/turtlebot3_simulations/`:TurtleBot3 仿真环境、世界文件和启动资源
|
||
- `gzsim_run.sh`:一键启动 Gazebo Sim 与 websocket 服务(内含 `setup_model_cache.sh`)
|
||
- `setup_model_cache.sh` / `VENDOR_MODELS.md`:vendor 共享权重与下载、同步说明
|
||
|
||
### 2. 语义感知
|
||
|
||
- `src/vlm_perception_pkg/`:语义检测节点
|
||
- 入口命令:`ros2 run vlm_perception_pkg vlm_detection`
|
||
- 功能:读取机器人相机图像,识别候选目标,结合深度和 TF 写入语义记忆库
|
||
|
||
### 3. 语义导航
|
||
|
||
- `src/vlm_nav_pkg/`:自然语言语义导航节点
|
||
- 入口命令:`ros2 run vlm_nav_pkg semantic_nav`
|
||
- 功能:加载 JSON 语义记忆库,匹配语义标签,选择可行导航点并发送目标给 Nav2
|
||
|
||
### 4. 语义记忆库
|
||
|
||
示例语义结果文件位于:
|
||
|
||
- `src/vlm_nav_pkg/config/example_object_detection_vlm.json`
|
||
- `src/vlm_nav_pkg/config/test_vlm.json`
|
||
|
||
语义记忆库保存的是目标标签、置信度和地图坐标。系统会优先保留高分结果,以减少低质量检测对导航的影响。
|
||
|
||
## 仓库结构
|
||
|
||
```text
|
||
.
|
||
├── README.md
|
||
├── doc.md
|
||
├── gzsim_run.sh
|
||
├── requirements.txt
|
||
├── requirements-v100.txt
|
||
├── assets/
|
||
└── src/
|
||
├── TurtleBot-RRT-Star/
|
||
├── turtlebot3_simulations/
|
||
├── vlm_nav_pkg/
|
||
├── vlm_perception_pkg/
|
||
└── websocket.gzlaunch
|
||
```
|
||
|
||
各目录作用如下:
|
||
|
||
- `doc.md`:完整课程说明,包含带截图的分步骤操作
|
||
- `assets/`:运行截图和展示图片
|
||
- `src/TurtleBot-RRT-Star/`:RRT* 全局规划插件与 Nav2 参数
|
||
- `src/vlm_perception_pkg/`:检测与语义标注相关代码
|
||
- `src/vlm_nav_pkg/`:语义导航相关代码与配置文件
|
||
- `gzsim_run.sh`:仿真与 websocket 启动脚本
|
||
- `requirements*.txt`:Python 依赖列表
|
||
|
||
## 相关资源
|
||
|
||
- 详细操作文档:[doc.md](doc.md)
|
||
- 语义记忆示例:[src/vlm_nav_pkg/config/example_object_detection_vlm.json](src/vlm_nav_pkg/config/example_object_detection_vlm.json)
|
||
- 更优测试样例:[src/vlm_nav_pkg/config/test_vlm.json](src/vlm_nav_pkg/config/test_vlm.json)
|
||
- RRT* 参数文件:`src/TurtleBot-RRT-Star/nav2_params.yaml`
|