Transform

Getting your point cloud ready for your application 웨비나에서는 부분적으로 Transform을 다룹니다.

Introduction

이번 자료는 포인트 클라우드 컨텍스트의 변환, Zivid 포인트 클라우드를 변환하는 방법 및 이것이 왜 중요한 기능인지 설명합니다. 마지막으로 코드 예제가 포함된 튜토리얼을 제공합니다.

Zivid 포인트 클라우드는 Zivid camera coordinate system 를 기준으로 제공됩니다. 다양한 이유로 다양한 응용 프로그램은 전체 포인트 클라우드 또는 해당 세그먼트(예: ROI 또는 선택 포인트)를 카메라 좌표계에서 다른 좌표계로 변환해야 합니다.

Problem

포인트 클라우드는 카메라 좌표계를 기준으로 제공되지만 응용 프로그램은 다른 좌표계를 기준으로 하는 포인트 클라우드가 필요합니다.

Solution

Zivid 포인트 클라우드를 카메라 좌표계에서 다른 좌표계로 변환합니다.

Transform API

Rigid transformation은 두 좌표계 사이의 포즈를 설명하는 4×4 homogeneous transformation matrix로 정의됩니다. transformation matrix를 구하면, Zivid SDK를 사용하여 카메라 좌표계에서 원하는 좌표계로 포인트 클라우드를 변환할 수 있습니다.

다음 API는 포인트 클라우드를 변환하는 데 사용됩니다.

Zivid::PointCloud::transform(Zivid::Matrix4x4)
Zivid.NET.PointCloud.Transform(float[,])
Zivid.PointCloud.transform(numpy.array([4,4], dtype=numpy.float32))

Zivid SDK는 Non-rigid Transformation를 포함하여 모든 affine transformations 을 허용합니다. Non-rigid Transformation의 예는 다음과 같습니다. scaling the point cloud by converting it from mm to m .

Transform API는 4x4 변환 매트릭스를 사용하여 포인트 클라우드를 변환합니다.

소스로 이동

소스

const auto millimetersToMetersTransform =
    Zivid::Matrix4x4{ { 0.001F, 0, 0, 0 }, { 0, 0.001F, 0, 0 }, { 0, 0, 0.001F, 0 }, { 0, 0, 0, 1 } };
소스로 이동

소스

var millimetersToMetersTransform =
    new float[,] { { 0.001F, 0, 0, 0 }, { 0, 0.001F, 0, 0 }, { 0, 0, 0.001F, 0 }, { 0, 0, 0, 1 } };
소스로 이동

source

transform_millimeters_to_meters = np.array(
    [[0.001, 0, 0, 0], [0, 0.001, 0, 0], [0, 0, 0.001, 0], [0, 0, 0, 1]], dtype=np.float32
)

Transformation은 포인트 클라우드에서 수행됩니다.

소스로 이동

source

pointCloud.transform(baseToCameraTransform);
소스로 이동

소스

pointCloud.Transform(transformBaseToCamera);
소스로 이동

source

point_cloud.transform(base_to_camera_transform)

참고

Zivid SDK의 Transform API는 포인트 클라우드 데이터가 GPU 메모리에 있는 동안 GPU에서 병렬로 수행되기 때문에 속도가 빠릅니다. 타사 라이브러리를 사용한 변환 구현은 시간이 더 많이 소요될 수 있습니다. 일반적으로 CPU 계산은 훨씬 느리고 GPU 계산에는 다른 복사본이 필요합니다. 보다 많은 정보를 확인 하고 싶다면 Point Cloud Capture Process 을 확인해주세요.

포즈(Poses)와 변환(Transformations)에 대해 자세히 알아보려면 다음을 확인하세요. Position, Orientation and Coordinate Transformations.

  • 포인트 클라우드 데이터가 GPU 메모리에 있는 동안 GPU가 이러한 모든 계산을 수행하기 때문에 보다 뛰어난 퍼포먼스를 위해 Downsample 및 Normals API와 함께 transform API를 사용을 추천드립니다.

  • 가장 빠른 구현을 위해 먼저 포인트 클라우드를 다운샘플링한 다음 변환합니다.

  • 포인트 클라우드와 동일한 좌표계의 노멀을 갖도록 포인트 클라우드를 먼저 변환한 후 노멀을 계산합니다.

Use our API to save or to load Matrices

API를 사용하면 YAML 파일에서 또는 YAML 파일로 매트릭스를 저장하거나 로드하는 것이 간단하며 코드 한 줄이면 됩니다.

Save

Zivid::Matrix4x4 zividMatrix.save("path");
new Zivid.NET.Matrix4x4(zividMatrix).Save("path");

Load

Zivid::Matrix4x4 zividMatrix("path")
var zividMatrix = new Zivid.NET.Matrix4x4("path");

Transform in applications

