사용자 삽입 이미지

퍼스널 미디어 뷰어

A show attendee tries out Myvu's personal media viewer at the Consumer Electronics Show (CES) in Las Vegas, Wednesday, Jan. 9, 2008. (AP Photo/Jae C. Hong)
쑈,참석자,충분히시험했다,Myvu,개인미디어뷰어,접점하고있는것,소비자전자쇼(CES),둘러싸고있는것,라스베가스,2008.1.9.수요일.
Posted by 따봉맨
사용자 삽입 이미지

AP Photo/Chris Pizzello/File

In a file photo Eddie Murphy and Tracey Edmonds arrive at 'Movies Rock: A Celebration of Music in Film,' at the Kodak Theater in Los Angeles, Sunday, Dec. 2, 2007. The pair were married Tuesday, Jan. 1, 2008, on a private island off Bora Bora in French Polynesia in front of a small group of family and friends, their representatives told People magazine.
사진안에는,Eddie Murphy 와 Tracey Edmonds,도착했다,접점한곳은,"Movies Rock:축하,밀접한관련이있는것은,음악,감싸고있는곳은,영화",접점한곳은,코닥극장,감싸고있는곳은,Los Angeles,일요일,2007.12.2.

사진속의커플은,결혼했다,2008.1.1,화요일,접하고있는면은,개인섬,떨어져있다,Bora Bora,감싸고있는것은,French Polynesia,감싸고있는것은,앞쪽이다,밀접한관련이있는것은,작은단체,밀접한관련이있는것은,가족과친구,그들의,대표자,말했다,People magazine.


사용자 삽입 이미지

AP Photo/The Post, Bruce R. Bennett

Leslie and George Brock pose with a rare purple pearl found while eating a plate of steamed clams at Dave's Last Resort in Lake Worth, Fla. Sunday, Dec. 30, 2007. At least one expert said the find could be worth thousands of dollars.

Leslie and George Brock,포즈를취하다,함께,진귀한 자줏빛 진주,발견했다,먹는중에,접시,밀접한관련이있는것은,찐조개,접점한곳은,Dave's Last Resort,둘러싸고있는것은,Lake Worth, Fla. 2007.12.30, 일요일.

측근의,전문가,말했다,찾은것이다,1000달러가량의가치.


사용자 삽입 이미지

REUTERS/Mark Avery (UNITED STATES)

Protesters advocating impeachment of U.S. President George W. Bush and Vice President Dick Cheney join spectators of the 119th annual Rose Parade in Pasadena, California January 1, 2008.

Protesters,주장한다,비난,밀접한관련이있는것은,미국대통령,George W. Bush,과,나쁜대통령,Dick Cheney,연결되다,구경꾼,밀접한관련이있는것은,119번째,해마다열리는,장미퍼레이드,둘러싸고있는것은,Pasadena, California,2008.1.1.


사용자 삽입 이미지

AP Photo/Mike Groll

Tommy Arner carries a snow shovel in Albany, N.Y., Monday, Dec. 31, 2007. A winter storm dropped 10 inches of snow in the Albany area.

Tommy Arner,옮겼다,눈삽,둘러싸고있는것은,뉴욕 Albany,2007.12.31.월요일.
겨울,폭풍,내렸다,10인치,밀접한관련이있는것은,눈,둘러싸고있는것은,Albany지역.
Posted by 따봉맨
많이 사용하시는 툴이 있습니다.

"URL Snooper" 로 미디어의 URL 을 알아낸 후, "Net Transport 2" 로 저장하시거나,
 "Replay Media Catcher" 를 사용하시면 됩니다.
"Net Transport 2" 은 http, MMS, RTSP 이 가능하고,
"Replay Media Catcher" 은 http, RTMP 이 가능합니다.

http, mms, rtsp 는 범용 프로토콜이고, rtmp 는 adobe 사에서 정의한 스트리밍 프로토콜입니다.
flv 화일 같은 경우, http 프로토콜을 사용하는 경우가 대부분 이지만, rtmp 프로토콜을 사용하는 경우도 있습니다. 이런 경우 "Replay Media Catcher" 을 사용하시면 됩니다.
"Replay Media Catcher" 의 좋은 점은 패킷 스니핑 기능이 내장되어 있어서, 별도의 스니핑 툴이 필요 없다는 것입니다. 그리고 미디어 관련된 URL 만 자동 인식해 주어 정말 편합니다. ^^

"팝디제이"나 "판도라live"에서 사용하는 프로토콜은 자체 개발한 스트리밍 프로토콜을 사용하고 있습니다. 그래서 위와 같은 스니핑 툴로는 인식이 되지 않습니다.

아래는 해당 프로그램의 URL 링크입니다.

사용해보세요.

즐~ ^^*

Posted by 따봉맨
무선 데이터 통신을 위한 선택..
블루투스로 해볼까???
공부해봅시다~

[WindowsCE 6.0 특집 ⑤] 윈도우 임베디드 CE 6.0 블루투스 포팅

오익성(디오텔 기술연구소 대리)   2007/10/22
WindowsCE 6.0
embeddedce
Microsoft
DST
필자는 윈도우 CE 플랫폼 전문 개발업체인 디오텔 기술 연구소에서 근무하고 있으며, OS포팅과 디바이스 드라이버 및 블루투스 개발을 담당하고 있다.

시작에 앞서
우리는 선(wire)이 사라지고 있는 시대에 살고 있다. 장치와 장치를 연결하는 매개체였던 선은 이미 무선 네트워크로 대체되고 있다. 또한, 한 개인을 중심으로 하는 퍼스널 네트워크는 이제 옛 SF영화에서 보던 신기한 것이 아니다. 무선 이어셋을 귀에 꽂고 통화를 하며, 친구들과 케이블 없이 핸드폰으로 친구들과 사진전송 또는 게임을 하기도 한다.

집에서는 무선 마우스와 프린터를 사용하고, 포터블 디바이스를 사용해 간단한 접속만으로 무선 인터넷을 사용하고 있다. 어느덧 무선통신은 편리함을 넘어 필수품으로 점점 자리 잡아가고 있다. 그리고 그 중심에는 "블루투스"라는 기술이 존재하고 있다.

Bluetooth란?
블루투스 기술은 작고, 저렴한 가격, 100mW 이하의 저전력 소모로 근거리 송신기를 모바일 디바이스에 탑재하여 무선환경을 제공해 주는 하나의 기술이다. 1994년 에릭슨 모바일 커뮤니케이션의 사내 프로젝트로 시작되었으며, 2.4GHz ISM(Industrial Scientific Medicine) 밴드를 사용한다.

1998년 2월에 에릭슨, 노키아, IBM, 도시바, 인텔로 구성된 표준화 단체인 SIG(Special Interest Group)가 발족되었다. 간섭방지와 보안을 위해 1600 hops/sec 주파수 호핑을 사용한다. 3개의 voice 채널과 1개의 data 채널을 갖고, 1Mbps까지 데이터를 전송할 수 있다.

WinCE 6.0 모듈러 블루투스 아키텍처
스택의 특징을 살펴보면 다음과 같다.
- CE에서 플랫폼이 빌드될 때 레이어(Layer)들을 교체할 수 있다.
- 부가적인 레이어를 추가하는 것도 가능하다.
- WinSock을 통하여, SDP, RFCOMM과 L2CAP를 접속할 수 있다.
- 시리얼 포트 프로파일(Serial Port Profile)을 액세스하여 COM 포트 에뮬레이션(Emulation)을 단순하게 구현할 수 있다.
- 다양한 Vendor Specific Module에 대한 HCI 전송(Transport) 레이어를 갖추고 있다.

