一起来加入八界开源生态吧!八界开源社区:www.ecovacs-tech.com
我想让机器人做一件很具体的事:看看柜顶有什么,记住物体的位置,再试着靠近、抓取和放置。柜顶摆着键盘、鼠标和白色玩偶,旁边留了一块低台,就从这套布置开始。
用科沃斯八界做这件事,最直接的便利是相机、导航、抓取和语音都有高层 SDK 接口。我没有先去写关节控制,而是用 Python 读状态、取图、找目标,逐步接上后面的操作。
这让开发更早进入了我感兴趣的部分:识别出的物体怎么变成机械臂能用的位置,机器人应该站在哪儿,做完以后又怎样确认结果。底层能力已有了,我的代码主要在安排它们怎样配合。

图 1| 八界真机、头部相机检测画面,以及放置阶段的报错记录。
一、高层 SDK 让我先把任务写出来
拿抓取来说,八界 SDK 已经把识别、轨迹和防碰撞封装进高层动作。对这个桌面任务,我可以先围绕"看到了什么、接下来做什么"写程序,不用为了试一个想法,先从几个关节该转多少度开始做。
我的顺序是先用 Python 把状态、视觉和导航跑起来,再用 C++ 做最小验证。八界也提供 ROS 2,需要自定义节点、轨迹或更底层控制时,还能继续往下接。做应用时先用高层接口,需要深入时再下探,这两条路都留着。
官方开放的 45 项能力 ,放进这张桌面就有了具体用途:先读 battery、alarm、workState 和 pose,确认机器人状态;再用 RGB-D 和 OVD 看目标,需要时搜索、导航,调整高度或 UNBOX_POSE 等姿态,最后执行抓放并反馈结果。
连接、感知和操作时,我主要用到了下面这些接口。读到它们的名字,大致就能对应到任务里的具体动作:
python
robot.Connect(timeout_sec=10.0)
robot.eco_captureImages(...)
robot.eco_detect_objects(...)
robot.eco_computeObjectPose(...)
robot.eco_findObject(...)
robot.eco_navigateToPoint(...)
robot.eco_pick(...)
robot.eco_place_3D(...)
robot.eco_robotSpeech(...)
robot.eco_robotInfo()

图 2| 从读取状态到感知、导航和操作,现成接口被接进同一个任务。
这部分省下来的工作,让我可以把时间留给场景本身。下面的检测、站位和地图处理,都是在这些接口之上继续做的。测试记录仍区分重复运行、单次 smoke test 和尚未实测的项目。
二、把 158 个标签一起交给它,看看桌上有什么
先试视觉。我知道柜顶有键盘、鼠标和玩偶,传入这几个标签就能检查指定物品;但现成的开放词汇检测接口,也让我能顺手试一个更有意思的问题:不先缩小到这三样东西,它会报出什么?
于是,我把 SDK 提供的 158 个合法标签一次传给 OVD ,也就是开放词汇检测接口。那一轮返回了键盘、玩偶、鼠标和柜子。这里仍然是在 SDK 的标签范围内检测,只是没有提前把范围限定成桌上的那几件物品。

图 3| 158 标签检测的真实返回:键盘、玩偶、鼠标和柜子。
拿到检测框以后,我继续调用位姿接口,把"画面里有个玩偶"接成后续操作能读取的位置。一次有效记录中,pose_ok=true ,坐标系为 map ,玩偶原位约为 (3.471, 2.541, 0.722) m ;搜索记录里还有 found_deg=45° 、found_head=0.3。
对我来说,这比单独看一张识别截图更有用。检测结果可以继续交给搜索和操作脚本,视觉不必停留在屏幕上的一个框。我的工作是检查这些结果,再决定什么时候进入下一步。
标签怎么传仍值得实测。同一场景里,三标签批量检测能找到键盘和鼠标,单独问某个标签时,却有过零命中。后来脚本先用任务相关标签,结果不稳再扩大集合,同时处理阈值、近义标签和连续帧确认。
我也把 2D 和 3D 结果分开保存。深色、反光或纹理弱的表面可能提供不了足够的深度点,bbox 框对了,还得确认深度和位姿有效,才能继续判断机械臂是否够得到。
三、眼睛、底盘和手臂,接下来怎样配合?
八界把移动、观察和操作放在了同一台机器人上。双驱底盘负责靠近和转向,44 cm 升降平台调整工作高度,六自由度机械臂 配合二指旋转夹爪执行操作;夹爪最大负载约 1 kg,侧面的 RGB 相机还能做近距离复核。
头部、手臂相机提供目标信息,激光雷达和地图提供环境信息,SDK、端侧感知与机器人服务由双 RK3588 和本地控制台承载。这些能力都有了以后,我要为桌面任务安排的是观察与操作的先后关系,以及两者之间的站位。

