T-100 Watch Dog (Autonomous Security Vehicle)



Download 0.53 Mb.
Page11/20
Date23.06.2017
Size0.53 Mb.
#21505
1   ...   7   8   9   10   11   12   13   14   ...   20

3.11 Video Image Processing

An important part of the project is the Image Processing subsystem since it will allow us to make the robot autonomous. In order to facilitate this subsystem, we decided to break it down into three sub-systems: Movement Detection, Acquire Target, and Target Tracking. The option of creating our own algorithms was not considered due to the complexity and time allotted. While researching for an existing option or library to facilitate the implementation we came across the Robot Operating System (ROS) and the Open Source Computer Vision Library (OpenCV). ROS was a new tool for the team since we had not heard of it before. Similar to OpenCV, ROS has a collection of tools and libraries aim to simplify the implementation of a robotic platform. Upon further research and investigation of their documentation, we decided to use OpenCV due to its popularity, documentation, and vast amount of tutorials. OpenCV provides the necessary algorithms in order to achieve the project’s requirements. In addition, it’s compatible with many different platforms allowing us to have a greater option of hardware.


Movement Detection– Movement Detection is one of the most important of the three sub-systems since it’s the one that activates the remaining two sub-systems. While the robot is in idle, it will be taking as input video frames from either the webcam or thermal camera. OpenCV has a “Differential Images” function which allows us to determine when any movement occurs. The way the function works is that it compare the latest frame with the previous frame. These two frames are then subtracted and if any difference in the pixels is found, some type of movement occurred.
Another method that can be utilized is by using the Collins et al. algorithm. This algorithm is similar to the “Differential Images” except that it utilizes three frames (previous, current, and next) instead of two. The previous and next frames are subtracted first, afterwards, the current and next frames are subtracted. The result of these two computations are then compared with an AND gate, and a threshold is found. In order to prevent false positives, it is recommended to only consider a threshold higher than 5. If the threshold found is higher than 5, this means that a movement occurred.
According to different implementations found online and a GitHub repository the latter method seems to be the preferred method. Not only is it more accurate, but it also utilizes less resources, although it requires one extra frame. Both of the methods will be tested for accuracy in our implementation and the best one will be picked depending on the results.
Acquire Target– In order to determine the object or target that triggered the movement detection algorithm, a window base search algorithm will be utilized. The result from the movement detection sub-system will be used as the target. From here, a window based search will be performed on the current frame in order to determine the current location of the target. Another option that we have is to train the algorithm with a library of images. This is done by having a group of images of people in different positions such as standing or walking. A disadvantage of this is that the algorithm depends on finding the target in a position similar to one found in the library. In order have a better chance of finding the target, a large library will be required. Even though this will increase the accuracy of the algorithm, more resources will be required since the algorithm will have to traverse through a larger list of possibilities. As a result, we will focus on implementing the window based search algorithm without the library.
Target Tracking– In order to track the acquired target, the output from the acquire target sub-system will be utilized as input. OpenCV offers the CAMshift (Continuously Adaptive Meanshift) algorithm which selects the top left corner of the target, in this case, the output from the acquire target sub-system and keeps on tracking that point while in motion. The tracking is done by continuously performing a window based search on the video frames.
Since one of our project requirements is for the vehicle to be autonomous, we need to keep the target being tracked in the center of the camera view at all times. In order to accomplish this, the output from the target tracking sub-system will be utilized to determine in what direction to move the vehicle.

3.12 Web Server

One of the features of our project is the ability for the user to interact with the robot via the Internet using the mobile application. Some of the options that the user will have available are:




  • View a live video feed of what the robot is currently seeing through the Webcam.

  • Save a screenshot to the user’s phone/tablet.

In order to accomplish these tasks a web server is required to handle the commands from the user to the robot. There are a few options as for the type of server such as a local web server or a cloud-based solution. In the cloud-based solution the options that we have available are the Amazon Elastic Compute Cloud (Amazon EC2) and the Google App Engine. Both of these two options would allow the software to make use of faster hardware making it possible to run resource extensive tasks. The Amazon EC2 offers a free trial that lasts 1 year but afterwards the user has to pay in order to continue using their service. Since we would like a free permanent solution, the fact that Amazon EC2 stops being a free service stops being one of our options. The Google App Engine offers a free plan and although it has some usage limitations, the limitations do not affect our project. Since the Google App Engine seemed like a possible solution for our project, we decided to come up with a scenario that the robot might encounter. A scenario that our robot will encounter is shown below:




