HALCON을 통해 카메라를 컨트롤하기¶
이 부분에서는 주로 HALCON 소프트웨어를 통해 Mech-Eye 산업용 3D 카메라를 컨트롤(연결, 설정 및 사용)하는 방법에 대해 소개하겠습니다. HALCON 소프트웨어는 GigE Vision2 를 통해 Mech-Eye 산업용 3D 카메라와 연결하는 것을 지원합니다. 이 부분에는 다음과 같은 내용이 포함됩니다.
사용 조건¶
-
힌트
Nano 및 Pro XS 카메라를 사용하는 경우 교환기를 사용하지 않고 카메라와 IPC를 직접 연결하는 것을 권장합니다.
IPC에 HALCON 20.11 및 이상 버전이 이미 설치되어 있습니다.
IPC에 2.0.0 및 이상 버전의 Mech-Eye SDK 소프트웨어가 이미 설치되어 있습니다.
힌트
카메라 펌웨어의 버전과 소프트웨어의 버전이 일치할 때만 Mech-Eye SDK를 사용할 수 있습니다. 카메라 펌웨어 버전을 업그레이드하려면 카메라 펌웨어 업그레이드 내용을 참조하십시오.
카메라와 IPC의 IP 주소는 동일한 네트워크 세그먼트에 있습니다.
힌트
카메라와 IPC의 IP 주소를 고정 IP 주소로 설정하는 것을 권장합니다. 구체적인 IP 설정 방법은 Mech-Eye Viewer를 통해 IP 주소를 설정하기 내용을 참조하십시오.
HALCON 소프트웨어를 설치한 후 사용자들은 다음 두 가지 방법을 통해 카메라를 컨트롤할 수 있습니다.
HALCON 도우미를 사용하여 카메라를 컨트롤하기¶
HALCON의 이미지 캡처 도우미를 통해 카메라 연결, 이미지 캡처 및 파라미터 조절 등 기능을 빠르게 실현할 수 있습니다.
IPC에서 HALCON 소프트웨어를 시작하고
버튼을 클릭하여 이미지 캡처 도우미를 활성화할 수 있습니다.카메라 연결¶
아래 그림과 같이 소스 탭 아래에서 이미지 취득 인터페이스 를 클릭하고 인터페이스 자동-감지(t) 를 GigEVision2 로 설정하십시오.
힌트
드롭다운 메뉴에 GigEVision2 옵션이 없으면 GigEVision2 이미지 획득 인터페이스가 설치되어 있지 않음을 의미합니다. HALCON 매뉴얼 Installation Guide 내용을 참조하시고 MVTec 소프트웨어 관리자(SOM)를 통해 인터페이스를 설치합니다.
연결 탭 아래에서 장치 를 클릭하고 연결 버튼을 클릭하면 카메라를 연결할 수 있습니다.
힌트
카메라가 성공적으로 연결되면 연결 버튼이 연결 종료 버튼으로 변하게 됩니다. 변화가 없으면 연결되지 못했다는 것을 의미합니다. 카메라의 연결을 끊으려면 연결 탭에서 연결 종료 버튼을 클릭하십시오.
카메라가 다른 클라이언트에 연결되었는지를 확인하십시오. 다른 클라이언트에 연결된 카메라를 연결할 수 없으니 다른 클라이언트에서 연결을 끊은 다음 HALCON 소프트웨어에서 다시 연결하십시오.
장치 에 표시된 카메라의 이름이 비교적으로 길 때 필요한 카메라를 쉽게 찾을 수 있도록 Mech-Eye Viewer 소프트웨어를 통해 카메라를 연결한 후 카메라 이름 설정 기능을 사용하여 카메라의 이름을 자체 정의(영어로 이름을 설정하는 것을 추천)할 수 있습니다.
이미지 캡처¶
카메라를 연결한 후 연결 탭 아래에서 스냅 버튼을 클릭하면 이미지를 한번 캡처할 수 있습니다.
참고
카메라의 이미지 캡처 시간이 매우 길면 IPC에서 점보 프레임 기능을 활성화할 수 있습니다.
이미지를 여러 번 캡처하거나 연속적으로 캡처하려면 AcquisitionMode 파라미터의 값을 먼저 조절해야 합니다.
이미지를 여러 번 캡처하려면 아래 설명에 따라 작업하십시오.
파라미터 탭에서 AcquisitionMode 파라미터를 MultiFrame 로 설정하십시오.
화면 오른쪽 상단의 리프레쉬 버튼을 클릭한 후 AcquisitionFrameCount 에서 이미지 캡처 횟수를 설정하십시오.
다음으로 연결 탭 아래에서 라이브 버튼을 클릭하여 이미지를 캡처하십시오.
설정한 이미지 캡처 횟수를 수행한 후 라이브 버튼이 정지 로 되고 이때 정지 버튼을 누르면 이미지 캡처 과정이 종료됩니다.
이미지를 연속적으로 캡처하려면 아래 설명에 따라 작업하십시오.
파라미터 탭에서 AcquisitionMode 파라미터를 Continuous 로 설정하십시오.
다음으로 연결 탭 아래에서 라이브 버튼을 클릭하여 이미지를 캡처하십시오.
라이브 버튼이 정지 가 되고 이때 정지 버튼을 누르면 이미지 캡처 과정이 중료됩니다.
참고
AcquisitionMode 파라미터를 MultiFrame 혹은 Continuous 로 설정해도 스냅 버튼을 클릭하면 이미지를 한번 만 캡처할 수 있습니다.
AcquisitionMode 파라미터를 SingleFrame 로 설정하면 이미지를 한번 만 캡처할 수 있습니다.
데이터 유형을 선택하기¶
카메라 연결 후 기본으로 수집되는 데이터 유형은 2D 이미지입니다. DeviceScanType 파라미터를 조절함으로써 원하는 데이터 유형(2D 맵 또는 뎁스 맵)을 선택할 수 있습니다.
파라미터 탭을 클릭하여 DeviceScanType 파라미터를 필요한 데이터 유형으로 설정하십시오. 데이터 유형에 관한 설명은 아래와 같습니다.
값
데이터 유형
Areascan
2D 맵
Areascan3D
뎁스 맵(뎁스 정보가 포함된 2D 맵)
이미지를 캡처하고 선택한 유형의 데이터를 획득하십시오.
힌트
파라미터 탭 화면 오른쪽 상단에 있는 이미지 업데이트 버튼을 클릭하고 파라미터를 조절한 후 Canvas 창에 있는 이미지가 자동으로 업데이트됩니다.
캡처 영역을 설정하기¶
카메라 연결 후 획득한 이미지를 잘라야 할 경우 Height , Width , OffsetX , OffsetY 4개의 파라미터를 조정하여 캡처 영역을 설정할 수 있습니다.
아래 설명에 따라 이미지 캡처 영역을 설정하십시오.
이미지 캡처 영역을 설정하려는 데이터 유형을 선택하십시오.
스냅 버튼을 클릭하여 이미지를 한번만 캡처하고 획득한 이미지를 확인하십시오.
파라미터 탭으로 전환하여 Height , Width , OffsetX 및 OffsetY 네 가지 파라미터를 조정합니다. 아래 그림은 이 네 가지 파라미터 및 설정한 이미지 캡처 영역(주황색 상자)과 원본 이미지 사이의 관계를 보여줍니다.
Width : 이미지 캡처 영역의 너비입니다.
Height : 이미지 캡처 영역의 높이입니다.
OffsetX : 이미지 캡처 영역 왼쪽 상단 모서리의 X 좌표입니다. 원본 이미지 왼쪽 상단 모서리 좌표는 (0, 0)입니다.
OffsetY : 이미지 캡처 영역 왼쪽 상단 모서리의 Y 좌표입니다.
참고
위의 네 가지 파라미터 설정은 다음 요구 사항을 충족해야 합니다.
(Width + OffsetX)는 원본 이미지의 너비를 초과하지 않습니다.
(Height + OffsetY)는 원본 이미지의 높이를 초과하지 않습니다.
원본 이미지의 너비와 높이는 읽기 전용 파라미터 의 WidthMax 와 HeightMax 에서 확인할 수 있습니다( 시각성 을 전문가 혹은 이상으로 설정해야 함).
이미지 캡처를 다시 수행하여 자르기 결과를 확인합니다.
힌트
파라미터 탭 화면 오른쪽 상단에 있는 이미지 업데이트 버튼을 클릭하고 파라미터를 조절한 후 Canvas 창에 있는 이미지가 자동으로 업데이트됩니다.
코드 생성 탭 아래에서 코드 삽입 버튼을 클릭하여 대응한 코드를 생성하십시오.
다른 데이터 유형을 위해 이미지 캡처 영역을 설정해야 하려면,
현재 도우미 패널에서 카메라 연결을 끊으십시오.
새로운 도우미 창을 열어 카메라를 연결하십시오.
원하는 데이터 유형을 선택하여 위 작업을 다시 수행하십시오.
참고
위의 네 가지 이미지 캡처 영역과 관련된 파라미터는 파라미터 그룹에 저장되지 않습니다. 카메라의 전원이 꺼지면 해당 파라미터의 값이 재설정됩니다. 파라미터 값을 기록하려면 코드를 생성하고 저장하십시오.
DeviceScanType 및 Scan3DBinningEnable 파라미터를 수정하면 위에서 언급한 네 가지 파라미터의 값도 리셋됩니다.
이미지 캡처 영역과 Scan3DROI의 차이점¶
Mech-Eye 산업용 3D 카메라는 ROI 영역을 설정하기 위한 또 다른 파라미터들을 제공합니다. Scan3DROILeft, Scan3DROITop, Scan3DROIHeight 및 Scan3DROIWidth (총체적으로 "Scan3DROI" 라고 부름).
이미지 캡처 영역을 설정하는 파라미터와 Scan3DROI의 차이점은 아래 표에 나와 있습니다. 구체적인 수요에 따라 사용할 파라미터를 선택하십시오.
이미지 캡처 영역 |
Scan3DROI |
파라미터 그룹에 저장되지 못하며 카메라 전원이 꺼지면 파라미터 값이 초기화될 것입니다. |
파라미터 그룹에 저장될 수 있습니다. |
2D 맵과 뎁스 맵을 설정할 수 있습니다. |
2D 맵을 설정할 수 없습니다. |
이미지를 자릅니다. |
이미지를 자르지 않습니다. |
HALCON에서만 설정할 수 있습니다. |
파라미터 조절¶
캡처한 이미지의 효과가 좋지 않으면 해당한 파라미터를 조절할 수 있습니다.
힌트
Mech-Eye 산업용 3D 카메라는 파라미터 그룹 기능을 지원하며 카메라의 파라미터 구성은 파라미터 그룹을 전환하여 빠르게 전환될 수 있습니다. 카메라 파라미터는 지정된 파라미터 그룹에서 설정해야 합니다.
파라미터 그룹을 추가하거나 삭제하려면 Mech-Eye Viewer에서 설정하십시오. Mech-Eye Viewer에서 파라미터를 설정한 후 HALCON 파라미터 탭 아래에서 오른쪽 상단의 리프레쉬 버튼을 클릭하여 카메라의 최신 구성 정보를 읽습니다.
다음 작업을 수행하여 파라미터를 조절하십시오.
카메라가 연결된 후 파라미터 탭을 클릭하고 파라미터 UserSetSelector 를 수정하려는 파라미터 그룹으로 설정합니다.
UserSetLoad 파라미터를 찾아 오른쪽에 있는 적용 버튼을 클릭하여 구성 정보를 읽어냅니다.
참고
적용 버튼을 클릭한 후에도 각 파라미터의 값이 업데이트되지 않으면 다시 클릭하십시오.
수정하려는 파라미터를 찾아 파라미터 값을 수정하십시오.
UserSetSave 파라미터를 찾아 오른쪽에 있는 적용 버튼을 클릭하여 구성을 저장하십시오.
코드 생성 탭 아래에서 코드 삽입 버튼을 클릭하여 대응한 코드를 생성하십시오.
참조 정보:
GenICam 표준에 부합한 카메라 파라미터에 대한 설명은 GenICam 파라미터 설명 을 참조하십시오.
GenICam에서 지원하는 카메라 파라미터는 Mech-Eye Viewer에서 제공하는 파라미터와 기본적으로 일대일 대응합니다. 상세한 정보는 GenICam 지원하는 카메라 파라미터 내용을 참조하십시오.
자동 노출 ROI , 뎁스 범위 설정 , ROI 와 같은 카메라 파라미터를 설정할 때 이상적인 값을 얻기 위해 시각화 도구를 사용하여 지속적으로 조절해야 하는 경우가 많습니다. HALCON은 파라미터를 설정하는 데 사용할 수 있는 시각화 도구를 제공하지 않으므로 Mech-Eye Viewer의 시각화 설정 도구를 사용하여 이러한 파라미터들을 설정할 수 있습니다. 상세한 정보는 Mech-Eye Viewer로 GenICam 클라이언트를 위해 카메라 파라미터를 설정하기 내용을 참조하십시오.
힌트
Mech-Eye Viewer를 통해 카메라를 연결하기 전에 카메라와 HALCON 사이의 연결을 먼저 끊어야 합니다. 여전히 연결되지 않을 경우 HALCON 소프트웨어를 닫고 다시 연결해 보십시오.
HALCON 예제 프로그램을 사용하여 카메라를 컨트롤하기¶
사용 편의성을 위해 당사는 GitHub에서 카메라 연결, 이미지 캡처, 파라미터 수정 및 데이터 저장 등 기능을 실현할 수 있는 HALCON 예제 프로그램을 제공합니다. 사용자는 직접 사용하거나 프로젝트 요구 사항에 따라 이 프로그램을 수정할 수 있습니다.
참고
HALCON 예제 프로그램은 C++ 언어를 통해 작성되며 HALCON 소프트웨어의 HDevelop 통합 개발 환경에서 직접 실행될 수 있습니다.
예제 프로그램 실행¶
HALCON 예제 프로그램을 획득하십시오. 를 차례로 클릭하면 다운로드할 수 있습니다.
아래와 같은 방법들을 통해 HALCON에서 예제 프로그램을 열 수 있습니다.
HALCON 소프트웨어를 부팅하고 예제 프로그램을 그래픽 윈도우 로 드래그합니다.
예제 프로그램을 선택하고 HDevelop 를 통해 엽니다.
아래와 같은 방법들을 통해 연결할 수 있는 카메라 리스트를 획득할 수 있습니다.
프로그램 에디터 화면에서 info_framegrabber 연산자가 있는 줄을 선택하여 툴바에 있는 버튼을 클릭하십시오.
프로그램 에디터 화면에서 info_framegrabber 연산자가 있는 줄을 선택하여 키보드에 있는 F6 버튼을 눌러 실행하십시오.
힌트
변수 뷰어 의 컨트롤 변수 구역에 있는 DeviceInfos 에서 연결 가능한 카메라 리스트를 확인할 수 있습니다.
아래와 같은 방법들을 통해 HALCON 예제 프로그램에서 카메라를 바꿀 수 있습니다.
카메라의 unique_name 에 근거하여 카메라를 바꿔 보십시오.
카메라 번호에 근거하여 카메라를 바꿔 보십시오.
아래와 같은 방법들을 통해 HALCON에서 예제 프로그램을 실행할 수 있습니다.
예제 프로그램이 성공적으로 실행되면 실행 과정이 완료된 후 폴더에서 이번 실행에서 캡처된 2D 맵과 포인트 클라우드(기본적인 파일 명칭: image2d.bmp , PointCloud.ply )를 확인할 수 있습니다.
힌트
예제 프로그램 실행 과정이 종료된 후 툴바에 있는 프로시저 실행 초기화 버튼을 클릭하십시오. 그렇지 않으면 Mech-Eye Viewer에서 카메라를 연결할 수 없는 문제를 초래할 수 있습니다.
그래픽 윈도우에서 포인트 클라우드가 표시되면 Continue 버튼을 클릭하여 프로시저를 계속 실행하십시오. 그렇지 않으면 프로시저가 visualize_object_model_3d 연산자에서 멈추게 됩니다.
카메라의 이미지 캡처 시간이 매우 길면 IPC에서 점보 프레임 기능을 활성화할 수 있습니다.
네트워크 상태가 좋지 않아 데이터가 손실된 경우 다음 명령을 사용하여 손실된 데이터 패킷 최대 허용 개수를 늘릴 수 있습니다. ParameterValues 는 변경한 후의 최대 허용 개수로 대체됩니다.
set_framegrabber_param (AcqHandle, '[Stream]GevStreamMaxPacketGaps', ParameterValues)
예제 프로그램에 관한 설명¶
카메라 연결
info_framegrabber ('GigEVision2', 'device', Info, DeviceInfos) tuple_regexp_select (DeviceInfos, 'MechEye', MechEyeCameraInfos) open_framegrabber ('GigEVision2', 1, 1, 0, 0, 0, 0, 'default', -1, 'default', -1, 'false', 'default', MechEyeCameraInfos[0], 0, -1, AcqHandle)
캡처
grab_image (Image2d, AcqHandle) grab_data (Image3d, Region, Contours, AcqHandle, ObjectModel3D)
파라미터 획득
get_framegrabber_param (AcqHandle, 'available_param_names', ParameterValues)
파라미터 설정
이 예제 프로그램에는 2D 파라미터, 3D 파라미터, ROI, 뎁스 범위 및 포인트 클라우드 등 파라미터의 설정이 포함됩니다.
2D 파라미터
* Switch to the 2D scanning mode. set_framegrabber_param (AcqHandle, 'DeviceScanType', 'Areascan') set_framegrabber_param (AcqHandle, 'AcquisitionMode', 'SingleFrame') get_framegrabber_param (AcqHandle, 'Width', Width) get_framegrabber_param (AcqHandle, 'Height', Height) get_framegrabber_param (AcqHandle, 'PixelFormat', PixeLFormat) * Set the 2D scanning parameters. set_framegrabber_param (AcqHandle, 'Scan2DExposureMode', 'Timed') set_framegrabber_param (AcqHandle, 'Scan2DExposureTime', 100)3D 파라미터
* Switch to the 3D scanning mode: set_framegrabber_param (AcqHandle, 'DeviceScanType', 'Areascan3D') * Open the 3D object model generator. set_framegrabber_param (AcqHandle, 'create_objectmodel3d', 'enable') set_framegrabber_param (AcqHandle, 'add_objectmodel3d_overlay_attrib', 'enable') get_framegrabber_param (AcqHandle, 'Width', Width) get_framegrabber_param (AcqHandle, 'Height', Height) get_framegrabber_param (AcqHandle, 'PixelFormat', PixeLFormat) * Set the 3D scanning exposure time parameter. set_framegrabber_param (AcqHandle, 'Scan3DExposureCount', 1) set_framegrabber_param (AcqHandle, 'Scan3DExposureTime', 8)뎁스 범위
* Set the 3D scanning depth range parameter(unit: mm). set_framegrabber_param (AcqHandle, 'DepthLowerLimit', 1) set_framegrabber_param (AcqHandle, 'DepthUpperLimit', 3000)포인트 클라우드
* Set the 3D scanning point cloud filter parameter. set_framegrabber_param (AcqHandle, 'CloudOutlierFilterMode', 'Normal') set_framegrabber_param (AcqHandle, 'CloudSmoothMode', 'Normal')
저장
2D 맵
* Acquire the 2D image from the camera. grab_image (Image2d, AcqHandle) * Save the 2D image result in "Image2d.bmp" write_image( Image2d , 'bmp' , 0 , 'Image2d' )포인트 클라우드
* Acquire the 3D data from the camera. grab_data(Image3d, Region, Contours, AcqHandle, ObjectModel3D) get_object_model_3d_params(ObjectModel3D, 'num_points', NumOfPoints) if(NumOfPoints != 0) * Save the point cloud result in "PointCloud.ply" write_object_model_3d (ObjectModel3D, 'ply', 'PointCloud.ply', [], []) endif
연결 끊기
clear_object_model_3d (ObjectModel3D) close_framegrabber (AcqHandle)
참고
*로 시작되는 내용은 모두 설명입니다.
파라미터 조절¶
캡처한 이미지의 효과가 좋지 않으면 해당한 파라미터를 조절할 수 있습니다.
힌트
Mech-Eye 산업용 3D 카메라는 파라미터 그룹 기능을 지원하며 카메라의 파라미터 구성은 파라미터 그룹을 전환하여 빠르게 전환될 수 있습니다. 카메라 파라미터는 지정된 파라미터 그룹에서 설정해야 합니다.
파라미터 그룹을 추가하거나 삭제하려면 Mech-Eye Viewer에서 설정하십시오.
다음 작업을 수행하여 파라미터를 조절하십시오.
아래와 같은 연산자를 통해 카메라의 파라미터 리스트를 획득합니다.
get_framegrabber_param (AcqHandle, 'UserSetSelector_values', ParameterValues)
컨트롤 변수 구역의 ParameterValues 에서 모든 파라미터 그룹의 이름을 확인합니다.
아래 연산자를 통해 수정하려는 파라미터 그룹을 선택합니다. UserSetSelector 및 UserSetLoad 는 각각 파라미터 그룹을 선택하고 로드하는 데 사용되는 카메라 파라미터입니다. 실제 파라미터 그룹 이름으로 ParameterGroupName 을 대체합니다.
set_framegrabber_param (AcqHandle, 'UserSetSelector','ParameterGroupName') set_framegrabber_param (AcqHandle, 'UserSetLoad','ParameterGroupName')
아래 연산자를 통해 지정한 파라미터의 값을 획득합니다. 실제 카메라 파라미터 그룹의 이름으로 ParameterName 을 대체합니다. ParameterValues 는 획득한 파라미터의 값을 저장하는 변수이고 수요에 따라 조정될 수 있습니다. 변수는 따옴표로 묶을 필요가 없습니다.
get_framegrabber_param (AcqHandle, 'ParameterName', ParameterValues)
컨트롤 변수 구역의 ParameterValues 에서 해당 파라미터의 수치를 확인합니다.
아래 연산자를 통해 파라미터 설정을 수정합니다. 실제 카메라 파라미터의 이름으로 ParameterName 을 대체하고 새로운 파라미터 값으로 NewParameterValue 를 대체합니다.
set_framegrabber_param (AcqHandle, 'ParameterName', 'NewParameterValue')
아래 연산자를 통해 파라미터 설정을 파라미터 그룹으로 저장합니다. UserSetSave 는 파라미터를 파라미터 그룹으로 저장하는 데 사용되는 카메라 파라미터입니다. 실제 파라미터 그룹 이름으로 ParameterGroupName 을 대체합니다.
set_framegrabber_param (AcqHandle, 'UserSetSave', 'ParameterGroupName')
참조 정보:
GenICam 표준에 부합한 카메라 파라미터에 대한 설명은 GenICam 파라미터 설명 을 참조하십시오.
GenICam에서 지원하는 카메라 파라미터는 Mech-Eye Viewer에서 제공하는 파라미터와 기본적으로 일대일 대응합니다. 상세한 정보는 GenICam 지원하는 카메라 파라미터 내용을 참조하십시오.
자동 노출 ROI , 뎁스 범위 설정 , ROI 와 같은 카메라 파라미터를 설정할 때 이상적인 값을 얻기 위해 시각화 도구를 사용하여 지속적으로 조절해야 하는 경우가 많습니다. HALCON은 파라미터를 설정하는 데 사용할 수 있는 시각화 도구를 제공하지 않으므로 Mech-Eye Viewer의 시각화 설정 도구를 사용하여 이러한 파라미터들을 설정할 수 있습니다. 상세한 정보는 Mech-Eye Viewer로 GenICam 클라이언트를 위해 카메라 파라미터를 설정하기 내용을 참조하십시오.
힌트
Mech-Eye Viewer를 통해 카메라를 연결하기 전에 카메라와 HALCON 사이의 연결을 먼저 끊어야 합니다. 여전히 연결되지 않을 경우 HALCON 소프트웨어를 닫고 다시 연결해 보십시오.