<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Mahmoud Youssef</title>
    <description>The latest articles on DEV Community by Mahmoud Youssef (@mahmoudyoussef97).</description>
    <link>https://dev.to/mahmoudyoussef97</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F393544%2Fe7f8532c-3efa-4442-88ac-a713cf8e9cee.jpeg</url>
      <title>DEV Community: Mahmoud Youssef</title>
      <link>https://dev.to/mahmoudyoussef97</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mahmoudyoussef97"/>
    <language>en</language>
    <item>
      <title>An Intelligent Transportation System using Self-driving Cars and Mobile Phones</title>
      <dc:creator>Mahmoud Youssef</dc:creator>
      <pubDate>Sun, 24 May 2020 15:47:48 +0000</pubDate>
      <link>https://dev.to/mahmoudyoussef97/an-intelligent-transportation-system-using-self-driving-cars-and-mobile-phones-16e7</link>
      <guid>https://dev.to/mahmoudyoussef97/an-intelligent-transportation-system-using-self-driving-cars-and-mobile-phones-16e7</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;Overview of BARQ&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Barq is an intelligent transportation system using self-driving cars and mobile phones. It makes it safe and easy for people and things to get where they are going. The Project consists of 4 essential parts : &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Web Server&lt;/li&gt;
&lt;li&gt;Admin Dashboard &lt;/li&gt;
&lt;li&gt;Mobile Application&lt;/li&gt;
&lt;li&gt;Self-Driving Car&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Web Server
&lt;/h3&gt;

&lt;p&gt;It is responsible for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Handling mobile application and admin dashboard HTTP requests.&lt;/li&gt;
&lt;li&gt;Finding the shortest path between user's location and car's location.&lt;/li&gt;
&lt;li&gt;Monitoring car's locations and sending orders.&lt;/li&gt;
&lt;li&gt;Tracking car's locations and sending it to admin dashboard and mobile application.&lt;/li&gt;
&lt;li&gt;Dealing with database.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Admin Dashboard
&lt;/h3&gt;

&lt;p&gt;It is responsible for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Managing notifications and sending them to users using the mobile application. &lt;/li&gt;
&lt;li&gt;Managing packages so user can register in one package to get more offers.&lt;/li&gt;
&lt;li&gt;Managing coupons. &lt;/li&gt;
&lt;li&gt;Managing companies and related history to each company. &lt;/li&gt;
&lt;li&gt;Managing cars. &lt;/li&gt;
&lt;li&gt;Managing issues.&lt;/li&gt;
&lt;li&gt;Managing users.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Mobile Application
&lt;/h3&gt;

&lt;p&gt;It provides more facilities to user: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Getting new notifications. &lt;/li&gt;
&lt;li&gt;Getting new offers.&lt;/li&gt;
&lt;li&gt;Making rides. &lt;/li&gt;
&lt;li&gt;Adding credit cards. &lt;/li&gt;
&lt;li&gt;Transferring money from credit cards to his wallet.&lt;/li&gt;
&lt;li&gt;Reporting issues. &lt;/li&gt;
&lt;li&gt;Asking for help via chat with customer service.&lt;/li&gt;
&lt;li&gt;Viewing ride history.&lt;/li&gt;
&lt;li&gt;Submitting codes for getting offers.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Self-Driving Car
&lt;/h3&gt;

&lt;p&gt;It's responsible for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Low level motion control.&lt;/li&gt;
&lt;li&gt;Obstacle avoidance during motion.&lt;/li&gt;
&lt;li&gt;Path tracking to reach destination.&lt;/li&gt;
&lt;li&gt;Localization&lt;/li&gt;
&lt;li&gt;Sensor Fusion using sensors besides robot odometry to increase
accuracy of localization process.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Content&lt;/strong&gt;
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Introduction to Intelligent Transportation Systems&lt;/li&gt;
&lt;li&gt;System Components and Architecture&lt;/li&gt;
&lt;li&gt;Business Scenarios &lt;/li&gt;
&lt;li&gt;Link to Code &amp;amp; Demos&lt;/li&gt;
&lt;li&gt;Conclusion and Future Work&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Introduction to Intelligent Transportation Systems&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Self-driving car technology is advancing every day, and it’s only a matter&lt;br&gt;
of time before fully driverless vehicles appear on public streets. Almost daily, there’s a new development in the driverless car space, and nearly every major car manufacturer, ride-sharing service and tech company from Apple to Google has bought into the driverless car industry. Self -driving car can be used in various and varied applications. The most common one is transferring someone from one place to another. It also can be used on indoor and outdoor delivery system to deliver items to the one who requested them. Here we are using it with BARQ to deliver people from place to place.&lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;strong&gt;System Components and Architecture&lt;/strong&gt;
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Robot Platform
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--MEFBCw3t--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/9x1e4kucxirwuoghs53c.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--MEFBCw3t--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/9x1e4kucxirwuoghs53c.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
Redcat Racing Volcano EPX Electric Truck, Blue/Silver, 1/10 Scale&lt;br&gt;
4WD Monster truck w/ Large monster truck tires, Lightweight molded plastic chassis, (8) Aluminum capped oil filled shocks, front and rear gear differentials.&lt;br&gt;
Tunable suspension, Adjustable ride height, Tunable shocks, Tunable gear differentials, Adjustable camber, Adjustable toe angle. Speed Control: 40a Brushed Waterproof ESC&lt;br&gt;
Aggressive tires, Independent suspension, Low center of gravity chassis for high speed performance, Ball bearings throughout.&lt;br&gt;
19T brushed 550 electric motor with heat sink, Waterproof ESC, Waterproof high torque steering servo, 2.4GHz radio system.&lt;br&gt;
Assembled &amp;amp; Ready to Run - Includes 7.2V 2000mAh NiMH Battery &amp;amp; NiMH Charger - Requires 4-AA Batteries for Transmitter. &lt;br&gt;
Link: &lt;a href="https://www.amazon.com/gp/product/B00CEP8YN4/ref=ox_sc_mini_detail?ie=UTF8&amp;amp;smid=ATVPDKIKX0DER&amp;amp;th=1"&gt;https://www.amazon.com/gp/product/B00CEP8YN4/ref=ox_sc_mini_detail?ie=UTF8&amp;amp;smid=ATVPDKIKX0DER&amp;amp;th=1&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Motor Drivers
&lt;/h3&gt;

