ํƒฑ๊ณ  ์ปจํŠธ๋กค

ํƒฑ๊ณ  ์ปจํŠธ๋กค

๋ฌด์—‡์ธ๊ฐ€ ํƒฑ๊ณ ?

๋‹ค์–‘ํ•œ ํ•˜๋“œ์›จ์–ด์™€ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค.
TANGO๋Š” ํ˜„์žฌ Linux, Windows NT, Solaris ๋ฐ HP-UX์˜ 4๊ฐ€์ง€ ํ”Œ๋žซํผ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
์—ฌ๊ธฐ์—์„œ๋Š” Linux(Ubuntu 18.04) ์ž‘์—…์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์€ ๋ฌด์—‡์„ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๊นŒ?

๋‹ค์–‘ํ•œ ์žฅ๋น„์™€ ์†Œํ”„ํŠธ์›จ์–ด๋กœ ์ž‘์—…์„ ๋‹จ์ˆœํ™”ํ•ฉ๋‹ˆ๋‹ค.

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ƒ๊ฐํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ด๋ฏธ ์™„๋ฃŒ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
  • ํด๋ง ์„ผ์„œ์˜ ๋ฉ”์ปค๋‹ˆ์ฆ˜๋งŒ ์„ค๋ช…ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
  • ๋ชจ๋“  ์ฝ”๋“œ๋ฅผ ํ•˜๋‚˜์˜ ํ‘œ์ค€์œผ๋กœ ์ค„์ž…๋‹ˆ๋‹ค.

์–ด๋””์„œ ๊ตฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์†Œ์Šค ์ฝ”๋“œ์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์–ด์„œ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด์ง„ TangoBox 9.3 ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘์—…ํ–ˆ์Šต๋‹ˆ๋‹ค.
์ง€์นจ์—์„œ๋Š” ํŒจํ‚ค์ง€์—์„œ ์„ค์น˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์€ ๋ฌด์—‡์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๊นŒ?

  • ์ž์ด๋ธŒ โ€” TANGO ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋ณด๊ณ  ํŽธ์ง‘ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • ํฌ๊ณ  โ€” TANGO ์žฅ์น˜ ์„œ๋ฒ„์šฉ ์ฝ”๋“œ ์ƒ์„ฑ๊ธฐ.
  • ์•  ์Šคํ„ฐ โ€” TANGO ์‹œ์Šคํ…œ์šฉ ํ”„๋กœ๊ทธ๋žจ ๊ด€๋ฆฌ์ž.

์šฐ๋ฆฌ๋Š” ์ฒ˜์Œ ๋‘ ๊ตฌ์„ฑ ์š”์†Œ์—๋งŒ ๊ด€์‹ฌ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ง€์›๋˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด

  • C
  • C + +
  • ์ž๋ฐ”
  • ์ž๋ฐ” ์Šคํฌ๋ฆฝํŠธ
  • Python
  • Matlab
  • LabVIEW

์ €๋Š” Python๊ณผ C++๋กœ ์ž‘์—…ํ–ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” C++๋ฅผ ์˜ˆ๋กœ ์‚ฌ์šฉํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์ด์ œ ์žฅ์น˜๋ฅผ TANGO์— ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ์ž‘๋™ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์„ค๋ช…์œผ๋กœ ๋„˜์–ด ๊ฐ‘์‹œ๋‹ค. ์ˆ˜์ˆ˜๋ฃŒ๋ฅผ ์˜ˆ์‹œ๋กœ ๋“ค๊ฒ ์Šต๋‹ˆ๋‹ค. GPS ๋„ค์˜ค-6m-0-001:

ํƒฑ๊ณ  ์ปจํŠธ๋กค

๊ทธ๋ฆผ์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด UART CP2102๋ฅผ ํ†ตํ•ด ๋ณด๋“œ๋ฅผ PC์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค. PC์— ์—ฐ๊ฒฐํ•˜๋ฉด ์žฅ์น˜๊ฐ€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค /dev/ttyUSB[0-N], ์ผ๋ฐ˜์ ์œผ๋กœ /dev/ttyUSB0.

ํฌ๊ณ 

์ด์ œ ๋ฐœ์‚ฌํ•ด๋ณด์ž ํฌ๊ณ , ๋ณด๋“œ ์ž‘์—…์„ ์œ„ํ•œ ๋ผˆ๋Œ€ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

pogo

ํƒฑ๊ณ  ์ปจํŠธ๋กค

์ด๋ฏธ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ–ˆ์œผ๋‹ˆ ๋‹ค์‹œ ์ƒ์„ฑํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ํŒŒ์ผ->์ƒˆ๋กœ ๋งŒ๋“ค๊ธฐ.

ํƒฑ๊ณ  ์ปจํŠธ๋กค