Figure 3.12-1 Google App Engine Scenario
In the Scenario shown above, the robot detects a movement and it alerts the user. In order to alert the user, the robot has to first communicate with Google App Engine. Once the alert has been sent to Google Alert Engine, the alert is then redirected to the user. If the user decides to take action and send a command, the route will be the same but in reverse order. This scenario allowed us to see a conflict that might affect our project. Since we are trying to create a real-time solution, having the commands and data transmission go through multiple channels before reaching the destination can create delays. As a result, we decided to not rely on a cloud-based solution and go for a local-based solution instead. By using a local-based solution, we will have more control with the data transmission and bandwidth being utilized. In addition, a communication channel is removed decreasing the number of delays.
A disadvantage of running a local-based web server is that the IP (Internet Protocol) address could change at any given time. The majority of ISP (Internet Service Provider) by default provide their customers with Dynamic IP addressing. Having a Dynamic IP address can cause a problem because the IP can change at any time. If the IP address changes, the user would have to find out what is the new IP address and then has to change the server IP in the mobile application. There are two different ways where this can be solved. The first way is to request Static IP addressing from the ISP. Usually, Static IP addressing is only offered to Business locations. If the user is able to acquire Static IP addressing there is usually an extra fee that has to be paid. The other solution is to setup and host the DNS (Domain Name System) via a free DNS provider. The way a DNS provider works is that once an account is created, a sub-domain is assigned to the account along with a pair of name servers. The web server has to be setup with the provided name servers, this way whenever the IP changes, it will still be accessible via the sub-domain. By using this solution, the user will not run into problems with the communication setup of the mobile application and web server. There are various free DNS providers such as No-IP, Duck DNS, and Free DNS. All of the mentioned providers are a possible solution and are completely free.
Since we will be using a port of Linux for our project, we have a couple of open source options. Some of the options that were considered are shown below:


  • Apache

  • OpenLiteSpeed

  • Nginx

  • Node.js


Apache- Apache is known as the most popular web server. According to W3Techs website, as of February 2014, 60.7% of active web sites are currently using Apache as a web server. Apache is a well-known web server and very matured due to its age. It’s packed with many features, many of which are not needed for most projects. As a result of having so many features, it makes it a resource hog on hardware of all scales by using too much Random-Access Memory (RAM) and Central Processing Unit (CPU). In order to mitigate this, we will try to only turn on the modules that are needed for our project. An advantage to using a popular web server such as Apache is that there are many different types of implementations available in the Internet.


OpenLiteSpeed- Another option that we are considering is OpenLiteSpeed. OpenLiteSpeed is the free version of the commercial web server LiteSpeed. According to W3Techs, as of February 2014, 2.0% of active websites are currently using LiteSpeed as a web server. The LiteSpeed web server is well known for its performance under very high loads and compatibility among applications. One of the reasons why LiteSpeed doesn’t have a larger market share is because their open source web server, OpenLiteSpeed, was only released last year. Since it’s now an open source option, it will be considered for our project as a possible solution.


Nginx- Nginx is known as the high-performance HTTP server. According to W3Techs, as of February 2014, 20.2% of active websites are currently using Nginx as a web server. Some of the popular companies running Nginx are Netflix, GitHub, and WordPress. It’s a web server that has been proven by today’s standard of heavy loads and praised for its simplicity and ease of setup. One of the advantages of Nginx is the way it handles requests. Instead of using threads as Apache and OpenLiteSpeed, Nginx is event-driven and asynchronous. Nginx is compatible with multiple Linux distributions and many different implementations can be found online.


Node.js- Node.js is a fairly new framework written on java-script that acts as a web server. Similar to Nginx, it’s also event driven and asynchronous. An area where Node.js differs is that it’s not a complete solution out of the box. Node.js allows the developer to create a fully customized web server for a specific task. According to W3Techs, as of February 2014, 0.1% of active websites are currently using Node.js as a web server. Since our robot will always be completing the same task, Node.js becomes a very favorable solution to our project. Further testing will have to be done as well as creating a working implementation. Since Node.js is fairly new, there are not many implementations available. Lately, Node.js has been becoming more popular and new applications are being created based off of Node.js. By the time our project is in the testing phase, we hope that Node.js has matured a little more and the implementation becomes easier


Server Benchmarks- In order to decide which web server to utilize, each one of the studied web server solutions will be tested with a prototype mobile application by performing a benchmark. The benchmark consists on running a simple TCP/IP web server which will have a Server side and a Client side. The TCP/IP web server will be implemented using the JAVA language. The Server side will reside on a virtual private server and it will always be listening for any incoming connections from the client. The Client side will reside on the mobile device which will be running a prototype application that sends commands to move the robot to the Server. The virtual private server specifications are the following:


  • CPU: Intel Xeon L5520 at 2.27 GHz, limited to 1 core and down-clocked to 1 GHz.

  • Random Access Memory (RAM): 512 Megabytes

  • Operating System: Centos OS 6.5 64-bit

  • Java Development Kit (JDK) Installed

