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/06 22:39]
miw
pl:miw:miw08_mindstormscontrolc [2019/06/27 15:50] (aktualna)
Linia 1: Linia 1:
 ====== Opis ====== ====== Opis ======
 +__**Projekt zakończony**__
 +
 Marcin Ziółkowski <​mziolkow@student.agh.edu.pl>​ Marcin Ziółkowski <​mziolkow@student.agh.edu.pl>​
  
Linia 40: Linia 42:
   * 100% funkcji?   * 100% funkcji?
   * sockety pod windows   * sockety pod windows
 +
  
  
Linia 45: Linia 48:
   * sockety pod boost   * sockety pod boost
   * kompilacja cygwin nxt++ (GJN)   * 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)
 +
 +
 +
 +===== 080520 =====
 +  * GJN -> api w cvs, -> PH/MZ
 +  * MZ -> integr -> PH
 +  * PH -> testy
 +  * GJN -> testy + kompilacja win/linux
 +  * BT pod win? ident robota + uwierz(pin?​)
 +
 +===== 080603 =====
 +  * testy, oceny
  
 ====== Projekt ====== ====== Projekt ======
Linia 79: Linia 103:
  
 ===== Opis protokolu ===== ===== Opis protokolu =====
 +
  
  
Linia 85: Linia 110:
 ^ command ​     ^ return ​      ^ description ​         ^ ^ command ​     ^ return ​      ^ description ​         ^
 | nxt; open    | ---     | Initiates the NXT connection ​       | | nxt; open    | ---     | Initiates the NXT connection ​       |
 +| nxt; openBT ​   | ---     | Initiates the NXT connection over BT      |
 +| nxt; pair; resourceName;​ passkey; pairedResourceName ​   | ---     | Pairs the specified NXT to this computer ​  |
 +| nxt; unpair; resourceName ​ | ---     | Destroys the Bluetooth pairing that was previously established between this computer and the specified NXT |
 | nxt; close    | --- | Closes the NXT connection| | nxt; close    | --- | Closes the NXT connection|
 | nxt; batteryLevel ​   | value     | Returns the current battery level        | | nxt; batteryLevel ​   | value     | Returns the current battery level        |
Linia 134: Linia 162:
   * err: unknown_command:​ [what]   * err: unknown_command:​ [what]
   * err: wrong_params:​ [what]   * err: wrong_params:​ [what]
 +
  
  
Linia 140: Linia 169:
 == Possible commands: == == Possible commands: ==
 ^ command ​     ^ return ​      ^ description ​         ^ ^ command ​     ^ return ​      ^ description ​         ^
-sonar; setTouch; portNr ​   | ---     | Sets a sensor in a specified port to a touch sensor ​    | +sensor; setTouch; portNr ​   | ---     | Sets a sensor in a specified port to a touch sensor ​    | 
-sonar; setSound; portNr ​  | --- | Sets a sensor in a specified port to a sound sensor ​ | +sensor; setSound; portNr ​  | --- | Sets a sensor in a specified port to a sound sensor ​ | 
-sonar; setLight; portNr, active ​  | --- |Sets a sensor in a specified port to a light sensor ​       | +sensor; setLight; portNr, active ​  | --- |Sets a sensor in a specified port to a light sensor ​       | 
-sonar; setSonar; portNr ​  | ---     | Sets a sensor in a specified port to a sonar sensor ​     | +sensor; setSonar; portNr ​  | ---     | Sets a sensor in a specified port to a sonar sensor ​     | 
-sonar; setRaw; portNr ​ | --- | Sets a sensor to return a raw value  | +sensor; setRaw; portNr ​ | --- | Sets a sensor to return a raw value  | 
-sonar; getValue; portNr ​  | value     | Retrieves the value of a sensor ​      | +sensor; getValue; portNr ​  | value     | Retrieves the value of a sensor ​      | 
-sonar; lsGetStatus;​ portNr ​   | value     | Gets the status of the lowspeed port      | +sensor; lsGetStatus;​ portNr ​   | value     | Gets the status of the lowspeed port      | 
-sonar; getSonarValue;​ portNr ​ | value | Retrieves the value for sonar sensors ​ | +sensor; getSonarValue;​ portNr ​ | value | Retrieves the value for sonar sensors ​ | 
-sonar; setSonarOff;​ portNr ​   | ---    | Tells the sonar sensor to stop sending pulses ​ | +sensor; setSonarOff;​ portNr ​   | ---    | Tells the sonar sensor to stop sending pulses ​ | 
-sonar; setSonarSingleShot;​ portNr ​   | ---    | Tells the sonar sensor to only send a pulse when you ask it what it's value is  | +sensor; setSonarSingleShot;​ portNr ​   | ---    | Tells the sonar sensor to only send a pulse when you ask it what it's value is  | 
-sonar; setSonarContinuous;​ portNr ​   | ---    | Tells the sonar sensor to continuously send pulses ​ | +sensor; setSonarContinuous;​ portNr ​   | ---    | Tells the sonar sensor to continuously send pulses ​ | 
-sonar; setSonarContinuousInterval;​ portNr, interval ​ | ---    | Sets the interval at which the sonar sensor sends a pulse  |+sensor; setSonarContinuousInterval;​ portNr, interval ​ | ---    | Sets the interval at which the sonar sensor sends a pulse  |
  
 **Description arguments:​** **Description arguments:​**
