변위와 관련된 센저 질문입니다.

메카 2016-10-18 (화) 17:32 3년전 4354  

안녕하세요

 

아두이노 카페에 가속도센서와 변위에 대해 글을 올렸던 MMI입니다.

 

메일로 보내주신것 잘보았습니다.

 

제가 프로젝트를 하고 있는 것을 더 자세히 말씀드린후 도움을 청하고 자 합니다.

 

센서를 손목쯤에 부착하여 손이 얼마나 위로 올라갔는지,내려갔는지에 대한 정보를 읽어 그값에 따라 모터의 정회전 역회전을 하려 합니다.

예로 들면 위로 10cm가 올라가면 정회전으로 5s동안 작동 아래로 내려가면 역회전을 그정도 하려 합니다.

센서가 인식하는 간격은 10cm 정도로 감지를 할 예정입니다.

 

그래서 질문 들이고 싶은 것은

센서를 구매하려하는데...  가속도 센서 만으로도 위의 프로젝트를 할수 있는지 궁금합니다.

가속도 센서말고 자이로와 가속도가 같이 있는 센서가 있던데 그 센서를 사용하는 것이 나을까요?

그리고 그센서를 어떻게 활용해서 만들어야 할지 막막 합니다.

조언을 해주시면 감사하겠습니다.^^



==================================



안녕하세요. 

전공이 어느 분야이신지 몰라서 기초적인 부분부터 말씀드리는 점 이해해주세요. 혹시, 알고 계시는 부분일지 모릅니다. 

먼저, 바디에 장착하는 센서에 대해서 말씀을 드리자면, 
좀 특수한 부분이 없지 않습니다. 

1. 로봇과 달리 정해진 고유 프리퀀시가 없기 때문에 필터를 이용하여 특정 주파수 대역을 사용하는 것이 어렵습니다. 하지만, 실제로 사람이 팔을 휘두르거나 할 때, 굉장히 빠른 반복 운동을 하기는 쉽지 않죠. 가령, 복싱선수가 아무리 빨리 펀치를 휘두른다고 해도 1초에 몇번...이런식으로 제약이 있습니다. 따라서, Low Pass Filter를 이용하여 약 10Hz 미만의 시그널을 사용해도 무방함이 여러 논문을 통하여 알려져 있습니다. 

2. 변위를 측정하는 것에 대하여 말씀을 드리자면, 변위에는 절대 변위와 상대 변위가 있을 수 있습니다. 절대 변위라하면, 사람이 움직인 정도를 관찰자에 상관없이 모두가 객관적으로, 일정하게 알 수 있는 정보일 수 있죠. 즉, GPS를 통해서 고유 위치값이 정해지는 것처럼요. 이 GPS를 이용하여 사람의 위치를 알 수 있지만, 그 분해능 혹은 정확도가 많이 떨어지고(1m~), 군사용으로 사용하는 것일지라도 10cm는 어렵죠. 많이 비싸기도 하고. 더욱 치명적인 이유 중에 하나는 위성을 사용하기 때문에 실내에서는 GPS를 사용하기 힘들답니다. 따라서 많은 사람들이 Indoor GPS 혹은 Indoor 네비게이션을 연구하고 있는 이유 중에 하나고요. 