์šฐ๋ฆฌ๋Š” ๋‹ค์Œ์„ ์–ป์Šต๋‹ˆ๋‹ค:

ํƒฑ๊ณ  ์ปจํŠธ๋กค

์šฐ๋ฆฌ ์žฅ์น˜(ํ–ฅํ›„ ์žฅ์น˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๋ถ€๋ถ„์„ ์˜๋ฏธํ•จ)๋Š” ๋น„์–ด ์žˆ์œผ๋ฉฐ ๋‘ ๊ฐ€์ง€ ์ œ์–ด ๋ช…๋ น์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ฃผ ์ •๋ถ€ & Status.

ํ•„์ˆ˜ ์†์„ฑ์œผ๋กœ ์ฑ„์›Œ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์žฅ์น˜ ์†์„ฑ โ€” ์ดˆ๊ธฐํ™”๋ฅผ ์œ„ํ•ด ์žฅ์น˜์— ์ „์†กํ•˜๋Š” ๊ธฐ๋ณธ๊ฐ’, GPS ๋ณด๋“œ์˜ ๊ฒฝ์šฐ ์‹œ์Šคํ…œ์—์„œ ๋ณด๋“œ ์ด๋ฆ„์„ ์ „์†กํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. com="/dev/ttyUSB0" ๋ฐ COM ํฌํŠธ ์†๋„ ๋ณด๋“œ๋ ˆ์ด๋“œ=9600

๋ช…๋ น โ€” ์žฅ์น˜๋ฅผ ์ œ์–ดํ•˜๋Š” โ€‹โ€‹๋ช…๋ น์œผ๋กœ ์ธ์ˆ˜์™€ ๋ฐ˜ํ™˜ ๊ฐ’์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ƒํƒœ - ํ˜„์žฌ ์ƒํƒœ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๋ฏธ๊ตญ
  • ์ง€์œ„ - ํ˜„์žฌ ์ƒํƒœ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋ฌธ์ž์—ด์˜ ๋ณด์ˆ˜์ž…๋‹ˆ๋‹ค. ์ƒํƒœ
  • GPS ๋ฐฐ์—ด - ๋ฐ˜ํ™˜ GPS๋ฅผ ํ˜•ํƒœ์˜ ๋ฌธ์ž์—ด DevVarCharArray

๋‹ค์Œ์œผ๋กœ, ์ฝ๊ณ  ์“ธ ์ˆ˜ ์žˆ๋Š” ์žฅ์น˜ ์†์„ฑ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
์Šค์นผ๋ผ ์†์„ฑ โ€” ๋‹จ์ˆœ ์†์„ฑ(char, string, long ๋“ฑ)
์ŠคํŽ™ํŠธ๋Ÿผ ์†์„ฑ - XNUMX์ฐจ์› ๋ฐฐ์—ด
์ด๋ฏธ์ง€ ์†์„ฑ - XNUMX์ฐจ์› ๋ฐฐ์—ด

๋ฏธ๊ตญ โ€” ์šฐ๋ฆฌ ์žฅ์น˜๊ฐ€ ์œ„์น˜ํ•œ ์ƒํƒœ.

  • ๊ณต์„ โ€” ์žฅ์น˜๊ฐ€ ์—ด๋ ค ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋‹ซ๊ธฐ - ์žฅ์น˜๊ฐ€ ๋‹ซํ˜€ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์‹คํŒจ - ์˜ค๋ฅ˜.
  • ON โ€” ์žฅ์น˜๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์‹ ํ•ฉ๋‹ˆ๋‹ค.
  • ๋–จ์–ด์ ธ์„œ โ€” ์žฅ์น˜์— ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

์†์„ฑ ์ถ”๊ฐ€์˜ ์˜ˆ GPS_๋ฌธ์ž์—ด:

ํƒฑ๊ณ  ์ปจํŠธ๋กค

ํด๋ง ๊ธฐ๊ฐ„ ์‹œ๊ฐ„(ms), gps_string ๊ฐ’์ด ์—…๋ฐ์ดํŠธ๋˜๋Š” ๋นˆ๋„์ž…๋‹ˆ๋‹ค. ์—…๋ฐ์ดํŠธ ์‹œ๊ฐ„์„ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ์š”์ฒญ ์‹œ์—๋งŒ ์†์„ฑ์ด ์—…๋ฐ์ดํŠธ๋ฉ๋‹ˆ๋‹ค.

๋ฐํ˜€์กŒ๋‹ค :

ํƒฑ๊ณ  ์ปจํŠธ๋กค

์ด์ œ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํŒŒ์ผ->์ƒ์„ฑ

ํƒฑ๊ณ  ์ปจํŠธ๋กค

