Python API
EN
KO
Python에서 이 저장소를 사용하는 대표적인 방법은 두 가지입니다.
간단 래퍼: UR_RTDE
작은 래퍼 클래스이며, 읽기 쉽고 실제 애플리케이션 코드에 복사해 넣기 쉬운 형태를 목표로 합니다.
동기
UR_RTDE 예제from __future__ import annotations
from ur_rtde_api import UR_RTDE
HOST = "192.168.163.128"
FREQUENCY_HZ = 125
ROBOT_FIELDS = [
"timestamp",
"actual_q",
"actual_TCP_pose",
"input_int_register_24",
"output_int_register_24",
]
def main() -> int:
robot = UR_RTDE(
HOST=HOST,
FREQUENCY_HZ=FREQUENCY_HZ,
FIELD=ROBOT_FIELDS,
)
robot.start()
try:
print("actual_q [rad] =", robot["actual_q"])
print("actual_q [deg] =", robot.q_deg())
print("actual_TCP_pose =", robot["actual_TCP_pose"])
print("TCP xyz mm + RPY deg =", robot.tcp_rpy_deg())
print("input_int_register_24 (before) =", robot["input_int_register_24"])
robot["input_int_register_24"] = 33
print("input_int_register_24 (after) =", robot["input_int_register_24"])
if "output_int_register_24" in ROBOT_FIELDS:
print("output_int_register_24 =", robot["output_int_register_24"])
return 0
finally:
robot.stop()
robot.close()
if __name__ == "__main__":
raise SystemExit(main())
코어 클래스: URRobot
URRobot 은 웹 인터페이스 내부에서도 사용하는 조금 더 명시적인 저수준 인터페이스입니다.
생성 예시는 아래와 같습니다.
from backend.ur_robot import URRobot
robot = URRobot(
host="192.168.163.128",
frequency_hz=125.0,
fields=["timestamp", "actual_q", "actual_TCP_pose"],
)
비동기 예제
비동기
URRobot 예제from __future__ import annotations
import asyncio
from backend.ur_robot import URRobot
HOST = "192.168.163.128"
FREQUENCY_HZ = 125.0
ROBOT_FIELDS = [
"timestamp",
"actual_q",
"actual_TCP_pose",
]
async def main() -> None:
robot = URRobot(
host=HOST,
frequency_hz=FREQUENCY_HZ,
fields=ROBOT_FIELDS,
)
await robot.start_async()
try:
frame = await robot.wait_next_frame_async(timeout=1.0)
print("frame index =", frame.frame_index)
print("actual_q [rad] =", frame["actual_q"])
print("actual_q [deg] =", robot.q_deg())
print("TCP xyz mm + RPY deg =", robot.tcp_rpy_deg())
finally:
await robot.stop_async()
await robot.close_async()
if __name__ == "__main__":
asyncio.run(main())
값 읽기
두 API 모두 최신 캐시값을 필드명으로 바로 읽을 수 있습니다.
print(robot["actual_q"])
print(robot["actual_TCP_pose"])
GP input 쓰기
쓰기 대상은 input_*_register_* 필드만 사용하세요.
robot["input_int_register_24"] = 33
robot["input_double_register_24"] = 12.5
robot["input_bit_register_64"] = True
변환 helper
표시와 디버깅에 유용한 helper 예시입니다.
print(robot.q_deg())
print(robot.tcp_mm())
print(robot.tcp_mm_deg())
print(robot.tcp_rpy())
print(robot.tcp_rpy_deg())
권장 연동 패턴
조금 더 큰 애플리케이션에서는 다음 패턴을 권장합니다.
로봇 연결당 robot 객체 하나 유지
필요한 최소 필드 조합만 선택
웹 인터페이스는 점검용으로 사용
Python API는 자동화와 로깅에 사용