OBEX (Object Exchange) : 블루투스와 IrDA통신을 통해서 winsock 상위에 구현된 Object 교환 프로토콜이다.
TDI (Transport Driver Interface) : Winsock 기반으로 하는 유저 API를 제공하는 인터페이스 레이어이다.
COM Port Emulation : RFCOMM 채널을 통하여 만들어지는 virtual COM port를 사용할 수 있도록 만들어준다. dial-up과 LAN access profile들은 이것을 사용한다.
SDP (Service Discovery Protocol) : 블루투스 스택 상위에서 서비스들의 설정/발견을 다루는 프로토콜이다.
RFCOMM(Serial Cable Emulation Protocol) : TS07.10 프로토콜의 블루투스 adaptation이다. 버추얼 COM 에뮬레이션 설립과 점대점 프로토콜을 제공한다.
PAN (Personal Area Network) profile : 블루투스 전송 레이어를 통하여 진행되는 표준 IP-based 네트워크 서비스를 지원하기 위한 절차를 정의한다.
HID (Human Interface Device) profile : 키보드, 마우스와 같은 장비를 지원하기 위한 기능을 정의한다.
L2CAP (Logical Link Control and Adaptation Protocol) : multiplexing, 패킷을 segmentation과 reassemble을 하고, quality of Service(QoS)를 구현한 connection-based 프로토콜이다.
Third Party Extensions : 새로운 프로파일을 생성하여 하위 스택만을 사용하여 새로운 개발이 가능하다. 그러나 개발하는 데 있어서 블루투스에 대한 많은 지식이 필요하다.
HCI (Host Controller Interface) : 컨트롤러 관리, 링크 설립과 유지를 책임지는, 블루투스 하드웨어와의 기본적인 인터페이스이다.
Bluetooth Universal Transport Manager (BthUniv) : 전송 레이어와 HCI layer 사이에서 중간 transport driver이다. PnP 디바이스를 발견하고, 적절한 transport driver를 로드한다.
HCI Transport Layer : 블루투스 하드웨어로 HCI 명령어를 전달해주는 레이어이다.
LMP (Link Manager Protocol) : 블루투스 장치들 사이에서 링크 설립을 다루는 프로토콜이다.
BB (Baseband) : piconet을 형성하는 블루투스 유닛(unit) 사이에서 물리적인 RF 링크를 가능하게 한다.

블루투스 스택은 크게 세 부분으로 나누어 볼 수 있다.

그림에서 블루투스 모듈 부분은 LMP와 BB 레이어를 갖고 있다. 이 부분은 RF radio를 담당하고, 물리적인 링크를 관리하는 부분이다. 블루투스의 콘셉트에 맞게 다양한 하드웨어 인터페이스를 지원할 수 있도록 설계되어 있다. USB, UART, PCMCIA, SDIO 등과 같이 빌트인, 플러그앤플레이 형태의 디바이스를 사용할 수 있다.

그 위로, HCI Layer부분은 HCI, BthUniv 그리고 HCI 전송 레이어를 포함한다. 다양한 블루투스 모듈 인터페이스를 지원하기 위한 드라이버들의 집합이다. 또 각 모듈 제조사들이 제공하는 프로토콜에 대하여 통신을 가능케 하고 있다.

나머지 부분은 다소 복잡해 보이는 구조처럼 보인다. 그러나 그만큼 다양한 형태로 스택 레이어를 조합하여 필요에 맞게 사용할 수 있다는 장점을 갖고 있다. 스택을 용도에 맞게 최소화함으로써 장치의 리소스나 사용을 간소화해 더 많은 효율성으로 얻을 수 있을 것이다.

WinCE 6.0에서 블루투스 프로파일
프로파일은 블루투스를 최상위 애플리케이션에서 어떻게 사용할지를 정의한 규격이다.

하위 스택(HCI 전송 레이어 이하)은 지극히 물리적인 통신을 위한 설정들을 정의하였지만, 상위 스택에서는 애플리케이션 간의 피어투피어 통신을 위해 서비스에 대한 약속을 하여야 한다.

블루투스 장치들은 이 프로파일에 정의되어 있는 방식에 따라 통신하게 된다. 가장 중요한 이유는 다른 제조사의 다른 장치와의 상호 접속성 및 호환성을 확보하기 위해 정의된 것이다.

다음은 프로파일의 목적이다.

- 엔드유저 기능을 구현하기 위한 표준시스템의 Specification이 어떻게 되어야 하는지를 설명한다.
- 동일한 표준에 의한 구현으로 호환성을 높인다.
- 각각 선택사항의 구현은 애플리케이션들이 동일한 기능을 갖도록 한다.
- 파라미터들은 애플리케이션이 동일하게 작동하도록 한다.
- 서로 다른 표준들을 조합하기 위한 방식이 정의된다.
- 유저 인터페이스 가이드라인이 정의된다.

WinCE 6.0에서는 모든 프로파일을 구현되어 있지 않기 때문에 개발하려는 장비에 필요한 프로파일이 존재하지 않는다면 써드파티 업체를 통해 프로파일을 구현하여야 한다. CE 6.0에서는 <그림 1>에서 표시한 것과 같이 존재하고 있다.


GAP (Generic Access Profile) 블루투스 장치간의 접속을 발견 또는 설정하기 위한 기본적인 요소를 정의하고 있다.
GOEP (Generic Object Exchange Profile) OBEX를 사용하는 모델을 지원하기 위한 절차를 포함한다.
SPP (Serial Port Profile) : RFCOMM을 사용하는 블루투스 장치의 피어(peer)간 시리얼 케이블 연결을 하기 위한 절차를 정의한다.
SPP (Serial Port Profile) RFCOMM을 사용하는 블루투스 장비 간의 시리얼 케이블 접속설정을 위해 필요한 처리를 정의한다.
FTP (File Transfer Profile) 블루투스 장비 간의 데이터 전송 또는object를 처리를 지원
HFP (Hands-Free Profile) 블루투스 장비와 셀폰 간의 핸즈프리 기능을 지원
HSP (Headset Profile) 블루투스 장비와 셀폰 간의 헤드셋 기능을 사용하기 위한 절차를 정의한다.
HID (Human Interface Device Profile) 키보드, 마우스와 같은 장비를 지원하기 위한 기능을 정의한다.
LAP (LAN Access Profile) PPP(Point-to-Point Protocol)을 사용하는 LAN 접속을 지원
OPP (Object Push Profile) vCard과 같은 적은 데이터양의 오브젝트 교환을 지원
PAN (Personal Area Networking Profile) 블루투스 전송 레이어를 통하여 진행되는 네트워크 서비스를 기본으로 하는 표준 IP를 지원한다.
-point-to-point 연결을 사용하는 두개의 블루투스 장치사이에서 데이터를 전송
-좁은 지역에서 임의의 멤버간의 데이터 공유 또는게임하기 위한 목적으로 멤버를 추가하거나 삭제한다.

Vendor Specific Module
개발을 하면서, 처음 부딪히는 문제는 어떤 인터페이스를 사용하는 블루투스 모듈을 사용하여 장치와 통신을 할 것인가일 것이다. CE에서는 USB, UART, BCSP, Socket, AmbiCom 프로토콜을 사용하는 모듈에 대한 인터페이스를 제공하고 있다.

다음의 드라이버들은 %_WINCEROOT%\Public\Common\Oak\Drivers\Bluetooth\Transports에서 볼 수 있다.

