온라인 모드
Caution
Online
모듈은 RESEARCH 라이센스에서만 사용이 가능합니다.
이 챕터에서는 Online
모듈을 사용하여 현재 IndyEye 그래프의 데이터에 접근하는 방법을 다룹니다.
RESEARCH 라이센스의 IndyEye를 사용하는 경우, Online
모듈을 사용할 수 있습니다.
이 Online
모듈은 해당 모듈 직전까지 그래프를 실행시킨 뒤 실행 결과 값을 외부에서 받아올 수 있게하는 모듈이며,
neuromeka
패키지의 IndyEye
클래스를 사용하여 Online
모듈의 데이터 (IndyEye의 그래프 내 데이터)를 바로 가져오는것이 가능합니다.
Online 모듈 예시
그래프에 추가되어있는 Online 모듈의 값 가져오기
우선 IndyEye 앱을 사용하여 그래프에 Online 모듈을 추가 합니다.
이후 외부 python 파일에서 IndyEye
클래스의 eye.get(GraphFlow)
를 사용하여 그래프 내 Online 모듈의 Index 값을 가져온 뒤,
eye.get_pkl()
과 해당 Index 값을 사용하여 그래프 실행결과 dictionary 를 받아올 수 있습니다.
from neuromeka import IndyDCP3
from neuromeka import IndyEye
from neuromeka.eye import *
robot_ip = "192.168.0.144"
eye_ip = "192.168.0.114"
indy = IndyDCP3(robot_ip)
eye = IndyEye(eye_ip)
#Connect robot
if eye.get(RobotStatus)['data']['stateCode'] != 0:
resp = eye.post(RobotDisconnect, name="IndyDCP3", ip=robot_ip)
time.sleep(0.5)
resp = eye.post(RobotConnect, name="IndyDCP3", ip=robot_ip)
con_state = eye.get(RobotStatus)['data']
if con_state['stateCode'] == 1: #Robot connected
online_module_key = ""
#Find Online module's index value
graph_flow = eye.get(GraphFlow)['data']['graph']
for key in graph_flow.keys():
if graph_flow[key]["name"] == "Online":
online_module_key = key
break
#Get result dictionary from the Online module
if len(online_module_key) > 0:
graph_result = eye.get_pkl(f"/detect/module/online/{online_module_key}/pickle", return_values="all")
print(graph_result)
else:
print("Online module not found")
else:
print("Robot not connected")
# Result
dict_keys(['effector_coord_base', 'plane_coord_cam', 'cam_coord_base', 'workspace_dims', 'camera_matrix', 'resolution', 'minz_dict', 'id_end', 'retrieve', 'image'])
{'effector_coord_base': array([[ 1.0000000e+00, 1.2246469e-16, 1.2246469e-16, 6.1511879e-10],
[-1.2246469e-16, 1.0000000e+00, -1.2246469e-16, -1.8650000e-01],
[-1.2246469e-16, 1.2246469e-16, 1.0000000e+00, 1.3279999e+00],
[ 0.0000000e+00, 0.0000000e+00, 0.0000000e+00, 1.0000000e+00]],
dtype=float32), 'plane_coord_cam': array([[-0.0253914 , 0.9982995 , 0.05247305, 0.07476724],
[ 0.40781167, 0.05826779, -0.9112049 , 0.07082713],
[-0.9127129 , -0.00173767, -0.40859762, 1.1162121 ],
[ 0. , 0. , 0. , 1. ]],
dtype=float32), 'cam_coord_base': array([[-0.02539146, -0.4078117 , 0.912713 , 0.9917956 ],
[ 0.9982995 , -0.0582677 , 0.00173765, -0.07682745],
[ 0.05247313, 0.91120505, 0.40859777, 0.5166966 ],
[ 0. , 0. , 0. , 1. ]],
dtype=float32), 'workspace_dims': array([0.24, 0.16, 0.1 ]),
'camera_matrix': array([[910.21795654, 0. , 640.10125732],
[ 0. , 909.50714111, 386.84814453],
[ 0. , 0. , 1. ]]), 'resolution': (1280, 720), 'minz_dict': {}, 'id_end': 108503726946600032536757885788871217695, 'retrieve': False,
'image': array([[[0, 0, 0],
[0, 0, 0],
[0, 0, 0],
...,
[0, 0, 0],
[0, 0, 0],
[0, 0, 0]],
...
...,
[0, 0, 0],
[0, 0, 0],
[0, 0, 0]]], dtype=uint8)}
Online 모듈 결과값 키
Online 모듈을 통해 가져온 dictionary가 포함할 수 있는 주요 값들은 아래와 같습니다. Online 모듈 앞의 다른 모듈들의 종류에 따라 다른 값들을 포함하게 됩니다.
effector_coord_base
: 로봇 엔드 이펙터 위치 (Task pos)plane_coord_cam
:cam_coord_base
:workspace_dims
: Workspace의 dimensioncamera_matrix
: 카메라 Intrinsic properties (array(3x3 float)
)array([[910.21795654, 0, 640.10125732], [0, 909.50714111, 386.84814453], [0, 0, 1]])
resolution
: 해상도 (tuple(int, int)
, (width, height))(1280, 720)
minz_dict
:id_end
: Online 모듈 바로 직전의 모듈의 ID값 (int
)retrieve
:image
: 현재 이미지 (uint8
, BGR image)mask
: 현재 인식된 대상의 마스크 이미지 (uint8
, BGR image)name
: 현재 인식된 대상의 이름 (string
)grip_pose_base
: 인식된 물체의 이름 (Task pos)text
: OCR 또는 ScanCode 모듈의 결과 텍스트값 (string
)code_type
: 현재 인식된 코드 종류 (string
, e.g. 'CODE128')task_pose_base
: 로봇 엔드 이펙터 위치 (Task pos)tool_idx
: 현재 선택된 툴 인덱스, Gripper 모듈 내에서 설정된 TOOL 기준 (int
)vector_approach
: 인식된 물체의 이름 (string
)