&lt;p&gt;Motor drives are circuits used to run a motor. In other words, they are&lt;br&gt;
commonly used for motor interfacing. These drive circuits can be easily interfaced&lt;br&gt;
with the motor and their selection depends upon the type of motor being used and their ratings (current, voltage).&lt;br&gt;
In our project we use two BTS7960 KIT having the following architecture:&lt;br&gt;
• High-power drive full H-bridge driver module with thermal over-current&lt;br&gt;
protection. High-current 43A.&lt;br&gt;
• Double BTS7960 large current (43 A) H bridge driver.&lt;br&gt;
• 5V isolate with MCU, and effectively protect MCU.&lt;br&gt;
• 5V power indicator on board.&lt;br&gt;
Page 19&lt;br&gt;
CHAPTER 2. SYSTEM COMPONENTS AND ARCHITECTURE&lt;br&gt;
• Voltage indication of motor driver output end.&lt;br&gt;
• Heat sink can be added.&lt;br&gt;
• Isolation chip 5 V power supply (can share with MCU 5 V).&lt;br&gt;
• Size: 4 * 5 * 1.2 cm.&lt;br&gt;
• Ability to reverse the motor forward, two PWM input frequency up to 25kHZ.&lt;br&gt;
• Two heat flow passing through an error signal output.&lt;br&gt;
• Isolated chip 5V power supply (can be shared with the MCU 5V), can also&lt;br&gt;
use the on-board 5V supply.&lt;br&gt;
• The supply voltage 5.5V to 27V.&lt;br&gt;
Both drivers are powered by LIPO 7.4V -4200mAh battery. &lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--N24YmDAu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/1v4588d8m8ew8utvb8ft.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--N24YmDAu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/1v4588d8m8ew8utvb8ft.PNG" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Raspberry Pi
&lt;/h3&gt;

&lt;p&gt;A Raspberry Pi is a credit card-sized computer originally designed for&lt;br&gt;
education, inspired by the 1981 BBC Micro. Creator Eben Upton’s goal was to&lt;br&gt;
create a low-cost device that would improve programming skills and hardware&lt;br&gt;
understanding at the pre-university level. But thanks to its small size and accessible&lt;br&gt;
price, it was quickly adopted by tinkerers, makers, and electronics enthusiasts for&lt;br&gt;
projects that require more than a basic microcontroller. The Raspberry Pi is slower&lt;br&gt;
than a modern laptop or desktop but is still a complete Linux computer and can&lt;br&gt;
provide all the expected abilities that implies, at a low-power consumption level.&lt;br&gt;
In our project we use Raspbery Pi 3 model B having the following architecture:&lt;br&gt;
• Quad Core 1.2GHz Broadcom BCM2837 64bit CPU.&lt;br&gt;
• 1GB RAM.&lt;br&gt;
• BCM43438 wireless LAN and Bluetooth Low Energy (BLE) on board.&lt;br&gt;
• 100 Base Ethernet.&lt;br&gt;
• 40-pin extended GPIO.&lt;br&gt;
• 4 USB 2 ports.&lt;br&gt;
• 4 Pole stereo output and composite video port.&lt;br&gt;
• Full size HDMI.&lt;br&gt;
• CSI camera port for connecting a Raspberry Pi camera.&lt;br&gt;
• DSI display port for connecting a Raspberry Pi touchscreen display.&lt;br&gt;
• Micro SD port for loading your operating system and storing data.&lt;br&gt;
• Upgraded switched Micro USB power source up to 2.5A.[14]&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--1iLtSs26--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/oznneb5gzpyvmhmxiyb4.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1iLtSs26--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/oznneb5gzpyvmhmxiyb4.PNG" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Sensors
&lt;/h3&gt;
&lt;h3&gt;
  
  
  1. IMU
&lt;/h3&gt;

