c7134c25dfe642f3a467e325920.../doc.md

144 lines
6.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 语义推理与导航
智能语义推理框架包含两个核心模块:
语义目标标注:利用 VLM识别物体
语义导航:机器人借助已保存的物体记忆,通过语义路标完成导航。
语义标注模块将 Faster R-CNN 与 CLIP 结合,实现零样本目标检测。
给定一个物体列表(例如:["Refrigerator", "water dispenser", "sofa", "white toilet", "office chair with wheels"]),由 Faster R-CNN 从 RGB 图像帧中生成候选区域。
随后,使用 CLIP 将每个候选区域进行特征编码,并与文本标签做余弦相似度对比,为区域分配最可能的类别标签。
点击 RViz2 中Nav2 Goal在地图上选择目标位置调整箭头设置机器人到达后的朝向确认后机器人将自主导航在探索过程中系统会结合 RGB-D 数据 记录物体的中心坐标,并将置信度分数与位置信息存入 JSON 文件。
只有当检测到更高置信度的结果时,才会更新原有记录。
## 1. 注意事项
之后每打开一个新终端,都建议先执行:
```bash
source /opt/ros/humble/setup.bash
source /workspace/install/setup.bash
```
## 2. 启动仿真
先点击平台左下角的“终端”,再点击“+”新建终端。在终端1执行下面的依赖安装和编译命令等待完成
终端1下继续执行启动命令
```bash
./gzsim_run.sh
```
该脚本会启动仿真和websocket服务并生成带时间记录的日志文件预计打印结果
![图2](assets/picture02.png)
脚本启动成功后可以在右上角点击添加gazebo界面。等待刷新后即可查看仿真画面
![图3](assets/picture03.png)
![图4](assets/picture04.png)
同时可以在左侧点击“数据流”并点击“refresh”查看当前的ros2话题
![图5](assets/picture05.png)
## 3. 启动 AMCL节点负责 “map_server + amcl”
在终端中点击“+”,新建终端,并执行下面的命令:
![图6](assets/picture06.png)
```bash
source /opt/ros/humble/setup.bash
source /workspace/install/setup.bash
export NAV2_MAP_PATH=/workspace/src/turtlebot3_simulations/turtlebot3_gazebo/map/office_map.yaml
ros2 launch nav2_rrtstar_planner bringup_localization_with_initial_pose.launch.py \
use_sim_time:=true \
map:=$NAV2_MAP_PATH \
params_file:=/workspace/src/TurtleBot-RRT-Star/nav2_params.yaml
```
预计打印结果:
![图7](assets/picture07.png)
## 4. 启动 Nav2导航栈负责 “RRT* 规划器 + controller + bt_navigator
在终端中点击“+”,新建终端,并执行下面的命令:
![图8](assets/picture08.png)
```bash
source /opt/ros/humble/setup.bash
source /workspace/install/setup.bash
ros2 launch nav2_bringup navigation_launch.py \
use_sim_time:=True \
params_file:=/workspace/src/TurtleBot-RRT-Star/nav2_params.yaml
```
预计打印结果:
![图9](assets/picture09.png)
## 5. 打开rviz
在“仿真器”界面下添加“远程桌面”界面:
![图10](assets/picture10.png)
“远程桌面”界面:
![图11](assets/picture11.png)
在终端中点击“+”,新建终端,并执行下面的命令:
![图12](assets/picture12.png)
```bash
ros2 run rviz2 rviz2 -d /opt/ros/humble/share/nav2_bringup/rviz/nav2_default_view.rviz --ros-args -p use_sim_time:=true
```
执行完后可以在“远程桌面”界面看到代价地图和路径规划等信息:
![图13](assets/picture13.png)
## 6. 启动目标检测节点
新开终端执行环境生效后启动vlm_perception_pkg的语义检测节点开始目标语义标注并构建语义记忆库在机器人导航过程中节点实时检测环境中的目标并生成语义标注结果保存JSON 格式的语义记忆库到指定路径。
![图14](assets/picture14.png)
```bash
source /opt/ros/humble/setup.bash
source /workspace/install/setup.bash
# 该命令启动时重置上次记录的语义记忆库
ros2 run vlm_perception_pkg vlm_detection --ros-args -p use_sim_time:=true -p reset_records_on_startup:=true
# ros2 run vlm_perception_pkg vlm_detection
# 不带参数的启动命令:启动时加载历史 JSON同一个语义记忆库文件分数高的记录会覆盖低分记录适合连续测试时使用
```
启动后,在终端中可以看到小车相机拍摄的图像的检测结果:
![图15](assets/picture15.png)
开始检测后可以在rviz中使用“Nav2 Goal”设置目标点让小车在地图内跑动小车会拍摄实时图像并实时检测目标并将检测结果保存到JSON文件中。
![图16](assets/picture16.png)
检测完成后可查看目标标注结果in /workspace/src/vlm_nav_pkg/config/example_object_detection_vlm.json带时间戳,可参考测试效果较好的test_vlm.json后续语义导航功能会加载生成的语义记忆库文件通过 CLIP 将语义标签编码为shared embedding space当用户输入自然语言查询时系统匹配最接近的已知目标提取其坐标并发送至 Nav2实现基于自然语言的语义导航。
![图17](assets/picture17.png)
### 导航建议
- TurtleBot3 机身较矮,相机视角较低,高目标物体适合较远距离观测。
- 建议在机器人低速或短暂停止时运行检测,以提高 RGB-D 与 TF 的稳定性。
- 建议目标距离相机约 1~3 米,可以多角度对目标进行观察。
- 本项目保存的是“最高分对应的目标坐标”,适合用于导航到目标附近,不保证是物体几何中心。
## 7. 启动语义导航节点
在终端5关闭检测节点在终端中点击“+”,新建终端,并执行下面的命令:
```bash
# 关闭检测节点后
source /opt/ros/humble/setup.bash
source /workspace/install/setup.bash
ros2 run vlm_nav_pkg semantic_nav
```
![图18](assets/picture18.png)
节点启动后,在终端输入自然语言语义目标(如 “water dispenser”,“sofa”,“refrigerator”,“white toilet”“office chair with wheels”系统将自动完成语义查询与shared embedding space匹配提取目标对应的地图坐标检测节点保存的json文件并向 Nav2 发送导航目标位姿然后机器人自主规划路径并导航至语义目标位置RViz2 中实时可视化规划路径与导航过程。当前导航会默认在目标周围生成多个候选接近点,并优先选择距离当前机器人最近的可行点,避免直接撞向物体中心点。候选点会先经过 `/map` 自由空间筛选,再逐个试算全局路径,只在“有路径”的候选点里选最优目标。
![图19](assets/picture19.png)