2013/03/27

RASPBERRY PI - 1

Шинэ жилийн баяраар RSPI бэлгэнд авсан юм. Интернэтээр дүүрэн энэ жижиг компьютерийг ашиглаж төрөл бүрийн зүйл л сэдсэн байдаг билээ. Оролдож амжихгүй өдий хүрсэн бөгөөд саяхнаас яагаад ч юм ажиллуулж үзмээр санагдав. Ердийн жижиг сажиг зүйлс турших зориулалтаар нэг, xmbc хэмээх multimedia center болгож турших гэж бас нэг SD disk авав. SD дискээ сонгохдоо хурдыг нь анхаарах хэрэгтэй. Type 6 аас дээш байх хэрэгтэй гэсэн байдаг бөгөөд HD видео тоглуулах, бичих хэрэгтэй бол Type 10 байх хэрэгтэй гэсэн байдаг юм байна. Би Type 10 аас нь (Adata 8GB SDHC, Type 10) хоёрыг авч бэлдлээ. За ингээд эхлээд бэлтгэл ажлын зургийг харуулъя:



Тэжээл өгөхдөө бас нэг зүйлийг анхаарах хэрэгтэй байдаг юм байна. 0.7 Aмпераас доош гүйдэлтэй тэжээл өгөөд хэрэггүй. Хэрэв тэгэх юм бол гарнаас товчлуур дарахад гацах, хурдны удаашрал зэрэг нь анзаарагдах болно. Бэлэглэсэн хүн маань надад байгаа iPhone утасны цэнэглэгч 1 Ампер гаргадаг гэдгийг мэддэг нэгэн байсан болохоор тэжээлийн залгуургүй өгсөн байлаа. За тэгээд би баахан видео дуу хадгалсан дискнүүдээ залгах шаардлагатай байсан бөгөөд тэр дискнүүдийн зарим нь өөсрдөө тэжээлтэй (active), зарим нь үгүй (passive). Эдгээр passive дискнүүд RSPI ийн шүүснээс соруулахгүй гэж usb hub авсан юм. Энэ hub өөрт залгагдсан төхөөрөмжийг 3 Ампер хүртэл шүүс өгөх чадвартай учраас хэд хэдэн дискийг хангалттай цатгана. За ингээд зурагт руугаа HDMI залгуураар залгаад, usb гар хулгана залгаад, дискнүүдээ залгаж эцэст нь LAN руу нь сүлжээгээ залгаж ашиглахад ердөө л SD дискэн дээрээ үйлдлийн систем суулгах л үлдэж байна:



Ингээд Absolute Raspberri ээс нэг татаж аваад эхэлвээ :)
Нэг дискэн дээр нь Raspbian, нөгөө дээр нь XBMC суулгаж авав. Нэг амар нь унтраагаад л дискээ солиод л өөр юм оролдож болно. Байнга унтрааж асаах үед SD дискийг салгах бүр тогтвортой барьж татахад эвтэйхэн байлгах гэж, эсвэл тоосонд даруулахгүй хүмүүс интернэтээр дүүрэн хэрхэн хямдхан хайрцаг бэлтгэх тухай заавар байдаг юм байна. Надад хамгийн боломжтой нь хүүгийн Lego тоглоомноос хэдийг нь "хулгайлж" гэр хийх нь амар байв :) :



За ингээд xmbc суулгасаны дараа юу юу ажиллаж байгааг энд жаахан дэлгэрүүлье. xmbc ийн цэснээс pluggin гэдэг рүү орж төрөл бүрийн плагин суулгаж болдог юм байна. Баахан их сургуулийн интернэт курс, тв-н нэвтрүүлгүүдийн архив руу ханддаг плагинууд их сонирхолтой байлаа. Караоке сонирхдог хүнд бол караоке шууд л ажиллах юм байна. Турших бэлэн дуу сайн хайсангүй. Түүнээс биш mp3+cdg, mp3+lrc, mp3+text, midi гэх мэт караоке төрлүүдийг бүгдийг нь тоглуулдаг юм байна. Тийм дуунуудаа usb дискэн дээрээ овоолж байгаад шөнөжин орилж үзэхгй юу :). HDMI+CEC хэмээх харилцах протоколыг дэмждэг тул зурагтныхаа удирдлагаар xmbc гээ бас удирдаж болдог юм байна. Гэхдээ зурагтан дээрээ HDMI+CEC ийг идэвхижүүлэх хэрэгтэй байх. Манай зурагтан дээр анхнаасаа идэвхижигдсэн байсан уу бүү мэд, xbmc асангуут зурагтын удирдлагаараа удирдаж болж байв. Apple AirPlay сервер болж ажилладаг гэдгийг нь анхнаасаа мэдэлгүй байж байгаад iphone утсан дээрээ видео тоглуулаад үзэж байтал утасны баруун доод буланд xbmc гэсэн товч байхаар нь дарсан чинь шууд зурагт уруу цацахаар нь мэдэж авав. Samba сервер суулгаастай байл уу, эсвэл плагин суулгасанаа санадаггүй ( Absolute Raspberri хэтэрсэн байж магадгүй.. хэхэ ), ямар ч байсан залгасан дискнүүд дээр байгаа видеонуудыг нь гар утсан дээрээ FileExplorer гэсэн апп суулгаад үзэж болж байсан. Гэх мэтчилэн ухаж төнхөөд байвал энэ жижигхэн 35 хан долларын үнэтэй жижиг компьютерт ид шид их байгаа бололтой догоо.