&lt;p&gt;An inertial measurement unit (IMU) is an electronic device that measures and&lt;br&gt;
reports a body’s specific force, angular rate, and sometimes the orientation of&lt;br&gt;
the body, using a combination of accelerometers, gyroscopes, and sometimes&lt;br&gt;
magnetometers.&lt;br&gt;
In Our project we use Adafruit 9-DOF IMU module having the following architecture:&lt;br&gt;
• Dimensions: 20mm x 27mm x 4mm / 0.8” x 1.1” x 0.2”&lt;br&gt;
• Header holes begin 4mm from the mounting holes&lt;br&gt;
• Mounting Hole dimensions: 20mm x 12mm apart&lt;br&gt;
• Uses I2C address 0x28 (default) or 0x29&lt;br&gt;
• Weight: 3g&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4BbsfJVo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/57mqhl1m2ygz2sqhv1bd.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4BbsfJVo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/57mqhl1m2ygz2sqhv1bd.PNG" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  2. GPS
&lt;/h3&gt;

&lt;p&gt;The Global Positioning System (GPS), is a satellite-based radionavigation&lt;br&gt;
system owned by the United States government and operated by the United&lt;br&gt;
States Air Force. It is a global navigation satellite system that provides&lt;br&gt;
geolocation and time information to a GPS receiver anywhere on or near&lt;br&gt;
the Earth where there is an unobstructed line of sight to four or more GPS&lt;br&gt;
satellites. Obstacles such as mountains and buildings block the relatively&lt;br&gt;
weak GPS signals.&lt;br&gt;
In Our project we use DIYmall NEO-6M GPS module having the following architecture:&lt;br&gt;
• Standalone GPS receiver&lt;br&gt;
• U-blox NEO-6M GPS module&lt;br&gt;
• Under 1 second time-to-first-fix for hot and aided starts&lt;br&gt;
• SuperSense ® Indoor GPS: -162 dBm tracking sensitivity&lt;br&gt;
• Anti-jamming technology&lt;br&gt;
• Support SBAS (WAAS, EGNOS, MSAS, GAGAN)&lt;br&gt;
• u-blox 6 50 channel positioning engine with over 2 million effective&lt;br&gt;
correlators&lt;br&gt;
• Timepulse&lt;br&gt;
• 5Hz position update rate&lt;br&gt;
• Operating temperature range: -40 TO 85°C&lt;br&gt;
• UART TTL socket&lt;br&gt;
• EEprom to store settings&lt;br&gt;
• Rechargeable battery for Backup&lt;br&gt;
• Build in 18X18mm GPS antenna&lt;br&gt;
• RoHS compliant&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--QvqSqnEC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/uljtija38ill8xjey1ro.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--QvqSqnEC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/uljtija38ill8xjey1ro.PNG" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  3. LIDAR
&lt;/h3&gt;

&lt;p&gt;Lidar is a surveying method that measures distance to a target by illuminating&lt;br&gt;
the target with pulsed laser light and measuring the reflected pulses with&lt;br&gt;
a sensor. Differences in laser return times and wavelengths can then be&lt;br&gt;
used to make digital 3-D representations of the target. The name lidar,&lt;br&gt;
now used as an acronym of light detection and ranging (sometimes light&lt;br&gt;
imaging, detection, and ranging), was originally a portmanteau of light and&lt;br&gt;
radar. Lidar sometimes is called 3D laser scanning, a special combination&lt;br&gt;
of a 3D scanning and laser scanning. It has terrestrial, airborne, and mobile&lt;br&gt;
applications.&lt;br&gt;
In Our project we use YDLIDAR Lidar F4 2D Lidar scanner having the following architecture:&lt;br&gt;
• Application field:Environment Scanning, SLAM Application and Robot&lt;br&gt;
Navigation&lt;br&gt;
• 360-degree laser rangefinder, Scanner range 12 Meter,MAX. 6000Hz&lt;br&gt;
Ranging Sample rate&lt;br&gt;
• OS:Windows, Android, ROS and Linux,Ultra long working life,Weight:&lt;br&gt;
189g&lt;br&gt;
• F4 uses Industrial Brushless Moto,Scanning Rate: 6000tims/s,Laser&lt;br&gt;
grade: Class 1,Configurable Scanning Frequency: 5-12Hz&lt;br&gt;
• Quick Start-F4 has complete drivers as well as complete SDK ,API and&lt;br&gt;
documentation. It’s easy for users to get started quickly.&lt;br&gt;
 &lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Azyzei0T--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/bmzuzfgtjn9dqf0p6wrg.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Azyzei0T--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/bmzuzfgtjn9dqf0p6wrg.PNG" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  4. Webcam
&lt;/h3&gt;

&lt;p&gt;A webcam is a small digital video camera directly or indirectly connected to&lt;br&gt;
a computer or a computer network.&lt;br&gt;
In Our project we use 1080P Nano Shield N920 Webcamera having the following architecture:&lt;br&gt;
• Premium auto focus and light correction.&lt;br&gt;
• Full HD 1080P at 30 fps recording.&lt;br&gt;
• Noise cancelling microphone.&lt;br&gt;
• Tripod ready mount.&lt;br&gt;
• IM compatibility.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--GINT5SaM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/vs94i5zhevigymdbqtx8.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--GINT5SaM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/vs94i5zhevigymdbqtx8.PNG" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;Software Components&lt;/strong&gt;
&lt;/h3&gt;
&lt;h3&gt;
  
  
  Web Server
&lt;/h3&gt;

&lt;p&gt;The aim of this part is that it can process requests and delivers data from and to clients, admins and cars over the internet or a local network.&lt;/p&gt;
&lt;h3&gt;
  
  
  Mobile Application
