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

이 포스팅은 레이저 거리 센서제작 과정입니다.


삼각 기법을 통하여 거리정보를 얻을 수 있고 삼각기법으로 레이저가 물체에 반사된 빛의 위치를 통해 거리정보를 얻게됨니다.  오브젝트에 반사된 빛은 Linear CCD 센서에 전하차가 생기게 되고 얻어진 센서 값 중에서 가장 밝은 부위를 레이저로 인식합니다.






제작 하드웨어

MPU : STM32F103RET6


Sensor : TSL1401 







센서 성능이 매우 좋지 못합니다. 밝은 레이저를 사용하여야 센서 전압차가 발생합니다. 이런 CCD 소자는 처음 사용해봅니다. (픽셀 노출속도가 빠라서 일 수 도 있지만, 상대적으로 늦습니다.)

아래의 레이저 센서 프로토타입으로 실험하는 모습입니다. 적절한 렌즈를 구하기가 쉽지 않아 고장이 난 카메라 렌즈를 분해하여 장착하게 되었네요. (비선형 렌즈)

아래의 검은 물체는 휴대용 오실로스코프입니다. ㅋ 무려 72mbps를 실험할 수 있습니다.

밖에 나가서 사용할 일 있으면 쓰려고 구매하였지만 단 한 번 사용했네요. ㅎㅎ






거리 측정 모습.





거리에 따른 CCD 전압차의 분포를 확인 하실 수 있습니다.



스케일 변화 모습을 통해 어떤식으로 CCD cell이 이동하는지 자세히 관찰할 수 있습니다.ㅋ

확실히 오실로스코프 차이가 느껴지나요? 장비는 좋은것을 써야 합니다. ㅎ




영상을 보셨다면 CCD cell 전압차가  Global Maximum 을 가지는 형태를 확인 하실 수 있습니다.


CCD 셀에서 정확인 레이저 위치를 잡기위한 방법이 필요하게 됨니다.


 아래의 사진은 histogram 을 통해 Mode, Median, Mean 방법을 간단하게 표현한 사진 입니다.




참고링크

참고링크2

참고링크3





첨부 : 

TSL1401CL_Datasheet_EN_v1.pdf


'취미 > HW' 카테고리의 다른 글

STM32f429 보드 실험 - Camera 구동  (11) 2016.07.12
공부 계획중인 ARM, MSP430  (0) 2016.07.12
1D-Laser Distance Sensor - (2)  (1) 2016.06.22
8 Stage Coil Gun  (1) 2016.05.30
전기 스쿠터 제작 경험기  (4) 2016.05.05
SIMD intrinsics header

mmintrin.h: MMX (Pentium MMX!)

mm3dnow.h: 3dnow! (K6-2) (deprecated)

xmmintrin.h: SSE + MMX (Pentium 3, Athlon XP)

emmintrin.h: SSE2 + SSE + MMX (Pentiuem 4, Ahtlon 64)

pmmintrin.h: SSE3 + SSE2 + SSE + MMX (Pentium 4 Prescott, Ahtlon 64 San Diego)

tmmintrin.h: SSSE3 + SSE3 + SSE2 + SSE + MMX (Core 2, Bulldozer)

popcntintrin.h: POPCNT (Core i7, Phenom subset of SSE4.2 and SSE4A)

ammintrin.h: SSE4A + SSE3 + SSE2 + SSE + MMX (Phenom)

smmintrin.h: SSE4_1 + SSSE3 + SSE3 + SSE2 + SSE + MMX (Core i7, Bulldozer)

nmmintrin.h: SSE4_2 + SSE4_1 + SSSE3 + SSE3 + SSE2 + SSE + MMX (Core i7, Bulldozer)

wmmintrin.h: AES (Core i7 Westmere, Bulldozer)

immintrin.h: AVX, SSE4_2 + SSE4_1 + SSSE3 + SSE3 + SSE2 + SSE + MMX (Core i7 Sandy Bridge, Bulldozer)




<mmintrin.h>  MMX

<xmmintrin.h> SSE

<emmintrin.h> SSE2

<pmmintrin.h> SSE3

<tmmintrin.h> SSSE3

<smmintrin.h> SSE4.1

<nmmintrin.h> SSE4.2

<ammintrin.h> SSE4A

<wmmintrin.h> AES

<immintrin.h> AVX

<zmmintrin.h> AVX512




SIMD Vector header

<fvec.h> verter class

<dvec.h> integer, double (AVX 포함)



x86 Instruction Set Reference

http://www.felixcloutier.com/x86/

'컴퓨팅' 카테고리의 다른 글

