4.15 확장 관리
개요
확장 모듈은 로봇 컨트롤러의 타사 플러그인을 관리합니다. 컨트롤러의 IP를 검색하고, 설치된 플러그인을 /view 나열하고, /disable를 활성화하고, 해당 서비스를 호출할 수 있습니다.
핵심 기능
- 로봇 IP 주소 얻기 지원
- 확장자 목록 가져오기 지원
- 단일 확장 세부정보 가져오기 지원
- 확장 활성화/disable 상태 전환 지원
- 확장 서비스 명령 호출 지원
- 연장 수명주기의 중앙 집중식 관리 지원
사용 사례
- 호스트 PC에서 로봇 컨트롤러의 타사 플러그인 관리
- 확장에서 제공하는 서비스를 호출하여 로봇 기능 확장
- 확장 활성화 상태 모니터링 및 제어
- 확장 또는 티칭 펜던트 환경에서 로봇 컨트롤러에 연결
- 타사 시스템과 로봇 통합
4.15.1 로봇의 IP 주소 얻기
| 메서드 이름 | extension.get_robot_ip() -> str |
|---|---|
| 설명 | SDK가 실행되는 환경을 기준으로 해당 로봇 IP 주소를 반환합니다. |
| 요청 매개변수 | 없음 |
| 반환 값 | str: IP 주소(없음일 수 있음) |
| 호환 로봇 소프트웨어 버전 | 협업(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 |
|---|---|
| 설명 | 지정된 확장의 활성화된 /disabled 상태를 전환합니다. |
| 요청 매개변수 | 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 : 명령 매개변수(선택 사항, 기본값 없음). |
| 반환 값 | 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}")
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}")