Linia 176: Linia 205:
 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). 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. 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.
 +
  
  
Linia 181: Linia 211:
 ===== ===== ===== =====
 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. 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.
 +
 +UWAGA! Po wykonaniu czynnosci opisanych na stronie [[http://​www.boost.org/​doc/​libs/​1_35_0/​doc/​html/​boost_asio.html|http://​www.boost.org/​doc/​libs/​1_35_0/​doc/​html/​boost_asio.html]] niekoniecznie wszystkie wymagane bibioteki trafia do katalogow przeznaczenia i bedziemy miec problemy podczas linkowania. W takiej sytuacji kopiujemy z utworznego przez boost'​a katalogu '​bin.v2'​ wszystkie wymagane biblioteki.
 +
 +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).
 +
 +
 +
 +
 +
 +
 +
 +===== =====
 +**Binarki**
 +
 +  * [windows] {{:​pl:​miw:​nxt.zip|nxt.zip}} (zbudowano na Windows XP SP2)
 +  * [linux] {{:​pl:​miw:​nxt.tar.gz|nxt.tar.gz}} (zbudowano na Debian 4.0 R3) Jesli nie instalowano uprzednio ASIO boosta z pewnoscia bedziemy musieli wykorzystac zalaczona biblioteke do uruchomienia binarki. Najlepiej ja przeniesc w stand. miejsce wszystkich bibliotek czyli pewnie do /usr/lib/.
 +
 +**Binarki - wersja 3.**
 +  * [windows] {{:​pl:​miw:​nxt2.zip|nxt2.zip}}
 +  * [linux] {{:​pl:​miw:​nxt2.tar.gz|nxt2.tar.gz}}
 +
 +===== =====
 +**Przyklad uzycia**
 +
 +  * laczymy sie np. przez telnet na porcie 2056 (oczywiscie IP stosowny do sytuacji; na cele przykladu zaklada sie lokalne odpalenie serwera), czyli wpisujemy: '​**telnet localhost 2056**'​
 +  * na poczatku musimy sie polaczyc z robotem, wydajemy wiec polecenie: '​**nxt;​ open**'​
 +  * pozniej wszystkie inne polecenia, ktore zrobia z robotem wszystko czego zapragniemy ;)
 +  * na samym koncu zeby sie rozlaczyc z robotem wydajemy polecenie '​**nxt;​ close**'​
 +  * i rozlaczanie z samym serwerem realizujemy za pomoca polecenia: '​**bye**'​
 +
 +
 +
 +
 +
 +===== =====
 +**Kolejna, trzecia wersja**
 +
 +W nowej wersji dokonano niewielkich modyfikacji czesci kodu, na rzecz usuniecia znalezionych niedopatrzen.
 +Wieksza czesc pracy nad ta wersja poswiecono na dodanie pewnej funkcjonalnosci na potrzeby integracji z Prologiem (klient napisany w Prologu).
 +  * Zrodla (wersja 3): {{:​pl:​miw:​mindstorm_control_c_ver.3.zip|mindstorm_control_c_ver.3.zip}}
 +
 +
 +
 +
 +===== =====
 +**Klient w prologu**
 +
 +Kolejnym etapem byla integracja napisanego uprzednio kodu, z klientem, ktory mialby sie laczyc z naszym serwerem i na rzecz ktorego serwer wykonywalby zadane operacje. API calosci napisal kolega, Piotr Hołownia, moim zadaniem bylo napisanie tresci (klienta) w Prologu.
 +Dokonano wiec implementacji zadanych instrukcji, ktore komunikuja sie z poziomu Prologu za pomoca socketow z programem napisanym w C++.
 +  * Zrodla: {{:​pl:​miw:​nxt_actions_dummy.pl|nxt_actions_dummy.pl}}
 +
 +
 +
 +
 +
 +===== =====
 +**BT pod win**
 +
 +Z wykorzystaniem NXT++ istnieje mozliwosc polaczenia z robotem nie tylko za pomoca USB, ale takze przez BT. 
 +W celu polaczenia przez BT (wczesniej juz zparowanego) wystarczy wywolac funckcje OpenBT(). W przypadku kiedy chcemy zdecydowac z poziomu kodu o parowaniu konkretnego robota musimy uzyc odpowiednich funkcji:
 +  * **Parowanie:​** iNXT::​pairBluetooth( ViConstString resourceName,​ ViConstString passkey, ViChar pairedResourceName[],​ tStatus&​ status );
 +
 +  * <​resourceName>​ The resource string that specifies the NXT with which to pair
 +  * <​passkey>​ A string containing the passkey the computer should exchange with the device. The passkey cannot be longer than 15 characters and must be NULL-terminated
 +  * <​pairedResourceName>​ A Bluetooth resource string representing the paired device. On Windows, the specified resourceName is suffixed with the COM port; On Mac OS X, the RFCOMM channel identifier. The resource string must have a capacity of 256 bytes
 +  *<​status>​ Status chaining object.
 +  * **Odparowywanie:​** iNXT::​unpairBluetooth( ViConstString resourceName,​ tStatus&​ status );
 +  * <​resourceName>​ The resource string that specifies the NXT with which to unpair
 +  * <​status>​ Status chaining object
 +  * **Sprawdzanie zparowania:​** iNXT::​isPaired( ViConstString resourceName,​ tStatus&​ status );
 +  * <​resourceName>​ A resource string that specifies the NXT for which to check its pairing status
 +  * <​status>​ Status chaining object
 +  * Return: VI_TRUE if the NXT is paired with this computer (or if it is connected via USB); VI_FALSE otherwise
 +
 +
 +
 +
 +
 +
 +
 +
 +===== =====
 +**BT pod win cd. - dodano kod do uzywania (parowania, odparowywania,​ otwierania) BT**
 +
 +Tak jak w temacie - dodano mozliwosc uzywania BT pod win, wlacznie z parowaniem/​odparowywaniem. Informacje jak tego uzywac znajdziemy powyzej, w zaktualizowanym opisie protokolu, ktorego uzywa serwer.
 +
 +  * Zrodla, ostatniej wersji: {{:​pl:​miw:​mindstorm_control_c_ver.4.zip|mindstorm_control_c_ver.4.zip}}
 +
 +P.S. Oczywiscie w celu wyszukiwania,​ parowania etc. (nad BT) mozemy wykorzystac pod win powszechnie uzywany program: [[http://​www.bluesoleil.com/​|BlueSoleil]]
 +
 +
 +===== =====
 +**Poprawki w serwerze na rzecz wspolpracy z prologiem; Dodano duza czesc implementacji po stronie prologu, tak by byla max. zgodnosc z iCommand**
 +
 +  * Zrodla:​{{:​pl:​miw:​mindstorm_control_c_ver.6.zip|mindstorm_control_c_ver.6.zip}}
 +
  
 ====== Materiały ====== ====== Materiały ======
pl/miw/miw08_mindstormscontrolc.1207514377.txt.gz · ostatnio zmienione: 2019/06/27 15:58 (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