图 4| 同一场景中的观察与操作:相机能看清柜顶,机械臂还需要合适的站位。
真正花时间的,也正是这些衔接。站远一点,桌面看得全;要伸手放东西,又可能得靠近。一次放置已经通过识别和位姿这两步,却在 eco_place_3D 连续收到 57346,提示"物体放得太靠里面,够不着"。结合现场站位看,问题落在机械臂的可达范围上。

图 5| 识别和位姿正常,eco_place_3D 仍返回 57346;这一轮停在放置阶段。
有了明确的错误信息,我会先检查站位、升降高度和工作空间,而不是继续改检测标签。SDK 帮我调用动作,场景里到底站在哪儿、目标摆得有多深,仍然要由应用代码和现场测试来确认。
物理参数也需要在这一层检查。升降测试里,eco_setRobotHeight 收到 value 15.0 ,提示超出范围 0, 0.44 ,截断到 0.44 后,任务仍返回 SUCCESS 。我心里想的是厘米,接口接收的却是米:15 / 30 / 44 应当写成 0.15 / 0.30 / 0.44,否则三次可能都落到同一个 0.44 m。
此外,eco_lookto 的 camera_type 只能按关键字传;eco_place_3D 失败时可能抛出带错误码的异常,不一定只返回 False 。ObjectPose3D 的空对象也不能直接当兜底,全零位姿必须挡在动作之前。
这些检查后来都留在了脚本里:长度、高度、角度写明单位,核对 pose 的量级与 frame,检查 bbox、电量和 alarm,失败两次就停下来查原因。把接口衔接写清楚之后,下次组合任务就不必重新处理同样的问题。
四、有了点位导航,桌面任务就能继续往外扩
除了原地观察和操作,八界还提供地图、语义区域和点位导航接口。我可以先用现成导航让机器人到指定位置,把精力放在"这个任务该去哪儿",再根据现场情况选用语义位置还是实际坐标。
有一次桌子挪走了,furniture 里却仍留着建图时的坐标。执行 nav "房间0的桌子6",机器人照常走到了旧位置,那里已经是一块空地。墙和通道没变,栅格地图还能用;需要更新的是"桌子 6 在哪里"这条语义信息 。

图 6| 分别读取栅格、语义区域和当前定位,检查桌子移动后哪一层信息发生了变化。
那次我先用 state 看当前位姿和区域中心,再用 navpt 直接导航到实际坐标,没有重建整张地图:
bash
python3 probe_capability.py state
python3 probe_capability.py navpt <x> <y> <yaw>
mapinfo 记录墙和障碍,furniture 记录桌子这类语义区域,定位则给出机器人当前的位置。能分别读到这些信息,应用就可以在语义位置过期时先改走点位,而不必把整个导航过程推倒重来。
五、把这些接口留下,下一个想法就能接着做
几轮调试之后,我把常用检查收成了一组小工具。sig 查 SDK 签名,state 读状态和语义区域,map 看地图,navpt 直接走点位。新的任务先从这几条命令开始,再接视觉和机械臂:
很多检查只读状态就能完成,纯函数和分支逻辑可以用离线桩测处理。改一次参数解析,不需要再让机械臂动一遍,失败记录也不会被下一轮覆盖。

图 7| 先检查签名、状态和地图,再用 navpt 做点位导航。
bash
python3 probe_capability.py sig
python3 probe_capability.py state
python3 probe_capability.py map
python3 probe_capability.py navpt <x> <y> <yaw>
视觉、位姿和地图也各有单独入口。后面改一处判断,可以只测对应部分:
text
probe_capability.py # sig / state / map / region / nav / navpt
# locate / find / grasp
probe_final.py # sep / multi / see,视觉变量分离与开放检测
probe_pose.py # 2D→3D、深度与位姿
map_inspect.py # 栅格与语义地图对照
dump_ovd_labels.py # 导出 158 个合法 OVD 标签
storyA.py # 新场景长链路与状态文件
_smoke_story.py # 离线桩测
日志、头部相机原图、状态 JSON、搜索命中图和操作台录屏按 run_id 放在一起。每轮还保存 robot_state、battery、alarm、workState,head_rgb、arm_rgb、depth,detections、bbox、score,以及 pose、frame_id、task_id、error_code、latency 和 human_intervention,方便把画面与接口返回对起来。
继续往上接 OpenClaw / Hermes 时,也是沿用这些能力:自然语言或 Agent 调 Skill,Skill 再调八界 SDK。参数、坐标系和退出条件放进工具里,上层再依据返回结果安排下一步。桌面任务里整理好的检查,可以继续留在新的编排中。
后续还可以用 Isaac Sim 4.5 / Sim2Real 先看导航路径、工作空间和明显碰撞。反光材质、标签集合、tf、语义位置偏差,以及真机上的 57346,仍要回到现场核对。
这次开发里,八界帮我省掉了不少从底层起步的工作。 我能从"看看桌上有什么"开始,逐步写到定位、搜索和机械操作;需要更深的控制时,C++ 和 ROS 2 的入口也还在。现成接口给了我尝试的起点,自己的代码则用来安排机器人怎样观察、判断和行动。