科沃斯八界体验官——依托【八界】与开源生态,快速上手机器人实操,尽享实操乐趣
「一起来加入八界开源生态吧!八界开源社区: www.ecovacs-tech.com 」

开源仓库地址:https://github.com/Bajie001/ecovacs_bajie_sdk
前言
八界 科沃斯首款开源机器人,我在北京世界机器人大会上亲眼看到的,听到的,实际上就是全部开源,可以直接去下载对应的开源SDK操作包,分为C++和Python的,用起来上手超级快,我并没有使用Ubunto的Linux,用的是windowns的Ubuntu 22.04.5 LTS 测试了,完全可用。本文章的所有实例都是通过这个环境来完成的。

八届到家第一步——开始建图

巡视完毕后会创建一个家里的地图。

有了这个才能进行后面的操作哦。
开源仓库说明
我用的是python的语言,直接clone下来后需要安装对应的包。

clone下来后需要cd 进入到python文件夹,我们可以看到x86_64的whl文件,通过这个安装即可。

安装命令:
pip3 install bajie_sdk-2.1.0-cp310-cp310-linux_x86_64.whl -i https://pypi.tuna.tsinghua.edu.cn/simple
安装命令执行效果:

测试环境:
python3 -c “import bajie_sdk; print(‘ok’, bajie_sdk.name)”
环境测试成功:

确认操作:
from bajie_sdk import BajieRobot
import math
robot = BajieRobot(ws_url="ws://192.168.1.65:9900/") # 或 ws_url="ws://<IP>:9900/"
if not robot.Connect(timeout_sec=8.0):
raise RuntimeError("连接失败")
info = robot.eco_robotInfo()
print("电量:", info.battery)
print("工作状态:", info.workState)
print("异常告警:", info.alarm)
print("地图坐标:", info.pos)
robot.Disconnect()

开箱即用——python测试基础移动与升降拍照抓取操作
旋转360°
代码:
from bajie_sdk import BajieRobot
import math
robot = BajieRobot(ws_url="ws://192.168.1.65:9900/") # 或 ws_url="ws://<IP>:9900/"
if not robot.Connect(timeout_sec=8.0):
raise RuntimeError("连接失败")
info = robot.eco_robotInfo()
# 原地旋转一圈(360° = 2π rad),无需地图
st = robot.eco_moveChassis(move_distance=0.0, move_angle=2 * math.pi, timeout_sec=30.0)
print("旋转完成:", st.task_id, st.error_info.code)
robot.Disconnect()

执行效果:


具体参数的旋转与移动
旋转八分之一圈,也就是0.25 * math.pi。
前进,会根据转换的角度进行前进。
from bajie_sdk import BajieRobot
import math
robot = BajieRobot(ws_url="ws://192.168.1.65:9900/") # 或 ws_url="ws://<IP>:9900/"
if not robot.Connect(timeout_sec=8.0):
raise RuntimeError("连接失败")
info = robot.eco_robotInfo()
st = robot.eco_moveChassis(0.8, 0.0) # 约前进 80 cm
robot.Disconnect()

运行效果:

升降操作
升降高度控制。value 范围 [0, 0.44] 米;0 = 最低,0.44 = 最高;超出范围自动截断并告警。
所以测试个0.22问题不大。
from bajie_sdk import BajieRobot
import math
robot = BajieRobot(ws_url="ws://192.168.1.65:9900/") # 或 ws_url="ws://<IP>:9900/"
if not robot.Connect(timeout_sec=8.0):
raise RuntimeError("连接失败")
info = robot.eco_robotInfo()
st = robot.eco_setRobotHeight(0.22)
robot.Disconnect()
注:代码没有问题,但是充电的过程中是无法执行的。

所以,等会,我充完电继续测试。