- BthAmb.dll : AmbiCom사의 uart protocol
- BthCsr.dll : CSR(Cambridge Sillicon Radio)사의 BCSP(BlueCore Serial Protocol)를 지원
- BthSc.dll : SocketCom/Nokia사의 protocol을 지원
- BthUart.dll : UART protocol interface
- BthUsb.dll : USB interface
- BthSdio.dll : SDIO interface
(%_WINCEROOT%\public\common\oak\drivers\sdcard\SDClientDrivers\bluetooth)


사용하려는 블루투스 모듈이 어떤 프로토콜을 사용하는지를 확인 하고 컴포넌트를 추가하면 된다. 위 그림은 Bluetooth stack with Universal Loadable Driver(BthUniv)를 추가하였을 때의 그림이다. BthUniv에 관한 내용은 아래에서 자세히 다루도록 한다.

Bluetooth Universal Transport Manager
WinCE 6.0에서는 HCI 전송 레이어와 스택에서의 transport driver 사이에 intermediate transport driver인 BthUniv를 제공하고 있다. 그 이유는 Built-in and PnP transport driver를 지원하고, 적절한 transport driver를 로드한다(BthUniv는 항상 빌드인 드라이버보다 PnP 드라이버를 먼저 확인한다).

BthUniv 는 다음과 같은 일을 한다.
- PnP 블루투스 카드의 삽입/제거를 감지한다.
- HCI transport interface call을 변환하여, stack의 transport driver로 전달한다.
- 하위 transport driver를 로드한다.

Bluetooth Universal Transport Manager Registry Settings
Bluetooth Universal Transport Manager (BthUniv) PCMCIA 또는 USB와 같은 PnP 장치를 찾는다. 만약에, PnP 장치가 찾아지지 않는다면, BthUniv는 레지스트리에 나열되어 있는 순서대로 빌드인 장치를 찾는다.

PnP장치가 시스템에 연결되었을 때, 이것과 연관된 transport driver와 세팅 값을 구분하는 IClass 값을 사용할 수 있다.
BthUniv의 레지스트리 설정은 다음과 같다.

[HKEY_LOCAL_MACHINE\Software\Microsoft\Bluetooth\Transports\BuiltIn\1]
"driver"="bthcsr.dll" ;; 로드될 드라이버 이름
"name"="COM7:" ;; 상위 stack과 통신할 channel명
"baud"=dword:1c200 ;; baud-rate

빌트인 transport driver를 위한 설정 값을 나타낸다. Key에서 "1"값은 우선순위를 나타낸다.

개발하는 환경에 맞게 driver name과 port를 변경해주어야 한다.

[HKEY_LOCAL_MACHINE\Software\Microsoft\Bluetooth\Transports\PnP\]

위 레지스트리는 PnP transport driver를 위한 설정 값을 나타낸다.
GUID Key({}안의 표시되는)는 PnP transport driver의 IClass 레지스트리 키 값을 나타낸다.

위 값들은 BthUniv에게 사용하려고 하는 transport registry settings를 알려준다. 이 세팅값은 HCI_OpenConnection하기 전에 [HKEY_LOCAL_MACHINE\Software\Microsoft\Bluetooth\HCI] 로 복사된다.

만약에, SYSGEN_BTH_CSR_ONLY(SDIO_ONLY, USB_ONLY, UART_ONLY)와 값이 특별한 Sysgen 값의 설정으로 transport driver를 사용하면, BthUniv는 사용되지 않는다. 이러한 경우에, transport driver를 위한 레지스트리 값은 [HKEY_LOCAL_MACHINE\Software\Microsoft\Bluetooth\HCI] 에서 바로 불러 쓴다. transport driver를 설정하기 위해서는, 이 레지스트리 key를 변경해주어야 한다.

예를 들면, CSR 칩셋을 사용하는 빌트인 칩셋이고, COM7:을 통해 연결되어 있고, baud rate가 115200 bps라고 한다면, 다음과 같이 레지스트리를 추가해주어야 한다.

; @CESYSGEN IF BTD_CSR
[HKEY_LOCAL_MACHINE\Software\Microsoft\Bluetooth\HCI]
"flags"=dword:1
"name"="COM7:"
"baud"=dword:1c200
; @CESYSGEN ENDIF

NOTE . CSR 칩셋을 사용하는 빌트인 카드를 쓰는 경우에는 chipset이 BCSP link establishment를 지원하고 있는지를 확인하여, 지원하지 않는 경우에는 %_WINCEROOT%\Public\Common\Oak\Drivers\Bluetooth\Transports\bcsp\csr\hcibcsp.cpp에서 다음의 define의 주석을 풀어주어야 정상적으로 동작한다.
#define BCSP_NO_LINK_ESTABLISHMENT

다음은 빌트인, PnP 모듈을 사용했을 때, transport driver가 불려지는 구조를 간단히 표현하였다.



WinCE 6.0에서 블루투스 컴포넌트
- CE에서 컴포넌트가 어떻게 구성이 되어 있고, 어떤 것을 올려야 하는지에 대해서 알아보자.

컴포넌트 구성은 크게 두 부분이다. 프로파일과 stack with transport driver이다. 4.2에서는 구성이 다소 복잡했었는데, 5.0과 6.0에서는 잘 분류되어 있다.

먼저 위에 설명한 transport driver에 대한 것은 Bluetooth Stack with Universal Loadable Driver를 추가한 것이다. 이것은 말 그대로, 블루투스 스택, BthUniv와 각각의 transport driver들을 모두 올린 것이다.

그 외에 Integrated CSR (or SDIO, UART, USB) 드라이버 컴포넌트를 추가하게 되면, 블루투스 스택과 각각의 transport driver들만 추가되게 된다. 그 이유는 한 가지 모듈만 사용하는 데에 있어 다른 모듈에 대한 transport driver는 필요하지 않기 때문이다. 그렇기 때문에 블루투스 스택(Btd.dll)에서 직접 드라이버 로드를 책임지고 있다.

- Bluetooth Stack with Universal Loadable Driver

- Bluetooth Stack with Integrated CSR chipset (or SDIO,UART,USB) Driver

가장 중요한 부분인 Btd.dll은 Transport와 같이 OS에 올라가게 된다.

가장 중요한 btd.dll부분은 %_WINCEROOT%\private\winceos\comm\bluetooth에 존재하니, private코드가 있는 개발자는 참고하면 된다.

이제 나머지들은 모두 프로파일에 대한 컴포넌트들이다. 이후에 설명할 스택을 사용한 애플리케이션 제작을 할 때, 필요한 프로파일들을 추가하여 컴포넌트를 사용하면 된다.

추가적인 사용 예는 Sample Application을 참고하면 된다.

그러면, 컴포넌트들을 다음과 같이 다양한 형태의 레이어를 조합하여 사용할 수 있다. 스택인 Btd.dll을 구동시키고, 필요에 맞게 포트를 열어주고, 필요한 프로파일 및 컴포넌트들을 구성할 할 수 있다. 다음은 구성하는 예를 볼 수 있다.


무엇을 사용하여 애플리케이션을 개발할 것인가?
애플리케이션을 개발하는 방식으로는 Btdrt, Winsock, COM port emulation을 사용할 수 있다. 다음의 방식들을 사용하여, 장치 검색, 인증과 서비스 검색 등의 작업을 할 수 있다.

- Btdrt Helper Library (Btdrt.dll)
유저 프로그램에 management API를 제공하는 runtime thunk dll이다.
Power mode, Security, inquiry, SDP (Service Discovery Protocol) 등등을Bluetooth Management 기능을 심플한 interface로 제공한다.
이 함수의 대부분은 동등한 Winsock 함수를 갖는다.

