2009년 11월 11일 수요일

TOSBase & Network Communication Lib

TOSBase 와 Network Communication Lib. 에 대해 알아보자.
TOSBase 어플리케이션은 Bridge 역할을 한다.

즉, 송신 노드로부터 RF를 통해 전달되는 패킷을 수신하게 되면 TOSBase는 Group ID를 확인하고 자신의 Group ID 와 같으면 패킷을 받아서 시리얼(PC)로 전송하는 기능을 하며, 반대로 시리얼(PC)로부터 데이터를 전달 받으면 RF를 통해 네트워크로 전송하는 기능을 한다.
TOSBase 어플리케이션은 네트워크를 사용하는 다른 어플리케이션들과는 약간 다른 네트워크 라이브러리를 사용한다.
TOSBase 어플리케이션의 경우 RadioCRCPacket 라이브러리를 사용하는데 다음과 같다.

components Main, TOSBaseM, RadioCRCPacket as Comm, FramerM, UART, LedsC, CC2420ControlM;

RadioCRCPacket 라이브러리는 패킷을 받으면 CRC 체크후 에러가 없으면 상위 컴퍼넌트로 전달한다. RadioCRCPacket을 통해 올라온 패킷은 에러체크만 하고, 그룹 ID나 노드 ID는 필터링 되지 않는다.
TOSBase 어플리케이션이 RadioCRCPacket 라이브러리를 쓰는 이유는 네트워크로 수신되는 모든 패킷을 받기 위함이다.
그에 반해 OscilloscopeRF와 같은 일반적인 어플리케이션은 GenericComm 라이브러리를 사용한다.
GenericComm 라이브러리는 RadioCRCPacket을 통해 올라온 패킷들 중에서 그룹 ID와 노드 ID가 자신의 ID와 일치하는 브로드캐스팅된 패킷만 필터링 해서 상위 컴퍼넌트로 올려주는 역할을 한다.
즉, GenericComm 네트워크 스택을 사용하면 자신의 ID 또는 브로드캐스팅 주소로 전송되는 패킷만 수신하게 되는 것이다.
GenericComm과 RadioCRCPacket이 각각의 동작방식은 다르지만 제공하는 command와 event는 같으며, 일반적으로 컴포넌트명도 비슷하게 사용한다.
TOSBase 어플리케이션의 TOSBaseM.nc 파일과 OscilloscopeRF 어플리케이션의 oscilloscopeM.nc파일만 비교해보면 네트워크와 관련해서 같은 라이브러리를 사용하는 것처럼 보일 수가 있다.
그렇기 때문에 TOSBase.nc파일과 Oscilloscope.nc파일을 비교해 보면서 두 어플리케이션에서 각각 어떤 네트워크라이브러리를 사용하는지 알수가 있고 차이점을 파악할 수 있다.
그리고 RF를 통해 네트워크로 전송되는 패킷마다 패킷 ID를 가지며, 이 ID를 가지고 적절한 핸들러를 찾아 이벤트를 발생시켜주는데, 이 이벤트 핸들러는 상위 컴포넌트에서 구현해야 한다.
참고로 OscopeMsg.h 파일을 보면 다음과 같이 선언되어 있는 것을 볼 수 있다.

enum {
AM_OSCOPEMSG = 10,
AM_OSCOPERESETMSG = 32,
};

이처럼 네트워크를 이용하는 다른 어플리케이션들은 이와 비슷한 형태로 패킷별로 고유의 ID를 정해서 사용한다.
네트워크로 패킷이 수신되었을 때 그룹 ID와 노드 ID가 자신의 ID와 동일하더라도 패킷 ID에 대한 핸들러를 구현해놓지 않았으면 해당 패킷은 무시된다.
configuration 부분을 보시면 하위 컴포넌트들과 연결할 때 이 ID를 다음과 같이 지정해서 사용하는 것을 볼 수 있다.

OscilloscopeM.ResetCounterMsg -> Comm.ReceiveMsg[AM_OSCOPERESETMSG];
OscilloscopeM.DataMsg -> Comm.SendMsg[AM_OSCOPEMSG];

