Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Both sides previous revision Poprzednia wersja
Nowa wersja
Poprzednia wersja
pl:miw:miw08_mindstormscontrolc [2008/04/08 21:20]
miw
pl:miw:miw08_mindstormscontrolc [2008/06/14 15:03]
gjn
Linia 1: Linia 1:
-====== Opis ====== 
-Marcin Ziółkowski <​mziolkow@student.agh.edu.pl>​ 
- 
-udostępnienie kom. z MS BT z pośrednictwem stack: 
-    * brixcc 
-    * socket 
-    * Prolog 
- 
-====== Spotkania ====== 
-===== 08.02.26 ===== 
-  * czy MS może być na BT żeby sterować z brixcc 
-  * integracja sockety/​brixcc 
- 
-===== 08.03.04 ===== 
-  * ewaluacja [[http://​nxtpp.sourceforge.net/​|NXT++]] j.w. 
-  * eksperymenty [[pl:​mindstorms:​notatki#​mindstorms_nxt_pod_linux_em|w wiki]] 
- 
- 
- 
- 
-===== 080318 ===== 
-  * prototyp linux+usb 
-  * barski -> nic nie ma, zapomnijmy 
-  * sockety i cross-platform:​ 
-Po namyśle: zdecydowanie chcemy, żeby Pana program docelowo chodził pod linuxem i windows. 
-Kwestie otwarte to: 
-  * obsługa usb: proszę sprawdzić jak to wygląda pod win i czego używa lejos i nxt++ pod win, o ile pamiętam jest libusb dla win 
-  * obsługa bluetooth (bt): to na przytszłość,​ jest kilka stosów bt, warto się upewnić, że w przyszłości będziemy w stanie obsłużyć bt pod linuxem i win 
-  * obsługa socketów: 
-    * wariant optymistyczny:​ kompilowanie programy pod windows [[http://​www.cygwin.com/​|cygwinem]] powinno dać unixowe API włącznie z socketami -> proszę sprawdzić (powinno też działać przy [[http://​www.mingw.org/​|MinGW]] 
-    * wariant mniej optymistyczny -> tylko jeżeli powyższe nie zadziała! to użycie bibliotek typu http://​apr.apache.org/​ http://​www.boost.org/​ 
-  * http://​www.faqs.org/​rfcs/​ 
- 
- 
- 
- 
-===== 080401 ===== 
-  * uplad wszystkiego do wiki, przeklejenie dok. do wiki http://​student.agh.edu.pl/​~mziolkow/​MIW/​projekt/​ 
-  * testy 
-  * 100% funkcji? 
-  * sockety pod windows 
- 
- 
- 
-===== 080408 ===== 
-  * sockety pod boost 
-  * kompilacja cygwin nxt++ (GJN) 
- 
-===== 080409 ===== 
-  * opis kompilacji i zależności 
-  * przykład użycia przez telnet 
- 
-===== 080422 ===== 
-  * implementacja w prologu najniższej warstwy 
-  * test komunikacji z prologu (open socket) 
- 
-====== Projekt ====== 
- 
- 
-  prolog 
-   | 
-   v 
-  socket --> socket 
-               | 
-               v 
-             ​brixcc 
-               | 
-               v 
-              BT/USB 
-               | 
-               V 
-             NXT 
- 
- 
- 
- 
- 
- 
- 
- 
- 
-====== Sprawozdanie ====== 
- 
-Zostal napisany kod w jezyku C++, ktory z uzyciem nxtpp pozwala na sterowanie robotami mindstorms. 
-Kod dziala w ten sposob, ze wystawia na socket (na wybranym porcie) polaczenie, ktore oczekuje na polaczenia od klientow. Po zainicjalizowaniu polaczenia, klient przesyla polecenia, ktore maja zostac wykonane przez robota. Na potrzeby komunikacji serwer <-> klient zostal stworzony i zaimplementowany stosowny protokol (ponizej jego opis) wedlug ktorego nastepuje komunikacja. 
- 
-Zrodla projektu: {{:​pl:​miw:​mindstorm_control_c.zip|mindstorm_control_c.zip}} 
- 
-===== Opis protokolu ===== 
- 
- 
-==== NXT modul: ==== 
-== Possible commands: == 
-^ command ​     ^ return ​      ^ description ​         ^ 
-| nxt; open    | ---     | Initiates the NXT connection ​       | 
-| nxt; close    | --- | Closes the NXT connection| 
-| nxt; batteryLevel ​   | value     | Returns the current battery level        | 
-| nxt; getName ​   | value     | Gets the name of the NXT        | 
-| nxt; startProgram;​ name    | --- | Starts a program on the NXT with a specified name| 
-| nxt; stopProgram ​   | ---     | Stops the current program if one is running ​      | 
-| nxt; playTone ​   | ---     | Plays a tone       | 
-| nxt; playSoundFile;​ name, loop  | --- | Plays a sound file on the NXT with a specified name| 
-| nxt; stopSound ​   | ---    | Stops the currently playing sound| 
- 
-**Description arguments:​** 
- 
-  * loop: TRUE, FALSE 
- 
-**Possible replies:** 
- 
-  * ok 
-  * ok: [what] 
-  * err 
-  * err: not_enable_interface 
-  * err: unknown_module:​ [what] 
-  * err: unknown_command:​ [what] 
-  * err: wrong_params:​ [what] 
- 
-==== Motor modul: ==== 
-== Possible commands: == 
-^ command ​     ^ return ​      ^ description ​         ^ 
-| motor; getRotationCount;​ portNr ​   | value|motor;​ getRotationCount;​ portNr | 
-| motor; resetRotationCount;​ portNr; relative ​   | --- | Resets the specified motor'​s rotation count  | 
-| motor; setForward; portNr; power    | ---  | Sets a motor to turn forward at a specified power    | 
-| motor; setReverse; portNr; power  | --- | Sets a motor to turn backward at a specified power  | 
-| motor; stop; portNr; brake   | --- | Tells a motor to stop turning | 
-| motor; breakOn; portNr ​  | ---     | Tells a motor to turn the brake on  | 
-| motor; breakOff; portNr ​ | ---     | Tells a motor to turn the brake off  | 
-| motor; goTo; portNr; power; tacho; brake  | --- |Tells a motor to go to a certian angle and then stop | 
- 
-**Description arguments:​** 
- 
-  * portNr: IN_1, IN_2, IN_3, IN_4 
-  * active: TRUE, FALSE 
-  * interval: miliseconds 
- 
-**Possible replies:** 
- 
-  * ok 
-  * ok: [what] 
-  * err: not_enable_interface 
-  * err: unknown_module:​ [what] 
-  * err: unknown_command:​ [what] 
-  * err: wrong_params:​ [what] 
- 
- 
- 
- 
-==== Sensor modul: ==== 
-== Possible commands: == 
-^ command ​     ^ return ​      ^ description ​         ^ 
-| sensor; setTouch; portNr ​   | ---     | Sets a sensor in a specified port to a touch sensor ​    | 
-| sensor; setSound; portNr ​  | --- | Sets a sensor in a specified port to a sound sensor ​ | 
-| sensor; setLight; portNr, active ​  | --- |Sets a sensor in a specified port to a light sensor ​       | 
-| sensor; setSonar; portNr ​  | ---     | Sets a sensor in a specified port to a sonar sensor ​     | 
-| sensor; setRaw; portNr ​ | --- | Sets a sensor to return a raw value  | 
-| sensor; getValue; portNr ​  | value     | Retrieves the value of a sensor ​      | 
-| sensor; lsGetStatus;​ portNr ​   | value     | Gets the status of the lowspeed port      | 
-| sensor; getSonarValue;​ portNr ​ | value | Retrieves the value for sonar sensors ​ | 
-| sensor; setSonarOff;​ portNr ​   | ---    | Tells the sonar sensor to stop sending pulses ​ | 
-| sensor; setSonarSingleShot;​ portNr ​   | ---    | Tells the sonar sensor to only send a pulse when you ask it what it's value is  | 
-| sensor; setSonarContinuous;​ portNr ​   | ---    | Tells the sonar sensor to continuously send pulses ​ | 
-| sensor; setSonarContinuousInterval;​ portNr, interval ​ | ---    | Sets the interval at which the sonar sensor sends a pulse  | 
- 
-**Description arguments:​** 
- 
-  * loop: TRUE, FALSE 
- 
-**Possible replies:** 
- 
-  * ok 
-  * ok: [what] 
-  * err: not_enable_interface 
-  * err: unknown_module:​ [what] 
-  * err: unknown_command:​ [what] 
-  * err: wrong_params:​ [what] 
- 
- 
- 
- 
- 
- 
- 
-===== ===== 
-Wstepne testy wykazaly poprawnosc dzialania kodu (przetestowane funkcje dzialaly zgodnie z zalozeniami i potrafily wykonywac rozne operacja z wykorzystaniem robota). 
-Kod zostal napisany pod Linuxem z wykorzystaniem socketow dostarczanych przez ten wlasnie system. W zwiazku z koniecznoscia dzialania kodu takze na systemach rodziny windows dokonano prob uruchomienia napisanego kodu z wykorzystaniem srodowisk Cygwin i MinGW. W obu przypadkach proby zakonczyly sie niepowodzeniem. Nawet maksymalna ilosc dostepnych pakietow w srodowisku Cygwin nie pozwolila na uruchomienie kodu. Powodem byl problem z kompilacja bliblioteki nxtpp (bylo to niemozliwe zarowno za pomoca linkowania zbudowanych bibliotek *.lib dla windows jak i niepowodzeniem konczyla sie proba zbudowania samych pakietow nxtpp). 
-W zwiazku z powyzszym, aby mozna bylo uruchamiac kod zarowno na systemach linux jaki i windows postanowiono przepisac czesc kodu odpawiadajaca komunikacji sieciowej, z wykorzystaniem najnowszej wersji biblioteki asio boost'​a ([[www.boost.org]]) - w trakcie realizacji. 
- 
- 
- 
- 
-===== ===== 
-Dokonano modyfikacji czesci kodu odpowiadajaca za komunikacje sieciowa. Zgodnie z zalozeniami zostala wykorzysta biblioteka boost'​a ASIO. Dzieki temu kod jest w pelni przenosny. Na chwile obecna zostaly wykonane testy dla systemow Linux i windows, ktore potwierdzaja poprawnosc dzialania kodu. 
- 
- 
- 
- 
- 
-===== ===== 
-Usunieto wszytkie znalezione bledy/​niedorobki,​ glownie zwiazane z obsluga samych bledow. Zostaly dodane tez funkcje escapujace znaki CR/LF (13/10) co umozliwia wykorzystanie jako klienta zwyklego telnetu. Na systemach z rodziny windows radzi sie wykorzystanie programu '​putty',​ gdzie rzecz jasna jako '​Connection type' wybieramy '​RAW'​ (socket). W systemach unixowych doskonale sprawuje sie zwykly telnet (przetestowano). 
- 
-Zrodla projektu (ver. 2) {{:​pl:​miw:​mindstorm_control_c_ver.2.zip|mindstorm_control_c_ver.2.zip}} 
- 
-===== ===== 
-**OPIS KOMPILACJI** 
- 
-Przygotowanie srodowiska: 
- 
-Potrzebujemy dwoch bibliotek: 
-NXT++ ktora mozemy sciagnac [[http://​sourceforge.net/​project/​showfiles.php?​group_id=193451|tutaj]]. ​ 
-Pelny opis przygotowania srodowiska by moc uzywac tej biblioteki znajdziemy: ​ 
-  * [windows] [[http://​nxtpp.wetter61169.de/​mediawiki-1.6.9/​index.php/​Visual_Studio_Tutorials:​_Setting_up_Visual_Studio|tutaj]]. Opis dotyczy kompilatora VC++, gdyz tylko dla niego jest oficjalne wsparcie w systemach windows. 
-  * [linux] [[http://​nxtpp.wetter61169.de/​mediawiki-1.6.9/​index.php/​Beginner_Tutorial_-_Part_0:​_Building_the_library|tutaj]] 
-Druga biblioteka do komunikacji sieciowej to ASIO, ktora jest czescia boost'​a. 
-Opis uzywania dla obu systemow znajduje sie [[http://​www.boost.org/​doc/​libs/​1_35_0/​doc/​html/​boost_asio.html|tutaj]] 
-Z tej samej strony oczywiscie mozemy zassac zrodla. 
- 
-Gdy powyzszy etap bedziemy mieli ze soba, mozemy juz uzywac stworzonego projektu, najlepiej wykorzystujac stworzone i zalaczone w zrodlach dla: 
-  * [windows] projekt w VC++ 2005 
-  * [linux] makefile (oczywiscie uprzednio go edytujac - nalezy podac informacje o polozeniu headerow dla nxt++ oraz (w zaleznosci od sposobu wykonania pierwszego etapu) ewuntualnie sciezki do ASIO boost'​a). 
- 
-====== Materiały ====== 
-  * [[http://​bricxcc.sourceforge.net]] 
-  * [[http://​mindstorms.lego.com/​Overview/​NXTreme.aspx]] 
-  * [[http://​mindstorms.lego.com/​eng/​community/​resources/​default.asp]] 
-  * [[http://​brickos.sourceforge.net]] 
-  * [[http://​brickos.sourceforge.net/​docs/​APIs/​html-c++]] 
-  * [[http://​student.agh.edu.pl/​~mziolkow/​MIW/​Appendix%201-LEGO%20MINDSTORMS%20NXT%20Communication%20protocol.pdf]] 
-  * [[http://​student.agh.edu.pl/​~mziolkow/​MIW/​Appendix%202-LEGO%20MINDSTORMS%20NXT%20Direct%20commands.pdf]] 
-  * [[http://​student.agh.edu.pl/​~mziolkow/​MIW/​Appendix%203-LEGO%20MINDSTORMS%20NXT%20ARM7%20Bluetooth%20Interface%20specification.pdf]] 
-  * [[http://​student.agh.edu.pl/​~mziolkow/​MIW/​LEGO%20MINDSTORMS%20NXT%20Bluetooth%20Developer%20Kit.pdf]] 
-  * [[http://​bricxcc.sourceforge.net/​nqc]] 
  
pl/miw/miw08_mindstormscontrolc.txt · ostatnio zmienione: 2019/06/27 15:50 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0