- Winsock Programming
Winsock interface는 다음의 함수들을 통하여 블루투스 접속을 지원한다.
socket - 특정 서비스에 소켓 바운드를 생성한다.
bind - socket을 가지고 local address를 associate한다.
getsockname - local socket 이름을 가져온다.
getpeername - socket peer의 이름을 가져온다.
connect - 특정 소켓으로 접속을 만든다.
accept - 들어오는 접속을 허용한다.
getsockopt - 소켓 옵션 정보를 가져온다.
setsockopt - 소켓 옵션 정보를 설정한다.

서버는 소켓을 생성하고, 주어진 RFCOMM 채널을 소켓을 bind하고, 이 채널로 SDP record를 보낸다. 그리고 나서, 들어오는 접속을 listen한다.

SOCKET s = socket(...);
bind(s, ...);
listen(s, ...);
for(; ;)
{
SOCKET s2= accept(s, ...);
SpinThreadsForConnection(s2);
}


클라이언트는 소켓을 생성하고, SDP 쿼리 또는 타켓 서비스의 UUID가 포함된 알려진 서버 채널을 사용하는 서버에 소켓을 접속한다. 그리고, 요청에 대해 send와 receive를 시작한다.

SOCKET s = socket(...);
connect(s, ...);
send(s, ...); // send request
recv(s, ...); // get response
closesocket(s); // done


- COM Port Emulation
● COM Port emulator는 RFCOMM에게 가상의 COM port를 기반으로 하는 접속을 제공한다.
● COM Port emulation 레이어가 블루투스 스택에 존재할 때, 가상서버 또는 COM port 클라이언트는 Outgoing 접속을 생성할 수 있고, incoming RFCOMM 접속을 받아들일 수 있다.
● 가상 COM port를 생성하기 위해서는, 다음과 같이 RegisterDevice를 하면 된다.
RegisterDevice (L"COM", index, L"btd.dll", (DWORD)&pp);
● 가상 COM Port를 제거하려면, DeregisterDevice함수를 부르면 된다.
● 한번 생성되면, COM port는 serial port와 똑같이 동작하고, serial API과 같은 API들을 사용하여 port에 접근이 가능하다.
● 클라이언트 Port들에서는, 물리적 접속은 장치가 CreateFile API를 사용하여 read / write 접근일 때만 생성된다. 물리적인 접속은 read 또는 write 접근의 첫 번째 handle이 끝났을 때만 서버와 클라이언트가 종료한다.
● 다음과 같은 함수들을 지원한다.
- ClearCommError
- EscapeCommFunction
- GetCommMask
- GetCommModemStatus
- GetCommProperties
- GetCommState
- GetCommTimeouts
- SetCommMask
- SetCommState
- SetCommTimeouts
- WaitCommEvent

블루투스 스택 서비스
블루투스 스택인 BTD.dll은 어떻게 RegisterDevice되는지를 알아보겠다. 또한, 스택을 서비스를 Start/Stop/Refresh는 어떻게 되는지 알아보자.

Btd.dll은 device.exe와 TDI provider인 AFD에 의해 로드된다. AFD는 BuiltIn 드라이버로 등록되어 있기 때문에, startup시에 btd.dll을 RegisterDevice (L"BTD", 0, L"btd.dll",….) 가 된다.

그렇기 때문에, 서비스를 관리하기 위한 접근은 다음과 같이 시도하면 된다.

WCHAR *strCard = L"card";
HANDLE hDev = CreateFile (L"BTD0:", ...);
// 스택 서비스를 시작할 때
DeviceIoControl (hDev, IOCTL_SERVICE_START, strCard, ...);
// 스택 서비스를 중지할 때
DeviceIoControl (hDev, IOCTL_SERVICE_STOP, strCard, ...);
// 서비스를 재초기화할 때
DeviceIoControl (hDev, IOCTL_SERVICE_REFRESH, NULL, 0, NULL, NULL, NULL, NULL);

이렇게 서비스를 BTD의 IOControl을 사용하여, 서비스를 시작하고, Power down/up시에 서비스를 refresh하여 서비스를 유지하여 stack을 사용하면 된다.

좀 더 자세한 사항은 아래의 Sample Application들을 참고하면 된다.

Sample Applications
CE에서는 여러 가지 샘플들을 지원하고 있다. 사실 이 샘플만 가지고 어떤 제품을 만드는 데에는 턱없이 부족할 것이다. 그러나 이 샘플들로 각각의 기능별 테스트를 해 볼 수 있기 때문에 개발자가 필요한 부분을 잘 조합한다면, 애플리케이션 구현에 많은 도움을 얻을 수 있을 것이다. 각각의 샘플들이 어떤 기능을 구현하였는지 보도록 하겠다.

● Virtual COM Port Sample - sca.exe
텍스트 메시지와 파일을 교환하기 위해, Virtual COM Port Interface를 통하여 Stack을 사용하는 예제이다.
● Winsock Interface Sample - ssa.exe
텍스트 메시지와 파일을 교환하기 위해, Winsock Interface를 통하여 Stack을 사용하는 예제이다.
● Querying and Pairing Sample -btpair.exe
블루투스 스택과 Security subsystem의 사용을 설명하기 위해 querying, pairing과 사용자 인증을 구현하였다.
● Protocol Extension Sample - bthlink.exe
Windows CE에서 Bluetooth protocol extension을 생성하는 절차를 설명하였다.
● Device Driver Management Sample - btloader.exe
PCMCIA/CF 카드들 위한 블루투스 장치 드라이버를 관리하는 예제이다.
● SDP Search and Record Generator Sample -bthnscreate.exe
SDP record를 생성하고, SDP Service 또는 Attribute를 초기화한다.
● Virtual COM Port Creation Sample -comtest.exe
Virtual COM port를 생성하고, 테스트 한다.
● Flow Control Sample - fctest.exe
스택에서 flow control의 사용 예를 보여준다.
● Winsock Options Sample - opttest.exe
스택에서 Winsock getsockopt와 setsockopt programming interface를 사용하는 예제이다.
● Phone Management Sample - phoneui.exe
클라이언트 측 모뎀을 위한 Bluetooth port emulator, 장치 발견과 SDP 요청을 하는 방법을 나타내었다.
● Printer Discovery Sample - printui.exe
클라이언트 측 프린터을 위한 Bluetooth port emulator, 장치 발견과 SDP 요청을 하는 방법을 나타내었다.
● SDP Search Sample - sdpsearch.exe
SDP 응답을 분석하기 위해 sdpuser.dll로부터 COM 과정을 사용 예를 설명한다.
● Bluetooth Control Panel - Bthpnl.cpl
장치 검색 및 Inquiry, Pairing을 모두 보여주고, Virtual COM port를 사용하고 있는 종합적인 예이다. %_WINCEROOT%\public\common\oak\drivers\netui\btmgmtui.cpp

마치며
WinCE 4.2, 5.0과 6.0을 보면, 구조적으로 많은 변화가 있지는 않다. 특히, 5.0과 6.0에서는 거의 변화가 없다는 것을 알 수 있다. 하지만, 4.2에서 미흡했던 프로파일의 추가는 개발하는 데 많은 도움이 될 것으로 생각된다.

가능한 많은 내용을 담기 위해 노력했으나, 여전히 부족하고 다루지 못한 내용이 많다는 생각이 든다. 여하튼, 기초적인 부분의 이해에 중점을 두었고, 다소 이해가 안되고 틀린 부분이 있더라도 많은 개발자들의 양해를 부탁한다. 또한, 필드에서 블루투스로 고생하는 개발자들께 가뭄에 단비가 되었으면 한다. @