3. 앞서, 절대 변위를 말씀드렸는데, 내 몸에 철썩같이 붙어있는 두 팔들...(잔인하다면 죄송)에 대해 생각해보겠습니다. 다행스럽게도 두 팔들이 우리 몸통에 붙어 있기에 우리는 팔꿈치 혹은 손목까지의 위치를 몸통이라는 기준 좌표를 기준으로 생각해볼 수 있습니다. 그러면, 어떻게 변위를 알 수 있을까요?? 즉, 팔꿈치의 위치 및 손목의 위치 등등...허공에서 x,y,z 축으로 몇 센치 움직였는지 알 수 있는 방법은 카메라 이외에는 없습니다. 이 부분은 말씀드릴 수 있을 것 같네요. 제가 연구했던 부분은 이 부분을 해결하는 것이었고, RSSI라는 Radio Signal Strength Indicator를 이용하여 측정하였습니다. 이 RSSI라는 것은 소위 우리 폰에 보시면 안테나의 개수와 높이가 보이죠. 가까운 AP로부터 받은 신호의 세기. 즉 이 신호의 세기를 이용하여 거리를 Estimate하는 방법입니다. 거리와 신호는 로그 상관관계가 있음을 이용한 것이지요. 하지만, 저는 로봇에 이용을 하였고, 몸에 부착하는 센서로는 이용할 수가 없었습니다. 그 이유는 Radio 신호가 몸이라는 거대한 장벽에 많은 노이즈를 갖고 Reliable한 신호를 받을 수 없었기 때문이죠. 

4. 앞에서 말씀드린 바를 종합해보면, 팔꿈치 및 팔목이 움직인 정도를 측정하기 위해서는 팔꿈치 혹은 팔목이 얼만큼 회전했는지를 생각해보면 그 위치를 생각할 수 있습니다. 사람에 따라서 팔의 길이가 다르지만, 이 부분은 어떤 센서를 통하더라도 Calibration이라는 과정을 거쳐서 조절해줘야하기 때문에 큰 문제가 되지 않습니다. 닌텐도 위를 사용해보신적이 있으신가요? 닌텐도 위의 조종기에는 가속도 센서와 자이로 센서가 들어있습니다. 매 게임이 시작하기 전에 조종기를 내려놓으라하며 Calibration중이라는 문구가 뜨죠. 즉, Calibration이라함은 센서값을 다시 초기화한다고 생각할 수 있겠네요. 팔꿈치의 위치를 구하기 위해서 어깨부터 팔꿈치가지의 거리를 L1이라고 하겠습니다. 그럼, 어깨가 O점(제로 포인트)라고 생각하며, 이 O점으로부터 팔꿈치까지의 길이에 그 팔꿈치의 각도를 이용하여 팔꿈치의 위치를 생각할 수 있죠. 
가령, 2D에서 생각해보았을 때, 중학교 때의 PT체조를 생각해 볼께요. 오른팔의 방향을 X축, 정면 방향을 Y축이라고 하고, 하늘 방향이 Z축. 손목의 위치를 알기 위해서 손목에 센서를 붙이고, 그 값을 읽으면, 손목에서의 센싱값은 Y축을 기준으로 -90도에서 90도까지 회전을 합니다. 손목이 허벅지에 붙어서 땅을 향할 때, -90도, 그리고 하늘을 향할 때 90도. 그럼, 45도 일 때는 어떨까요? Y 모양을 그리는 동작이겠죠. 이 때의 손목의 위치를 구하기 위해서는 간단히 어깨에서 손목까지의 길이 곱하기 cos(45), 그리고 어깨에서 손목까지의 길이 곱하기 sin(45)가 X 축으로의 변위, Z 축으로의 변위가 됩니다. Y 축으로의 변위는? 0이겠죠. 팔은 XZ 평면에서 움직이기 때문에 Y축으로의 변위는 0입니다. 

이렇듯, 삼각함수 혹은 Denavit Hartenberg 라는 Notation과 Kinematics(키네마틱스)를 이용하여 변위를 구할 수 있습니다. 

그럼, 센서 이야기로 다시 돌아가보겠습니다. 

