{"id":2587,"date":"2019-07-17T09:51:22","date_gmt":"2019-07-17T07:51:22","guid":{"rendered":"http:\/\/sophie-matthieu.eu\/?p=2587"},"modified":"2020-01-17T02:11:47","modified_gmt":"2020-01-17T01:11:47","slug":"tekevents-raspberry-pi-ais","status":"publish","type":"post","link":"https:\/\/sophie-matthieu.eu\/index.php\/2019\/07\/17\/tekevents-raspberry-pi-ais\/","title":{"rendered":"#TekEVENTS &#8211; Raspberry Pi \/AIS"},"content":{"rendered":"\n<ol><li><strong><em>Historique et d\u00e9veloppement de l A.I.S<\/em><\/strong><\/li><\/ol>\n\n\n\n<p>Le&nbsp;<strong>Syst\u00e8me d&rsquo;identification automatique<\/strong>&nbsp;(SIA) ou&nbsp;<strong>Automatic Identification System<\/strong>&nbsp;(AIS) en anglais est un syst\u00e8me d\u2019\u00e9changes automatis\u00e9s de messages entre navires par radio<strong>&nbsp;VHF ( 161,975&nbsp;Mhz&nbsp;et 162,025&nbsp;Mhz)<\/strong>&nbsp;qui permet aux navires et aux syst\u00e8mes de surveillance de trafic (CROSS en France) de conna\u00eetre l&rsquo;identit\u00e9, le statut, la position et la route des navires se situant dans la zone de navigation.<\/p>\n\n\n\n<p>Le chapitre V de la Convention&nbsp;SOLAS&nbsp;imposait que les navires de&nbsp;jauge brute&nbsp;sup\u00e9rieure \u00e0 300 effectuant des voyages internationaux soient \u00e9quip\u00e9s de ce dispositif d&rsquo;ici juillet 2007 au plus tard.<\/p>\n\n\n\n<p> Le signal est multiplex\u00e9 pour \u00e9viter que les navires ne se brouillent mutuellement en \u00e9mettant au m\u00eame moment. Pour accro\u00eetre la capacit\u00e9 du syst\u00e8me, la fr\u00e9quence de rafra\u00eechissement est modul\u00e9e en fonction de la vitesse du navire et de ses \u00e9volutions&nbsp;: un navire lent et suivant une route rectiligne rafra\u00eechira ses donn\u00e9es avec une fr\u00e9quence plus espac\u00e9e. <\/p>\n\n\n\n<p> &nbsp;Le type de modulation est&nbsp;<em>GMSK (Gaussian Minimum Shift Keying) <\/em>et <em>une rapidit\u00e9 de modulation de 9&nbsp;600&nbsp;bauds<\/em>. Les paquets contiennent <em>168 ou 440 bits<\/em>, ils sont pr\u00e9c\u00e9d\u00e9s d&rsquo;un&nbsp;pr\u00e9ambule&nbsp;de 24 bits permettant de synchroniser le r\u00e9cepteur. <em>Les trames sont de type&nbsp;HDLC&nbsp;(qui comporte un code de contr\u00f4le de redondance cyclique  (CRC)<\/em> et sont <em>encod\u00e9es en NRZ<\/em>. L&#8217;empreinte sonore de AIS est proche du bruit de fond, et les trames ne durent que 30 ms.<\/p>\n\n\n\n<p>La port\u00e9e des communications VHF au sol \u00e9tant limit\u00e9e par la&nbsp;rotondit\u00e9 de la terre. Les navires envoient leurs donn\u00e9es AIS  par satellites.  Le syst\u00e8me n&rsquo;ayant pas \u00e9t\u00e9 pr\u00e9vu pour une telle r\u00e9ception, il a fallu r\u00e9soudre certaines difficult\u00e9s techniques, notamment la r\u00e9solution des&nbsp;collisions&nbsp;entre messages \u00e9manant de nombreux navires se trouvant dans la&nbsp;zone de couverture.<\/p>\n\n\n\n<p>2.<strong><em> Raspberry + SDR = Recepteur AIS<\/em><\/strong><\/p>\n\n\n\n<p>On pr\u00e9pare le Raspberry Pi 3 avec la derni\u00e8re version de <a href=\"https:\/\/downloads.raspberrypi.org\/raspbian_full_latest\">Raspbian<\/a> , on r\u00e9cup\u00e8re l image qu on int\u00e8gre \u00e0 la microSD avec Balena Etcher. On copie un fichier texte sans extension appeler \u00ab\u00a0ssh\u00a0\u00bb dans la racine de la carte SD permettant d activer le SSH d\u00e8s le premier boot. On peut mettre aussi le fichier\u00a0\u00bb wpa_supplicant.conf\u00a0\u00bb  contenant les infos de connexion Wifi pour que le Raspberry ce connecte directement au wifi sans assistance humaine.<\/p>\n\n\n\n<p>On d\u00e9marre le raspberry Pi avec sa carte microSD ins\u00e9r\u00e9, on r\u00e9cup\u00e8re l ip du Raspberry via son WiFi ou via Ethernet. On se connecte en SSH&#8230;<\/p>\n\n\n\n<p>Dans notre configuration on a \u00e9quip\u00e9 le RaspBerry Pi d un Ecran OLED Touch se connectant sur le port GPIO. Ce n est pas obligatoire mais ca peut s av\u00e9rer utilise en mode balade. Une fois connect\u00e9 , on va installer les drivers pour la prise en charge de l \u00e9cran OLED Touch <\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo apt-get update\nsudo apt-get upgrade\nsudo rm -rf LCD-show\ngit clone https:\/\/github.com\/goodtft\/LCD-show.git\nchmod -R 755 LCD-show\ncd LCD-show\/<\/pre>\n\n\n\n<p> Ensuite il suffit de lancer la commande qui correspond&nbsp;<strong>\u00e0 votre \u00e9cran<\/strong>: <\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo .\/LCD35-show (pour ma part)<\/pre>\n\n\n\n<p>Pour les autres \u00e9crans<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo .\/LCD32-show\nsudo .\/LCD28-show\nsudo .\/LCD397-show\nsudo .\/LCD43-show\nsudo .\/LCD5-show\nsudo .\/LCD7B-show\nsudo .\/LCD7C-show\n\nHDMI Display-MPI3508\nsudo .\/MPI3508_480_320-show\nsudo .\/MPI3508_720_480-show\nsudo .\/MPI3508_810_540-show\nsudo .\/MPI3508_960_640-show\n\nDisplay-MPI3510\nsudo .\/MPI3510-show<\/pre>\n\n\n\n<p>On commence par faire les derni\u00e8res MAJ du \u00ab\u00a0Raspbery Pi\u00a0\u00bb pour pr\u00e9parer le terrain pour installer la partie SDR ensuite<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo apt-get update\nsudo apt-get upgrade\n<\/pre>\n\n\n\n<p>R\u00e9cup\u00e9ration du Drivers pour le SDR<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"> git clone git:\/\/git.osmocom.org\/rtl-sdr.git\n <\/pre>\n\n\n\n<p>Compilation et installation du driver SDR<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">cd&nbsp;&nbsp;rtl-sdr\nmkdir build\ncd build\ncmake ..\/ -DINSTALL_UDEV_RULES=ON\nmake\nsudo make install\nsudo ldconfig\ncd ~\nsudo cp .\/rtl-sdr\/rtl-sdr.rules \/etc\/udev\/rules.d\/\nsudo reboot<\/pre>\n\n\n\n<p>Test pour voir si le module SDR USB est bien pris en charge par le RaspBerry <\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">rtl_test\n <\/pre>\n\n\n\n<p>Normalement, on aper\u00e7oit les informations techniques du module SDR <\/p>\n\n\n\n<p>\nFound 1 device(s):<br>\n  0:  Realtek, RTL2838UHIDIR, SN: 00000001<\/p>\n\n\n\n<p>Using device 0: Generic RTL2832U OEM<\/p>\n\n\n\n<p> A la fin on peut avoir un message d erreur c est tout a fait normal \u00e7a prouve que \u00e7\u00e0 fonctionne bien \ud83d\ude00<\/p>\n\n\n\n<p>Patchage de l erreur pour eviter de l afficher \ud83d\ude00<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo modprobe -r dvb_usb_rtl28xxu\nsudo nano \/etc\/modprobe.d\/rtl-sdr-blacklist.conf\nblacklist dvb_usb_rtl28xxu<\/pre>\n\n\n\n<p>On refait un test<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">rtl_test<\/pre>\n\n\n\n<p>\nFound 1 device(s):<br>\n  0:  Realtek, RTL2838UHIDIR, SN: 00000001<\/p>\n\n\n\n<p>Using device 0: Generic RTL2832U OEM<br>\nFound Rafael Micro R820T tuner<br>\nSupported gain values (29): 0.0 0.9 1.4 2.7 3.7 7.7 8.7 12.5 14.4 15.7 \n16.6 19.7 20.7 22.9 25.4 28.0 29.7 32.8 33.8 36.4 37.2 38.6 40.2 42.1 \n43.4 43.9 44.5 48.0 49.6<br>\n[R82XX] PLL not locked!<br>\nSampling at 2048000 S\/s.<\/p>\n\n\n\n<p>3. <strong><em>Calibration du Dongle SDR pour avoir une stabilit\u00e9 en fr\u00e9quences<\/em><\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo apt install build-essential libtool automake autoconf librtlsdr-dev libfftw3-dev\ngit clone https:\/\/github.com\/steve-m\/kalibrate-rtl\ncd kalibrate-rtl\/\n.\/bootstrap &amp;&amp; CXXFLAGS='-W -Wall -O3'\n.\/configure\nmake\nsudo make install<\/pre>\n\n\n\n<p>Test de Calibration <\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">rtl_test -p<\/pre>\n\n\n\n<p>Le resultat doit ressembler a ce ce genre de rapport<\/p>\n\n\n\n<p>0:  Realtek, RTL2838UHIDIR, SN: 00000001<\/p>\n\n\n\n<p>Using device 0: Generic RTL2832U OEM<br> Found Rafael Micro R820T tuner<br> Supported gain values (29): 0.0 0.9 1.4 2.7 3.7 7.7 8.7 12.5 14.4 15.7  16.6 19.7 20.7 22.9 25.4 28.0 29.7 32.8 33.8 36.4 37.2 38.6 40.2 42.1  43.4 43.9 44.5 48.0 49.6<br> [R82XX] PLL not locked!<br> Sampling at 2048000 S\/s.<br> Reporting PPM error measurement every 10 seconds\u2026<br> Press ^C after a few minutes.<br> Reading samples in async mode\u2026<br> lost at least 168 bytes<br> real sample rate: 2047684 current PPM: -154 cumulative PPM: -154<br> real sample rate: 2048101 current PPM: 50 cumulative PPM: -52<br> real sample rate: 2048077 current PPM: 38 cumulative PPM: -22<br> real sample rate: 2048198 current PPM: 97 cumulative PPM: 8<br> real sample rate: 2048066 current PPM: 33 cumulative PPM: 13<br> real sample rate: 2048093 current PPM: 46 cumulative PPM: 18<br> real sample rate: 2048072 current PPM: 36 cumulative PPM: 21<br> real sample rate: 2047986 current PPM: -6 cumulative PPM: 17<br> real sample rate: 2048079 current PPM: 39 cumulative PPM: 20<br> real sample rate: 2048108 current PPM: 53 cumulative PPM: 23<br> real sample rate: 2048037 current PPM: 18 cumulative PPM: 23<\/p>\n\n\n\n<p>Pour arr\u00eater le processus un petit Ctrl C et c est bon &#8230;<\/p>\n\n\n\n<p>Installation du d\u00e9codeur software AIS<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">cd ~\ngit clone https:\/\/github.com\/dgiardini\/rtl-ais\ncd rtl-ais\nmake<\/pre>\n\n\n\n<p>Test du Serveur AIS<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">.\/rtl_ais -p 35 -n -h 192.168.1.15<\/pre>\n\n\n\n<p>-p 35 : Deviation en PPM vu dans le log de calibration.<br> -n : Log AIS messages to console.<br> -h : Adresse IP de l&rsquo;ordinateur destinataire des donn\u00e9es AIS \u00e9quip\u00e9 de  OpenCPN, MaxSea, Adrena, QtVLM, ScanNav, MacENC &#8230;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Historique et d\u00e9veloppement de l A.I.S Le&nbsp;Syst\u00e8me d&rsquo;identification automatique&nbsp;(SIA) ou&nbsp;Automatic Identification System&nbsp;(AIS) en anglais est un syst\u00e8me d\u2019\u00e9changes automatis\u00e9s de messages entre navires par radio&nbsp;VHF ( 161,975&nbsp;Mhz&nbsp;et 162,025&nbsp;Mhz)&nbsp;qui permet aux navires et aux syst\u00e8mes de surveillance de trafic (CROSS en France) de conna\u00eetre l&rsquo;identit\u00e9, le &hellip; <a href=\"https:\/\/sophie-matthieu.eu\/index.php\/2019\/07\/17\/tekevents-raspberry-pi-ais\/\" class=\"more-link\"><span>Continue reading<span class=\"screen-reader-text\">#TekEVENTS &#8211; Raspberry Pi \/AIS<\/span><\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":3156,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[8,14],"tags":[],"_links":{"self":[{"href":"https:\/\/sophie-matthieu.eu\/index.php\/wp-json\/wp\/v2\/posts\/2587"}],"collection":[{"href":"https:\/\/sophie-matthieu.eu\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sophie-matthieu.eu\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sophie-matthieu.eu\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sophie-matthieu.eu\/index.php\/wp-json\/wp\/v2\/comments?post=2587"}],"version-history":[{"count":29,"href":"https:\/\/sophie-matthieu.eu\/index.php\/wp-json\/wp\/v2\/posts\/2587\/revisions"}],"predecessor-version":[{"id":2626,"href":"https:\/\/sophie-matthieu.eu\/index.php\/wp-json\/wp\/v2\/posts\/2587\/revisions\/2626"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sophie-matthieu.eu\/index.php\/wp-json\/wp\/v2\/media\/3156"}],"wp:attachment":[{"href":"https:\/\/sophie-matthieu.eu\/index.php\/wp-json\/wp\/v2\/media?parent=2587"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sophie-matthieu.eu\/index.php\/wp-json\/wp\/v2\/categories?post=2587"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sophie-matthieu.eu\/index.php\/wp-json\/wp\/v2\/tags?post=2587"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}