참고자료
-Using The Bluetooth Stack In Windows CE, 2004, Randy W.Moore
-Bluetooth : Connect Without Cables, 2001, Jennifer Bray & Charles F Sturman
-Platform Builder 6.0 help
[원문링크]
http://www.zdnet.co.kr/builder/platform/windows/0,39031685,39162446,00.htm

'Research' 카테고리의 다른 글

넷상의 미디어 스트림을 저장하자!!  (0) 2007.12.21
방송통신 기술 동향 연구  (0) 2007.12.05
RMCP-2 에 대해 알아보자!  (0) 2007.12.05
Posted by 따봉맨
www.kbc.go.kr 에서 다운 받았습니다.

참고하세요~ ^^
Posted by 따봉맨
"멀티캐스트" 로 검색해 보다가 발견한 것입니다.

RMCP-2(Relayed Multi-Cast Protocol for 1:N Group Service) 라고 하는데,

명칭의 R 이 Relayed 라고 하니... 팝디제이의 P2P 와 같은 개념이라는 생각이 들었다.

노드 협업에 의한 트래픽 분산이라는 측면에서 보면 같은 것 같은데...

"Overlay Multicast" 라고도 부르는 것 같다.

이름을 이렇게 지어 놓으니 더 좋은 알고리즘 같아 보이는 군요. ^^

역시 이름을 잘 져야한다니깐...

2005/06/27 12:24
http://blog.naver.com/hjo0075?Redirect=Log&logNo=140014416364

 2007/03/10 19:31
http://blog.naver.com/hjo0075?Redirect=Log&logNo=150015381520

pdf 벼전
입니다. 참고하세요!!

사용자 삽입 이미지

RMCP2 구조도




위의 그림을 보면...

SM 이 Relay 망의 노드를 관리하고 있고,

SMA 가 최초 스트리밍의 진원지이고, 그러니까 방송자인 것이죠..

RMA 는 이 방송을 수신하는 수신자라고 보면 됩니다.

그 아래에 있는 또 다른 RMA 들은 자기가 수신한 스트림을 다시 Relay 하는 거죠..

즉, P2P 라는 것이네요..

이 구조를 좀 더 체계화하고, 공개 알고리즘 한 것이 RMCP-2 인건가? ㅡ.ㅡ;;

개발하신 분 수고 많으셨습니다...

팝디제이 것과 비슷하네요..

즐~개발하333
Posted by 따봉맨
컵퓨터 비젼에 관심을 갖고,
무엇을 할까 생각하다가..
로보트를 만들어보자 생각했다.

근데 내가 어떻게 만들어???
그래서 로봇도 소프트웨어로 에뮬레이션 해보면 재밌겠다 싶더라고..

http://www.ibm.com/developerworks/linux/library/l-robotools/index.html

영어 공부할 겸.. 읽어 봅시다.

Open source robotics toolkits

Use virtual arenas to test your robotics algorithms

developerWorks
Document options
Set printer orientation to landscape mode

Print this page

Email this page

E-mail this page

Document options requiring JavaScript are not displayed


New forum features

Try private messaging, read-tracking, and more


Rate this page

Help us improve this content


Level: Intermediate

M. Tim Jones (mtj@mtjones.com), Consultant Engineer, Emulex

05 Sep 2006

Building a robot involves skills from many disciplines, including embedded firmware and hardware design, sensor selection, controls systems design, and mechanical design. But simulation environments can provide a virtual arena for testing, measuring, and visualizing robotics algorithms without the high cost (and time) of development. This article introduces you to some of the open source robotics toolkits for Linux®, demonstrates their capabilities, and helps you decide which is best for you.
Software robot?

Researchers at the University of Washington coined the term Softbots -- a combination of software and robot. The term intelligent agent is now more commonly used, especially in the context of Internet-capable entities. In 1996, Franklin and Graesser introduced the first agent taxonomy to classify viruses as autonomous agents.

The spectrum of traditional robots is large and varied, but with the advent of software agents (the virtual robot counterpart), these variations have expanded. Many of the characteristics of physical robots lend themselves to robots in the virtual domain. For example, mobility in physical robots implies some sort of locomotion, but mobile soft robots (or agents) can have mobility -- here, the ability to migrate between hosts in a network. Figure 1 shows a shallow view of autonomous robotics in the physical and virtual domains. This article focuses on software agents as a mechanism to simulate robots in synthetic environments.


Figure 1. Shallow taxonomy of autonomous robots
Shallow taxonomy of autonomous robots

Elements of a robot

Whether you're talking about a physical robot or a virtual (soft) robot, the fundamental concepts are the same. The robot has a set of sensors used to perceive its environment, a set of effectors to manipulate its environment, and a control system that allows the robot to act in an intentional and useful way (see Figure 2).


Figure 2. The fundamental elements of all robotic systems
The fundamental elements of all robotic systems

In the physical world, a fire-fighting robot could use temperature sensors, infrared (IR) sensors, a Global Positioning System (GPS) to perceive its environment, and motors and perhaps a fire extinguisher as effectors to manipulate its environment. A virtual search agent could use Web servers and HTTP interfaces to both perceive and manipulate the environment (the Internet) and a console as an effector to communicate with a user.

The system shown in Figure 3 is that of a closed loop, with sensors feeding the control system that drive changes in the environment. Another way to think about this is in terms of feedback. If the control system specifies an act that changes the environment, the sensors can validate this change, feeding back the new state of the environment to the control system. An open-loop system would have to assume that the acts successfully changed the state of the environment, which can never be a good thing.


Figure 3. Closing the loop with the environment
Closing the loop with the environment

When building a robot, you must consider the sensors, the effectors, and the control system as a whole. For this article, I focus on the control system and the ways in which you can simulate and validate it before spending time embedding it in a physical robot.



Back to top


Robotics and simulation

Simulation plays a key role in the field of robotics, because it permits experimentation that would otherwise be expensive and/or time-consuming. Simulation permits you to try ideas in dynamic, synthetic environments while collecting stimulus response data to determine the quality of the control system. Simulation also allows the evolution of robotics control systems, which depend on random permutations of the control system over many generations (as demonstrated by genetic algorithms).

Linux and robotics

Linux is a popular operating system for robotics, because at its roots, it shares a similar history with robotics. Robotics is a field of experimentation. It's about optimizing, trying new things, and evolving toward the future. Linux, at its heart, is about the same things. Early robots were oddities and exhibited few practical applications. Similarly, Linux began as hobbyist operating system but has grown into a powerful and stable operating system that can be found from tiny embedded devices to supercomputers (including many robots).

One of the greatest advantages to simulation occurs in multi-robot simulations. A popular venue for these simulations is in Robot Soccer, where either through simulation or with physical robots, one team of robots competes against another in the popular world sport of soccer (making it ideal for international competition). The robots must compete cooperatively against the other robots on their team (possibly with communication) as well as competitively with the robots on the opposing team, making it a challenging test of robot behavior.

But there are downsides to simulation. The real world tends to be messy and noisy, and synthetic environments are fundamentally difficult to model. Simulating a robot also tends to be difficult, as sensors in the real world can often exhibit different or unexpected characteristics. Despite the disadvantages, you can learn a lot by simulating robots in synthetic environments.



Back to top


Open source toolkits for Linux

