perosoft programare c/c++, MySQL C API, GTK+, windows, linux |
MySQL C API |
Dispecerat auto
Aplicaţie dispecerat auto,
monitorizare GPS a autovehiculelor din parcul auto,
indicarea rutelor optime, stocarea curselor efectuate,
comunicare dispecer-operatori, conexiune internet,
trafic de date, pe bază de cartele de telefonie mobilă,
3G sau 4G. Se foloseşte biblioteca libchamplain, care este opensource, biblotecă care lucrează cu hărţile openstreetmap. Echipamente necesare:
-
server de date, OS Linux;- laptop 2 in 1, 3G sau 4G, receiver GPS USB, OS Linux; Obs.: pentru testări se poate lucra pe un singur pc.
Pentru receiver-ul GPS USB:
Eu am doua, unul Sirf şi unul u-blox 7. Amândouă recunoscute de linux. - pentru u-blox 7 cu dmesg am obţinut: [173015.023729] usb 2-5: new full-speed USB device number 7 using xhci_hcd [173015.172569] usb 2-5: New USB device found, idVendor=1546, idProduct=01a7 [173015.172574] usb 2-5: New USB device strings: Mfr=1, Product=2, SerialNumber=0 [173015.172577] usb 2-5: Product: u-blox 7 - GPS/GNSS Receiver [173015.172580] usb 2-5: Manufacturer: u-blox AG - www.u-blox.com [173015.270502] cdc_acm 2-5:1.0: ttyACM0: USB ACM device deci: $ ls -l /dev/ttyACM0 crw-rw---- 1 root dialout 166, 0 iul 17 08:26 /dev/ttyACM0 - pentru Sirf cu dmesg am obţinut: Trebuie adăugat user-ul logat în grupul dialout, pentru a putea deschide ca user normal porturile 'dev/ttyACM0' sau 'dev/ttyUSB0' $usermod -a -G dialout <user_name> După ce aţi adăugat user-ul în grupul dialout, puteţi verifica dacă se pot citi mesajele NMEA, provenite de la receiver-ul GPS USB. $ cat /dev/ttyUSB0 sau $ cat /dev/ttyACM0 Timp "găsire" sateliţi ~3-4min: $ cat /dev/ttyACM0 $GPRMC,045538.00,A,4545.13459,N,02253.79079,E,0.115,,240719,,,A*7F $GPVTG,,T,,M,0.115,N,0.212,K,A*27 $GPGGA,045538.00,4545.13459,N,02253.79079,E,1,04,4.99,241.8,M,35.9,M,,*5F $GPGSA,A,3,02,24,06,12,,,,,,,,,10.73,4.99,9.50*3E $GPGSV,2,1,07,02,31,130,39,06,33,080,29,12,73,321,33,15,04,192,31*7F $GPGSV,2,2,07,24,66,164,36,25,35,279,20,40,29,139,30*46 $GPGLL,4545.13459,N,02253.79079,E,045538.00,A,A*6A $GPTXT,01,01,02,u-blox ag - www.u-blox.com*50 $GPTXT,01,01,02,HW UBX-G70xx 00070000 FF7FFFFFo*69 $GPRMC,045539.00,A,4545.13462,N,02253.79068,E,0.210,,240719,,,A*70 Necesar pentru compilare surse, şi obţinere executabile(ubuntu 18.04) dpkg --add-architecture i386 apt-get update apt-get upgrade -y apt-get autoremove -y apt-get autoclean -y apt-get install build-essential cmake libgtk-3-dev sqlite3 libsqlite3-dev gnome-common gtk-doc-tools libsoup* libclutter-1.0-dev libclutter-gtk-1.0-dev spatialite-bin libsqlite3-mod-spatialite libspatialite* libgeocode-glib-dev -y Descriere fişier de configuraţie "Client.cfg" @ 127.0.0.1 server # /dev/ttyACM0 dispozitiv GPS USB + 0 mod citire NMEA ( 0 - read line, 1 - read caracter ) $ 4352 port comunicatie ^ HD-10-VIW numar auto ! Petruca_Romeo sofer Este intuitiv, mai puţin linia '+ 0 mod citire NMEA ( 0 - read line, 1 - read caracter )' Cele două GPS-uri comunică în mod diferit liniile NMEA: - u-blox 7 linie cu linie, fiecare linie terminată cu '\n' - Sirf caracter cu caracter până formează linia, după care '\n'. De aici cele două constante 0 şi 1. Dacă nu vă încadraţi în cele două moduri va trebuie să vedeţi în ce mod comunică receiver-ul, şi va trebui să modificaţi algoritmul de citire a liniilor NMEA. Descărcaţi arhiva, dezarhivaţi într-un director temporar. După care: În directorul 'geolocation-pachete', aveţi sursele pentru biblioteca libchamplain, care este opensource. $ cd geolocation-pachete $ unzip libchamplain-master.zip $ cd libchamplain-master $ ./autogen.sh $ ./configure $ make $ sudo make install $ sudo ldconfig $ cd Client $ cmake . $ make rezultă executabilul 'Client' $ cd Dispecer $ cmake . $ make rezultă executabilul 'Dispecer' Le lansaţi pe amândouă, fiecare într-un terminal, nu contează ordinea, şi veţi obţine imagini asemănătoare cu primele două imagini din pagină. Aplicaţia 'Client' se centrează şi 'urmăreşte' cu zoom 18 Lat/Lon furnizate de GPS. Cu aplicaţia 'Dispecer' va trebui să vă centraţi în zona clientului, la ce zoom doriţi. Calculare rută optimă între două coordonate, determinare locaţie curentă, utilizare spatialite Conform este nevoie de datele hărţii în format OSM pentru a extrage baza de date sqlite ce poate fi prelucrată în sistem QGIS. $ curl https://download.geofabrik.de/europe/romania-latest.osm.bz2 --output romania-latest.osm.bz2 $ bzip2 -d romania-latest.osm.bz2 $ spatialite_osm_raw -o romania-latest.osm -d romania-latest.sqlite $ spatialite_osm_map -o romania-latest.osm -d romania-latest.sqlite $ spatialite_osm_net -o romania-latest.osm -d romania-latest.sqlite -T roads -m $ spatialite_network -d romania-latest.sqlite -T roads -g geometry -c cost -t node_to -f node_from -n name --oneway-fromto oneway_fromto --oneway-tofrom oneway_tofrom -o roads_net_data --overwrite-output $ spatialite romania-latest.sqlite 'CREATE VIRTUAL TABLE "roads_net" USING VirtualNetwork("roads_net_data")' se obţine în final baza de date sqlite "romania-latest.sqlite", o puteţi vizualiza cu spatialiate-gui: $ spatialite-gui romania-latest.sqlite Necesar ca baza de date "romania-latest.sqlite" să existe în directorul "Client". Modificare surse pentru determinarea locaţiei şi a rutei optime: - în "Client/src/Client.cpp" eliminat comentariul din faţa liniei "#define __OSM_CHECK" - în "Client/src/Threads.h" eliminat comentariul din faţa liniei "#define __GET_LOCATION" - re-make Client Punctul de start al rutei este locaţia curentă, un click pe ecran va indica punctul de sosire dorit, se va calcula şi afişa ruta optimă între cele două puncte, următoarele două imagini din pagină. Corecţii aplicate: - Clientul transmite coordonate Lat/Lon zero în caz că nu există conexiune la sateliţi pentru a stabili poziţie corectă( RMC Status = V ), pentru a nu întrerupe fluxul de date client-server; Todo List - text chat client-server, necesar încă un port de comunicaţie; |
||||||||
Programare DOS/WIN16 TurboC 4.5, Paradox Engine, generator rapoarte intern Programare WIN32/64 OpenWatcom, MySQL C API, Windows SDK, GTK+ Generator rapoarte MiKTeX, LaTeX |
All Rights Reserved © 2009-2011 Perosoft |