위의 경우 패킷을 전송할 때는 AM_OSCOPEMSG 를 패킷에 삽입하여 전송하고, 수신되는 패킷은 AM_OSCOPERESETMSG 를 ID로 가지는 패킷만 처리하겠다는 것을 의미한다.
단순히 Oscilloscope를 수정하여 send와 receive를 하게 되면 보내는 쪽에서는 AM_OSCOPEMSG를 패킷 ID로해서 보내지만, 수신측에서는 AM_OSCOPERESETMSG를 패킷 ID로 가지는 것만 필터링 해서 받기 때문에 전송측에서 보내는 패킷을 받을 수가 없게 된다.
그러므로 네트워크와 관련된 내용을 구현할 때는 configuration 파일을 잘 살펴보고 사용하는 라이브러리와 패킷 ID를 주의하여 사용해야 한다.

2009년 11월 8일 일요일

CC2420의 전원 제어

tinyos 에서 cc2420의 제어와 관련된 컴포넌트는 CC2420RadioC 에서 담당한다. 여기서 cc2420 칩 자체의 전원을 컨트롤 할 수 있다.
CC2420Control.VREFOn() 과 CC2420Control.VREFOff() 를 사용하면 된다.
하지만 이를 사용하게 되면 전원이 On/Off 되는 과정에서 칩 자체의 초기화를 다시 해야 하는 불편함이 따른다.

그래서...
CC2420 칩 자체의 전원을 차단하지 않는 방법이 있다. 오실레이터라는 것을 이용하는 것이다.
CC2420Control.OscillatorOn()과 CC2420Control.OscillatorOff()를 사용하게 되면 칩 전원을 제어하는데 필요한 초기화등이 불필요 하므로 좀 더 효과적으로 사용할 수 있다.

CSMA/CA (Carrier Sense Multiple Access with Collision Avoidance)

센서 네트워크 기반에서 주로 사용되는 MAC 프로토콜 방식으로 물리계층과 네트워크 계층 사이에서 센서 노드 간 원활한 데이터 전송을 위해 직접 관여한다.
이는 데이터를 보내기 전에 보내고자 하는 채널 또는 링크에 다른 데이터가 전송되고 있는지 미리 확인하는 과정을 통해 해당 채널 또는 링크에 사용자가 없으면 이 때 자신의 데이터를 실어 보내는 방식을 취한다.

2009년 11월 5일 목요일

non-overlapping channel

Bluetooth나 Ieee 802.11b/g등 수 많은 무선 기기들이 노출되어 있는 환경에서 노이즈 또는 충돌없이 신뢰성 있는 통신을 위해서는 동 주파수 대역내에서 중첩되는 채널의 회피 방안은 필수이다.
CC2420 RF Chip이 사용하는 2.4Ghz 대역은 ISM 영역으로 많은 통신 표준들이 이 주파수 대역을 사용하고 있다.
이 대역을 사용하는 무선 통신들은 노이즈나 충돌이 발생하게 된다.
(IEEE 국제 표준은 비영리 목적으로 사용되기 때문에...)
특히 이 주파수 영역에 영향을 미치는 것은 역시 802.11 AP들이다.
만약 해당 사용자 중 하나가 스트리밍 서비스를 무선 인터넷을 통해 받고 있으면 그 영역은 엄청난 손실이 발생하게 된다.
하지만 802.11 역시 해당 대역을 나누어 채널별로 사용하고 있다.
802.11은 미국기준으로 2.4Ghz에서 11개의 채널을 사용하게되는데, 이 채널은 서로간의 대역을 조금씩 침범하고 있으므로, 동시에 한 공간에서 11개의 채널을 충돌없이 사용할 수는 없다. 동시에 서로의 영향없이 사용할 수 있는 채널을 non-overlap 채널이라고 하는데, 이것은 11개의 채널들 중 1번, 6번, 11번 채널이다.
이 3가지 채널은 한 공간에서 동시에 사용해도 이론상으로 서로의 대역을 침범하지 않는다.
이 3가지 802.11의 non-overlap 채널들과 802.15.4(cc2420)의 채널들을 비교하면, cc2420이 제공하는 11번부터 26번 채널 중, 15번, 20번, 25번, 26번 채널은 802.11과 겹치지 않아 노이즈가 적으므로, 비교적 좋은 통신 성능을 보이게 된다.
만약 주변에 AP가 있을 경우, 15, 20, 25, 26번 채널을 선택하는 것이 좋고, AP가 없다면 802.15.4의 채널은 모두 서로 간에 non-overlap이기 때문에 어떠한 채널을 선택해도 큰 상관은 없다.