Several open source toolkits are available for building robotic control systems. This article looks at mobile robot simulators, a physics modeling system, and finally, a simulator that supports embedding a simulated control system in a physical robot. The vast majority of toolkits available run on Linux, primarily because of the open source model. Open source software is a platform from which you can develop software more quickly and with less effort, so it's ideal. Linux also permits customization not possible in other operating systems (such as minimizing and extending the kernel). Links to these toolkits and more are in Resources section at the end of this article.

ODE

Russell Smith's Open Dynamics Engine (ODE) is an open source physics engine with which you can simulate articulated rigid body dynamics. In this way, you can simulate the physics of real-world objects independent of a graphics library (for which you could use OpenGL). You can use the ODE to model all sort of objects in synthetic environments, such as characters in three-dimensional game environments or vehicles in driving simulations. In addition to being fast, the ODE supports collision detection for real-time simulation.

What is an articulated rigid body?

An articulated rigid body is a structure that consists of a variety of shapes connected by various kinds of joints. For example, consider the joints that make up the leg or the elements in a vehicle's chassis, suspension, and wheels. The ODE can model these elements efficiently, including friction models.

The ODE currently supports the ball-and-socket, hinge, slider, fixed, angular motor, and hinge-2 (for vehicle joints) joint types, among others. It also supports a variety of collision primitives (such as sphere and plane) and several collision spaces.

The ODE is written primarily in the C++ programming language, but it exposes clean interfaces in C and C++ for integration with your application. What makes the ODE even better are the licenses under which it's released: the GNU Lesser General Public License (LGPL) and the BSD License. Under either license, you can use the ODE source in commercial products without a fee. As a result, you'll find the ODE in a variety of commercial games, flight simulators, and virtual reality simulations.

The source example in Listing 1 shows a simple world with Mars' gravity and a sphere that currently has some upward velocity. Given that the world has gravity, that upward velocity won't last long; eventually, the sphere reaches the apex and begins its descent. After the initialization is complete (that is, objects created in the world and their attributes set), you can simulate the physics of the world with a call to dWorldStep. To understand what's happening, you make a regular call to dBodyGetPosition and pass in your sphere's identifier to get its current position.


Listing 1. Simple ODE experiment of a sphere in a world with gravity
		 
#include <iostream>
#include <ode/ode.h>

#define time_step		 (float)0.1

int main()
{
  dWorldID myWorld_id;
  dBodyID mySphere_id;
  dMass sphereMass;
  const dReal *pos;
  float time = 0.0;

  /* Create a new world */
  myWorld_id = dWorldCreate();

  /* Create a sphere in the world */
  mySphere_id  = dBodyCreate( myWorld_id );

  /* Set the world's global gravity vector (Mars) -- x,y,z */
  dWorldSetGravity( myWorld_id, 0, 0, -3.77 );

  /* Set the Sphere's position in the world -- x,y,z */
  dBodySetPosition( mySphere_id, 0, 0, 100 );

  /* Set the Sphere's mass (density, radius) */
  dMassSetSphere( &sphereMass, 1, 2 );
  dBodySetMass( mySphere_id, &sphereMass );

  /* Give the sphere a small amount of upward (z) velocity */
  dBodySetLinearVel( mySphere_id, 0.0, 0.0, 5.0 );

  /* Run the simulation */
  while (time < 5.0) {

    /* Simulate the world for the defined time-step */
    dWorldStep( myWorld_id, time_step );

    /* Get the current position of the sphere */
    pos = dBodyGetPosition( mySphere_id );

    std::cout << "position (" << pos[0] << ", "
             << pos[1] << ", " << pos[2] << ")\n";

    /* Next time step */
    time += time_step;

  }

  /* Destroy the objects */
  dBodyDestroy( mySphere_id );
  dWorldDestroy( myWorld_id );

  return 0;
}

So, if you need an industrial-quality physics engine (that operates on Linux as well as other platforms) to simulate your mobile robot or unmanned aerial vehicle in realistic environments, the ODE is a superb choice. Used with the OpenGL application program interface (API), the ODE generates photo-realistic graphics with realistic physics, as well.

Simbad robot simulator

Simbad is a three-dimensional robot simulator written in the Java® programming language (so it runs on Linux and other platforms that support the Java virtual machine, or JVM); however, the simulator includes support for Python scripting (through Jython). Simbad was designed to study artificial intelligence (AI) algorithms in the context of autonomous robotics, and it includes a rich graphical user interface (GUI) for visualization not only of the robot's actions but also from the robot's perspective.

What makes Simbad interesting is that it's simple to use and allows you to create new robot behaviors quickly. But while developing for Simbad is simple, it's actually an extensible framework for robotic simulation.

With the simulator, you can create or tailor an environment, and then develop your robot controller using a variety of sensors. Available sensors include a vision sensor (color monoscopic camera), range sensors (sonars and IR detectors), and bumpers for collision detection.

The APIs for the sensors are clean and intuitive to use. The example in Listing 2 demonstrates the use of sonar and how to detect a hit (an object detected).


Listing 2. A snippet of code demonstrating simulated sonar use
		 
int sonar_id, total_sonars;

// If at least one sensor has a hit
if (sonars.oneHasHit()) {

  // Find out how many sonars are on the robot
  total_sonars = sonars.getNumSensors();

  // Iterate through each sonar
  for ( sonar_id = 0 ; sonar_id < total_sonars ; sonar_id++ ) {

    // Does this one have a hit?
    if (sonars.hasHit(sonar_id)) {

      // Emit the details (angle, range)
      System.out.println( "Sonar hit at angle " +
                           sonars.getAngle(i) +
                           " at range " +
                           sonars.getMeasurement(i) );

    }

  }

}

Other sensors available in Simbad follow a similar pattern, creating an intuitive set of APIs.

What really makes Simbad so useful is its console for robot simulation and visualization. As Figure 4 shows, the Simbad console gives you a real-time view of the world, an inspector panel that provides robot details (including the camera), and a control panel for managing the simulation.


Figure 4. The Simbad robot simulator and visualizer console
Simbad Robot Simulator and visualizer console

Simbad also provides good documentation and tutorials to get you up and running quickly in both the Java and Python languages. And along with single-robot simulation, you can simulate multiple robots simultaneously. Overall, the Simbad simulator is a great environment for testing ideas in intelligent robotics algorithms. Simbad is available under the GPL open source license.

TeamBots

TeamBots is a portable multi-agent robotic simulator that supports simulation of multi-agent control systems in dynamic environments with visualization. What makes TeamBots unique compared to other simulators such as Simbad is the portability of the control system. You can develop your control system and validate it on the simulator, and then test your control system in a real mobile robot (using the Nomadic Technologies Nomad 150 robot).

The TeamBots API provides an abstraction layer for the control system (see Figure 5). As a result, the control system has no idea whether it's running on a simulator in a synthetic environment (TBSim) or in a mobile robot platform in a real environment (TBHard).


Figure 5. The TeamBots API abstraction layer to the control system
The TeamBots API

The TeamBots simulation environment is very flexible and easily allows the construction of synthetic environments with objects and other robots. It is easy to add walls, arbitrary objects, roads, and other robots running the same or different control systems. In this way, you can build predatory/prey simulations (as one example). In addition, objects need not be static. You could place objects that move around the environment or objects that can move if nudged by a robot (such as a ball).

With TeamBots, you can model different types of robot simulations. For example, in 1997, Georgia Tech used TeamBots to win the American Association for Artificial Intelligence (AAAI) mobile robot competition with two simulated Nomad 150 robots foraging in a dynamic environment. The goal was for the two robots to search the environment, and then pick up and return the blue objects to the blue bin and the orange objects to the orange bin (see Figure 6). To add some complexity to the competition, the orange balls were dynamic and constantly moved around the environment.