&lt;/h3&gt;

&lt;p&gt;We use the mobile application for the main purpose of making rides and moving from one place to another via the mobile application.&lt;/p&gt;
&lt;h3&gt;
  
  
  Admin Dashboard
&lt;/h3&gt;

&lt;p&gt;It's the control panel of the admins which provides flexible UI to manage resources.&lt;/p&gt;
&lt;h3&gt;
  
  
  Robot Software Platform
&lt;/h3&gt;

&lt;p&gt;We integrate all components of the robot platform using Robot Operating&lt;br&gt;
System (ROS). The aim of this part is to provide low-level device control, connect all processes together and provide message-passing between processes with no effort.&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;System Components and Architecture&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;To achieve its goal, our project is divided into several main modules&lt;br&gt;
which are integrated together in an appropriate manner, these modules are as&lt;br&gt;
follows:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Web server&lt;/li&gt;
&lt;li&gt;Path planning&lt;/li&gt;
&lt;li&gt;Main controller&lt;/li&gt;
&lt;li&gt;Convolutional Neural Network&lt;/li&gt;
&lt;li&gt;Classical control&lt;/li&gt;
&lt;li&gt;Obstacle avoidance&lt;/li&gt;
&lt;li&gt;Localization&lt;/li&gt;
&lt;li&gt;Mobile Application&lt;/li&gt;
&lt;li&gt;Admin Dashboard&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;These modules work on data from IMU, GPS, LIDAR, Webcam and Admin Dashboard then send actions to perform the tasks required by the client.&lt;/p&gt;

&lt;p&gt;Whole system architecture:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--83p2phph--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/bovdwuvxsynz4j32l9vs.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--83p2phph--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/bovdwuvxsynz4j32l9vs.PNG" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
Self-Driving Car architecture:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--GkT0QDub--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/estd7fukldiywbdbe1lt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--GkT0QDub--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/estd7fukldiywbdbe1lt.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;1. Web Server Components&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The Web Service process resides on the web server. A web server is server software, or hardware dedicated to running this software, that can satisfy client requests on the World Wide Web. A web server can, in general, contain one or more websites. A web server processes incoming network requests over HTTP and several other related protocols. The primary function of a web server is to store, process and deliver web pages to clients. The communication between client and server takes place using the Hypertext Transfer Protocol (HTTP). Pages delivered are most frequently HTML documents, which may include images, style sheets and scripts in addition to the text content. We are using Node.Js Web Server&lt;/p&gt;
&lt;h3&gt;
  
  
  NodeJS Web Server
&lt;/h3&gt;

&lt;p&gt;Node.js is an open-source, cross-platform, JavaScript runtime environment that executes JavaScript code outside of a web browser. Node.js lets developers use JavaScript to write command line tools and for server-side scripting—running scripts server-side to produce dynamic web page content before the page is sent to the user's web browser. Consequently, Node.js represents a "JavaScript everywhere" paradigm, unifying web-application development around a single programming language, rather than different languages for server- and client-side scripts.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--shsslVV9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/azun9fsqicqq36ngk9sc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--shsslVV9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/azun9fsqicqq36ngk9sc.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
Node.js operates on a single-thread event loop, using non-blocking I/O calls, allowing it to support tens of thousands of concurrent connections without incurring the cost of thread context switching. The design of sharing a single thread among all the requests that use the observer pattern is intended for building highly concurrent applications, where any function performing I/O must use a callback. To accommodate the single-threaded event loop, Node.js uses the libuv library—which, in turn, uses a fixed-sized thread pool that handles some of the non-blocking asynchronous I/O operations.&lt;br&gt;
A thread pool handles the execution of parallel tasks in Node.js. The main thread function call posts tasks to the shared task queue, which threads in the thread pool pull and execute. Inherently non-blocking system functions such as networking translate to kernel-side non-blocking sockets, while inherently blocking system functions such as file I/O run in a blocking way on their own threads. When a thread in the thread pool completes a task, it informs the main thread of this, which in turn, wakes up and executes the registered callback.&lt;br&gt;
A downside of this single-threaded approach is that Node.js does not allow vertical scaling by increasing the number of CPU cores of the machine it is running on without using an additional module, such as cluster, StrongLoop Process Manager, or pm2. However, developers can increase the default number of threads in the libuv thread pool. The server operating system (OS) is likely to distribute these threads across multiple cores. Another problem is that long-lasting computations and other CPU-bound tasks freeze the entire event-loop until completion.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--GlyN8DrH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/m0oiqbw2abe1cppn0t6n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--GlyN8DrH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/m0oiqbw2abe1cppn0t6n.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
Following are some of the important features that make Node.js the first choice.&lt;br&gt;
• Asynchronous and Event Driven − All APIs of Node.js library are asynchronous, that is, non-blocking. It essentially means a Node.js based server never waits for an API to return data. The server moves to the next API after calling it and a notification mechanism of Events of Node.js helps the server to get a response from the previous API call.&lt;br&gt;
• Very Fast − Being built on Google Chrome's V8 JavaScript Engine, Node.js library is very fast in code execution.&lt;br&gt;
• Single Threaded but Highly Scalable − Node.js uses a single threaded model with event looping. Event mechanism helps the server to respond in a non-blocking way and makes the server highly scalable as opposed to traditional servers which create limited threads to handle requests. Node.js uses a single threaded program and the same program can provide service to a much larger number of requests than traditional servers like Apache HTTP Server.&lt;br&gt;
• No Buffering − Node.js applications never buffer any data. These applications simply output the data in chunks.&lt;/p&gt;
&lt;h3&gt;
  
  
  ExpressJS
