一、本周工作概述

本周主要完成了一个基于 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 遇到的问题与解决

在这里插入图片描述

Logo

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

更多推荐