4.15 插件管理
概述
Extension 模块用于管理机器人控制器上的第三方插件,提供获取控制器 IP、查询 / 查看插件列表、切换启用状态以及调用插件服务等能力。
核心功能
- 支持获取机器人 IP 地址
- 支持获取插件列表
- 支持获取单个插件详情
- 支持切换插件启用 / 禁用状态
- 支持删除插件
- 支持调用插件服务命令
- 支持安装插件包
- 支持安装 wheel 包
- 支持统一管理插件生命周期
使用场景
- 在上位机侧管理机器人控制器上的第三方插件
- 扩展机器人功能,调用插件提供的服务
- 监控和控制插件的启用状态
- 在插件或示教器环境中连接机器人控制器
- 实现机器人与第三方系统的集成
4.15.1 获取机器人 IP 地址
| 方法名 | extension.get_robot_ip() -> str |
|---|---|
| 描述 | 根据 SDK 运行环境返回相应的机器人 IP 地址 |
| 请求参数 | 无 |
| 返回值 | str:IP 地址(可能返回 None) |
| 兼容的机器人软件版本 | 协作 (Copper): v7.5.0.0+ 工业 (Bronze): v7.5.0.0+ |
获取 IP 的逻辑说明:
该方法会根据 SDK 运行的环境自动判断并返回相应的 IP 地址:
- 工业示教器环境 :返回控制器的 IP 地址
- 协作 AP 板环境 :
- 如果使用 DHCP 模式:返回路由器的 IP 地址(默认网关)
- 如果使用静态 IP 模式:返回配置的静态 IP 地址
- 云端环境 返回云端的内部 IP 地址
- 其他环境:返回
None
提示
- 该方法主要用于插件环境中,需要连接到机器人控制器的场景
示例代码
py
"""
Copyright © 2016 Agilebot Robotics Ltd. All rights reserved.
Instruction: 插件系统连接机器人示例
本示例展示如何在插件系统中连接机器人。插件系统会自动识别运行环境:
- 在插件环境中运行时:自动获取机器人IP地址,无需手动配置
- 在本地开发环境中运行时:使用下方的 local_robot_ip 和 local_ap_ip 配置
Example of extension connection:
This example demonstrates how to connect to the robot in the extension system.
The extension system automatically identifies the running environment:
- In extension environment: Automatically obtains the robot IP address
- In local development environment: Uses the local_robot_ip and local_ap_ip configuration below
"""
from Agilebot import Arm, Extension, StatusCodeEnum
extension = Extension()
# ========== 本地开发配置 / Local Development Configuration ==========
# 以下配置仅在本地开发环境中生效,插件环境会自动获取IP
# The following configuration only takes effect in local development environment
local_robot_ip = "10.27.1.254" # 机器人控制器IP / Robot controller IP (modify to 192.168.110.2 for industrial robot)
local_ap_ip = "10.27.1.254" # 示教器或AP IP(工业机器人改为 192.168.110.102 或 None)/ Teach pendant IP or AP IP (modify to 192.168.110.102 or None for industrial robot)
# ========== 自动识别运行环境 / Automatically Identify Running Environment ==========
robot_ip = extension.get_robot_ip()
if robot_ip is None:
# 本地开发环境:使用上方配置的IP / Local development: use configured IP above
print("本地开发环境 / Local development environment")
robot_ip = local_robot_ip
ap_ip = local_ap_ip
else:
# 插件环境:自动获取机器人IP / Extension environment: auto-obtain robot IP
print(f"插件环境,自动获取到机器人IP / Extension environment, auto-obtained robot IP: {robot_ip}")
ap_ip = "127.0.0.1"
print(f"robot_ip: {robot_ip}")
print(f"ap_ip: {ap_ip}")
arm = Arm()
ret = arm.connect(arm_controller_ip=robot_ip, teach_panel_ip=ap_ip)
if ret == StatusCodeEnum.OK:
print("机器人连接成功 / Robot connected successfully")
else:
print(f"机器人连接失败,错误代码 / Robot connection failed, error code: {ret.errmsg}")
arm.disconnect()
exit(1)4.15.2 获取插件列表
| 方法名 | extension.get_list() → tuple[list[ExtensionInfo], StatusCodeEnum] |
|---|---|
| 描述 | 获取机器人上已安装的全部插件信息 |
| 请求参数 | 无 |
| 返回值 | list[ExtensionInfo] :插件信息列表。StatusCodeEnum:函数执行结果。 |
| 兼容的机器人软件版本 | 协作 (Copper): v7.7.0.0+ 工业 (Bronze): 不支持 |
4.15.3 获取插件详情
| 方法名 | extension.get( name : str) → tuple[ExtensionInfo, StatusCodeEnum] |
|---|---|
| 描述 | 根据插件名称查询单个插件详情 |
| 请求参数 | name :插件名称。 |
| 返回值 | ExtensionInfo :插件详细信息。StatusCodeEnum:函数执行结果。 |
| 兼容的机器人软件版本 | 协作 (Copper): v7.7.0.0+ 工业 (Bronze): 不支持 |
4.15.4 切换插件启用状态
| 方法名 | extension.toggle( name : str) → StatusCodeEnum |
|---|---|
| 描述 | 切换指定插件的启用 / 禁用状态。 |
| 请求参数 | name :插件名称。 |
| 返回值 | StatusCodeEnum:函数执行结果。 |
| 兼容的机器人软件版本 | 协作 (Copper): v7.7.0.0+ 工业 (Bronze): 不支持 |
4.15.5 调用简单服务插件命令
| 方法名 | extension.call_service( name : str, command : str, params : dict = None) → tuple[Any, StatusCodeEnum] |
|---|---|
| 描述 | 调用指定插件的简单服务命令并返回执行结果 |
| 请求参数 | name :插件名称。command :插件命令名称。params :命令参数 (可选,默认为 None)。 |
| 返回值 | Any :插件命令执行结果。StatusCodeEnum:函数执行结果。 |
| 兼容的机器人软件版本 | 协作 (Copper): v7.7.0.0+ 工业 (Bronze): 不支持 |
示例代码
py
#!python
"""
Copyright © 2016 Agilebot Robotics Ltd. All rights reserved.
Instruction: 插件使用示例 / Example of extension usage
"""
from Agilebot import Arm, StatusCodeEnum
# [ZH] 初始化捷勃特机器人
# [EN] Initialize the Agilebot robot
arm = Arm()
# [ZH] 连接捷勃特机器人
# [EN] Connect to the Agilebot robot
ret = arm.connect("10.27.1.254")
# [ZH] 检查是否连接成功
# [EN] Check if the connection is successful
if ret == StatusCodeEnum.OK:
print("机器人连接成功 / Robot connection successful")
else:
print(f"机器人连接失败,错误代码 / Robot connection failed, error code: {ret.errmsg}")
arm.disconnect()
exit(1)
res, ret = arm.extension.get("MathService")
if ret == StatusCodeEnum.OK:
print("获取插件信息成功 / Get extension information successfully")
print(f"插件信息 / Extension information: {res}")
else:
print(f"获取插件信息失败,错误代码 / Get extension information failed, error code: {ret.errmsg}")
ret = arm.extension.toggle("MathService")
if ret == StatusCodeEnum.OK:
print("切换插件状态成功 / Toggle extension status successfully")
else:
print(f"切换插件状态失败,错误代码 / Toggle extension status failed, error code: {ret.errmsg}")
ret = arm.extension.delete("MathService")
if ret == StatusCodeEnum.OK:
print("删除插件成功 / Delete extension successfully")
else:
print(f"删除插件失败,错误代码 / Delete extension failed, error code: {ret.errmsg}")
res, ret = arm.extension.call_service("MathService", "add", dict([["a", 1], ["b", 2]]))
if ret == StatusCodeEnum.OK:
print("调用插件服务成功 / Call extension service successfully")
print(f"调用插件服务结果 / Call extension service result: {res}")
else:
print(f"调用插件服务失败,错误代码 / Call extension service failed, error code: {ret.errmsg}")4.15.6 删除插件
| 方法名 | extension.delete( name : str) → StatusCodeEnum |
|---|---|
| 描述 | 删除指定插件 |
| 请求参数 | name :插件名称。 |
| 返回值 | StatusCodeEnum:函数执行结果。 |
| 兼容的机器人软件版本 | 协作 (Copper): v7.7.0.0+ 工业 (Bronze): 不支持 |
4.15.7 安装插件包
| 方法名 | extension.install_extension( path : str) → tuple[ExtensionInfo, StatusCodeEnum] |
|---|---|
| 描述 | 上传并安装插件包,返回插件基础信息 |
| 请求参数 | path :插件包文件路径。 |
| 返回值 | ExtensionInfo :安装后的插件信息。StatusCodeEnum:函数执行结果。 |
| 兼容的机器人软件版本 | 协作 (Copper): v7.7.0.0+ 工业 (Bronze): 不支持 |
4.15.8 安装 wheel 包
| 方法名 | extension.install_wheel( path : str) → tuple[bool, StatusCodeEnum] |
|---|---|
| 描述 | 上传并安装 Python wheel 包 |
| 请求参数 | path :wheel 包文件路径。 |
| 返回值 | bool :安装结果。StatusCodeEnum:函数执行结果。 |
| 兼容的机器人软件版本 | 协作 (Copper): v7.7.0.0+ 工业 (Bronze): 不支持 |
示例代码
py
#!python
"""
Copyright © 2016 Agilebot Robotics Ltd. All rights reserved.
Instruction: 插件安装示例 / Example of extension installation
"""
from pathlib import Path
from Agilebot import Arm, StatusCodeEnum
# [ZH] 初始化捷勃特机器人
# [EN] Initialize the Agilebot robot
arm = Arm()
# [ZH] 连接捷勃特机器人
# [EN] Connect to the Agilebot robot
local_robot_ip = "10.27.1.254" # 机器人控制器IP / Robot controller IP
local_ap_ip = "10.27.1.254" # 示教器或AP IP / Teach pendant IP or AP IP
ret = arm.connect(arm_controller_ip=local_robot_ip, teach_panel_ip=local_ap_ip)
if ret != StatusCodeEnum.OK:
print(f"机器人连接失败,错误代码 / Robot connection failed, error code: {ret.errmsg}")
arm.disconnect()
exit(1)
current_path = Path(__file__).resolve()
example_dir = current_path.parent / "files"
extension_package_path = example_dir / "HelloAgilebot.gbtapp"
wheel_package_path = example_dir / "six-1.17.0-py2.py3-none-any.whl"
# [ZH] 安装插件包
# [EN] Install the extension package
if extension_package_path.is_file():
ext_info, install_ret = arm.extension.install_extension(str(extension_package_path))
if install_ret == StatusCodeEnum.OK:
print("插件安装成功 / Install extension successfully")
print(f"插件信息 / Extension information: {ext_info}")
else:
print(f"插件安装失败,错误代码 / Install extension failed, error code: {install_ret.errmsg}")
arm.disconnect()
exit(1)
else:
print(f"插件包文件不存在 / Extension package not found: {extension_package_path}")
arm.disconnect()
exit(1)
# [ZH] 安装 wheel 包
# [EN] Install the wheel package
if wheel_package_path.is_file():
wheel_ok, install_ret = arm.extension.install_wheel(str(wheel_package_path))
if install_ret == StatusCodeEnum.OK and wheel_ok:
print("wheel 安装成功 / Wheel package installed successfully")
else:
print(f"wheel 安装失败,错误代码 / Wheel installation failed, error code: {install_ret.errmsg}")
arm.disconnect()
exit(1)
else:
print(f"wheel 包文件不存在 / Wheel package not found: {wheel_package_path}")
arm.disconnect()
exit(1)
# [ZH] 断开捷勃特机器人连接
# [EN] Disconnect from the Agilebot robot
arm.disconnect()