&lt;/h3&gt;

&lt;p&gt;Express is a minimal and flexible Node.js web application framework that provides a robust set of features to develop web and mobile applications. It facilitates the rapid development of Node based Web applications. Following are some of the core features of Express framework −&lt;br&gt;
• Allows to set up middlewares to respond to HTTP Requests.&lt;br&gt;
• Defines a routing table which is used to perform different actions based on HTTP Method and URL.&lt;br&gt;
• Allows to dynamically render HTML Pages based on passing arguments to templates.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--M0L5LvBC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/9epcyl02um28a2nt8xoa.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--M0L5LvBC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/9epcyl02um28a2nt8xoa.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Socket.io
&lt;/h3&gt;

&lt;p&gt;Socket.IO is a JavaScript library for realtime web applications. It enables realtime, bi-directional communication between web clients and servers. It has two parts: a client-side library that runs in the browser, and a server-side library for Node. js. We 're using socket.io for communicating between the web server and cars, clients and admin dashboard.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--IkWBDDIt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/2livah390j8ftmsszo0j.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--IkWBDDIt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/2livah390j8ftmsszo0j.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;Design Patterns&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;We worked using MVC Design Pattern (Model–view–controller) which is a software design pattern commonly used for developing user interfaces which divides the related program logic into three interconnected elements. This is done to separate internal representations of information from the ways information is presented to and accepted from the user. This kind of pattern is used for designing the layout of the page. But we didn't use the models for any purpose just for rendering some static web pages. We isolated our Models, Routes and Controllers.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--MwdMoMXz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/hraubteujz71rlo8fjcn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--MwdMoMXz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/hraubteujz71rlo8fjcn.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  MongoDB
&lt;/h3&gt;

&lt;p&gt;MongoDB is a cross-platform, document-oriented database that provides, high performance, high availability, and easy scalability. MongoDB works on concept of collection and document. The main purpose of deciding to choose MongoDB: &lt;br&gt;
• Document Oriented Storage − Data is stored in the form of JSON style documents.&lt;br&gt;
• Index on any attribute&lt;br&gt;
• Replication and high availability&lt;br&gt;
• Auto-Sharding&lt;br&gt;
• Rich queries&lt;br&gt;
• Fast in-place updates&lt;br&gt;
• Professional support by MongoDB&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--XktawhPK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ufme8t8i3v3x08trqcso.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--XktawhPK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ufme8t8i3v3x08trqcso.PNG" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  RESTful API's
&lt;/h3&gt;

&lt;p&gt;A RESTful API is an application program interface (API) that uses HTTP requests to GET, PUT, POST and DELETE data.&lt;br&gt;
An API for a website is code that allows two software programs to communicate with each other. The API spells out the proper way for a developer to write a program requesting services from an operating system or other application.&lt;br&gt;
A RESTful API -- also referred to as a RESTful web service or REST API -- is based on representational state transfer (REST), an architectural style and approach to communications often used in web services development. &lt;br&gt;
REST technology is generally preferred over the more robust Simple Object Access Protocol (SOAP) technology because REST uses less bandwidth, making it more suitable for efficient internet usage. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4X4a3F02--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ttr5oph7jsfoolc635ur.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4X4a3F02--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ttr5oph7jsfoolc635ur.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  API Testing
&lt;/h3&gt;

&lt;p&gt;We used postman to test our endpoints. Postman is a collaboration platform for API development. Postman's features simplify each step of building an API and streamline collaboration so you can create better APIs—faster.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--l_Op3kQD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/33kucddn8u79077jkc4i.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--l_Op3kQD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/33kucddn8u79077jkc4i.PNG" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;ER-Diagram&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;This is our Entity Relationship Diagram as a Database Design so we noticed a lot of issues that would face us. We searched about about best approaches and decisions made based on Referenced Documents in MongoDB and Embedded Objects.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Ku75MO1p--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/dyhlyhpqma1f1s72rjoj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Ku75MO1p--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/dyhlyhpqma1f1s72rjoj.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;2. Path Finding&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The path planning module takes the source and destination locations and&lt;br&gt;
generates the best path between them as several continuous nodes, then it sends the path to the main controller through the web server.&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;Challenges&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The challenge here was we are building the graph using nodes and of course we can't cover all map using nodes near to each other, as it will include many nodes in the system. So we think to get user's location and then apply a range of distances that can be added and subtracted from user's location so it makes it easy for us instead of searching for all nodes in the graph which one is near to user's location to search among few nodes. But it is not the best solution. So we think about how can we do that in both x-y directions ( Something like Binary Search but in 2D ) and here we find better approach which is &lt;strong&gt;KD-Tree&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The Path finding depends on the source location and target location which the user determine when he makes a ride using the mobile app. But before getting the best path between those nodes we have to figure out from our graph which nodes are near to those nodes of the user located. So we apply first the &lt;strong&gt;KD-Tree&lt;/strong&gt; as we can determine the nearest node to these locations then start our journey with the path finding algorithm.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--bNbk-HNV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/sjz05a4rppqul9gvzbxb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bNbk-HNV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/sjz05a4rppqul9gvzbxb.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For those who would like to know more about it you can see this link&lt;br&gt;
over here: &lt;a href="https://www.geeksforgeeks.org/k-dimensional-tree/"&gt;https://www.geeksforgeeks.org/k-dimensional-tree/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After getting the source and target nodes, we start getting the best path between them using &lt;strong&gt;A&lt;/strong&gt;* Algorithm. A* (pronounced "A-star") is a graph traversal and path search algorithm, which is often used in computer science due to its completeness, optimality, and optimal efficiency. One major practical drawback is its {\displaystyle O(b^{d})}O(b^d) space complexity, as it stores all generated nodes in memory. Thus, in practical travel-routing systems, it is generally outperformed by algorithms which can pre-process the graph to attain better performance, as well as memory-bounded approaches; however, A* is still the best solution in many cases. For those who would love to know more about A* Algorithm: &lt;a href="https://www.geeksforgeeks.org/a-search-algorithm/"&gt;https://www.geeksforgeeks.org/a-search-algorithm/&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Testing-Map
&lt;/h3&gt;