A. Accelerometer (가속도 센서) & Gyroscope(자이로 센서)
가속도 센서는 많은 사람들이 알고 있듯이 가속도를 측정하는 것이지만, 이 가속도라함은 자동차가 얼만큼의 가속도를 가지고 움직이는가를 측정하는데 적합하지 않습니다. 노이즈가 심하기 때문이죠. 가속도 센서를 보시면 G라는 중력가속도가 늘 표기되어 있습니다. 즉, 고정되어 있는 중력가속도를 기준으로 얼만큼의 크기인지를 내보내는 센서입니다. 럭키하게도, 이 센서를 이용하면, 절대적인 회전을 구할 수 있습니다. 간단한 변환공식을 이용하여서..ㅎㅎ
다만 문제점은 PT체조 같은 동작을 센싱하기위해서는 아주아주 적합하지만, 훌라후프처럼 XY축으로 도는 물체에 대해서는 센싱을 할 수 없습니다. 가속도 센서의 특징이면서 치명적인 단점이죠. 지구중심방향에 수직인 방향으로의 회전은 감지 못한다는...따라서 사람들이 자이로센서를 사용합니다. 자이로 센서는 각속도를 센싱하는 것으로 각도/sec를 내보내줍니다. 이 각속도를 마이크로프로세서에 있는 타이머 혹은 작은 시계? 를 이용하여 아주 작은 시간을 이용하여 적분을 하면 각도를 얻을 수 있습니다. Labview라는 컴퓨터의 프로세서(기가바이트) 를 이용하면 이 적분 오차를 줄일 수 있지만, 마이크로프로세서(메가바이트)를 이용하면 시간에 따라 적분 오차가 굉장히 커집니다. 우리의 동작은 아날로그인데, 컴퓨터나 마이크로프로세서는 디지털 장비이기에 적분오차가 생길수 밖에 없죠. 이를 드리프트라고 부릅답니다. 참고로...문제는 사람의 동작은 그리 빠른 동작이 아니기 때문에 자이로센서를 사용하면 매우 작은 각속도가 생기며, 그 각속도는 너무 작아서 마치 노이즈 같답니다. 즉 노이즈를 적분하는 셈이 되죠. 따라서 자이로 센서는 굳이 필요가 없겠네요. 쓰서도 무방합니다만, 손쉬운 개발을 위해서...버립니다.

B. Magnetometer (자기장센서)
그럼, 가속도센서가 측정하지 못하는 연직방향의 수직방향에 대한 값은 어떻게 받는가...이는 자기장센서가 해결할 수 있습니다. 자기장센서는 N극, S극을 측정하는 것이라서 이를 통해서 대략적인 방향을 선택할 수 있습니다. 


제가 생각하는 센서에 대한 솔루션은 가속도센서와 자기장센서의 퓨전입니다. 혹은 Integration정도가 되겠네요. 두개를 독립적으로 사용하여 값을 읽어들여도 될 것이고요. 
그럼, 모터를 구동하신다고 했는데, 몸에 붙어 있는 모터든 혹은 외부에 있는 장치를 구동하는 모터든, 센서로부터 받은 정보를 처리하는 마이크로프로세서 그리고 이 값을 무선으로 보내줄 수 있는 무선모듈이 필요합니다. 저는 아두이노 나노와 XBee를 추천드립니다. 
많은 예제가 있고, 또 정말 쉽게 다룰 수 있는 XBee이기에 추천드립니다. 아두이노 나노가 필요한 이유는 작기 때문에 손목 및 팔목에 붙여도 무방하기 때문이죠.

그럼, 하드웨어를 정리해보면, 
아두이노 나노, 가속도센서, 자기장센서, XBee, XBee레귤레이터 혹은 XBee커넥터, 브래드보드 혹은 만능기판, 배터리, 스위치가 필요할 것 같네요.
만약 팔굼치의 변위를 측정하실 거면, 한 셋트가 필요하고, 손목의 변위라면 두 셋트가 필요합니다. 손목의 변위를 측정하기 위해서는 먼저 팔꿈치 변위정보가 필요하겠죠??

코딩부분은 먼저 자료를 찾고 (구글링), 논문들 (IEEE 정도...), 막히시는 부분이 있으시면 같이 고민해드리겠습니다. 

그럼, 도움이 되셨기를 바라겠습니다. 

























메카리워즈 Image Map


모바일 버전으로 보기