1D-Laser Distance Sensor - (1) 실험을 통해서 레이저가 CCD 셀에 형상을 맺히는 실험을 하였습니다.
CCD 셀 각도에 따라 검출 가능한 거리와 정확도가 결정 됩니다.
CCD 센서의 각도에 따라 검출 가능한 거리가 멀어질수록 정확도가 떨어지게 됩니다. 센서에 상이 맺히기 때문에 근거리에서는 높은 해상도를 가지며 장거리에서는 낮은 해상도를 가지게 되겠습니다.
아래 그림은 3D Max를 이용하여 간단하게 설계하였습니다. 예전에 "3D Max 무작정 따라하기" 책을 통해서 한번 배워두니 두고두고 써먹네요. ㅎ
출력 결과 센서를 단단하게 고정 할 수 있었습니다.
현재 사용 중인 센서는 128 x 1 센서를 사용하고 있습니다. 픽셀 수가 얼마 안 되어 전체적인 sampling 속도가 빠릅니다 값을 shift 하며 하나씩 ADC로 읽어오게 됩니다. 분해능이 12bit이며 하나의 픽셀에 4096 값을 가지게 됩니다. 이 의미는 얼마 없는 픽셀을 통해서 세분화하여 레이저 거리를 추정할 수 있게 됩니다.
MPU 내부에 실수 연산자가 존재하지 않아 실수연산을 많이 하게 되면 전체적인 속도가 늦어지기 때문에 대부분 연산은 정수 연산을 사용하였고 최종 출력 때에만 형 변환을 통해 연산량을 줄이는 작업을 하였습니다.
마지막으로 제일 중요한 부분은 레이저 데이터의 선형화입니다.
여기서 말하는 선형화는 데이터 분포를 수치화하여 수식으로 표현하는 걸 말합니다.
표현된 수식을 통해 정확한 mm 로 표현해주는 작업을 말합니다.
1차원은 간단하게 가능하지만 2차원 센서에서는 고민해야 하는 부분이 많기 때문에 이 부분도 나중에 포스팅해보려고 노력하겠습니다.
아래의 그래프는 Calibration 과정입니다.
Calibration을 하는 이유는 아래 그림처럼 비선형 형태로 그래프가 나타나기 때문에 선형화 작업이 필요합니다.
Row값은 원본 값이며 와 Estimation 값은 거리 값을 넣어서 추정된 값 입니다. lookup Table 간격이 5cm 간격이며 대충 눈대중으로 값을 넣다 보니 오차가 많이 증가 했습니다. ㅠㅜ 나중에 다시 실험 해야겠습니다.
estimation 은 지수 형태를 가지게 되고 로그로 역수를 구하여 실제 거리값을 계산 할 수 있게됨니다.
실제 거리와 추정된 거리
최악의 오차 ㅋ
0에 수렴해야 최상 입니다.
제작 후기
틈틈이 실험하면서 Laser Distance Sensor를 제작할 수 있었습니다. 128개밖에 없는 Array CCD 사용하였고 12bit ADC를 통해 픽셀값을 읽어 내고 레이저 분포의 중심을 찾아내었습니다. 픽셀의 이동은 0~128의 정수를 갖지만, 레이저 분포의 중심을 찾게 되면 실수 값으로 나타낼 수 있습니다. 이후에 0~128.0의 값을 실제 거리 값으로 변환하는 과정으로 비선형 모델을 선형모델로 근사하여 실제 거리를 구합니다.
arm core를 통해서 구현하면서 사용하는 하드웨어의 사양을 고려하였습니다.
MPU 내부에 FPU가 없으므로 대부분 연산은 정수로 계산하였고 결과를 출력할 때 자릿수 이동을 통해 연산 속도를 개선하였습니다.
개선 가능성
높은 해상도의 CCD 사용
특정 대역의 IR 과 IR Pass Filter를 사용하여 가시광선 노이즈 제거
정밀광학렌즈 이용
'취미 > HW' 카테고리의 다른 글
STM32f429 보드 실험 - Camera 구동 (11) | 2016.07.12 |
---|---|
공부 계획중인 ARM, MSP430 (0) | 2016.07.12 |
1D-Laser Distance Sensor - (1) (6) | 2016.06.22 |
8 Stage Coil Gun (1) | 2016.05.30 |
전기 스쿠터 제작 경험기 (4) | 2016.05.05 |