&lt;p&gt;We designed a map using Photoshop as it would be the banner which the self-driving car would move on it as it's a real map. We generated our graph nodes and edges between streets as a real one.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5c5LT_w2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/8dy59v6nni1taew43aag.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5c5LT_w2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/8dy59v6nni1taew43aag.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;3. Main Controller&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The main controller takes in all the control actions from CNN, classical&lt;br&gt;
control, obstacle avoidance modules and based on the current information provided from localization and path planning modules, it determines which control action will be sent to Arduino.&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;4. Convolutional Neural Network&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The CNN (Neural Network) Module takes camera data as input and feeds&lt;br&gt;
raw images into the CNN. The details of the CNN module that used in our system&lt;br&gt;
is fully is discussed in chapter 5. After processing the image the module outputs the predicted control action corresponding to that image and sends it to the main controller using an open socket connection. CNN model is used only to follow lane where there is no intersections.&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;5. Classical Control&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The classical control is used to generate actions at intersection points&lt;br&gt;
based on current and next poses of the robot that is being known from path planning and sends it to the main controller.&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;6. Obstacle Avoidance&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The Obstacle Avoidance module takes LIDAR data as input containing&lt;br&gt;
ranges and distances, then if the distance is below a certain threshold it outputs a high-priority control action, that is sent to the main controller.&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;7. Localization&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The localization module takes input: IMU, GPS and Odometry data, after&lt;br&gt;
processing the data using “Sensor Fusion” and “Extended Kalman Filter” method,&lt;br&gt;
which is fully discussed in chapter 5. It outputs an estimated location of the robot, that is sent to the main controller over a socket connection.&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;8. Mobile Application&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;We used React Native to develop our mobile application, It is an open-source mobile application framework created by Facebook. It is used to develop applications for Android, iOS, Web and UWP by enabling developers to use React along with native platform capabilities. Our mobile application has many features and screens which we talked about in the overview section above.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5N_HoCbH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ri0rlwwws0erl7e08vuu.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5N_HoCbH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ri0rlwwws0erl7e08vuu.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;9. Admin Dashboard&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;This is a website for admins so they can manage the business resources: adding, removing and updating resources like packages, offers and viewing issues and bugs. They also can make reports based on data analysis that is viewed. We used Angular 9. Angular is a Javascript framework that is used by developers for building web, desktop, and mobile applications. Development of Angular applications involves usage of Typescript, which is a superset of Javascript, along with HTML, CSS etc. The code written in Typescript compiles to Javascript and is rendered in the browser. Angular is one of the most popular Javascript frameworks for building web applications. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--e0sNbm9e--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/wxclwhtvkmlnzj4j2jz2.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--e0sNbm9e--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/wxclwhtvkmlnzj4j2jz2.PNG" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---1DZjwtr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/z0031h2w39z8y4k2epiw.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---1DZjwtr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/z0031h2w39z8y4k2epiw.PNG" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;Business Scenarios&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The user download the mobile application then he can register after that we send the user a verification code via his phone number entered in registration. After finishing the registration phase he can modify his info section and add credit cards. He also can see the offers or notifications and register in a package which would give him more benefits. At the end the user can use finally the application to make rides by clicking Ride button. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The user clicks on ride button&lt;/li&gt;
&lt;li&gt;The user chooses if he wants to go somewhere common suggested or special location ( given source and destination of the user location )&lt;/li&gt;
&lt;li&gt;The web server handles the request from the client getting the source and destination locations.&lt;/li&gt;
&lt;li&gt;The web server enables KD-Tree to get the nearest node to these locations.&lt;/li&gt;
&lt;li&gt;The web server keeps monitoring car's location&lt;/li&gt;
&lt;li&gt;The web server finds the shortest path between car's location and source location and between source and destination and send them to the car.&lt;/li&gt;
&lt;li&gt;The web server inform the user of the time that the car will arrive in&lt;/li&gt;
&lt;li&gt;The web server tells the admin that the car is accessed now by this user and keep sending it's location to the admin dashboard.&lt;/li&gt;
&lt;li&gt;After car is arrived, the user can use it to move to the destination location.&lt;/li&gt;
&lt;li&gt;The web server still keeps tracking of car's path as it will send the path to the admin dashboard for rides history.&lt;/li&gt;
&lt;li&gt;The web server will inform the user that if the car arrived to the destination.&lt;/li&gt;
&lt;li&gt;After finishing the ride the user can fill the feedback form.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Link to Code
&lt;/h2&gt;
&lt;h3&gt;
  
  
  1. Back End Repo:
