Skip to content

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 주소를 자동으로 결정하고 반환합니다.

  1. 산업용 교육 펜던트 환경: 컨트롤러의 IP 주소를 반환합니다.
  2. 협업 AP 보드 환경:
    • DHCP 모드: 라우터의 IP 주소(기본 게이트웨이)를 반환합니다.
    • 고정 IP 모드: 구성된 고정 IP 주소를 반환합니다.
  3. 클라우드 환경: 클라우드의 내부 IP 주소를 반환합니다.
  4. 기타 환경: None 를 반환합니다.

::: 팁 참고

  • 이 방법은 로봇 컨트롤러와의 연결이 필요한 확장 환경에서 주로 사용됩니다. :::

예제 코드

extension/connect_operation.py
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): 지원되지 않음

예제 코드

extension/extension_operation.py
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}")