综合测试一下
动作流程:
- 上升 27 cm
- 前进 50 cm
- 头部调至水平
- 头部相机拍照(获取一帧图像)
- 向后转(原地旋转 180°)
- 再前进 50 cm,回到原位置
- 再向后转(原地旋转 180°),恢复初始朝向
- 下降到最低高度
我简单的设计了个动作,这些动作都是基本的运动过程,可以通过编程做很多的事情,再通过算法处理就更加智能,基础已经打好,后面就是具体的执行了。
# -*- coding: utf-8 -*-
import math
from bajie_sdk import BajieRobot, CameraType
# ===== 任务参数(统一在此定义,避免散落的魔法数字)=====
WS_URL = "ws://192.168.1.65:9900/"
RISE_HEIGHT_M = 0.27 # 上升 27 cm 对应的绝对高度(升降范围 [0, 0.44] m)
LOWEST_HEIGHT_M = 0.0 # 最低高度
MOVE_DISTANCE_M = 0.50 # 单次平移距离 50 cm
TURN_AROUND_RAD = math.pi # 向后转 = 180°
HEAD_LEVEL_RAD = 0.83 # 头部水平俯仰角(范围 [0, 1.3] rad,0.83 = 水平)
HEIGHT_TIMEOUT_SEC = 120.0 # 升降动作较慢,超时给足
MOVE_TIMEOUT_SEC = 60.0 # 底盘平移/旋转超时
HEAD_TIMEOUT_SEC = 30.0 # 头部俯仰超时
CAPTURE_TIMEOUT_SEC = 30.0 # 拍照超时
def check_status(step: str, status) -> None:
"""检查阻塞式任务的返回状态,error_info.code 非 0 即视为失败。"""
if status.error_info.code != 0:
raise RuntimeError(
f"[{step}] 执行失败: code={status.error_info.code}, msg={status.error_info.msg}"
)
print(f"[{step}] 完成")
def main() -> None:
robot = BajieRobot(ws_url=WS_URL)
if not robot.Connect(timeout_sec=8.0):
raise RuntimeError(f"连接机器人失败: {WS_URL}")
print("机器人已连接")
try:
# 1. 上升 27 cm
# 注意:eco_setRobotHeight 只支持绝对高度(0=最低,0.44=最高),
# SDK 未提供当前高度查询,因此这里按“起始位于最低高度”理解,
# 即“上升 27 cm”= 绝对高度 0.27 m。
print("步骤1: 上升 27 cm")
check_status(
"上升27cm",
robot.eco_setRobotHeight(RISE_HEIGHT_M, timeout_sec=HEIGHT_TIMEOUT_SEC),
)
# 2. 前进 50 cm(move_distance 为正表示前进,单位米)
print("步骤2: 前进 50 cm")
check_status(
"前进50cm",
robot.eco_moveChassis(
move_distance=MOVE_DISTANCE_M,
move_angle=0.0,
timeout_sec=MOVE_TIMEOUT_SEC,
),
)
# 3. 头部调至水平(0.83 rad = 水平),保证拍照视角端正
print("步骤3: 头部调至水平")
check_status(
"头部水平",
robot.eco_setRobotHead(HEAD_LEVEL_RAD, timeout_sec=HEAD_TIMEOUT_SEC),
)
# 4. 拍照(头部相机),返回 RGBDViewWithPose,RGB 图在 rgb_image.img
print("步骤4: 拍照")
view = robot.eco_captureImages(CameraType.HEAD, timeout_sec=CAPTURE_TIMEOUT_SEC)
print(f"[拍照] 完成,图像尺寸: {view.rgb_image.img.shape}")
# 5. 向后转(原地旋转 180°,不平移)
print("步骤5: 向后转 180°")
check_status(
"第一次向后转",
robot.eco_moveChassis(
move_distance=0.0,
move_angle=TURN_AROUND_RAD,
timeout_sec=MOVE_TIMEOUT_SEC,
),
)
# 6. 朝向已反转,再前进 50 cm 即回到原位置
print("步骤6: 前进 50 cm 回到原位置")
check_status(
"返回50cm",
robot.eco_moveChassis(
move_distance=MOVE_DISTANCE_M,
move_angle=0.0,
timeout_sec=MOVE_TIMEOUT_SEC,
),
)
# 7. 再向后转 180°,恢复初始朝向
print("步骤7: 向后转 180° 恢复朝向")
check_status(
"第二次向后转",
robot.eco_moveChassis(
move_distance=0.0,
move_angle=TURN_AROUND_RAD,
timeout_sec=MOVE_TIMEOUT_SEC,
),
)
# 8. 下降到最低高度
print("步骤8: 下降到最低高度")
check_status(
"下降到最低",
robot.eco_setRobotHeight(LOWEST_HEIGHT_M, timeout_sec=HEIGHT_TIMEOUT_SEC),
)
print("全部动作执行完毕")
finally:
robot.Disconnect()
print("已断开连接")
if __name__ == "__main__":
main()

过程中还拍了照:

动作过程,完整的匹配代码过程,示例成功哦。

机械臂操作 - 玩具抓取测试
可以看到直接就抓取上来了,并且会根据物品的形状来判定抓取位置。

过程中会有持续的拍照,这是找寻置物箱的过程中拍的照。

没给收纳筐效果
我单独测试了没有收纳箱的效果,就是一直抓取着找收纳箱3次,找不到就会自动停止。

PythonSDK工作流分析
我分析理解了一下这个开源的pythonSDK留了一下工作流程图。

SDK分层架构

核心工作流程图
完整生命周期:连接 → 重定位 → 「搜索 → 抓取 → 放置」轮次循环 → 语音播报 → 断开。抓取与放置各有 ≤3 次重试;连续失败进入异常播报分支。

通用开发范式
感知 → 规划 → 执行 → 任务控制。

总结
八界的开源代码整体使用上难度很低,方便理解,上手很快,完全开源,从准备环境到代码运行,大概只有20来分钟,这还是很多时间放在了下载环境依赖上,这里还会有很多玩法,大家可以尽情享用。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)