향후 CPU가 발전할 방향?  (0) 2018.02.16
SIMD와 4x4 Matrix 데이터 처리  (0) 2018.02.16
CPU 명령어 집합  (1) 2016.05.07

하고 싶은게 너무 많다보니 늦기전에 조금식 준비하려고 합니다.



영상처리 기술 정리

- 카메라 원리

- Stereo Camera

- SFM

- Classification

- Tracking

- Feature

- etc.


수학 개념 정리

- Curve fitting

- 선형 시스템

- 기하학

- 차수

- etc.



컴퓨팅 개념 정리

- 분산 처리

- LIB (MPI, CL, MP)

MPI 가상화 환경에서 PS 통신 실험

openCL GPU를 이용하여 영상처리. LLVM 과 조합이 될지는 미지수

openMP SIMD와 병행하여 유동적으로 프로그래밍


- Clang (llvm) 

영상처리에 적용해볼 예정.


- SIMD(PC, ARM)



취미 (하드웨어)

- LDS 정확도 상향

- SPI 통신 카메라 제어

- Laser ToF 계획

- 지금까지 만든 작품 정리


- 여유가 생기면 Robot Arm Project

목표

어떻게 물체를 잡을 것인가?

어떤것을 먼저 잡을 것인가?

학습.


설계

SVN, GIT 사용하여 Open Code Project

Coding Convention

Arm Kinematic

Motor Control

Communication architecture design(Ethernet, uart, can, i2c, spi, etc)

Camera Vision Processing

Processing Board

기구적인 모델링..등등~


혼자 다 할 수 있다면 창업을 해야 겠죠? ㅎㅎㅎ

욕심 부리지 않고 최소한의 작업을 위해 이미 있는 제품을 가져다가 만드는게 좋겠다는 생각이 들어요.





기타

- 효율적인 프로그래밍 작성(디자인 패턴 등)

- C++ Std11, 13

미래를 준비하기 위해 Boost C++와 병행 및 유용한 기능 숙지


- 영어 공부





'ETC > 목표' 카테고리의 다른 글

CPU 명령어 집합에 대한 정리계획  (1) 2016.05.05

11년도에 제작한 Coil gun 입니다.


만들게 된 계기는 호기심에서 부터 시작 되었습니다. 처음에는 인터넷으로만 정보를 모아 조금식 실험하면서 많은 정보가 쌓이게 되었습니다. 

아래의 사진은 코일을 감는 모습 입니다. 레이저 컷팅한 아크릴로 일정한 간격으로 배치한 이후 코일 권선비를 마추어 감았습니다.


지금 생각해보면 자기 차폐를 하였다면 더 큰 효율을 가졌을텐데 아쉬움이 남습니다. ㅎ







적외선 수신부와 발광부를 배치한 모습입니다.

발사체를 감지 하기 위한 센서로 사용 됨니다.


적외선 센서를 연결한 모습 입니다. 코일에 스위칭을 하기전 발사체를 감지하기 위한 적외선 센서를 이용하게 됨니다. 



조금식 완성 되어가는 모습 입니다. 캐패시터에 200V 가까이 충전되기 때문에 절연이 완벽한 아크릴로 케이스를 만들게 되었습니다. 

코일 스위치 소자는 SCR를 사용하였으며 SCR 소자에 대해 많은 공부가 되었습니다.




아래의 영상은 캐패시터를 충전 하는 모습 입니다. 일정 전압 이상 상승하게되면 duty cycle이 멈추도록 되어 있습니다. 즉 신호가 0로 떨어 짐니다.

피드백을 받아 충전 전압을 조절 합니다. 지금 영상은 충전 방전 실험하며 절열 파괴 및 내구성 실험을 하는 과정 입니다.

전원 스위칭 소자는 IGBT 와 Mosfet을 사용 할 수 있습니다.



 코일건을 만들면서 정말 많은 공부가 될 수 밖에 없는 부분은 고려해야 하는 부분이 많다는 점 입니다. (만들기 나름입니다.)

아래의 영상은 코일의 각 stage 검출 하는 과정 입니다. 

이 부분에서는 Real Time 이 매우 중용합니다. 발사체 검출 속도가 늦어진다면 다음 stage 코일에서 제대로 발사체를 가속시켜주지 못하기 때문입니다.

Software 와 Hardware 는 말 그대로 유연하고 딱딱한 의미 처럼 단순히 고속으로 처리하기 위해서는 하드웨어 logic을 이용하여 센서 검출시 즉각 반응하도록 설계 되었습니다. 



충전 및 컨트롤 기능을 MCU 에 프로그래밍한 모습입니다. 



최종 결과 영상 