2009년 11월 2일 월요일

LDT(Location Determination Technology)

GPS 또는 이에 준하는 무선 네트워크의 기지국 위치를 활용하여 서비스 요청 단말기의 정확한 위치를 파악하는 기술.


[ 거리정보 기반 위치측정 ]

1. ToA (Time of Arrival)
전송노드가 신호를 발생시켜 신호가 목적노드에 도달한 시간을 거리로 변환시키는 기술.
ToF(Time of Fight)라고 불리기도 함.
소리 or 초음파와 같은 신호를 전송하여 목적지에 도달하기까지의 시간에 신호의 속도를 곱한 값이 거리가 됨.
두 노드간 신호의 전송시간을 정확하게 하기 위해 양 단말간 클럭의 동기화가 정확히 이뤄져야함.
대표적인 예로 GPS가 있음

2. TDoA(Time Difference of Arrival)
속도가 다른 두 신호를 동시에 전송하여 목적지에 도착하는 시간의 차이를 거리로 환산하는 기술.
일반적으로 초음파 신호와 라디오 신호를 동시에 전송하며, 라디오 신호는 빛의 속도로 진행되고 초음파 신호는 음속으로 진행되는 속도의 차이를 이용함.
절대적인 시간 정보 없이 시간차를 이용하므로 동기화가 필요하진 않지만 실제로 동시에 두 신호를 보내기 어려우므로 오차 보정 방식을 취함.

3. AoA(Angle of Arrival)
센서에서 타깃이 보내는 신호의 방향각을 이용하여 각을 측정하고 각 센서와 타깃 사이의 방향각 교차점을 계산하여 타깃의 위치를 측정하는 기술.
최소 2개 이상의 방향각들이 필요하며 이들을 교차시킴으로써 위치 파악이 가능함.
타깃이 센서와 멀리 있다는 가정에 근거를 두어, 가까울 경우 주변환경에 의해 산란이 되어 부적절.

* 위 기술 모두 LOS에 의존하여야 하지만 Non-LOS지역의 반사와 굴절로 인해 측정에 오류가 발생함. 이를 해결하기 위해 많은 논문들이 해결책을 제시하고 있음

4. RSSI : 수신신호의 세기에 기반을 둔 위치측정
RSSI(Received Signal Strength Indication)는 신호를 수신한 노드가 신호의 강도를 이용하여 신호가 감쇄된 정도를 거리로 환산하는 방법.
미리 정의된 다양한 지점에서 신호 세기들을 RSSI 표본 수집을 통해 측정 후 타깃의 송신 신호를 각 센서들이 수신할 때 발생하는 신호의 감쇠정도를 측정한 뒤 이를 확률적 방법을 통해 미리 수집되었던 RSSI 표본과 매칭하여 위치 측정.
장애물이 존재하거나 복잡한 실내 환경일 경우 거리 측정 오차가 매우 큼.


[거리정보에 기반을 두지 않은 위치인식 기술]

1. 중점기법
앵커의 비컨 신호를 사용하며 타겟의 위치는 다수의 앵커로부터 한 홉으로 인식이 가능한 공통된 지역의 중심으로 나타냄.

2. APIT(Approximate Point In Triangle)
한 홉으로 연결이 가능한 앵커들로 삼각형을 형성하고, 타겟 노드가 그 삼각형 내부에 있는지의 여부를 인식한 후, 타겟노드를 포함하는 삼각형 영역의 중첩된 영역의 중심점을 타겟의 위치로 결정하는 알고리즘.
앵커는 수많은 삼각형을 형성하기 위해 전송범위가 긴 방향성 안테나를 장착해야 함.
타겟노드를 포함한 일반 미지노드들은 앵커로부터 수신된 신호의 세기를 측정할 수 있어야 함.