&lt;/h3&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vWogaON8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/github-logo-28d89282e0daa1e2496205e2f218a44c755b0dd6536bbadf5ed5a44a7ca54716.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Taxi-ai"&gt;
        Taxi-ai
      &lt;/a&gt; / &lt;a href="https://github.com/Taxi-ai/Back-End"&gt;
        Back-End
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;h1&gt;
Barq - Back End&lt;/h1&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://raw.githubusercontent.com/Taxi-ai/Back-End/master/bc.jpg"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--W0E8DO8r--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://raw.githubusercontent.com/Taxi-ai/Back-End/master/bc.jpg" alt="logo"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The Web Service process resides on the web server. A web server is server software, or hardware dedicated to running this software, that can satisfy client requests on the World Wide Web. A web server can, in general, contain one or more websites. A web server processes incoming network requests over HTTP and several other related protocols. The primary function of a web server is to store, process and deliver web pages to clients. The communication between client and server takes place using the Hypertext Transfer Protocol (HTTP). Pages delivered are most frequently HTML documents, which may include images, style sheets and scripts in addition to the text content. We are using Node.Js Web Server&lt;/p&gt;
&lt;p&gt;It is responsible for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Handling mobile application and admin dashboard HTTP requests.&lt;/li&gt;
&lt;li&gt;Finding the shortest path between user's location and car's location.&lt;/li&gt;
&lt;li&gt;Monitoring car's locations and sending orders.&lt;/li&gt;
&lt;li&gt;Tracking car's locations…&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/Taxi-ai/Back-End"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h3&gt;
  
  
  2. Car Repo:
&lt;/h3&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vWogaON8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/github-logo-28d89282e0daa1e2496205e2f218a44c755b0dd6536bbadf5ed5a44a7ca54716.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Taxi-ai"&gt;
        Taxi-ai
      &lt;/a&gt; / &lt;a href="https://github.com/Taxi-ai/car-workspace"&gt;
        car-workspace
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      workspace for car contain all package.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;h1&gt;
Taxi-ai car catkin workspace&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;workspace for car contain all package.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
current working nodes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;camera publish node&lt;/li&gt;
&lt;li&gt;lidar publish node&lt;/li&gt;
&lt;li&gt;lane detection node&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
TODO&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;add IMU sensor node&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
code structure&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;
* ydlidar "packge for our ydlidar"
* sensors "package to manage all sensors"
|   - msg "contain our custom type messages"
|   - scripts "our python files for publush and subscripe"
|   - launch "launch file to run nodes"
* perception "package contain all perception work."
|   - msg "contain our custom type messages"
|   - launch "launch file to run nodes"
|   - src "contain different perception methods"
|   |   - lane-detection
- README.md
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;
Installation&lt;/h2&gt;
&lt;p&gt;OS X &amp;amp; Linux:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell"&gt;&lt;pre&gt;$ mkdir -p &lt;span class="pl-k"&gt;~&lt;/span&gt;/catkin_ws/src
$ &lt;span class="pl-c1"&gt;cd&lt;/span&gt; &lt;span class="pl-k"&gt;~&lt;/span&gt;/catkin_ws/
$ catkin_make&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Now that you have a workspace, clone or download this repo into the &lt;strong&gt;src&lt;/strong&gt; directory of your workspace:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell"&gt;&lt;pre&gt;$ &lt;span class="pl-c1"&gt;cd&lt;/span&gt; &lt;span class="pl-k"&gt;~&lt;/span&gt;/catkin_ws/src
$ git clone clone https://github.com/Taxi-ai/car-workspace.git&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;install dep&lt;/p&gt;
&lt;div class="highlight highlight-source-shell"&gt;
&lt;pre&gt;$ &lt;/pre&gt;…&lt;/div&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/Taxi-ai/car-workspace"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h3&gt;
  
  
  3. Dashboard Repo:
&lt;/h3&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vWogaON8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/github-logo-28d89282e0daa1e2496205e2f218a44c755b0dd6536bbadf5ed5a44a7ca54716.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Taxi-ai"&gt;
        Taxi-ai
      &lt;/a&gt; / &lt;a href="https://github.com/Taxi-ai/Barq-Dashboard"&gt;
        Barq-Dashboard
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;h1&gt;
Barq -Dashboard&lt;/h1&gt;
&lt;p&gt;This is a website for admins so they can manage the business resources: adding, removing and updating resources like packages, offers and viewing issues and bugs. They also can make reports based on data analysis that is viewed. We used Angular 9. Angular is a Javascript framework that is used by developers for building web, desktop, and mobile applications. Development of Angular applications involves usage of Typescript, which is a superset of Javascript, along with HTML, CSS etc. The code written in Typescript compiles to Javascript and is rendered in the browser. Angular is one of the most popular Javascript frameworks for building web applications.&lt;/p&gt;
&lt;p&gt;Dashboard Responsibilites:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Managing notifications and sending them to users using the mobile application.&lt;/li&gt;
&lt;li&gt;Managing packages so user can register in one package to get more offers.&lt;/li&gt;
&lt;li&gt;Managing coupons.&lt;/li&gt;
&lt;li&gt;Managing companies and related history to each company.&lt;/li&gt;
&lt;li&gt;Managing cars.&lt;/li&gt;
&lt;li&gt;Managing issues.&lt;/li&gt;
&lt;li&gt;Managing users&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;



