[아두이노] 거리측정센서로 3D 랜더링을 할 수 있을까?

IOT/아두이노|2019. 2. 10. 15:11

[아두이노] 거리측정센서로 3D 랜더링을 할 수 있을까?


영화 출처 : 프로메테우스

영화 프로메테우스의 한장면의 일부입니다. 동굴 탐사를 하기 위해서 드론같은 비행물체를 2개 띄우는 장면으로 붉은빛을 주기적으로 동굴벽에 비추는데 영화상에서 센서의 하나겠지요. 비행물체는 비행하면서 붉은 빛을 비추면서 동굴의 정보를 추출하게 됩니다. 그리고 우주선 본체에서 추출된 정보를 통해서 동굴 통로를 3D 랜더링을 하게 됩니다.

빛이 비추는 지점에 대한 거리 정보를 추출하지 않을까 생각되네요. 비행물체를 계속 이동하면서 일정각도와 일정거리로 이미지와 거리측정을 통해 각 벽면의 좌표점을 추출하지 않을까 생각됩니다.

그렇다면은 아두이노로 표현을 한다면 과연 어떻게 할까요 한번 생각해 봅시다.

1. 아두이노로 구현한다면 어떻게 할까요?


이미지 정보를 빼고 거리정보만으로 정보를 추출한다면 우선 가설은 이렇습니다. 비행물체는 아두이노드론으로 설정하고 드론본체의 중심에 초음파센서들을 부착하고 360도 거리 정보를 추출한다고 가정해 봅시다.


동굴 A에서 B까지 1도씩 360도의 거리 정보를 초음파센서로 각 좌표 정보를 추출하게 만든다면 원을 그린 것처럼 360개의 벽과의 거리 정보를 추출하게 됩니다. 그러면 드론의 현재 기준위치 정보에서 하나의 단층 좌표점들을 추출할 수 있겠죠. 그러면 이런 좌표이미지를 단층으로 해서 계속 누적시키면 어떻게 될까요. 드론이 일정간격 마다 벽과의 거리 꼭지점 단층 이미지들이 만들어 지겠죠. 가령 수백장의 단층이미지를 얻었다고 치면 여기서 각 꼭지점을 연결하면 3D 랜더링을 하게 되면 3차원 모델링 된 이미지를 얻을 수 있겠죠.

2. 대충 꼭지점을 연결한다면 이런 느낌!



각 꼭지점 사이의 거리는 드론이 일정이동거리이고 세로축은 초음파센서로 거리를 측정하는 지점이 되겠죠. 꼭지점은 가로의 한면만 나타낸 것이죠. 여기서 세로로 360개의 꼭지점을 얻을려면 x,y은 드론의 위치 좌표이고 z은 벽과의 거리로 (x,y,z)의 꼭지점을 360개 만들어 낼 수 있고 이정보는 세로 단층 이미지를 만들어 낼 수 있게 됩니다. 이 정보는 3D 랜더링을 하기위한 기본 정보가 되겠죠.

여기서 세로축으로 바라보면은 아래와 같은 모습이겠죠. 드론은 x,y 좌표가 되고 그 기준으로 z은 벽과의 거리가 되겠죠.


이 좌표들을 드론이 일정이동 간격으로 측정하하면서 이동하고 그정보를 중앙컴퓨터가 계산하여 좌표를 3D 랜더링을 하게 하면 동굴의 3D 이미지를 만들 수 있겠죠.

3. 영화는 왜 한축을 기준으로 회전해서 빛을 안쐈을까?


단순히 기준점으로 세로축으로 360도 회전해서 측정한다고 생각해 보세요. 그러면 어떤 문제가 생길까요. 바로 동굴은 매끈한 원형이 아니고 불규칙한 모습 때문입니다.


보는것과 같이 사각지대가 발생합니다. 가려진 부분은 그냥 이으면 빈공간이여도 매꾸어져 버립니다. 그래서 중심축으로 360도 회전이 아니라 영화에서 처럼 전망과 후방과 그리고 45도 각도로 해서 센서가 거리를 측정하게 됩니다.

