๋ฌด์์ธ๊ฐ ํฑ๊ณ ?
๋ค์ํ ํ๋์จ์ด์ ์ํํธ์จ์ด๋ฅผ ๊ด๋ฆฌํ๋ ์์คํ
์
๋๋ค.
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