๊ธฐ๋ณธ์ ์œผ๋กœ Makefile์€ ์ƒ์„ฑ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ฒ˜์Œ ์ƒ์„ฑํ•˜๋ ค๋ฉด ํ™•์ธ๋ž€์„ ์„ ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ƒˆ ์ƒ์„ฑ ์ค‘์— ์‚ญ์ œ๋˜์ง€ ์•Š๋„๋ก ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. ํ•œ ๋ฒˆ ์ƒ์„ฑํ•˜๊ณ  ํ”„๋กœ์ ํŠธ์— ๋งž๊ฒŒ ๊ตฌ์„ฑํ•œ ํ›„์—๋Š”(์ปดํŒŒ์ผ ํ‚ค ๋“ฑ๋ก, ์ถ”๊ฐ€ ํŒŒ์ผ ๋“ฑ๋ก) ์žŠ์–ด๋ฒ„๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด์ œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์œผ๋กœ ๋„˜์–ด ๊ฐ‘์‹œ๋‹ค. pogo๋Š” ๋‹ค์Œ์„ ์ƒ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

ํƒฑ๊ณ  ์ปจํŠธ๋กค

์šฐ๋ฆฌ๋Š” NEO6M.cpp & NEO6M.h์— ๊ด€์‹ฌ์„ ๊ฐ€์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํด๋ž˜์Šค ์ƒ์„ฑ์ž์˜ ์˜ˆ๋ฅผ ๋“ค์–ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

NEO6M::NEO6M(Tango::DeviceClass *cl, string &s)
 : TANGO_BASE_CLASS(cl, s.c_str())
{
    /*----- PROTECTED REGION ID(NEO6M::constructor_1) ENABLED START -----*/
    init_device();

    /*----- PROTECTED REGION END -----*/    //  NEO6M::constructor_1
}

๊ฑฐ๊ธฐ์—๋Š” ๋ฌด์—‡์ด ์žˆ๊ณ  ์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ๊ฒƒ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? init_device() ํ•จ์ˆ˜๋Š” ์†์„ฑ์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค: GPS_๋ฌธ์ž์—ด & GPS_๋ฐฐ์—ด, ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์€ ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์€, ๋Œ“๊ธ€์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

/*----- PROTECTED REGION ID(NEO6M::constructor_1) ENABLED START -----*/
    .......
/*----- PROTECTED REGION END -----*/    //  NEO6M::constructor_1

์ด ์ฃผ์„ ๋ธ”๋ก ๋‚ด๋ถ€์— ์žˆ๋Š” ๋ชจ๋“  ๋‚ด์šฉ์€ ํ›„์† ์ฝ”๋“œ ์žฌ์ƒ์„ฑ ์ค‘์— ํฌ๊ณ ์— ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋– ๋‚˜๋‹ค!. ๋ธ”๋ก์— ์—†๋Š” ๋ชจ๋“  ๊ฒƒ์€ ๋ธ”๋ก์— ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค! ์ด๊ณณ์€ ์šฐ๋ฆฌ๊ฐ€ ์ง์ ‘ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•˜๊ณ  ํŽธ์ง‘ํ•  ์ˆ˜ ์žˆ๋Š” ๊ณณ์ž…๋‹ˆ๋‹ค.

์ด์ œ ํด๋ž˜์Šค์— ํฌํ•จ๋œ ์ฃผ์š” ๊ธฐ๋Šฅ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๋„ค์˜ค6M:

void always_executed_hook();
void read_attr_hardware(vector<long> &attr_list);
void read_gps_string(Tango::Attribute &attr);
void read_gps_array(Tango::Attribute &attr);

์†์„ฑ ๊ฐ’์„ ์ฝ๊ณ  ์‹ถ์„ ๋•Œ GPS_๋ฌธ์ž์—ด, ํ•จ์ˆ˜๋Š” ๋‹ค์Œ ์ˆœ์„œ๋กœ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค. Always_executed_hook, read_attr_hardware ะธ read_gps_string. Read_gps_string์€ gps_string์„ ๊ฐ’์œผ๋กœ ์ฑ„์›๋‹ˆ๋‹ค.

void NEO6M::read_gps_string(Tango::Attribute &attr)
{
    DEBUG_STREAM << "NEO6M::read_gps_string(Tango::Attribute &attr) entering... " << endl;
    /*----- PROTECTED REGION ID(NEO6M::read_gps_string) ENABLED START -----*/
    //  Set the attribute value

        *this->attr_gps_string_read = Tango::string_dup(this->gps.c_str());

    attr.set_value(attr_gps_string_read);

    /*----- PROTECTED REGION END -----*/    //  NEO6M::read_gps_string
}

ํŽธ์ง‘

์†Œ์Šค ํด๋”๋กœ ์ด๋™ํ•˜์—ฌ ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•˜์‹ญ์‹œ์˜ค.