Figure 6. TeamBots simulation of foraging behavior
TeamBots simulation of foraging behavior

In Figure 6, mobile robot 1 has a blue object and is moving toward the blue bin to drop it off. Robot 0 is searching.

You can also use TeamBots in the development of robotic soccer players. As soccer is a sport with international appeal, it's a great platform for competition between international universities and groups. Rules for robot soccer can differ (especially when considering the varieties that exist for mobile platforms, bipedal platforms, or Sony Aibo), but all share the fundamental model of the game.

In Figure 7, Robot 1 (yellow/white) is moving toward the ball in a goal attempt. Robot 0 (blue/red) is the opposing goal keeper and is positioning for a block. Robot soccer is actually quite interesting to watch, and the TeamBots distribution provides several teams that you can employ or use to experiment for new strategies.


Figure 7. Demonstrating TeamBots in the SoccerBots domain
TeamBots in the SoccerBots domain

TeamBots provides a Java API for soccer that allows you to concentrate on the "brain" of the player. The effector API permits turning the robot, moving at a certain speed, kicking the ball, or simply moving the ball. Sensors are built at a high level and provide APIs for determining the vector to the ball, an array of vectors to other players (team and opponents), getting the current heading, getting a vector to the opposing goal, and so on.

To give you an idea of the level of the TeamBots Soccer API, check out Listing 3, which presents a very simple strategy. This strategy (derived from the SoccerBots source by Tucker Balch) simply looks for the ball, heads to it, and then kicks it (without regard to the direction of the goal). It's a random strategy but demonstrates the simplicity of the API.


Listing 3. Simple soccer player snippet using the TeamBots SoccerBots API
		 
public int TakeStep()
{
  Vec2 ball;
  long T;

  T = abstract_robot.getTime();

  // Get the vector to the ball
  ball = abstract_robot.getBall(T);

  // Point ourselves to it
  abstract_robot.setSteerHeading(T, ball.t);

  // Go to it (maximum speed)
  abstract_robot.setSpeed(T, 1.0);

  // If we can kick it, do so!
  if (abstract_robot.canKick(T)) abstract_robot.kick(T);

  return(CSSTAT_OK);
}

The TeamBots distribution is a great environment for both prototyping and simulating mobile robots and also for executing them within real robots using the TBHard environment. TeamBots is open source (developed by Tucker Balch of Georgia Tech and Carnegie Mellon University) and can be used freely for educational and research purposes. The simulator was developed in the Java language and is distributed with full source code and several examples to help you get up and running quickly.



Back to top


Other toolkits

One of the most well-known mobile robot platforms for which numerous simulators have been written is called Khepera. Unfortunately, Khepera evolved into commercial software and is no longer open source. Fortunately, toolkits such as KControl are still available for developing control systems for Khepera on Linux.

An interesting three-dimensional robot simulator with dynamics is available in Gazebo. Gazebo models not only standard robot sensors (such as inertial measurement units, GPS receivers, and monocular cameras) but also real-world rigid-body physics for robotic environments. Gazebo supports a plug-in model in which you can load new robot sensor models into environments dynamically.

Finally, a useful robot navigation toolkit is Carmen -- the Carnegie Mellon Robot Navigation Toolkit. Carmen implements a modular architecture that provides fundamental navigation primitives such as obstacle avoidance, path planning, and mapping. As well as providing a two-dimensional simulator, Carmen supports several physical robot platforms running Linux.



Back to top


Building Linux robots

Getting started building Linux-based robots isn't as difficult as you might think. In fact, some high-school science curriculums are using Linux and readily available hardware as the core for Linux-based robots. For example, you could use an old PC motherboard as the system core (or better yet, an old laptop), and boot Linux from a USB drive (which would consume significantly less power than a CD-ROM or hard/floppy drive). The onboard parallel port can be easily transformed into a multitude of devices, such as discrete inputs and outputs, or to drive a set of stepper motors. The serial port can be used to sink GPS coordinates, or with an external device, as an A/D (Analog to Digital) or D/A (Digital to Analog) converter. Finally, you can purchase inexpensive USB Web cameras to give your robot the ability of sight.

But what really makes Linux shine in this environment is the ability to simplify the environment to make robot control system design accessible to anyone through higher level languages such as Python. Michael Surran of the Greater Houlton Christian Academy in Maine offered recently, for the second year, a high school robotics course that features Linux and readily available hardware. At the core of their curriculum is the use of Python. Since Python is an interpreted language, it's very easy to experiment with algorithms, without the need for lengthy compile cycles (what makes interpreted scripting languages so useful in the first place).

If you're looking beyond the homebrew Linux solution, Carnegie Mellon University recently introduced the "Qwerkbot" platform from their Mobile Robot Programming Lab (MRPL), which runs the 2.6 Linux kernel. The "Qwerk" is an ARM9-based board with 8MB of flash, and 32MB of SDRAM; it includes four onboard motor controllers, 16 servo controllers, 16 digital I/Os, 8 12-bit analog inputs, and a whole lot more.



Back to top


Conclusion

Robot simulators can greatly simplify the job of building physical robots. Through simulators, you can test ideas and strategies before putting them into hardware. Luckily, the Linux and open source communities have several options that are not only easy to use but can even support direct linkage to hardware platforms.



Resources

Learn
  • The Open Dynamics Engine is a physics engine for modelling articulated rigid-body dynamics.

  • The Simbad robot simulator is a great tool for robot simulation and visualization.

  • The TeamBots distribution is a great environment for both prototyping and simulating mobile robots as well as executing them within real robots using the TBHard environment. TeamBots is open source (developed by Tucker Balch of Georgia Tech and Carnegie Mellon University) and can be used freely for educational and research purposes.

  • The RoboCup Soccer competition's extensive set of rules that define what's permitted in play, from the size of the field to the ball used (an orange golf ball).

  • The 2005 RoboCup held in Osaka, Japan, included a variety of robotic soccer events, including traditional mobile robot players, bipedal robots, Sony Aibos, simulated virtual players as well as several other robotic demonstrations. The RoboCup Web site provides some great video footage of this event.

  • The American Association for Artificial Intelligence Web site maintains a good (and current) list of AI topics and research. Their robotics page will keep you up-to-date on the latest happenings in the world of soft and hard robotics (as well as their open source projects page).

  • Khepera II remains based on the Motorola 68331 CPU (the miniature Khepera is a bit outdated). In addition to the mobile platform, many options exist to extend the platform, such as with a video camera module, a gripper module, and a radio modem to permit communication with other Khepera mobile robots.

  • The Gazebo multi-robot simulator implements not only a realistic robot simulation but also an accurate simulation of rigid-body physics for the robot's environment.

  • Carmen is a robotic navigation toolkit that provides simulation and support for physical robot platforms. It implements several navigation primitives, such as mapping and path planning.

  • Find interesting recipes for the Qwerkbot, including a pan-tilt unit for a camera, at CMU.

  • "Do-It-Yourself Robots with Linux", a Linux Journal article by Michael Surran's explains why Linux and older PC hardware make a great platform for building mobile robots.

  • To run Java on Linux, you can use the Blackdown Java Linux package.

  • In the developerWorks Linux zone, find more resources for Linux developers.

  • Stay current with developerWorks technical events and Webcasts.

Get products and technologies
  • Order the SEK for Linux, a two-DVD set containing the latest IBM trial software for Linux from DB2®, Lotus®, Rational®, Tivoli®, and WebSphere®.

  • With IBM trial software, available for download directly from developerWorks, build your next development project on Linux.


