logoperosoft
programare
c/c++, MySQL C API, GTK+, windows, linux



     


 MySQL C API

CSS3 Image Button Css3Menu.com


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.
      
Client
Server
Determinare rută ex.1
Determinare rută ex.2
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