발사체에 실을 매달아 실험한 최종 영상 입니다.






후기.

코일건을 만들면서 다양한 경험을 하게 되었습니다. 전기에 대해 조금더 알게 되니 다른 사람보다도 더 위협을 느끼게 되는것 같습니다.

그만큼 조심성이 많아 졌고 처음에는 관심만 가지고 있었지만 나중에는 푹 빠져서 틈틈히 만들게 되었습니다.  

지금의 생각을 가지고 다시 만든다면 스마트 하게 만들 수 있을것 갔고 발사체의 궤적과 예상 타겟팅 위치까지 계산 할 수 있을것 같습니다. ㅎ

코일건 만들 당시 수학공부에 개념이 없어서 실험 위주로 안정화를 했었지만 책보고 만드는게 제일 빠른 방법 입니다. ㅋ 물론 코일건을 만드는 책은 없겠지만 관련 지식은 책을 보면 어렵지만 상세하게 기술되어 있습니다.





'취미 > HW' 카테고리의 다른 글

STM32f429 보드 실험 - Camera 구동  (11) 2016.07.12
공부 계획중인 ARM, MSP430  (0) 2016.07.12
1D-Laser Distance Sensor - (2)  (1) 2016.06.22
1D-Laser Distance Sensor - (1)  (6) 2016.06.22
전기 스쿠터 제작 경험기  (4) 2016.05.05

GPU 와 CPU 속도 비교


CPU 와 GPU 둘다 단일 연산자만들 이용하여 구현 하였으며 백터 연산자는 사용하지 않았습니다.


해상도 : 1280 x 960

CPU : I7 2600

RAM : 16GB 1600Mhz

GPU : GTX 550 Ti


연산양을 크게 하기 위해 RGB 3채널을 이용하며 3 x 3 sobal kernel을 연산 합니다. 이후 정규화 과정을 가짐니다.


openCL - GPU



CPU




CPU : 0.265013

GPU : 0.012662

0.265013 / 0.012662 = 20.92978


GPU가  20.92978 배 빠르다는것을 알 수 있습니다.



GPU성능이 크게 발전함에 따라 이 격차는 더욱 벌어질것이라 생각됨니다.

GTX 550 Ti -> GTX 960

Memory Bandwidth : 98.4GB/s -> 112GB/s

CUDA Core 192 -> 1024




생각해보니 CPU에서는 단일 명령어와 단일 쓰레드에서 동작 하기때문에 느릴 수 밖에 없고 그에 비해서 GPU는 다중 쓰레드에서 동작 한다고 볼 수 있기때문에 지금의 비교는 무의미해 보입니다. 적어도 CPU에서는 openMP 라도 사용해서 비교할걸 그랬습니다.

SIMD 연산을 하지 않았기때문에 OpenCV와 비교해서도 느린 결과를 가지게될 것입니다.



기회가 된다면 인텔 제온 PI 를 가지고서 실험을 해보고 싶네요.ㅎ










연구중인 왜란에 강인한 영상 안정화기법








RANSAC 알고리즘 테스트

궤적 

 - 빨강색 X축

 - 녹색 Y축




제안한 영상 안정화 테스트






제안하는 기법 + 칼만필터  1

궤적 

 - 빨강색 X축

 - 녹색 X축 칼만필터





제안하는 기법 + 칼만필터  2







제안하는 기법 + 칼만필터 (속도개선 및 노이즈 감소)

'영상처리' 카테고리의 다른 글

강체(Rigid)와 호모그래피(Homography) 변환  (1) 2016.07.28
Horn and Schunck Flow 구현 및 회전중심 찾기  (0) 2016.07.06
영상처리 UI Tool  (0) 2016.07.06
StereoVision  (0) 2016.06.26
RGB sobel edge detection CPU, GPU Test  (0) 2016.05.29

이전에 네이버에서 닉네임[전기박사] 로 많이 활동을 했었습니다. 


어떠한 사고가 있어 블로그 탈퇴가 되어 많은 자료가 손실 되었습니다. ㅠㅠ


그 이후 잠시동안 블로그 활동을 중단 했었죠.... 

학교 졸업이 다가오기에 다시 블로그활동을 하기로 마음먹었으니


 조금씩 블로그에 시간을 들여야 겠습니다.  #_#







'ETC' 카테고리의 다른 글

취미 공간 변천사  (0) 2017.11.05
3D Printer 구매 후기  (0) 2017.11.04
TOF 레이저 측정기 구매!!  (0) 2017.11.04
mi box pro 직구 후기!!!  (1) 2016.12.25
synology 216j 구매!!!  (0) 2016.09.25