Each web server will be installed and implemented on a fresh install. In addition, the web server settings will be as is from the developer, no optimization will be performed other than the required dependencies. It will be assumed that only one user will be interacting with the web server at any given time. The following is the information that will be captured during the benchmark:




  • Memory usage before installing/implementing the webserver

  • Memory usage with webserver installed and running

  • Memory usage with TCP/IP server being idle

  • CPU usage with TCP/IP server being idle

  • Memory usage with TCP/IP server running and receiving data

  • CPU usage with TCP/IP server running and receiving data


Apache Benchmark Results- As it can be seen in the figure below, once Apache is installed the memory usage increases by 38 megabytes. The TCP/IP Server doesn’t consume any memory while is listening for incoming connections which is excellent since it will be listening for incoming connections for most of the time. Once the TCP/IP Server is receiving and parsing data, the memory usage increases by 4.4 megabytes. With both Apache and TCP/IP server running, the total memory usage is 42.4 megabytes.
Figure 3.12-2 Apache Memory Usage
CPU is one of the most important factors since image processing is very CPU intensive. By utilizing a very simple TCP/IP Server the CPU usage only increases by 1%, as shown below, when it is receiving data from the mobile application. This allows us to reserve the rest of the CPU for the image processing algorithms.

Figure 3.12-3 Apache CPU Usage


Nginx Benchmark Results- As it can be seen in the figure below, once Nginx is installed the memory usage increases by 22 megabytes. The TCP/IP Server doesn’t consume any memory while is listening for incoming connections which is excellent since it will be listening for incoming connections for most of the time. Once the TCP/IP Server is receiving and parsing data, the memory usage increases by 3.3 megabytes. With both Nginx and TCP/IP server running, the total memory usage is 25.3 megabytes.

Figure 3.12-4 Nginx Memory Usage
As for the Nginx CPU usage, the result is the same as with Apache with only 1% of the CPU being utilized as processing power.

Figure 3.12-5 Nginx CPU Usage


OpenLiteSpeed Benchmark Results- As it can be seen in the figure below, once OpenLiteSpeed is installed the memory usage increases by 43 megabytes. The TCP/IP Server doesn’t consume any memory while is listening for incoming connections which is excellent since it will be listening for incoming connections for most of the time. Once the TCP/IP Server is receiving and parsing data, the memory usage increases by 4.1 megabytes. With both OpenLiteSpeed and TCP/IP server running, the total memory usage is 47.1 megabytes.

Figure 3.12-6 OpenLiteSpeed Memory Usage
As for the OpenLiteSpeed CPU usage, the CPU usage is a little lower compared to Apache, Nginx, and Node.js coming at 0.7%.

Figure 3.12-7 OpenLiteSpeed CPU Usage


Node.js Benchmark Results- As it can be seen in the figure below, once Node.js is installed the memory usage increases by 8 megabytes. The TCP/IP Server doesn’t consume any memory while is listening for incoming connections which is excellent since it will be listening for incoming connections for most of the time. Once the TCP/IP Server is receiving and parsing data, the memory usage increases by 4.1 megabytes. With both OpenLite Speed and TCP/IP server running, the total memory usage is 12.1 megabytes.

Figure 3.12-8 Node.js Memory Usage
As for the Node.js CPU usage, once again the result is the same as with Apache and Nginx with only 1% of the CPU being utilized as processing power.

Figure 3.12-9 Node.js CPU Usage


Benchmark Conclusion- From the conducted benchmark it can be concluded that Node.js and Nginx can both be possible solutions for the project. Apache, although simpler to implement and to work with, is just too big and consumes a lot of memory. OpenLiteSpeed, although is faster than Apache and consumes less memory under high loads as well as less CPU, it is not a practical solution for just one user interacting with the server. When there’s only one user interacting, OpenLiteSpeed consumes more memory than Apache. In addition, OpenLite Speed requires too many dependencies that might not be available for a microcontroller or FPGA. As for the CPU usage, all the webservers tested used 1% or less of the CPU. This was a great find since image processing algorithms will need as much processing power as possible in order to improve accuracy and response.



Download 0.53 Mb.

Share with your friends:
1   ...   7   8   9   10   11   12   13   14   ...   20




The database is protected by copyright ©ininet.org 2024
send message

    Main page