make

ํ”„๋กœ๊ทธ๋žจ์€ ~/DeviceServers ํด๋”๋กœ ์ปดํŒŒ์ผ๋ฉ๋‹ˆ๋‹ค.

tango-cs@tangobox:~/DeviceServers$ ls
NEO6M

์ž์ด๋ธŒ

jive

ํƒฑ๊ณ  ์ปจํŠธ๋กค

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ด๋ฏธ ์ผ๋ถ€ ์žฅ์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ์šฐ๋ฆฌ ์žฅ์น˜๋ฅผ ๋งŒ๋“ค์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ํŽธ์ง‘->์„œ๋ฒ„ ์ƒ์„ฑ

ํƒฑ๊ณ  ์ปจํŠธ๋กค

์ด์ œ ์—ฐ๊ฒฐํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

ํƒฑ๊ณ  ์ปจํŠธ๋กค

์•„๋ฌด๊ฒƒ๋„ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋จผ์ € ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

sudo ./NEO6M neo6m -v2

๊ถŒํ•œ์ด ์žˆ๋Š” COM ํฌํŠธ์—๋งŒ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฟŒ๋ฆฌ์•„ v โ€” ๋กœ๊น… ์ˆ˜์ค€.

์ด์ œ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

ํƒฑ๊ณ  ์ปจํŠธ๋กค

ํด๋ผ์ด์–ธํŠธ

๊ทธ๋ž˜ํ”ฝ์—์„œ๋Š” ์‚ฌ์ง„์„ ๋ณด๋Š” ๊ฒƒ์ด ํ™•์‹คํžˆ ์ข‹์ง€๋งŒ ๋” ์œ ์šฉํ•œ ๊ฒƒ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์žฅ์น˜์— ์—ฐ๊ฒฐํ•˜๊ณ  ์žฅ์น˜์—์„œ ํŒ๋…๊ฐ’์„ ๊ฐ€์ ธ์˜ค๋Š” ํด๋ผ์ด์–ธํŠธ๋ฅผ ์ž‘์„ฑํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

#include <tango.h>
using namespace Tango;

int main(int argc, char **argv) {
    try {

        //
        // create a connection to a TANGO device
        //

        DeviceProxy *device = new DeviceProxy("NEO6M/neo6m/1");

        //
        // Ping the device
        //

        device->ping();

        //
        // Execute a command on the device and extract the reply as a string
        //

        vector<Tango::DevUChar> gps_array;

        DeviceData cmd_reply;
        cmd_reply = device->command_inout("GPSArray");
        cmd_reply >> gps_array;

        for (int i = 0; i < gps_array.size(); i++) {            
            printf("%c", gps_array[i]);
        }
        puts("");

        //
        // Read a device attribute (string data type)
        //

        string spr;
        DeviceAttribute att_reply;
        att_reply = device->read_attribute("gps_string");
        att_reply >> spr;
        cout << spr << endl;

        vector<Tango::DevUChar> spr2;
        DeviceAttribute att_reply2;
        att_reply2 = device->read_attribute("gps_array");
        att_reply2.extract_read(spr2);

        for (int i = 0; i < spr2.size(); i++) {
            printf("%c", spr2[i]);
        }

        puts("");

    } catch (DevFailed &e) {
        Except::print_exception(e);
        exit(-1);
    }
}

์ปดํŒŒ์ผ ๋ฐฉ๋ฒ•:

g++ gps.cpp -I/usr/local/include/tango -I/usr/local/include -I/usr/local/include -std=c++0x -Dlinux -L/usr/local/lib -ltango -lomniDynamic4 -lCOS4 -lomniORB4 -lomnithread -llog4tango -lzmq -ldl -lpthread -lstdc++

๊ฒฐ๊ณผ :

tango-cs@tangobox:~/workspace/c$ ./a.out 
$GPRMC,,V,,,,,,,,,,N*53

$GPRMC,,V,,,,,,,,,,N*53

$GPRMC,,V,,,,,,,,,,N*53

๋ฌธ์ž์—ด์˜ ์†์„ฑ๊ณผ ๋ฌธ์ž ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ช…๋ น ๋ฐ˜ํ™˜์œผ๋กœ ๊ฒฐ๊ณผ๋ฅผ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค.

์ฐธ์กฐ

์ž ์‹œ ํ›„ ์–ด๋–ป๊ฒŒ, ๋ฌด์—‡์„ ํ•ด์•ผํ• ์ง€ ์žŠ์–ด ๋ฒ„๋ฆฌ๊ธฐ ์‹œ์ž‘ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ์‚ฌ๋ฅผ ์ง์ ‘ ์ผ์Šต๋‹ˆ๋‹ค.

๊ด€์‹ฌ์„ ๊ฐ€์ ธ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€