비행물체가 일정간격으로 이동할때 마다 일정한 패턴으로 측정이 이뤄지는데 이동전과 이동후의 측정된 거리정보에서 후방측정과 후방 45도 측정시 그 각도지점은 이동전 (x,y) 좌표에 측정된 단층정보에 새롭게 측정된 사각지대 정보를 추가로 덮어 씌운다면 보다 정확한 단층이미지가 생성되겠죠. 그래서 영화에서는 전방, 후방, 45도 각도별 거리 정보를 추출하는 장면을 보여주기 위해서 붉은 빛으로 패턴을 보여준것 같다는 생각이 듭니다.

쉽게 말해서 영화에서는 일정간격으로 앞좌표, 현재좌표, 다음좌표의 정보를 거리 정보를 추출하여 그 정보를 종합해서 3차원 이미지를 만들어 낸 것이죠.

4. 비행물체의 비행은 어떻게 할까?


무인 자동비행을 해야하기 때문에 드론의 비행 좌표는 동굴의 중심으로 해서 날아가야 합니다. 하지만 동굴은 동글한 모양이 아니기 때문에 계산해야겠지요. 어떻게 해서 날아가야할까요. 위치정보 센서와 같은 기타 센서등을 이용도 해야겠지만 거리측정만으로 한다고 가정해 봅시다.


비행물체 전방에 거리측정센서를 부착해서 전방의 측정된 좌표 거리값 중 임의의 A,B의 중 가장 가까운 값을 기준으로 그 값을 2로 나누는 지점이 중심거리가 되고 그 지점을 (x,y,z)의 비행 좌표로 하면서 이동하면 되겠죠.

마무리


이건 초음파센서만을 이용해서 설정한 가설입니다. 거리측정 센서는 다양합니다. 중요한것은 거리를 측정할 수 있으면 할 수 있는 것들을 설명하기 위해서 영화의 한 대목을 한번 아두이노로 표현한다면 어떻게 할 수 있을까의 상상의 나래입니다.

그리고 3D 랜더링하는 기술은 소개하지 않았습니다. 공간 꼭지점(x,y,z)를 구할 수 있으면 그 점들을 이으면 폴리건(면)을 만들 수 있습니다. 이건 컴퓨터그래픽스 프로그램언어 영역이라서 주제에서 벗어남으로 그 부분에 대한 설명을 생략합니다. 저 또한 3D 랜더링 기술을 한때 공부한적은 있습니다. 지금은 알고리즘도 기억 안나네요.

원래 주제를 초음파레이더를 소개할까 했지만 아직 서보모터 포스팅이 들어가지 않아서 아쉽게도 초음파레이터는 다음에 시간이 되면 소개할까 합니다.

물론 구글 검색하면 동영상강좌나 블로그에 초음파레이더가 쉽게 검색되고 꽤 유명해서 자료가 많습니다. 중고생들 실험 소재로 많이 사용합니다. 스크래치를 이용한 초음파레이더나 프로세싱을 이용한 초음파레이더 예제는 차고 넘쳐서 궁금하신분들은 구글 검색을 통해서 찾아보세요.

우선 거리를 측정할 수 있다면 뭘 할 수 있을까 중요합니다.

암튼 거리측정이란 단어를 한번 머리속에서 상상의 나래를 펼쳐 보세요. 그리고, 아두이노를 공부하실때 그냥 대충 남들이 만드니깐 따라 만들지 마시고 SF 영화같은데 보면서 저장면을 아두이노로 표현한다면 과연 어떻게 표현이 될까하고 상상을 하면 많은것들이 떠오르게 됩니다. 거리측정센서를 처음 공부할때 거리측정기를 기준점(x,y)가 되면 거리를 깊이(z)로 해서 공간 좌표를 추출할 수 있을 것이고 이를 통해서 3D 랜더링도 가능하지 않을까 하고 상상의 나래를 펼친적이 있네요. 그리고 프로메테우스란 영화가 떠오르더군요. 별거 아닐것 같은것들이 꽤 재밌는 발상을 하게 되면 재밌는 작품들이 만들어 집니다.

거리측정으로 할 수 있는것을 저처럼 한번 상상의 나래를 펼처보세요.

댓글()