Discuss


About the author

M. Tim Jones

M. Tim Jones is an embedded software architect and the author of GNU/Linux Application Programming, AI Application Programming, and BSD Sockets Programming from a Multilanguage Perspective. His engineering background ranges from the development of kernels for geosynchronous spacecraft to embedded systems architecture and networking protocols development. Tim is a Consultant Engineer for Emulex Corp. in Longmont, Colorado.


Posted by 따봉맨
http://www.rakkarsoft.com

RakNet is more than just a reliable UDP library.

Download 3.0.

Licensing

Licensing is only required on your application's commercial release.
All versions include full source.


Non-profit applications or engines.
You can use RakNet for free under the Creative Commons Attribution - NonCommercial 2.5 license*. .

Single application license.
A Single Application license* applies to commercial software sold both online and retail. You may download RakNet immediately and are only required to pay when you ship your product. At that time you choose how much to pay based on what you can afford and how much value you feel RakNet has brought to you.

Site licenses and commercial engine development.
An unlimited application Engine License* applies to commercial software sold using any distribution model and also allows resale of your engine. You may use RakNet as long as you wish during development. When you wish to sell your engine or release your product, you may purchase a license at a fixed fee of $5000.

* Third party libraries are included in the download to facilitate sample code. These libraries are included only for convenience and have their own, separate, licensing agreements. These libraries are not required to use RakNet.

Posted by 따봉맨

마소에 연재된 강좌가 있군요.

2004/12, 2005/1 이렇게 2 달에 걸쳐 아주 짧게 연재되었기에,

자세한 내용을 기대하기는 힘들지만, 초스피드로 OpenCV 의 내용을

검토해 보고 싶은 분들에게 강추입니다.

마소 사이트에서 다운로드 받았구요..

pdf 로 되어 있습니다.

참고하세요.

2004/12 월

2005/1 월

Posted by 따봉맨

많은 종류의 코덱이 있지..

FAAC

FAAC is a free LC AAC encoder under the Lesser GPL license. Its quality has improved drastically over the last few years and FAAC is nowadays a viable alternative to the commercial encoders (although, at 128kbps or lower bitrates, not at the same quality level as some of them, according to Guruboolez's last listening test).

The default quality setting is -q 100 -c 16000 (~120kbps average bitrate), for better quality encodings use -q 150 -c 22000 (~175kbps average bitrate).

More information can be found at AudioCoding.

Nero AAC

A commercial implementation of both LC AAC and HE AAC, Nero AAC is produced by Nero AG as part of their Nero Digital line of products. It is generally percieved to have the highest quality VBR LC AAC implementation (although QuickTime bests it in CBR mode at 128kbps). The codec can also create HEv1/v2 AAC streams for extremely low bitrates and supports multi-channel surround sound encoding. As of May 2006, Nero AAC is available for free as a command line tool called "Nero Digital Audio" here.

Recommended Nero AAC Presets

NOTE: Once a preset has been selected, the "Encoding Quality" option should be changed to the "Fast" mode. Despite the name implying worse quality then high, a test undertaken by guruboolez shows that the "Fast" mode offers significant quality advantages over the "High" (see the test here). In the forthcoming release of Nero AAC 3.0 (or a release soon afterwards), the "Fast" mode will become the default and the high quality mode will be removed.

High Quality

- VBR/Stereo - Streaming, 100-120 Kb/s (LC AAC) / Actual bitrate ~150kbps

Portable

- VBR/Stereo - Internet, 90-100 Kb/s (LC AAC) / Actual bitrate ~128kbps

Small Filesize

- VBR/Stereo - Portable, 50-70 Kb/s (HE AAC) / Actual bitrate ~90kbps


The High Quality preset is for the archival of music, while the Small Filesize preset is for internet/streaming purposes.

More information can be found in the Nero Digital PDF and on the Nero Digital Website.

iTunes AAC

Another proprietary AAC implementation, iTunes AAC is known to be one of the highest quality medium-bitrate CBR LC AAC encoders.

The codec is available for free through the iTunes Digital Jukebox.

More information can be found about Apple's AAC implementation on their AAC Audio information page.

The current recommended high quality encoding setting is 160kbps, or 128kbps for portable use.


The iTunes AAC encoder can be externally envoked via a command line tool created by Otto42 called iTunesEncode, which can be found at RareWares in the AAC section. This allows for the generation of iTunes AAC files from audio formats not inherently supported by iTunes using the format conversion functionality found in programs such as foobar2000.

이 것 말고도 더 많다.

AAC 에 적용 가능한 품질의 범위를 정리해 보면..

bitrate : 50 kbps ~ 150 kbps
samplerate : 8 kHz ~ 98 kHz
channel : Max 48

Also like MP3, AAC is a lossy algorithm, meaning the original digital audio cannot be recreated from the compressed bits alone. In terms of audio fidelity, however, there is no loss of data if the compressed audio is properly encoded. AAC claims an advantage over MP3 in this regard: while MP3 requires a bit rate of approximately 256 kilobits per second (kbps) to achieve transparency, AAC can achieve the same quality at 128 kbps. This allows AAC files to be roughly half the size of MP3 files of the same quality, and one-tenth the size of CD digital data.

mp3 256 kbps == aac 128 kbps 입니다!!! ^^

AAC stands for 'Advanced Audio Coding' and is part of the MPEG-4 Systems Standard. Originally known as MPEG-2 Non-Backwards Compatible (As apposed to MPEG-2 Backwards Compatible) it is the succesor to MPEG-1/2 Layer III (MP3). It uses the MP4 container (which is based on Apple's MOV container) to store metadata (i.e. tag information).

As part of the MPEG-4 Systems Standard, an AAC encoded file can include up to 48 full-bandwith audio channels (up to 96 kHz) and 15 Low Frequency Enhancement channels (limited to 120 Hz) plus 15 data streams.

AAC encoding methods are organised into Profiles (MPEG-2) or Object Types (MPEG-4). These different Object Types are not necessarily compatible with each other and may not be playable with various decoders. Some of the various Object Types are:

  • MPEG-2 AAC LC / Low Complexity
  • MPEG-2 AAC Main
  • MPEG-2 AAC SSR / Scalable Sampling Rate
  • MPEG-4 AAC LC / Low Complexity
  • MPEG-4 AAC Main
  • MPEG-4 AAC SSR / Scalable Sampling Rate
  • MPEG-4 AAC LTP / Long Term Prediction
  • MPEG-4 AAC HE / High Efficiency
  • MPEG-4 AAC LD / Low Delay

Different Object Types vary in complexity. Some take longer to encode/decode as a result of the different complexities. Furthermore, the benefits of the more complex profiles are often not worth the CPU power required to encode/decode them. As a result the Low Complexity/LC Object Type has become the profile used by most encoders and supported by most decoders. However, the High Efficiency (HE) Object Type has become more popular recently with its addition to the Nero AAC encoder.

Currently all players support the LC Object Type, although some will work on only MPEG2 or MPEG4 streams. Players based on the FAAD2 decoder (eg. foobar2000, Winamp plugins) support almost all Object Types including HE AAC. 3ivX also supports all Object Types except SSR.

'Research' 카테고리의 다른 글

마소에 연재되었던 OpenCV 강좌입니다.  (1) 2007.11.25
[Arrow English] Boston Red Sox  (0) 2007.11.02
[Arrow English] Actress Christina Ricci  (0) 2007.10.30
Posted by 따봉맨
이전버튼 1 2 3 4 5 이전버튼