&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/Taxi-ai/Barq-Dashboard"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;h3&gt;
  
  
  1.Mobile App Demo
&lt;/h3&gt;

&lt;p&gt;It's a recorded video uploaded with google drive:&lt;br&gt;
&lt;a href="https://drive.google.com/file/d/1uuzhDmIH8lHymYkIO1HDGTbixvxreiJ7/view"&gt;https://drive.google.com/file/d/1uuzhDmIH8lHymYkIO1HDGTbixvxreiJ7/view&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Dashboard Demo
&lt;/h3&gt;

&lt;p&gt;We used the GitHub Student Package namepsace the we can host the admin dashboard:&lt;br&gt;
&lt;a href="https://barq.vision/dashboard"&gt;https://barq.vision/dashboard&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Web Server Demo
&lt;/h3&gt;

&lt;p&gt;We used The GitHub Student Package Herou dynos to depoly our web server and database: &lt;br&gt;
&lt;a href="https://barq-api.herokuapp.com"&gt;https://barq-api.herokuapp.com&lt;/a&gt;&lt;br&gt;
&lt;a href="https://barq-api.herokuapp.com/api/packages"&gt;https://barq-api.herokuapp.com/api/packages&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Self-Driving Car Demo
&lt;/h3&gt;

&lt;p&gt;It's a recorded video uploaded with google drive:&lt;br&gt;
&lt;a href="https://drive.google.com/open?id=147mQgc1XBfmoaSfXmVliH59qTHsQaIRm"&gt;https://drive.google.com/open?id=147mQgc1XBfmoaSfXmVliH59qTHsQaIRm&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Summarizing Tools &amp;amp; Technologies Used
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;NodeJs&lt;/li&gt;
&lt;li&gt;ExpressJs&lt;/li&gt;
&lt;li&gt;MongoDB&lt;/li&gt;
&lt;li&gt;Postman&lt;/li&gt;
&lt;li&gt;React-Native&lt;/li&gt;
&lt;li&gt;Angular 9&lt;/li&gt;
&lt;li&gt;Robot &lt;/li&gt;
&lt;li&gt;Motor Driver&lt;/li&gt;
&lt;li&gt;Raspberry Pi&lt;/li&gt;
&lt;li&gt;IMU, GPS, Lidar and webcams sensors&lt;/li&gt;
&lt;li&gt;ROS&lt;/li&gt;
&lt;li&gt;CNN&lt;/li&gt;
&lt;li&gt;PID&lt;/li&gt;
&lt;li&gt;GitHub Student Package&lt;/li&gt;
&lt;li&gt;Socket.io&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Future Work
&lt;/h3&gt;

&lt;p&gt;We decided to join the EED event next yaer, and we are going to try to work with real map like depending on Google Map API not only depending on specific map, However our algorithms works in general and not depending on the map but our capabilities and time weren't enough of course to learn how to apply this on a real map in a real world.&lt;/p&gt;

&lt;h2&gt;
  
  
  Additional Thoughts / Feelings / Stories
&lt;/h2&gt;

&lt;p&gt;We decided that our graduation project should be something big, difficult and not even easy so we can at the end of the year learn many new things facing a lot of issues and difficulties and learn many new things over it. The idea is first came from Uber application but we decided to make it with a self-driving cars. We have been working a lot of hours each day, facing many issues and searching how to solve 'em and learning new things every single day. We believe that with taking challenges it would be much more helpful to ourselves in the career and this will help us to implement and develop what we have learnt throw years and still learning till this time. We believed that there is nothing called "hard" or "impossible" but with determination and passion you can learn and do a lot of things. Finally I am speechless, I don't know how to really tell my team that it was a great journey with them, having fun together, having troubles and difficult days of being disappointed. We have did a great job guys ! Yeaaah ❤ I want to thank everyone in my team, and of course without those brave heroes we couldn't make this graduation project to be like that.&lt;br&gt;
Thank you everybody 😍 &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ahmed Nassar : Working on the self-driving car &lt;/li&gt;
&lt;li&gt;Mustafa Eldeeb : Working on the self-driving car&lt;/li&gt;
&lt;li&gt;Mahmoud Samy : Working on the Dashboard&lt;/li&gt;
&lt;li&gt;Alaa Fathalla : Working on the mobile application&lt;/li&gt;
&lt;li&gt;Sara Ghoniem : Working on the mobile application&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Finally it's a special thank to the one who always was behind our backs, helping us, motivating us and leading us "Eng.Mohamed Shehab" who's a real brother not just a Teaching Assistant and special thanks also for Dr.Mohamed Arafa who's our supervisor.&lt;/p&gt;

</description>
      <category>devgrad2020</category>
      <category>octograd2020</category>
      <category>githubsdp</category>
    </item>
  </channel>
</rss>