2013/03/13

Windows DLL + Wine = Linux Program

Өнгөрсөн жил роботоор оффис цэвэрлүүлдэг төсөл дээр ажиллав. Тоос сорогч чирсэн (200 мянган евроны үнэтэй) хүн шиг том робот оффисийн өрөө болгоноор шагайгаад шал хаагуур халтар байгааг камер ашиглаж computer vision-ы тусламжтайгаар тогтооно. Хэдэн зуун өрөөтэй оффис цэвэрлэх тул цаг болон мөнгөө хэмнэж зөвхөн тэр халтар болсон хэсгийн л тоосыг нь сорно. Тоос сорсныхоо дараа цэвэрхэн болсон эсэхийг шалгана. Хэрвээ хэд хэдэн удаа тоос сорсон ч гэсэн цэвэрхэн болохгүй бол 3D scanner-аар тэр бохирдсон хэсгийг хэмжинэ. Энэ хэмжилтийнхээ тусламжтайгаар зүгээр будаг болсон толбо уу эсвэл бохь наалдсан овойж товойсон бохирдолт уу гэх мэтээр ангилаад мэдээллийн сан руу хийнэ. Сүүлд нь 7 хоногт нэг удаа ч юм уу цэвэрлэгч ирээд тэр мэдээллийн сан дээр хадгалагдсан арилдаггүй толбуудыг арилгана.

Надаа 3D scanner-аар хэмжилт хийх ажил нь оногдов. Цаанаас нь Shapescan3D хэмээх scanner өгөв. Зөвхөн Windows дээр ашиглаж болдог эд аж. API гээд нэг header файл болон DLL library дагаж ирсэн байлаа. Бид нар робот програмчлахдаа Robot Operating System (ROS) гэж middleware ашигладаг, тэр нь зөвхөн Ubuntu дээр л ажиллана. Тэгээд scanner-аа Ubuntu дээр хэрхэн ажиллуулах вэ гэж баахан толгойгоо гашилгав. IDA ашиглаж dissassemble хийж үзсэн болов ч туршлага дутаад олигтой амжилт олсонгүй. Wireshark ашиглаж scanner болон компьютер хоорондох communication-ийг чагнаж үзэв. Binary protocol ашиглаж байсан учир бас л сүртэй амжилт гаргасангүй.

Тэгээд аргаа бараад Wine ашиглахаар шийдэв. Урьд нь Wine ашиглаж Windows программ ажилуулж үзэж байснаас өөрөө программ бичиж DLL library дуудаж үзэж байгаагүй тул болох эсэхийг нь сайн мэдэхгүй байв. Scanner-дагаж A3DSensor.dll болон A3DSenshor.h гэж файлууд дагаж ирсний header нь иймэрхүү функцүүдтэй:


Энэ функцуудыг Wine ашиглаад Linux программаас дуудчихвал хамаг юм болчих гээд байлаа. Интернэтээс олсон энэ зааврын дагуу хийж үзэхээр шийдэв. Санасныг бодоход хялбар юм байна. DLL файлаа LoadLibrary method ашиглаж санах ойруу хуулаад GetProcAddress method-ын тусламжтайгаар дуудах гэж байгаа method-уудыхаа хаягийг олдог аж. DLL library-гаа ашиглаж дууссаныхаа дараа FreeLibray method ашиглаж санах ойноосоо буцааж устгана. Энэ гурван method гурвуулаа Windows-API.

Хамгийн түрүүнд DLL library-аа санах ойд ачааллана:


GetProcAddress method ашиглаж байгаа тул дагаж ирсэн header файлыг шууд ашиглаж болохгүй. Тиймээс бүх method-уудаа бага зэрэг өөрчлөөд дахиж шинээр зарлана. Жишээ нь


гэсэн method-ыг доорх байдлаар зарлана:


Дараа нь энэ method-ыхоо хаягийг олох хэрэгтэй:


Ингэснийхээ дараагаар method-уудаа яаг Windows дээр яаж ашиглах ёстой тэрэн шиг нь ашиглах боломжтой болно.

Программ бүтнээрээ:


Wine суулгахад wineg++, winegcc гээд compiler-ууд дагаж ирдэг. Энэ compiler-ыхаа тусламжтайгаар программаа build хийнэ:
wineg++ shapescan3d.cpp
Үүссэн программаа Linux дээр дуудхад ингэж гарч ирж байна:
$ ./a.out
Version: 2500

Яаг энэ аргаар бусад бүх method-уудаа зарлаад scanner-аа 100% Linux дээр ашиглаж болдог болгов. Wine ашигласны нэг сайн чанар нь бичиж байгаа программандаа Linux-API, Windows-API дураараа хольж болдог юм байна. Тэгээд бичсэн программ маань Linux программ гэхэд ч хэцүү Windows программ гэхэд ч хэцүү hybrid юм болвоо хөөрхий :)