for Robot Artificial Inteligence

Visual Odometery & Pose Estimation(using Direct Method(intensity))

|

  1. feature extract feature point 방법의 단점은 키포인트들과 Descriptor(매칭점을 찾는데 사용됨) 계산이 많이 소모 된다

  2. feature extract feature point를 사용시 특정점 이외에 나머지 이미지 정보를 무시한다.

  3. blur 크거나 특정점이 없는 공간에서의 키포인트들과 디스크립터를 구하기 쉽지 않아 매칭포인트를 구하고 Visual Odometery를 구하기 쉽지 않다.

위와 같은 문제를 Optical Flow을 이용하여서 image pixel intensity를 통해 키포인트를 추출하고 FLANN같은 방법으로 이미지 매칭 포인트를 찾는 다음 카메라 포즈를 찾기 위해 매칭 포인트를 이용한 epipolar Contraint를 통해 8point algorithm을 통한 Fundamental Matrix를 구한다.

이때, 질좋은 8 매칭포인트를 구하기 위해서 RANSAC을 사용하여서 Fundamental Matrix를 진행한다.

이후 Camera 내부 파라미터를 통해 Essential Matrix를 만들고, 행렬 분해를 통해 Relative Pose를 구한다.

구해진 Relative Pose와 매칭포인트를 통해 3d Triangulation으로 맵포인트들을 만든다.

이후 다음 이미지에 이미지 추출과 매칭을 통해 매칭된 2d와 3d mappoints들은 solve pnp를 통하여 다음 카메라 포즈를 추정을 하고, 다음 2d끼리 매칭된 포인트에 대해서 3d triangulation을 한다.

만약 스테레오나 뎁스 카메라일 경우 위에 절차를 생략을 하고 바로 매칭 포인트에 대해서 3d mappoints을 만들고 solve pnp를 통해 카메라 포즈와 3d mappoints들을 만든다.

즉, Discriptor를 이용한 매칭포인트는, Optical FLow(Lucas-Kandade Optical Flow방법)로 대체를 하고 Epipolar Contraint(모노일경우)과 PnP, ICP방법을 통해 카메라 포즈를 추정한다.

기존에 feature extract 알고리즘을 통해 키포인트와 디스크립터를 찾고, 이전이미지와 현재 이미지의 매칭점을 찾고, 좋은 매칭점만으로 Fundamental Matrix를 구하고 싶으니, Ransac을 통해서 매칭이 좋은 8points를 추출하여 Epipolar Contraint을 통해 Fundamental Matrix, 그리고 카메라 파라미터를 고려하여 Essential Matrix 값을 구하고, 동시에 triangulation 을 통하여 3D Mappoints 찾은 다음, 찾은 3D Mappoints를 다시 현재 이미지 플래인에 Reprojection을 하여서 현재 관찰된 3D Mappoints에 관한 매칭점과 Re projection된 2d 포인트를 Least Square를 통해 Visual Odometery 값을 최적화하여 구하였다.(이도 마찬가지로 stereo 카메라나 뎁스 카메라일경우 바로 3d mappoints 생성과 solvepnp를 통해 카메라 포즈와 맵포인트들을 만든다.)

그러나 Direct Method는 이런 절차와 다르게 Photometric Error를 이용하여 최적화를 한다.

Direct Method의 약점은

  • 빛에 약하다. 일정하지 못한 환경에서 취약하다.

  • 비슷한 픽셀을 너무 많아 계산할때 복잡하다.

  • 로테이션에 매우 취약하다.

Comment  Read more

Visual Odometery & Pose Estimation

|

