Smart and Autonomous parking.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

924 lines
3.1 MiB

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="generator" content="Asciidoctor 2.0.10">
5 years ago
<title>Smart &amp; Autonomous Parking</title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700">
<style>
/* Asciidoctor default stylesheet | MIT License | https://asciidoctor.org */
/* Uncomment @import statement to use as custom stylesheet */
/*@import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700";*/
article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}
audio,video{display:inline-block}
audio:not([controls]){display:none;height:0}
html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}
a{background:none}
a:focus{outline:thin dotted}
a:active,a:hover{outline:0}
h1{font-size:2em;margin:.67em 0}
abbr[title]{border-bottom:1px dotted}
b,strong{font-weight:bold}
dfn{font-style:italic}
hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}
mark{background:#ff0;color:#000}
code,kbd,pre,samp{font-family:monospace;font-size:1em}
pre{white-space:pre-wrap}
q{quotes:"\201C" "\201D" "\2018" "\2019"}
small{font-size:80%}
sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}
sup{top:-.5em}
sub{bottom:-.25em}
img{border:0}
svg:not(:root){overflow:hidden}
figure{margin:0}
fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}
legend{border:0;padding:0}
button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}
button,input{line-height:normal}
button,select{text-transform:none}
button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}
button[disabled],html input[disabled]{cursor:default}
input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}
button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}
textarea{overflow:auto;vertical-align:top}
table{border-collapse:collapse;border-spacing:0}
*,*::before,*::after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}
html,body{font-size:100%}
body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;font-weight:400;font-style:normal;line-height:1;position:relative;cursor:auto;tab-size:4;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}
a:hover{cursor:pointer}
img,object,embed{max-width:100%;height:auto}
object,embed{height:100%}
img{-ms-interpolation-mode:bicubic}
.left{float:left!important}
.right{float:right!important}
.text-left{text-align:left!important}
.text-right{text-align:right!important}
.text-center{text-align:center!important}
.text-justify{text-align:justify!important}
.hide{display:none}
img,object,svg{display:inline-block;vertical-align:middle}
textarea{height:auto;min-height:50px}
select{width:100%}
.center{margin-left:auto;margin-right:auto}
.stretch{width:100%}
.subheader,.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{line-height:1.45;color:#7a2518;font-weight:400;margin-top:0;margin-bottom:.25em}
div,dl,dt,dd,ul,ol,li,h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0;direction:ltr}
a{color:#2156a5;text-decoration:underline;line-height:inherit}
a:hover,a:focus{color:#1d4b8f}
a img{border:0}
p{font-family:inherit;font-weight:400;font-size:1em;line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
p aside{font-size:.875em;line-height:1.35;font-style:italic}
h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em}
h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0}
h1{font-size:2.125em}
h2{font-size:1.6875em}
h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em}
h4,h5{font-size:1.125em}
h6{font-size:1em}
hr{border:solid #dddddf;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em;height:0}
em,i{font-style:italic;line-height:inherit}
strong,b{font-weight:bold;line-height:inherit}
small{font-size:60%;line-height:inherit}
code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)}
ul,ol,dl{font-size:1em;line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
ul,ol{margin-left:1.5em}
ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0;font-size:1em}
ul.square li ul,ul.circle li ul,ul.disc li ul{list-style:inherit}
ul.square{list-style-type:square}
ul.circle{list-style-type:circle}
ul.disc{list-style-type:disc}
ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0}
dl dt{margin-bottom:.3125em;font-weight:bold}
dl dd{margin-bottom:1.25em}
abbr,acronym{text-transform:uppercase;font-size:90%;color:rgba(0,0,0,.8);border-bottom:1px dotted #ddd;cursor:help}
abbr{text-transform:none}
blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd}
blockquote cite{display:block;font-size:.9375em;color:rgba(0,0,0,.6)}
blockquote cite::before{content:"\2014 \0020"}
blockquote cite a,blockquote cite a:visited{color:rgba(0,0,0,.6)}
blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)}
@media screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2}
h1{font-size:2.75em}
h2{font-size:2.3125em}
h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em}
h4{font-size:1.4375em}}
table{background:#fff;margin-bottom:1.25em;border:solid 1px #dedede}
table thead,table tfoot{background:#f7f8f7}
table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left}
table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)}
table tr.even,table tr.alt{background:#f8f8f7}
table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot tr td{display:table-cell;line-height:1.6}
h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2;word-spacing:-.05em}
h1 strong,h2 strong,h3 strong,#toctitle strong,.sidebarblock>.content>.title strong,h4 strong,h5 strong,h6 strong{font-weight:400}
.clearfix::before,.clearfix::after,.float-group::before,.float-group::after{content:" ";display:table}
.clearfix::after,.float-group::after{clear:both}
:not(pre):not([class^=L])>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background:#f7f7f8;-webkit-border-radius:4px;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed;word-wrap:break-word}
:not(pre)>code.nobreak{word-wrap:normal}
:not(pre)>code.nowrap{white-space:nowrap}
pre{color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;line-height:1.45;text-rendering:optimizeSpeed}
pre code,pre pre{color:inherit;font-size:inherit;line-height:inherit}
pre>code{display:block}
pre.nowrap,pre.nowrap pre{white-space:pre;word-wrap:normal}
em em{font-style:normal}
strong strong{font-weight:400}
.keyseq{color:rgba(51,51,51,.8)}
kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background:#f7f7f7;border:1px solid #ccc;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em white inset;box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em #fff inset;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
.keyseq kbd:first-child{margin-left:0}
.keyseq kbd:last-child{margin-right:0}
.menuseq,.menuref{color:#000}
.menuseq b:not(.caret),.menuref{font-weight:inherit}
.menuseq{word-spacing:-.02em}
.menuseq b.caret{font-size:1.25em;line-height:.8}
.menuseq i.caret{font-weight:bold;text-align:center;width:.45em}
b.button::before,b.button::after{position:relative;top:-1px;font-weight:400}
b.button::before{content:"[";padding:0 3px 0 2px}
b.button::after{content:"]";padding:0 2px 0 3px}
p a>code:hover{color:rgba(0,0,0,.9)}
#header,#content,#footnotes,#footer{width:100%;margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
#header::before,#header::after,#content::before,#content::after,#footnotes::before,#footnotes::after,#footer::before,#footer::after{content:" ";display:table}
#header::after,#content::after,#footnotes::after,#footer::after{clear:both}
#content{margin-top:1.25em}
#content::before{content:none}
#header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0}
#header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #dddddf}
#header>h1:only-child,body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #dddddf;padding-bottom:8px}
#header .details{border-bottom:1px solid #dddddf;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap}
#header .details span:first-child{margin-left:-.125em}
#header .details span.email a{color:rgba(0,0,0,.85)}
#header .details br{display:none}
#header .details br+span::before{content:"\00a0\2013\00a0"}
#header .details br+span.author::before{content:"\00a0\22c5\00a0";color:rgba(0,0,0,.85)}
#header .details br+span#revremark::before{content:"\00a0|\00a0"}
#header #revnumber{text-transform:capitalize}
#header #revnumber::after{content:"\00a0"}
#content>h1:first-child:not([class]){color:rgba(0,0,0,.85);border-bottom:1px solid #dddddf;padding-bottom:8px;margin-top:0;padding-top:1rem;margin-bottom:1.25rem}
#toc{border-bottom:1px solid #e7e7e9;padding-bottom:.5em}
#toc>ul{margin-left:.125em}
#toc ul.sectlevel0>li>a{font-style:italic}
#toc ul.sectlevel0 ul.sectlevel1{margin:.5em 0}
#toc ul{font-family:"Open Sans","DejaVu Sans",sans-serif;list-style-type:none}
#toc li{line-height:1.3334;margin-top:.3334em}
#toc a{text-decoration:none}
#toc a:active{text-decoration:underline}
#toctitle{color:#7a2518;font-size:1.2em}
@media screen and (min-width:768px){#toctitle{font-size:1.375em}
body.toc2{padding-left:15em;padding-right:0}
#toc.toc2{margin-top:0!important;background:#f8f8f7;position:fixed;width:15em;left:0;top:0;border-right:1px solid #e7e7e9;border-top-width:0!important;border-bottom-width:0!important;z-index:1000;padding:1.25em 1em;height:100%;overflow:auto}
#toc.toc2 #toctitle{margin-top:0;margin-bottom:.8rem;font-size:1.2em}
#toc.toc2>ul{font-size:.9em;margin-bottom:0}
#toc.toc2 ul ul{margin-left:0;padding-left:1em}
#toc.toc2 ul.sectlevel0 ul.sectlevel1{padding-left:0;margin-top:.5em;margin-bottom:.5em}
body.toc2.toc-right{padding-left:0;padding-right:15em}
body.toc2.toc-right #toc.toc2{border-right-width:0;border-left:1px solid #e7e7e9;left:auto;right:0}}
@media screen and (min-width:1280px){body.toc2{padding-left:20em;padding-right:0}
#toc.toc2{width:20em}
#toc.toc2 #toctitle{font-size:1.375em}
#toc.toc2>ul{font-size:.95em}
#toc.toc2 ul ul{padding-left:1.25em}
body.toc2.toc-right{padding-left:0;padding-right:20em}}
#content #toc{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}
#content #toc>:first-child{margin-top:0}
#content #toc>:last-child{margin-bottom:0}
#footer{max-width:100%;background:rgba(0,0,0,.8);padding:1.25em}
#footer-text{color:rgba(255,255,255,.8);line-height:1.44}
#content{margin-bottom:.625em}
.sect1{padding-bottom:.625em}
@media screen and (min-width:768px){#content{margin-bottom:1.25em}
.sect1{padding-bottom:1.25em}}
.sect1:last-child{padding-bottom:0}
.sect1+.sect1{border-top:1px solid #e7e7e9}
#content h1>a.anchor,h2>a.anchor,h3>a.anchor,#toctitle>a.anchor,.sidebarblock>.content>.title>a.anchor,h4>a.anchor,h5>a.anchor,h6>a.anchor{position:absolute;z-index:1001;width:1.5ex;margin-left:-1.5ex;display:block;text-decoration:none!important;visibility:hidden;text-align:center;font-weight:400}
#content h1>a.anchor::before,h2>a.anchor::before,h3>a.anchor::before,#toctitle>a.anchor::before,.sidebarblock>.content>.title>a.anchor::before,h4>a.anchor::before,h5>a.anchor::before,h6>a.anchor::before{content:"\00A7";font-size:.85em;display:block;padding-top:.1em}
#content h1:hover>a.anchor,#content h1>a.anchor:hover,h2:hover>a.anchor,h2>a.anchor:hover,h3:hover>a.anchor,#toctitle:hover>a.anchor,.sidebarblock>.content>.title:hover>a.anchor,h3>a.anchor:hover,#toctitle>a.anchor:hover,.sidebarblock>.content>.title>a.anchor:hover,h4:hover>a.anchor,h4>a.anchor:hover,h5:hover>a.anchor,h5>a.anchor:hover,h6:hover>a.anchor,h6>a.anchor:hover{visibility:visible}
#content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none}
#content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221}
details,.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em}
details>summary:first-of-type{cursor:pointer;display:list-item;outline:none;margin-bottom:.75em}
.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic}
table.tableblock.fit-content>caption.title{white-space:nowrap;width:0}
.paragraph.lead>p,#preamble>.sectionbody>[class="paragraph"]:first-of-type p{font-size:1.21875em;line-height:1.6;color:rgba(0,0,0,.85)}
table.tableblock #preamble>.sectionbody>[class="paragraph"]:first-of-type p{font-size:inherit}
.admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%}
.admonitionblock>table td.icon{text-align:center;width:80px}
.admonitionblock>table td.icon img{max-width:none}
.admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase}
.admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #dddddf;color:rgba(0,0,0,.6)}
.admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0}
.exampleblock>.content{border-style:solid;border-width:1px;border-color:#e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;-webkit-border-radius:4px;border-radius:4px}
.exampleblock>.content>:first-child{margin-top:0}
.exampleblock>.content>:last-child{margin-bottom:0}
.sidebarblock{border-style:solid;border-width:1px;border-color:#dbdbd6;margin-bottom:1.25em;padding:1.25em;background:#f3f3f2;-webkit-border-radius:4px;border-radius:4px}
.sidebarblock>:first-child{margin-top:0}
.sidebarblock>:last-child{margin-bottom:0}
.sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center}
.exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0}
.literalblock pre,.listingblock>.content>pre{-webkit-border-radius:4px;border-radius:4px;word-wrap:break-word;overflow-x:auto;padding:1em;font-size:.8125em}
@media screen and (min-width:768px){.literalblock pre,.listingblock>.content>pre{font-size:.90625em}}
@media screen and (min-width:1280px){.literalblock pre,.listingblock>.content>pre{font-size:1em}}
.literalblock pre,.listingblock>.content>pre:not(.highlight),.listingblock>.content>pre[class="highlight"],.listingblock>.content>pre[class^="highlight "]{background:#f7f7f8}
.literalblock.output pre{color:#f7f7f8;background:rgba(0,0,0,.9)}
5 years ago
.listingblock>.content{position:relative}
.listingblock code[data-lang]::before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:inherit;opacity:.5}
5 years ago
.listingblock:hover code[data-lang]::before{display:block}
.listingblock.terminal pre .command::before{content:attr(data-prompt);padding-right:.5em;color:inherit;opacity:.5}
5 years ago
.listingblock.terminal pre .command:not([data-prompt])::before{content:"$"}
.listingblock pre.highlightjs{padding:0}
.listingblock pre.highlightjs>code{padding:1em;-webkit-border-radius:4px;border-radius:4px}
.listingblock pre.prettyprint{border-width:0}
.prettyprint{background:#f7f7f8}
pre.prettyprint .linenums{line-height:1.45;margin-left:2em}
pre.prettyprint li{background:none;list-style-type:inherit;padding-left:0}
pre.prettyprint li code[data-lang]::before{opacity:1}
pre.prettyprint li:not(:first-child) code[data-lang]::before{display:none}
table.linenotable{border-collapse:separate;border:0;margin-bottom:0;background:none}
table.linenotable td[class]{color:inherit;vertical-align:top;padding:0;line-height:inherit;white-space:normal}
table.linenotable td.code{padding-left:.75em}
table.linenotable td.linenos{border-right:1px solid currentColor;opacity:.35;padding-right:.5em}
pre.pygments .lineno{border-right:1px solid currentColor;opacity:.35;display:inline-block;margin-right:.75em}
pre.pygments .lineno::before{content:"";margin-right:-.125em}
.quoteblock{margin:0 1em 1.25em 1.5em;display:table}
.quoteblock:not(.excerpt)>.title{margin-left:-1.5em;margin-bottom:.75em}
.quoteblock blockquote,.quoteblock p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify}
.quoteblock blockquote{margin:0;padding:0;border:0}
.quoteblock blockquote::before{content:"\201c";float:left;font-size:2.75em;font-weight:bold;line-height:.6em;margin-left:-.6em;color:#7a2518;text-shadow:0 1px 2px rgba(0,0,0,.1)}
.quoteblock blockquote>.paragraph:last-child p{margin-bottom:0}
.quoteblock .attribution{margin-top:.75em;margin-right:.5ex;text-align:right}
.verseblock{margin:0 1em 1.25em}
.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
.verseblock pre strong{font-weight:400}
.verseblock .attribution{margin-top:1.25rem;margin-left:.5ex}
.quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic}
.quoteblock .attribution br,.verseblock .attribution br{display:none}
.quoteblock .attribution cite,.verseblock .attribution cite{display:block;letter-spacing:-.025em;color:rgba(0,0,0,.6)}
.quoteblock.abstract blockquote::before,.quoteblock.excerpt blockquote::before,.quoteblock .quoteblock blockquote::before{display:none}
.quoteblock.abstract blockquote,.quoteblock.abstract p,.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{line-height:1.6;word-spacing:0}
.quoteblock.abstract{margin:0 1em 1.25em;display:block}
.quoteblock.abstract>.title{margin:0 0 .375em;font-size:1.15em;text-align:center}
.quoteblock.excerpt>blockquote,.quoteblock .quoteblock{padding:0 0 .25em 1em;border-left:.25em solid #dddddf}
.quoteblock.excerpt,.quoteblock .quoteblock{margin-left:0}
.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{color:inherit;font-size:1.0625rem}
.quoteblock.excerpt .attribution,.quoteblock .quoteblock .attribution{color:inherit;text-align:left;margin-right:0}
table.tableblock{max-width:100%;border-collapse:separate}
p.tableblock:last-child{margin-bottom:0}
td.tableblock>.content>:last-child{margin-bottom:-1.25em}
td.tableblock>.content>:last-child.sidebarblock{margin-bottom:0}
table.tableblock,th.tableblock,td.tableblock{border:0 solid #dedede}
table.grid-all>thead>tr>.tableblock,table.grid-all>tbody>tr>.tableblock{border-width:0 1px 1px 0}
table.grid-all>tfoot>tr>.tableblock{border-width:1px 1px 0 0}
table.grid-cols>*>tr>.tableblock{border-width:0 1px 0 0}
table.grid-rows>thead>tr>.tableblock,table.grid-rows>tbody>tr>.tableblock{border-width:0 0 1px}
table.grid-rows>tfoot>tr>.tableblock{border-width:1px 0 0}
table.grid-all>*>tr>.tableblock:last-child,table.grid-cols>*>tr>.tableblock:last-child{border-right-width:0}
table.grid-all>tbody>tr:last-child>.tableblock,table.grid-all>thead:last-child>tr>.tableblock,table.grid-rows>tbody>tr:last-child>.tableblock,table.grid-rows>thead:last-child>tr>.tableblock{border-bottom-width:0}
table.frame-all{border-width:1px}
table.frame-sides{border-width:0 1px}
table.frame-topbot,table.frame-ends{border-width:1px 0}
table.stripes-all tr,table.stripes-odd tr:nth-of-type(odd),table.stripes-even tr:nth-of-type(even),table.stripes-hover tr:hover{background:#f8f8f7}
th.halign-left,td.halign-left{text-align:left}
th.halign-right,td.halign-right{text-align:right}
th.halign-center,td.halign-center{text-align:center}
th.valign-top,td.valign-top{vertical-align:top}
th.valign-bottom,td.valign-bottom{vertical-align:bottom}
th.valign-middle,td.valign-middle{vertical-align:middle}
table thead th,table tfoot th{font-weight:bold}
tbody tr th{display:table-cell;line-height:1.6;background:#f7f8f7}
tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th p{color:rgba(0,0,0,.8);font-weight:bold}
p.tableblock>code:only-child{background:none;padding:0}
p.tableblock{font-size:1em}
ol{margin-left:1.75em}
ul li ol{margin-left:1.5em}
dl dd{margin-left:1.125em}
dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0}
ol>li p,ul>li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
ul.checklist,ul.none,ol.none,ul.no-bullet,ol.no-bullet,ol.unnumbered,ul.unstyled,ol.unstyled{list-style-type:none}
ul.no-bullet,ol.no-bullet,ol.unnumbered{margin-left:.625em}
ul.unstyled,ol.unstyled{margin-left:0}
ul.checklist{margin-left:.625em}
ul.checklist li>p:first-child>.fa-square-o:first-child,ul.checklist li>p:first-child>.fa-check-square-o:first-child{width:1.25em;font-size:.8em;position:relative;bottom:.125em}
ul.checklist li>p:first-child>input[type="checkbox"]:first-child{margin-right:.25em}
ul.inline{display:-ms-flexbox;display:-webkit-box;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap;list-style:none;margin:0 0 .625em -1.25em}
ul.inline>li{margin-left:1.25em}
.unstyled dl dt{font-weight:400;font-style:normal}
ol.arabic{list-style-type:decimal}
ol.decimal{list-style-type:decimal-leading-zero}
ol.loweralpha{list-style-type:lower-alpha}
ol.upperalpha{list-style-type:upper-alpha}
ol.lowerroman{list-style-type:lower-roman}
ol.upperroman{list-style-type:upper-roman}
ol.lowergreek{list-style-type:lower-greek}
.hdlist>table,.colist>table{border:0;background:none}
.hdlist>table>tbody>tr,.colist>table>tbody>tr{background:none}
td.hdlist1,td.hdlist2{vertical-align:top;padding:0 .625em}
td.hdlist1{font-weight:bold;padding-bottom:1.25em}
.literalblock+.colist,.listingblock+.colist{margin-top:-.5em}
.colist td:not([class]):first-child{padding:.4em .75em 0;line-height:1;vertical-align:top}
.colist td:not([class]):first-child img{max-width:none}
.colist td:not([class]):last-child{padding:.25em 0}
.thumb,.th{line-height:0;display:inline-block;border:solid 4px #fff;-webkit-box-shadow:0 0 0 1px #ddd;box-shadow:0 0 0 1px #ddd}
.imageblock.left{margin:.25em .625em 1.25em 0}
.imageblock.right{margin:.25em 0 1.25em .625em}
.imageblock>.title{margin-bottom:0}
.imageblock.thumb,.imageblock.th{border-width:6px}
.imageblock.thumb>.title,.imageblock.th>.title{padding:0 .125em}
.image.left,.image.right{margin-top:.25em;margin-bottom:.25em;display:inline-block;line-height:0}
.image.left{margin-right:.625em}
.image.right{margin-left:.625em}
a.image{text-decoration:none;display:inline-block}
a.image object{pointer-events:none}
sup.footnote,sup.footnoteref{font-size:.875em;position:static;vertical-align:super}
sup.footnote a,sup.footnoteref a{text-decoration:none}
sup.footnote a:active,sup.footnoteref a:active{text-decoration:underline}
#footnotes{padding-top:.75em;padding-bottom:.75em;margin-bottom:.625em}
#footnotes hr{width:20%;min-width:6.25em;margin:-.25em 0 .75em;border-width:1px 0 0}
#footnotes .footnote{padding:0 .375em 0 .225em;line-height:1.3334;font-size:.875em;margin-left:1.2em;margin-bottom:.2em}
#footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none;margin-left:-1.05em}
#footnotes .footnote:last-of-type{margin-bottom:0}
#content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0}
.gist .file-data>table{border:0;background:#fff;width:100%;margin-bottom:0}
.gist .file-data>table td.line-data{width:99%}
div.unbreakable{page-break-inside:avoid}
.big{font-size:larger}
.small{font-size:smaller}
.underline{text-decoration:underline}
.overline{text-decoration:overline}
.line-through{text-decoration:line-through}
.aqua{color:#00bfbf}
.aqua-background{background:#00fafa}
.black{color:#000}
.black-background{background:#000}
.blue{color:#0000bf}
.blue-background{background:#0000fa}
.fuchsia{color:#bf00bf}
.fuchsia-background{background:#fa00fa}
.gray{color:#606060}
.gray-background{background:#7d7d7d}
.green{color:#006000}
.green-background{background:#007d00}
.lime{color:#00bf00}
.lime-background{background:#00fa00}
.maroon{color:#600000}
.maroon-background{background:#7d0000}
.navy{color:#000060}
.navy-background{background:#00007d}
.olive{color:#606000}
.olive-background{background:#7d7d00}
.purple{color:#600060}
.purple-background{background:#7d007d}
.red{color:#bf0000}
.red-background{background:#fa0000}
.silver{color:#909090}
.silver-background{background:#bcbcbc}
.teal{color:#006060}
.teal-background{background:#007d7d}
.white{color:#bfbfbf}
.white-background{background:#fafafa}
.yellow{color:#bfbf00}
.yellow-background{background:#fafa00}
span.icon>.fa{cursor:default}
a span.icon>.fa{cursor:inherit}
.admonitionblock td.icon [class^="fa icon-"]{font-size:2.5em;text-shadow:1px 1px 2px rgba(0,0,0,.5);cursor:default}
.admonitionblock td.icon .icon-note::before{content:"\f05a";color:#19407c}
.admonitionblock td.icon .icon-tip::before{content:"\f0eb";text-shadow:1px 1px 2px rgba(155,155,0,.8);color:#111}
.admonitionblock td.icon .icon-warning::before{content:"\f071";color:#bf6900}
.admonitionblock td.icon .icon-caution::before{content:"\f06d";color:#bf3400}
.admonitionblock td.icon .icon-important::before{content:"\f06a";color:#bf0000}
.conum[data-value]{display:inline-block;color:#fff!important;background:rgba(0,0,0,.8);-webkit-border-radius:100px;border-radius:100px;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
.conum[data-value] *{color:#fff!important}
.conum[data-value]+b{display:none}
.conum[data-value]::after{content:attr(data-value)}
pre .conum[data-value]{position:relative;top:-.125em}
b.conum *{color:inherit!important}
.conum:not([data-value]):empty{display:none}
dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility}
h1,h2,p,td.content,span.alt{letter-spacing:-.01em}
p strong,td.content strong,div.footnote strong{letter-spacing:-.005em}
p,blockquote,dt,td.content,span.alt{font-size:1.0625rem}
p{margin-bottom:1.25rem}
.sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em}
.exampleblock>.content{background:#fffef7;border-color:#e0e0dc;-webkit-box-shadow:0 1px 4px #e0e0dc;box-shadow:0 1px 4px #e0e0dc}
.print-only{display:none!important}
@page{margin:1.25cm .75cm}
@media print{*{-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:none!important}
html{font-size:80%}
a{color:inherit!important;text-decoration:underline!important}
a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important}
a[href^="http:"]:not(.bare)::after,a[href^="https:"]:not(.bare)::after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em}
abbr[title]::after{content:" (" attr(title) ")"}
pre,blockquote,tr,img,object,svg{page-break-inside:avoid}
thead{display:table-header-group}
svg{max-width:100%}
p,blockquote,dt,td.content{font-size:1em;orphans:3;widows:3}
h2,h3,#toctitle,.sidebarblock>.content>.title{page-break-after:avoid}
#toc,.sidebarblock,.exampleblock>.content{background:none!important}
#toc{border-bottom:1px solid #dddddf!important;padding-bottom:0!important}
body.book #header{text-align:center}
body.book #header>h1:first-child{border:0!important;margin:2.5em 0 1em}
body.book #header .details{border:0!important;display:block;padding:0!important}
body.book #header .details span:first-child{margin-left:0!important}
body.book #header .details br{display:block}
body.book #header .details br+span::before{content:none!important}
body.book #toc{border:0!important;text-align:left!important;padding:0!important;margin:0!important}
body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-break-before:always}
.listingblock code[data-lang]::before{display:block}
#footer{padding:0 .9375em}
.hide-on-print{display:none!important}
.print-only{display:block!important}
.hide-for-print{display:none!important}
.show-for-print{display:inherit!important}}
@media print,amzn-kf8{#header>h1:first-child{margin-top:1.25rem}
.sect1{padding:0!important}
.sect1+.sect1{border:0}
#footer{background:none}
#footer-text{color:rgba(0,0,0,.6);font-size:.9em}}
@media amzn-kf8{#header,#content,#footnotes,#footer{padding:0}}
</style>
</head>
<body class="article">
<div id="header">
5 years ago
<h1>Smart &amp; Autonomous Parking</h1>
</div>
<div id="content">
<div id="preamble">
<div class="sectionbody">
<div class="paragraph">
<p><strong><em>Authors</em></strong></p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 50%;">
<col style="width: 50%;">
</colgroup>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Ουλής Ευάγγελος</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="mailto:cs151051@uniwa.gr">cs151051@uniwa.gr</a></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Ουλής Νικόλαος</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="mailto:cs161079@uniwa.gr">cs161079@uniwa.gr</a></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Κατσίμπρας Δρόσος</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="mailto:cs131110@uniwa.gr">cs131110@uniwa.gr</a></p></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
5 years ago
<h2 id="_smart_parking">1. Smart Parking</h2>
<div class="sectionbody">
5 years ago
<div class="paragraph">
5 years ago
<p>Το "Smart Parking" Έξυπνο πάρκινγκ βασίζεται στη ιδέα όπου η κατάσταση του πάρκινγκ κοινοποιείται
μέσω ενός συνόλου hardware και software στο διαδίκτυο έτσι ώστε να πετύχουμε η κατάσταση του να είναι διαθέσιμη
5 years ago
"accesable" από το διαδίκτυο. Αυτό το χαρακτηριστικό κάνει αυτό το αντικειμένο μέρος του διαδικτύου και του κόσμου του IoT.</p>
5 years ago
</div>
<div class="paragraph">
5 years ago
<p><strong>Η υλοποίηση του Smart Parking χωρίζεται σε 4 βασικά μέρη:</strong></p>
5 years ago
</div>
5 years ago
<div class="ulist">
<ul>
<li>
5 years ago
<p>Το 1<sub>ο</sub> μέρος αποτελείται από ένα σύνολο αισθητήρων (ultrasonic) που εγκαθιστούνται σε κάθε θέση parking (sensor) και
5 years ago
έναν μικροελεγκτή (Arduino Uno), έτσι ώστε να ανιχνεύει και να κωδικοποιεί για μία συγκεκριμένη θέση έαν υπάρχει
κάποιο όχημα ή όχι.</p>
5 years ago
</li>
5 years ago
</ul>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<i class="fa icon-note" title="Note"></i>
</td>
<td class="content">
<div class="title">Φάκελος Κώδικα</div>
<div class="paragraph">
<p><a href="https://git.swarmlab.io:3000/cs151051/smartParking/src/branch/master/sensorNode/sensorNode.ino" class="bare">https://git.swarmlab.io:3000/cs151051/smartParking/src/branch/master/sensorNode/sensorNode.ino</a></p>
</div>
</td>
</tr>
</table>
</div>
<div class="ulist">
<ul>
5 years ago
<li>
5 years ago
<p>Το 2<sub>ο</sub> μέρος αποτελείται από τον συσκευή gateway σε Raspberry Pi1, η οποία διαβάζει στη σειριακή του
τη πληροφορία από το Arduino Uno, που κάνει "sense" μία θέση parking, και στέλνει αυτή την πληροφορία
σε έναν web server με χρήση REST API.</p>
5 years ago
</li>
5 years ago
</ul>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<i class="fa icon-note" title="Note"></i>
</td>
<td class="content">
<div class="title">Φάκελος Κώδικα</div>
<div class="paragraph">
<p><a href="https://git.swarmlab.io:3000/cs151051/smartParking/src/branch/master/gatewayNode" class="bare">https://git.swarmlab.io:3000/cs151051/smartParking/src/branch/master/gatewayNode</a></p>
</div>
</td>
</tr>
</table>
</div>
<div class="ulist">
<ul>
5 years ago
<li>
5 years ago
<p>To 3<sub>o</sub> μέρος αποτελείται από τον WEB Server ο οποίος αποτελείται από ένα process υλοποιημένο σε γλώσσα προγραμματιμού python.
Το proccess αυτό υλοποιεί έναν REST API WEB Server έτσι ώστε να μπορεί να αποθηκεύει την κατάσταση κάθε θέσης parking σε μία βάση
δεδομένων δύο δομή λίστας με χαρακτηριστικό κλειδί τον κωδικό κάθε θέσης parking.</p>
5 years ago
</li>
5 years ago
</ul>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<i class="fa icon-note" title="Note"></i>
</td>
<td class="content">
<div class="title">Φάκελος Κώδικα</div>
<div class="paragraph">
<p><a href="https://git.swarmlab.io:3000/cs151051/smartParking/src/branch/master/serverNode" class="bare">https://git.swarmlab.io:3000/cs151051/smartParking/src/branch/master/serverNode</a></p>
</div>
</td>
</tr>
</table>
</div>
<div class="ulist">
<ul>
5 years ago
<li>
5 years ago
<p>Το 4<sub>o</sub> μέρος αποτελείται από την διεπαφή χρήστη (Interface), η οποία μέσω WEB σελίδας βλέπει κανείς την κατάσταση
5 years ago
του parking, δηλαδή πόσες και ποιές θέσεις μέσα στον χώρο είναι ελεύθερες.</p>
5 years ago
</li>
</ul>
</div>
5 years ago
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<i class="fa icon-note" title="Note"></i>
</td>
<td class="content">
<div class="title">Φάκελος Κώδικα</div>
<div class="paragraph">
<p><a href="https://git.swarmlab.io:3000/cs151051/smartParking/src/branch/master/webInterface" class="bare">https://git.swarmlab.io:3000/cs151051/smartParking/src/branch/master/webInterface</a></p>
</div>
</td>
</tr>
</table>
</div>
<div class="sect2">
5 years ago
<h3 id="_parking_sensor_node_1ο_μέρος">1.1. Parking Sensor Node (1<sub>ο</sub> μέρος)</h3>
<div class="sect3">
<h4 id="_υλικά_κόμβου">1.1.1. Υλικά Κόμβου</h4>
<div class="ulist">
<ul>
<li>
<p>1 x Arduino Uno</p>
</li>
<li>
<p>1 x Red led</p>
</li>
<li>
<p>1 x Blue led</p>
</li>
<li>
<p>8 x links</p>
</li>
<li>
<p>1 x Ultrasonic Sensor</p>
</li>
</ul>
</div>
</div>
<div class="sect3">
<h4 id="_υλοποίηση_του_parking_sensor">1.1.2. Υλοποίηση του Parking Sensor</h4>
<div class="paragraph">
5 years ago
<p>Σε κάθε θέση parking υπάρχει ένας κόμβος που αποτελείται από ένα Arduino Uno και έναν αισθητήρα
5 years ago
απόστασης (ultrasonic) εγκατεστημένο πάνω σε μικροελεγκτή Arduino Uno. Η λειτουργία αυτού βασίζεται στην
ανίχνευση ύπαρξης οχήματος στην αντίστοιχη θέση μέσω μέτρησης της απόστασης από τον αισθητήρα μέχρι
κάποιο αντικείμενο (πιθανό αυτοκίνητο) που εμποδίσει τη θέση του parking, καθώς και την εξαγωγή της
κατάσταασης αντίστοιχης θέσης στη σειριακή θύρα του Arduino.</p>
</div>
<div class="openblock float-group">
<div class="content">
<div class="imageblock left">
<div class="content">
5 years ago
<img src="data:image/jpg;base64,/9j/4SeuRXhpZgAATU0AKgAAAAgACQEyAAIAAAAUAAAAeoglAAQAAAABAAACwQEQAAIAAAAJAAAAjgITAAMAAAABAAEAAAEoAAMAAAABAAIAAAEbAAUAAAABAAAAl4dpAAQAAAABAAAArgEaAAUAAAABAAAAnwEPAAIAAAAHAAAApwAAAxYyMDE5OjEyOjA1IDE3OjQ3OjIxAFJlZG1pIDRYAAAAAEgAAAABAAAASAAAAAFYaWFvbWkAAB2gAQADAAAAAQABAACCnQAFAAAAAQAAAhCQBAACAAAAFAAAAhiSCgAFAAAAAQAAAiySAgAFAAAAAQAAAjSZmQACAAAAJgAAAjykAgADAAAAAQAAAACSkgACAAAABwAAAmKgAwAEAAAAAQAAEECkBQADAAAAAQAAAACkBgADAAAAAQAAAACjAQAHAAAAAQEAAACSkQACAAAABwAAAmmIIgADAAAAAQAAAACkAwADAAAAAQAAAACgAgAEAAAAAQAACSSSkAACAAAABwAAAnCSAQAKAAAAAQAAAneSBwADAAAAAQACAACQAwACAAAAFAAAAn+RAQAHAAAABAECAwCQAAAHAAAABDAyMjCSCQADAAAAAQAQAACgBQAEAAAAAQAAAqOSAwAKAAAAAQAAApOIJwADAAAAAQQRAACiFwADAAAAAQACAACgAAAHAAAABDAxMDCCmgAFAAAAAQAAApsAAAAAAAAAyAAAAGQyMDE5OjEyOjA1IDE3OjQ3OjIxAAAAAZwAAABkAAAAyAAAAGR7InNlbnNvcl90eXBlIjoicmVhciIsIm1pcnJvciI6ZmFsc2V9ADUyNTUwMwA1MjU1MDMANTI1NTAzAAAADjsAAAPoMjAxOToxMjowNSAxNzo0NzoyMQD///7TAAAAZAAAAAEAAAANAAIAAQACAAAABFI5OAAAAgAHAAAABDAxMDAAAAAAAAMABwAFAAAAAwAAAusABQAFAAAAAQAAAwMAHQACAAAACwAAAwsAAAAAAAAADwAAAAEAAAAvAAAAAQAAABUAAAABAAAAyAAAAGQyMDE5OjEyOjA1AAAGARsABQAAAAEAAANkAgIABAAAAAEAACQyAgEABAAAAAEAAAN0AQMAAwAAAAEABgAAASgAAwAAAAEAAgAAARoABQAAAAEAAANsAAAAAAAAAEgAAAABAAAASAAAAAH/2P/bAIQACAYGBwYFCAcHBwkJCAoMFA0MCwsMGRITDxQdGh8eHRocHCAkLicgIiwjHBwoNyksMDE0NDQfJzk9ODI8LjM0MgEJCQkMCwwYDQ0YMiEcITIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgBAACQAwEiAAIRAQMRAf/EAaIAAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKCxAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6AQADAQEBAQEBAQEBAAAAAAAAAQIDBAUGBwgJCgsRAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/dAAQACf/aAAwDAQACEQMRAD8A9b20m3nipMZpFBz14r5xI7mGPanAY7U7FKBTEJnpRg+lOAFOFIBozxxT+1JRketAwopaMVSAjfhTxWLftluK2ZThawbw5emIqHrSHrSHrSZqbAO600rmgNzSk0WGN20oUAUEgU3PvTQz/9D1+lBFJnFIj7iRjpXzbZ3EgNL0pgXnOacxpgI0gQc0eaOKz7u7WAgfePpVY6qBj5DTEbRfgUA5PNYN34jt7Czlurn5YYl3M1UNJ8eafqjEbJLUhd+LjCZT+916c0+Vhc6/ODRmuetPF+l6jIyWFyk5XrtyPyz1q42rrt+4c0WsBfnYBOSBWDdsC/BpLi8knPJwPSqvJoAWjHFNII70A4oAXHNITik79aQkUDELU3dTGb5uKQtigD//0fYCK8X8fjxFB4tunt7q5gtHCNEFkYKRtA4x05Br2k15b4r8areaiNPtIw1rG+2Rm6yH29gfzrwqCblojpqzUVqcKNR8XfM66pOGQD/lqwGPcetRtqfitBzrN2Af+nls59+a6GbTbxTdoUt2aLEjlZRjbg9Pfnp14qCTSb2aVYkghzdLuh/ejoMZ3ehwO+K69Oxj7Q559V8Ts/z6pcF8fNmY9PzrW1jxWb3wla28V3KmoQyqJWGQSAp5z36ih9KvGjNyIEEbn7OD5gz5mMfln0rB1PSJrLUvKuE8uUoElVSCA3Y8VUYRk72JlWsipJeapdW5jkvp5ImwXRpGIPpx+FdP4sLan4O0fUgSJYl+zzEfxDjr7BkP51J4X8JTarI0M0qQL9mWZXPzZXJHY8dTW5rfhqTTvClxpqTpcFh5kbKMYwRkfz/OuTFNRqU5Lo7fJ6G9J80X6HnGneIb7ToxFETGqd0YqTWonjzUkADzzc/7eazZdMuVacvDxBgS4P3CW4qncaVdp5CmE75YxJGAfvJzz+n6V3OhTfQccfUWl7/JHT2nj25kuol+0OHLjG922/jzjFdIPHd3DzIljIvqkw/xrx+CCR5V29QetdBrCFNE08xpGwXKyMi5O7OeWHHTHFZyw0LpGn1yT3jH7j0mH4jWrHE9sV9Sjg1s2nirSL4gJdLGx/hk+X9eleO+HjClrqH2qGEedBtgaXqHB6r+ozXQeDG0XTbu7TxDEP3iAwtISUxzkgj8MGs54dJNxGq9OTtONvNP/M9Ln1nTbd/Llv7aJ+uHkAP61H/bmkn/AJidp/3+X/GvL73WLH+0LhLYGTSxLtgE3JHHJGeRz/TNZ95eG0ZcwxyRN9xyo59vrUxoJ6PcKkJKPPBpx/rc9fGsaYfu6han6TL/AI1X1DxHpOmPEl3eJGZV3JgFsj14Brx9dWt/4rSP8FFULu7N3NuwFVRtRR2FaLCruYe0l1P/0vWftcbIxDDgV5RpOp+FbTw/dvfpG+qyu5XzUJIJ+6Q2MAe9ek3FmLexnbdkrGxJ/CvnXUVKpBIDgncODzxj/GvFw0eZO5tVdppepvza7dxSzqbqyl85NjlWiYY9vStxNT0N0Rm1LDxrtAKRHd0HPrx615p1A9F6e1NIBBGBz1966nC/UhQSPTBeaIY0A1TAVw4Xy4s5BJ6+nt0rF1+fTrvXoGS7DpMV8yRUACc46A+gzXHAcg8ZAwDSEALjAxnPTvRGDi73B04tbHptpeWlk6y2uuvE5hWAjyVb5V6cEn9Kv/bvt8csZ1X7WDGwGLcRsg6Z44Of6V5FjJLbVyevFdP4GwNXmTAwbc/+hLXHjoNUXK+1vzRtQilOxmy6lKqX0c0bTtdbCZipBUg5J6e5FXLq/wBOmvtPcTkrFYLHz2fDDHX3rmZYlUsMc1XY4boOOOleja6OdU0megeENMt7rS02wRtkuJHZFYq3OOvPTFS+Ixb2GgalHJBGhlaONNqBcsMHI4+v5muB03VL/S7svZ3LxbzhsHg/XPFSatq15qkoW7meXYSNxYEfhjisFRkql76G/OuWx6bBpNvJGskNtD9nwjQsY1IdMHvz7flXK+JNksej6ftWGZ2OcJjaGIHI/CszR9f1SxsnigumSGIZ2llI/AN3+lY99fXGoXjXUzs0jHqTzRSozUm2xVJx5SzrkcV
</div>
<div class="title">Figure 1. Ο κόμβος αντιλαμβάνεται παρουσία οχήματος στη θέση.</div>
</div>
<div class="imageblock right">
<div class="content">
5 years ago
<img src="data:image/jpg;base64,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
</div>
<div class="title">Figure 2. Ο κόμβος αντιλαμβάνεται κενή θέση.</div>
</div>
</div>
</div>
<div class="paragraph">
<p>Ο κόμβος διαθέτει επιπλέον δύο leds ένα κόκκινο και ένα μπλε, σαν έξοδο της κατάστασης
5 years ago
της θέσης του parking για τον οποίο είναι υπεύθυνος. Με κόκκινο χαρακτηρίζεται η θέση που είναι
δεσμευμένη από ένα όχημα και με μπλε η ελεύθερη θέση, όπως φαίνεται στις παραπάνω εικόνες.</p>
</div>
</div>
<div class="sect3">
<h4 id="_λειτουργία_του_parking_sensor">1.1.3. Λειτουργία του Parking Sensor</h4>
<div class="paragraph">
<p>Κάθε κόμβος στέλνει στην σειριακή του τον κωδικό της θέσης, με τον οποίο έχει προγραμματιστεί το Arduino,
και την κατάσταση του parking, κωδικοποιημένα με τον διαχωριστή "#". Για την κατάσταση του parking ορίζουμε
με "1" ότι η θέση είναι ελεύθεση και με "0" ότι η θέση είναι δεσμευμένη. Ο έλεγχος του sensor γίνεται κάθε
5 years ago
500ms. Η έξοδος στη σειριακή γίνεται με την μορφή μίας συμβολοσειράς "string".</p>
5 years ago
</div>
<div class="paragraph">
<p>&lt;κωδικός θέσης&gt;#&lt;διαθεσιμότητα 0 ή 1&gt;</p>
</div>
</div>
<div class="sect3">
<h4 id="_διασύνδεση_κόμβου">1.1.4. Διασύνδεση Κόμβου</h4>
<div class="paragraph">
<p>Ο κόμβος αυτός συνδέεται με ένας "Gateway" κόμβο (βασισμένος σε Raspberry Pi) ο οποίος είναι υπεύθυνος για την
5 years ago
μετάδοση της πληροφορίας στο διαδίκτυο. Η πληροφορία αυτή λαμβάνεται στον "Gateway" κόμβο ο οποίος στη συνέχεια
την αποκωδικοποιεί με βάση το πρότυπο &lt;κωδικός θέσης&gt;#&lt;διαθεσιμότητα&gt; και την αποστέλει σε έναν WEB server μέσω του διαδικτύου.</p>
</div>
</div>
</div>
<div class="sect2">
5 years ago
<h3 id="_gateway_node_2ο_μέρος">1.2. Gateway Node (2<sub>ο</sub> μέρος)</h3>
<div class="sect3">
<h4 id="_υλικά_κόμβου_2">1.2.1. Υλικά Κόμβου</h4>
<div class="ulist">
<ul>
<li>
<p>1 x Raspberry Pi 1</p>
</li>
<li>
<p>1 x Serial Link (Connects to Arduino)</p>
</li>
<li>
<p>1 x Power Link (Micro Usb)</p>
</li>
<li>
<p>1 x micro SD (Loaded with Raspbian OS)</p>
</li>
<li>
5 years ago
<p>1 x Ethernet Link (Connects to nearest Network) or WiFi adapter</p>
</li>
</ul>
</div>
</div>
<div class="sect3">
<h4 id="_υλοποίηση_και_προγραμματισμός">1.2.2. Υλοποίηση και Προγραμματισμός</h4>
5 years ago
<div class="paragraph">
5 years ago
<p>Η υλοποίηση αποτελείται από την εγκατάσταση του Raspbian OS (light version) στο Raspberry και τη δημιουργία ενός proccess
σε γλώσσα Python (v3). Το process αυτό διαβάζει από την σειριακή θύρα του την πληροφορία που λαμβάνει από ένα Arduino Uno με
την μορφή &lt;κωδικός θέσης&gt;#&lt;διαθεσιμότητα 0 ή 1&gt;. Ύστερα αποκωδικοποιεί την πληροφορία η οποία περιγράφει τον κωδικό της θέσης
και την διαθεσιμότητα της, και την αποστέλει μέσω ενός REST API με την μέθοδο POST σε έναν WEB Server. Για να αποσταλεί η πληροφορία
στον WEB Server πρέπει να πάρει την μορφή JSON (JavaScript Object Notation).</p>
</div>
<div class="paragraph">
<p>Η μέθοδος του POST γίνεται στην περίπτωσή που η κατάσταση του Parking μεταβληθεί. Σε αντίθετη περίπτωση ο Server δεν ενημερώνεται.</p>
</div>
<div class="paragraph">
<p>Στον ίδιο φάκελο του κώδικα βρίσκεται ένα configuration αρχείο το οποίο περιέχει ένα JSON με την μορφή:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-JSON" data-lang="JSON">{
"ip": "iot-smart-parking.herokuapp.com",
"port": "443"
}</code></pre>
</div>
</div>
<div class="paragraph">
<p>Το αρχείο αυτό περιέχει ρυθμίσεις που αφορά τη σύνδεσή του με τον WEB Server την διευθυνδή του δηλαδή και την πόρτα
που ακούει.</p>
</div>
</div>
<div class="sect3">
<h4 id="_διασύνδεηση_στο_διαδίκτυο">1.2.3. Διασύνδεηση στο Διαδίκτυο</h4>
<div class="paragraph">
<p>Ο κόμβος Gateway έχει διασύνδεση με το διαδίκτυο μέσω ενός καλωδίου Ethernet (UTP) έτσι ώστε να μπορέσει
5 years ago
να στείλει την πληροφορία στο διαδίκτυο, δηλαδή στον WEB Server.</p>
5 years ago
</div>
</div>
</div>
</div>
</div>
<div class="sect1">
5 years ago
<h2 id="_server_node_3ο_μέρος_κεντρικός_server_όπου_κρατά_την_κατάσταση_της_κάθε_θέσης_του_parking">2. Server Node (3<sub>ο</sub> μέρος - Κεντρικός Server όπου κρατά την κατάσταση της κάθε θέσης του Parking)</h2>
5 years ago
<div class="sectionbody">
<div class="paragraph">
5 years ago
<p>Ο κόμβος αυτός υλοποιεί ένα process γραμμένο σε γλώσσα προγραμματισμού Python (v3). Αυτό το process υλοποιεί ένα
REST API έτσι ώστε να μπορούν να επικοινωνούν εύκολα οι Gateway κόμβοι μας με αυτόν. Στην είσοδό του και στην έξοδό του
η πληροφορία έχει την μορφή JSON.</p>
5 years ago
</div>
<div class="paragraph">
5 years ago
<p>Ο server αποθηκεύει όλα τα απαραίτητα δεδομένα σε μία σχεσιακή βάση δεδομένων MySQL, η οποία διαθέτει έναν πίνακα.
5 years ago
Ο πίνακας κρατά όλα τα απαραίτητα πεδία που είναι:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Τον κωδικό της θέσης parking</p>
</li>
<li>
<p>Την διαθεσιμότητά της αντίστοιχης θέση (0 ή 1)</p>
</li>
</ul>
5 years ago
</div>
<div class="sect2">
<h3 id="_εκτέλεση_του_process_στο_cloud">2.1. Εκτέλεση του Process στο Cloud</h3>
<div class="paragraph">
5 years ago
<p>Για την εκτέλεση του process χρησιμοποιούμε μία πλατφόρμα IAAS (Infrastructure as a Service) -
5 years ago
<a href="https://www.heroku.com/platform">Heroku</a>, για την οποιά μπορούμε να βρούμε περεταίρω πληροφορίες στον σύνδεσμο
παραπάνω.</p>
</div>
5 years ago
<div class="paragraph">
<p>Στην δωρεάν έκδοσή του δεν έχουμε περιορισμούς στο τμήμα του HTTP service που εκτελούμε, ενώ στη βάση δεδομένων
υπάρχουν περιοριμοί στις συνδέδεις που μπορούν να γίνουν ανα κάποιο χρονικό διάστημα (περίπου 10 συνδέσει ανα 1 ώρα).</p>
</div>
5 years ago
<div class="openblock float-group">
<div class="content">
<div class="imageblock center">
<div class="content">
<img src="data:image/png;base64,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
</div>
5 years ago
<div class="title">Figure 3. Describe Infrastructure as a Service as an example.</div>
5 years ago
</div>
</div>
</div>
<div class="paragraph">
5 years ago
<p>Για την διαδικασία του deployment εκτελούμε ένα σύνολο βημάτων τα οποία αποτελούνται από την αντιγραφή του κώδικα
5 years ago
σε ένα reposetory του <a href="https://github.com/oulievancs/serverNode">GitHub</a> και την δημιουργία ενός project στην πλατφόρμα για το
τρέξιμο του process. <a href="https://stackabuse.com/deploying-a-flask-application-to-heroku/">περισσότερα</a>. Ακόμα
εγκαθισούμε στο project που μόλις φτιάξαμε μία MySQL βάση δεδομένων για να μπορούμε να αποθηκεύσουμε τα δεδομένα μας.</p>
5 years ago
</div>
5 years ago
<div class="sect3">
<h4 id="_deployment">2.1.1. Deployment</h4>
5 years ago
<div class="ulist">
<ul>
<li>
<p>Το πρώτο πράγμα που χρειαζόμαστε είναι όλες οι απαραίτητες βιβλιοθήκες που χρησιμοποιεί ο κώδικας, έτσι
ώστε να γνωρίζει το Heroku τι να μας προσφέρει. Αυτό επιτυγχάνεται με την αρχειοθέτηση αυτών σε ένα αρχείο
5 years ago
ονόματι requirements.txt .</p>
</li>
<li>
5 years ago
<p>Έπειτα την δημιουργία ενός αρχείου που περιγράφει το που βρίσκεται η κύρια συνάρτηση μας (main) για την
5 years ago
έναρξη του process. Αυτό το αρχείο ονομάζεται Procfile . Στο αρχείο αυτό αναφέτεται ένα gunicorn module.
Ο gunicorn είναι ένας Python HTTP WEB server. Αυτό ουσιαστικά είναι ο ο πυρήνας για την εκτέλεση του API μας.</p>
</li>
<li>
5 years ago
<p>Έπειτα με μια απομακρυσμένη σύνδεση στη βάση μας της οποίας τα στοιχεία πρόσβασης γίνονται στο Heroku,
5 years ago
πραγματοποιούμε μία σύνδεση και δημιουργούμε τον πίνακά μας για την αποθήκευση.</p>
</li>
</ul>
</div>
</div>
<div class="sect3">
<h4 id="_rest_api">2.1.2. REST API</h4>
<div class="paragraph">
<p>Το REST API ουσιαστικά σηκώνει δύο υπηρεσίες. Αυτές είναι:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>/ [GET]: που πας επιστρέφει για κάθε θέση του parking αν είναι διαθέσιμη ή όχι κωδικοποιημένα με 0 ή 1.
Στο response τα δεδομένα μας παίρνουν μορφή JSON. Τα δεδομένα που επιστρέφει γίνονται fetch από τη βάση δεδομένων.</p>
</li>
<li>
<p>/parkingStatus [POST]: που μας επιτρέπει να αλλάξουμε την κατάσταση μίας θέσης parking. Το POST των δεδομένων
στο body γίνεται με την JSON αναπαράστασή τους έτσι ώστε να μπορέσει ο Server να τα επεξεργαστεί, ο οποίος στη
συνέχεια αποθηκεύει την νέα θέση στη Βάση δεδομένων.</p>
5 years ago
</li>
</ul>
5 years ago
</div>
</div>
</div>
</div>
5 years ago
</div>
<div class="sect1">
<h2 id="_διεπαφή_χρήστη_4ο_μέρος">3. Διεπαφή Χρήστη (4<sub>ο</sub> μέρος)</h2>
<div class="sectionbody">
5 years ago
<div class="sect2">
<h3 id="_η_διεπαφή_του_χρήστη">3.1. Η διεπαφή του χρήστη</h3>
5 years ago
<div class="paragraph">
5 years ago
<p>Η διεπαφή του χρήστη αποτελείται από μία HTML σελίδα η οποία ενσωματώνει και δύο JavaScript Processes.
Σκοπός αυτής είναι η ανααπαράσταση της κατάστασης του Parking. Η σελίδα λοιπόν ενσωματώνει για κάθε θέση
parking</p>
</div>
5 years ago
</div>
</div>
</div>
5 years ago
<div class="sect1">
5 years ago
<h2 id="_autonomous_parking">4. Autonomous Parking</h2>
<div class="sectionbody">
5 years ago
<div class="paragraph">
5 years ago
<p>Το αυτότομο πρκάριμα αποτελείται από το όχημα με εγκατεστημένους τους απάραίτητους αισθητήρες και ελεγκτές
καθώς και έναν μικροελεγκτή (Arduino) για τον έλεγχο αυτών των ελεγκτών. Σκοπός είναι το όχημα να μπορεί
5 years ago
να μάθει μέσω του διαδικτύου το "Status" του parking και να παρκάρει στην 1η διαθέσιμη θέση εφ' όσων
υπάρχει μία τουλάχιστων διαθέσιμη θέση στον χώρο στάθμευσης.</p>
</div>
<div class="paragraph">
5 years ago
<p><strong>Η υλοποίηση του αυτόνομου parking χωρίζεται σε δύο βασικά μέρη.</strong></p>
5 years ago
</div>
<div class="ulist">
<ul>
<li>
5 years ago
<p>Το 1<sub>ο</sub> μέρος αποτελείται από τον μικροελεγκτή για τον έλεγχο των αισθητήρων και των κινητήρων του οχήματος και
5 years ago
εκτελώντας τα απαραίτητα βήματα, να μπορέσει να παρκάρει το όχημα.</p>
</li>
<li>
5 years ago
<p>Το 2<sub>ο</sub> μέρος αποτείται από τον κόμβο ο οποίος θα έχει πρόσβαση στο διαδίκτυο, όπου αφού ελέγξει αν υπάρχει
5 years ago
διαθέσιμη θέση και γνωρίζει ποια είναι η πρώτη ελεύθερη θέση, να δώσει εντολή στον μικροελεγκτή να παρκάρει σε αυτή.</p>
</li>
</ul>
</div>
<div class="sect2">
5 years ago
<h3 id="_microcotroller_and_car">4.1. Microcotroller and Car</h3>
5 years ago
<div class="sect3">
5 years ago
<h4 id="_υλικά_κόμβου_3">4.1.1. Υλικά Κόμβου</h4>
5 years ago
<div class="ulist">
<ul>
<li>
<p>1 x Arduino Uno</p>
</li>
<li>
<p>1 x Servo Motor</p>
</li>
<li>
<p>1 x Motor Driver</p>
</li>
<li>
<p>4 x Moter για τους 4 τροχούς</p>
</li>
<li>
<p>1 x Ultrasonic</p>
</li>
<li>
<p>1 x 9V Battery</p>
</li>
<li>
<p>1 x 4,8V Battery</p>
</li>
<li>
<p>1 x Car</p>
</li>
<li>
<p>1 x Raspberry Pi</p>
</li>
</ul>
</div>
</div>
<div class="sect3">
5 years ago
<h4 id="_υλοποίηση_και_προγραμματισμός_2">4.1.2. Υλοποίηση και Προγραμματισμός</h4>
5 years ago
<div class="paragraph">
5 years ago
<p>Ο motor driver, το Servo motor καθώς και ο Ultrasonic αισθητήρας κουμπώνουν στον μικροελεγκτή Arduino Uno που χρησιμοποιούμε,
τον οποίο τον εγκαθηστούμε πάνω στο καλούπι του οχήματος το οποίο έχει εγκατεστημένα 4 τροχούς. Οι τροχοί οδηοούνται από 4 moters
5 years ago
τα οποία τροφοδοτούνται από τον motor driver.</p>
</div>
<div class="paragraph">
<p>Η συνδεσμολογία έχει την διάταξη που παρουσιάζεται παρακάτω:</p>
</div>
<div class="openblock float-group">
<div class="content">
<div class="imageblock center">
<div class="content">
<img src="data:image/png;base64,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
</div>
5 years ago
<div class="title">Figure 4. Συνδεσμολογία moter, motor driver, arduino, ultrasonic sensor και servo motor.</div>
5 years ago
</div>
</div>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<i class="fa icon-note" title="Note"></i>
</td>
<td class="content">
<div class="title">Reminder</div>
5 years ago
SLOW SUCCESS BUILDS CHARACTER, FAST SUCCESS BUILDS EGO.
</td>
</tr>
</table>
</div>
</div>
</div>
</div>
5 years ago
</div>
</div>
<div id="footer">
<div id="footer-text">
5 years ago
Last updated 2020-01-21 11:11:19 +0200
</div>
</div>
</body>
</html>