「一起来加入八界开源生态吧!八界开源社区: 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()

注:代码没有问题,但是充电的过程中是无法执行的。

在这里插入图片描述
所以,等会,我充完电继续测试。
在这里插入图片描述

综合测试一下

动作流程:

  1. 上升 27 cm
  2. 前进 50 cm
  3. 头部调至水平
  4. 头部相机拍照(获取一帧图像)
  5. 向后转(原地旋转 180°)
  6. 再前进 50 cm,回到原位置
  7. 再向后转(原地旋转 180°),恢复初始朝向
  8. 下降到最低高度

我简单的设计了个动作,这些动作都是基本的运动过程,可以通过编程做很多的事情,再通过算法处理就更加智能,基础已经打好,后面就是具体的执行了。

# -*- 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来分钟,这还是很多时间放在了下载环境依赖上,这里还会有很多玩法,大家可以尽情享用。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