2D - 2D Pose Estimation(Monocular, Stero를 이용한 방법)

  1. 특징점 추출을 이용하여서 특징점 추출
    • ORB, SIFT, etc..
  2. 이전 프레임과 현재 프레임(두 프레임)에 추출된 특징점을 매칭
    • KD-Treess, Hamming stance(Discriptor가 있을 경우 (ORB)), FLANN 을 사용하여서 매칭
    • 너무 지저분하게 매칭이 생기면 RANSAC을 통해 inlier 매칭점만 찾음
  3. 찾은 매칭점(points)은 Epipolar Contraint를 통해 Fundamental Matrix와 Essential Matrix구함
    • 두 이미지에 매칭되는 점은 epipolar line(pixel 좌표와 베이스라인으로 두 다른 이미지가 마주보는 점의 라인), epipole(베이스라인으로 두이지미가 마주보는 이미지 프레인간의 점)을 통해서 호모지니어스 좌표계에서의 매칭 포인트를 찾고(epipolar line을 통해 서칭해서 찾는다)
    • 이를 통해 epipolar plane이 형성이 된다.
    • 이를 통해 Fundamental Matrix, Essential Matrix를 구할 수 있다.
    • Essential Matrix는 3x3 매트릭스이나, 요소는 랜덤 변수로 되어 있다.
    • 랜덤 변수를 구하기 위해서는 최소 5개의 점(매칭점)이 필요하지만, 잘알려진 방법 Eight-point을 사용한다.(Eight Point Algorithm, Direct Linear Transform)
    • 찾아야하는 9개의 요소를 벡터로 표현하고(e), 8개의 점 + 1(호모지니어스)식으로 8개의 row 벡터를 새워 (9x8) 행렬을 만든다음(A)
    • epipolar contraint 특징 A*e = 0 을 이용하여서 문제를 푸는데, 이때 SVD를 사용하여서 Essential Matrix를 구한다. - 구해진 Essential Matrix는 Homogenous Matrix를 표현을 하여 이를 통해 Rotation Matrix와 Translation을 찾을 수 있다.
  4. 위와 같은 방법으로 Pose Estimation을 할 수 있다.
    • 필요한 조건으로는 카메라 파라미터(focal lenght, principal point), 두 이미지
    • 순서 :
    1. feature matching(image1, image2) // generate 2 keypoints set about two image
    2. Fundamental Matrix(keypoint1,keypoint2)
    3. essential matrix(keypoint1,keypoint2,focal lenght, prinicpal point, RANSAC);
    4. homography matrix(keypoint1,keypoint2,RANSAC,3,noArray(),2000,0.99);
    5. RecoverPose(essential matrix, keypoint1, keypoint2, R, t, focal_lengh, principal point);
  5. 이를 통해서도 3D Mappoints를 구함.(triangulation)
    • 구해진 3D Mappoints들은 다시 이미지 프레임으로 RE-projection하여서 관측된 2D 매칭점과 Re projection된 2D 포인트를 least Square 방법을 통해 최적화 하여서 Visual Odometery를 추정하는 방법이 많이 쓰인다.
  6. Solve Pnp를 통해 (3D-2D) 카메라 포즈를 찾는다.(3D-3D일 경우 ICP)

NOTE: 모노 카메라일경우 위에 같은 방식으로 VO를 구함, 다만 Stereo나 RBGD같은 경우 바로 3D Mappoints를 만들고 solve pnp를 통해 카메라 포즈를 구한다.

3D - 2D Pose Estimation

  1. 특징점 추출 이용하여서 특징점 추출
  2. 특징점 매칭
  3. Fundamental Matrix 및 Essential Matrix 구하기
  4. 찾은 매칭점(뎁스이미지 일 경우 특징점(1,2,3번 제외))에 Triangulation을 통해(Depth 카메라일경우 제외) 3D Mappoints 생성
  5. 이때도 solvePnP 및 DLT 사용하여서 Rotation, Translation 값을 구함(Pose Estimation)

3D - 3D pose estimation(RGB-D or Lidar or raders)(ICP Method)

  • RGB-D Sensor를 제외한 lidar 나 radars는 preprossess가 필요없으므로 바로 3D Mappoints생성 가능
  • ICP 방법을 써서 pose Estimation(이전 스캔과 현재 스캔의 맵포인트 매칭을 통한 Pose Estimation)

Bundle Adjustment(번외)

  • 3D Mappoint가 이미지 프레임에서 특징점과 이미 공유되고 있는 3D Mappoint일 경우, 현재 3D Mappoint를 공유하고 있는 이미지들 플래인에 투영을 하여서 이전에 투영된 포인트화 현재 투영된 포인트를 Least Square를 통해 에러를 최소화 하면서 Camera Pose와 Mappoints들을 교정한다.

Comment  Read more

Euclidean & Topology

|

로보틱스나 컴퓨터 비전을 공부하다 보면 가끔 햇갈린다. 그래서 다시 한번 내 나름대로(?) 정리를 해보았다.

로봇틱스를 공부를 하면서