멀티탭을 개조하여 블루투스 멀티탭으로 개조한 작품입니다.

정말 다른 제품과 비교되는점이라면 기존 "제품과 완전 같다." 라는 점이 있겠습니다. ㅎㅎ

기존 제품과 온전히 같다는 점은 아무것도 모르는 사람도 조작을 할 수 있다는점 입니다. 실제로 저희 어머니께서 그양 멀티탭을줄 알고 사용하시고 계셨습니다.


블루투스 멀티탭이기때문에 원격으로 제어가 가능할 뿐만 아니라 스위치 예약 기능 및 음성으로 조작 할 수 있습니다. 음성은 안드로이드내에 API를 이용하였습니다.


요즘 세상은 IoT 이기때문에 WIFI 단가가 떨어짐에 따라 만물인터넷 처럼 항상 인터넷에 접속되어 어디서든 제어 가능하게 하는게 요즘 추세이죠.

이미 좋은 제품이 많이 나왔지만 예전에 만들어보면서 현재 나옴 제품을 보면 공감이 되곤 합니다. ㅎ







 내용 추가.


Android 를 이용한 음성 인식.

작성중 생각난 아이디어 ㅎ. 

같은 단어를 반복적으로 읽음으로서 유사한 단어를 데이터 마이닝 하는 방법으로 제안적인 단어를 인식할때는 인식률을 높일 수 있을것으로 생각됨.




안드로이드 위젯




제작 과정 입니다.

 


부피를 줄위기 위한 노력 중 하나 입니다. ㅎㅎ

기존 스위치를 가공하여 저전류 스위치를 붙착 하였습니다.

 


 


졸업 작품이기때문에 퀄리티가 나오기 쉽지 않습니다. 만능기반을 이용하였고 선을 다 점프 하였습니다.

 


MCU 전원은 소형 SMPS를 분리하였습니다.

 


 


 




마지막으로 졸업작품 전시에 사용되었습니다.







'취미 > Fusion' 카테고리의 다른 글

3D Laser Scanner 개발  (5) 2016.09.21
Nao and DARwin  (0) 2016.07.06
2-wheel Balance robot  (0) 2016.05.23
korea portfolio day - 와인병 연주기  (0) 2016.05.18

밸런스로봇의 핵심은 자세를 스스로 잡기위해 센서의 sampling이 중요합니다. Kalman filter를 사용하여 자이로센서를 이용하여 각도를 추정하고 가속도 센서를 통해 정확한 값으로 update 을 합니다.

밸런스 로봇은 움직이면서 높은 튑 형상이 발생하기 때문에 센서에 내장된 Low Pass Filter 이용하여 필터링 하게 됨니다. 



spec

Compiler : AVR GCC

MCU : atmega128

Sensor : MPU6050

Filter : kalman filter, Low pass filter
Control : PID 
Motor driver : lm298 
DCmoter : 13W 4kg-cm 100rpm
Battery : lithium ion 2600mA x 3 = 12.6v

ETC : Bluetooth 2.1



Sensor Data

그래프는 0, 90를 빠르게 움직였을때의 그래프 입니다. 파랑색은 가속도 센서, 빨강색은 칼만필터 입니다. (모델링되지 않은 손으로 흔들었을때 데이터 입니다. )




로봇이 자세를 잡는 과정의 그래프 입니다. 0도를 유지하며 자세를 잡도록 되어 있습니다.

기어모터에서 백레쉬로 발생되는 충격이 데이터로 나타남니다. 4분에 1지점에는 모터를 끄고 손으로 잡고 있습니다.





Atmera128 IO 계획,  Atmera8 에서 test 동작 확인




로봇 동작 테스트





로봇 케이스 제작 과정










PID Control 

바퀴를 손으로 잡았을때 비례적으로 Duty의 변화를 체크 하는 모습니다.

모터의 속도를 유지하기 위해 전류량을 조절하게 됨니다.





Communication


Robot[UART <-> Buletooth] <--> Android

200Hz 의 Sample Rate 로 스마트폰과 통신.



아래의 영상은 로봇이 넘어 졌을때 다시 일어나는 장면. 

실시간으로 로봇과 빠르게 통신 하는 모습을 확인 하실 수 있습니다. 신뢰 데이터를 위해 Check bit 를 검출 합니다.  





Out door 1



Out door 2





'취미 > Fusion' 카테고리의 다른 글

3D Laser Scanner 개발  (5) 2016.09.21
Nao and DARwin  (0) 2016.07.06
블루투스멀티탭 제작.  (24) 2016.05.23
korea portfolio day - 와인병 연주기  (0) 2016.05.18

+ Recent posts