【第四十四周】基于 SayCan + NLMap 的语义导航系统搭建与仿真验证
·
目录
一、本周工作概述
本周主要完成了一个基于 SayCan + NLMap 思想的语义导航系统的搭建与验证。系统能够:
从图片中识别物体及颜色属性(DETR + CLIP)
理解自然语言指令,解析为 pick / navigate / place 动作(DeepSeek)
在 Webots 仿真环境中获取物体的 3D 坐标
控制机器人移动到目标物体位置
整体架构采用双进程通信:窗口1 运行 Webots 服务器,窗口2 运行语义理解主程序,通过 JSON 文件交互。
二、详细工作内容

2.2 核心模块实现
2.2.1 物体检测与颜色识别(DETR + CLIP)
# DETR 检测物体
detr_model = DetrForObjectDetection.from_pretrained("facebook/detr-resnet-50")
# CLIP 提取颜色属性
clip_model = CLIPModel.from_pretrained("openai/clip-vit-base-patch32")
效果:能够识别猫、杯子、椅子等物体,并区分颜色(如“橘色的猫”、“红色的杯子”)。
2.2.2 自然语言指令解析(DeepSeek)
def call_deepseek(prompt):
response = requests.post(
"https://api.deepseek.com/v1/chat/completions",
headers={"Authorization": f"Bearer {API_KEY}"},
json={"model": "deepseek-chat", "messages": [...]}
)
return response.json()["choices"][0]["message"]["content"]
效果:用户输入“猫在哪里” → navigate(cat);支持多步骤指令如“先去猫,再去杯子”。
2.2.3 Webots 仿真对接

Webots 服务器(webots_server.py):
from controller import Supervisor
my_robot = robot.getFromDef("my_robot")
cat_cube = robot.getFromDef("cat_cube")
if action == "get_cat_position":
pos = cat_cube.getField("translation").getSFVec3f()
result = {"position": [pos[0], pos[1], pos[2]]}
elif action == "move_robot_to":
my_robot.getField("translation").setSFVec3f([x, y, z])
2.3 遇到的问题与解决

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)