Euclidean은 이미지 같은 2D(직선좌표) 같은 곳에 많이 쓰이고

Toplogy는 슬램으로 따지면 만들어진 3D map으로 표현된것이라고 생각을 했다.(즉 사람이 살고 있는 공간)

그러나.

Topology is a kind of math, in which we study shapes – but we pretend that all the shapes we deal with are made of really squishy rubber. This is particularly useful for studying crazy shapes, like high-dimensional objects or weird, twisty knots.

메비우스의 띠가 대표적인 예 이다.

그리고 직사각형 툴(?) 방식으로 두 직선의 쌍이 교차하는 중간점으로 만나게 되는데. 이 만나게 되는 점을, 모델의 중심이라고 부른다(즉, 도넛, 컵 같이 생긴 형상을 가지고 정의하는 것이 아니라 직사각형 툴 방식으로 물체를 수학적으로 정의한다.)

아래와 같이 표현이 되며, 그렇기 떄문에 도넛이든 컵이든 모든 것은 하나의 홀로 만들어진 연속적이기 때문에, 수학적인 shape만 신경 쓴다.

Topology는 3D Geometry를 만들때 많이 쓰인다. (예, 3D 모델을 만들거나, 슬램의 맵을 만들때 )

https://www.youtube.com/watch?v=VudCtEtNXbI

Comment  Read more

orthophoto

|

orthophoto는 카메라가 바라보는 이미지 플래인을 평행(parallel)하게 하게 바라보면서 아래와 같이 볼 수 있게 해주는 것이다.(orthogonal parallel projection)

그리고 Bundle Adjustment를 이용하여서 이미지들을 합성하여 구글맵처럼 크게 연결을 해둔다.

orthophoto를 하려면 아래와 같은 조건이 필요하다.

DTM의 문제는 고층빌딩과 빌딩들을 제대로 orthophoto 표현해주지 못한다.

DSM은 레이저 스캐닝을 통해 z값을 얻을 수 있으므로 고층빌딩에 대한 orthophoto 표현을 할수 있다.

orthophoto를 구하는 방법은 다음과 같다.

orthophoto plane을 따로 만들고, 특정 포인트를 찍어서 orthophoto 그리고 실제 지형, 그리고 camera image plane, 카메라 파라미터를 이용을 하여서 orthogonal image에 표현을 하며, camera image plane에서 보이는 intensity값을 그대로 적용한다.

Comment  Read more

Least Square에 대한 개념

|

최적화를 할때 많이 사용하는 방법 중 하나 이다.

특히 로봇공학에서는

estimate parameters based on observations

Map a state x to a predicted observation

이 정확할 것 같다.

즉 관측값과 예측값을 Least Square를 통해 여려 iterate를 통해 에러를 미니멈라이즈 한다던지, Lesat Square를 최적화 한다

위에 와 같이 observation model, 모바일 로봇으로 치면, 바퀴 3개달린, 자동차처럼 바퀴 4개 달린, mechanum wheel인 특성을 고려한 상태전이매트릭스로 간주 할 수 있따.(State Transition Matrix), 그리고 주어진 상태전이매트릭스에 Angular velocity, Linear Velocity [Twist]가 주어졌을 때 얻어지는 상태 예측 값이다.(Bayese Filter에서 Predict model과 같은 개념이다.)

그리고 실제 레이더나 카메라 프로세스로 얻어진 관측값을 least Square로 최적화 한다.

이는 Mapping이나 localization, SLAM, Calibration, BundleAdjustment… 등 많이 사용이 된다.

보통 현실에서는 Non-Linear 한 경우이므로

Least Square을 쓸 때에는 선형화(linearize)를 시켜줘야한다.

  • 주로 talyor expanstion(테일러 1차 근사), Jacobian

즉 로봇 상태를 추정하는데 있어 상태 추정에 대한 1차 테일러 근사를 시킨다면 Jacobian Matrix폼으로 상태를 추정하게 되고(+ Non linear 모델일 경우 uncerntainty matrix도 포함이 된다.)

Non-linear 형식일 경우 uncerntainty로 완벽한 상태를 추정할 수 없기 때문에 Iterate형식으로 보통 문제를 풀며 이때 Robust kernel 같은 learning rate(?)를 주어주어서 최적화 업데이트를 한다.

그렇기 때문에 initial guess가 중요하다.

Comment  Read more