이 섹션에서는 포인트 클라우드 변환을 활용하는 Zivid 카메라 및 로봇 애플리케이션을 다룹니다. 이러한 응용 프로그램의 일반적인 좌표계와 포인트 클라우드를 이러한 좌표계로 변환하는 것이 유용한 이유를 설명합니다.

Picking

로봇이 포인트 클라우드에서 감지된 물체를 선택하려면 좌표가 카메라 좌표계에서 로봇이 이해할 수 있는 좌표계로 변환되어야 합니다.

Robot coordinate system

우리는 종종 객체 좌표 또는 전체 포인트 클라우드를 로봇 기본 좌표계로 변환하고 싶습니다. 이것은 기사에 자세히 설명되어 있습니다 How To Use The Result Of Hand-Eye Calibration.

Different coordinate systems

Plane coordinate system

카메라는 종종 피킹 표면과 평행하지 않습니다. 포인트 클라우드 z축이 평면 z축과 일치하도록 포인트 클라우드를 변환하면 포인트 클라우드 데이터를 더 잘 이해하고 해석하는 데 도움이 됩니다. 따라서 포인트 클라우드를 빈 바닥이나 컨베이어 벨트와 같은 피킹 표면의 좌표계로 변환하는 것이 일반적입니다.

빈 및 컨베이어 벨트 좌표계

Bin coordinate system

포인트 클라우드 데이터를 더 잘 이해하고 피킹 성능을 평가하는 데 도움이 되는 또 다른 단계가 있습니다. 즉, 포인트 클라우드의 x 및 y 축을 bin의 x 및 y 축과 정렬하는 것입니다.

Bin coordinate system

Region of Interest

카메라 시야는 종종 우리의 관심 영역(예: 빈)보다 큽니다. 따라서 빈 축을 포인트 클라우드 축과 정렬하는 또 다른 이유는 빈 주위에 ROI 상자를 설정할 수 있기 때문입니다. 그런 다음 ROI를 기반으로 포인트 클라우드를 잘라서 빈 콘텐츠의 포인트만 얻을 수 있습니다.

Smaller point clouds are faster to capture, and can make the detection faster and total picking cycle times shorter.

Bin coordinate system

구현 예시는 ROI Box via Checkerboard 을 확인하십시오. 이 튜토리얼은 체커보드에 상대적으로 주어진 ROI 상자를 기반으로 Zivid calibration board 사용하여 포인트 클라우드를 필터링하는 방법을 보여줍니다.

또한 체커보드 대신 ArUco 마커를 사용하는 ROI Box via ArUco Marker 튜토리얼도 제공하고 있습니다.

Stitching

포인트 클라우드 스티칭에는 종종 포인트 클라우드를 다른 좌표계로 변환하는 작업이 포함됩니다.

Multiple stationary cameras

Zivid Multi-Camera Calibration 여러 카메라의 포인트 클라우드를 카메라 중 하나인 마스터 카메라의 좌표계로 변환할 수 있습니다. 다중 카메라 보정에서 스티칭된 포인트 클라우드를 객체 좌표계와 같은 다른 좌표계로 변환하려는 경우가 많습니다.

Multi camera setup

Single robot-mounted camera

로봇 장착 카메라 구성을 통해 여러 뷰에서 동일한 카메라로 찍은 여러 포인트 클라우드를 스티칭할 수 있습니다. 마스터 카메라 좌표계에서 포인트 클라우드를 스티칭하면 객체 좌표계로 변환하는 것이 편리합니다.

Robot mounted camera and fiducial marker

Single camera and turntable

카메라에 대한 턴테이블의 포즈를 알고 있다면 포인트 클라우드를 연결하여 턴테이블 좌표계로 변환할 수 있습니다.

Turntable

참고

Multi-Camera Calibration 는 SDK의 일부이며 Zivid calibration board 를 사용합니다.

Pose estimation

로봇 베이스 프레임을 기준으로 카메라의 포즈를 가져오는 것은 Hand-Eye Calibration 에 의해 수행됩니다. 임의의 사용자 정의 좌표계와 관련된 포즈가 필요한 경우 기준 마커 및 칼리브레이션 보드와 같은 유용한 액세서리를 장면에 배치할 수 있습니다. 우리는 그들의 기하학을 알고 있기 때문에 그들의 자세를 추정하는 것은 비교적 간단합니다.

구현 예시는 Transform via Checkerboard 을 확인하십시오. 이 튜토리얼은 체커보드의 자세를 추정하고 4x4 Homogeneous transformation matrix를 사용하여 포인트 클라우드를 체크보드 좌표계로 변환하는 방법을 보여줍니다. 또한 Transform via ArUco marker 튜토리얼 있으며, 이 튜토리얼에서 체커보드 대신 ArUco 마커를 사용하여 위치를 특정합니다.

Version History

SDK

Changes

2.0.0

Transform API가 추가되었습니다.