Mobile Security Robot
Mobile Security Robot
by Paul Wilson, Zhen Lui, Haitian Sun, and James Knowles, III.
Overview
Mobile Security Robot is a security solution that extends the limits of stationary at home security. The idea is that when the security system is powered, a mobile robot can examine an extended range of areas. If it detects any motion the robot triggers an image capture. Image analysis is subsequently performed to validate the alarm. If substantial changes in the images are confirmed, the owner is then notified of the alert. Ideally, this alert would include an image of what was detected.The iRobot Create's movement is controlled by an mbed device that gathers data about its surroundings. When the security system is being calibrated for setup it should examine the distances around it (at specific locations). If those values are changed past a threshold in real-time, the alarm will trigger causing a sequence of events to follow. This project was created to satisfy the final design project component of our Embedded Systems Design course.
Goals
The main objectives for the Mobile Security Robot project are below.
- Control the Create's movement using an mbed
- Detect motion or changes in the space around the robot
- Capture and store image frames of the motion that is detected
- Wirelessly communicate this data with a server
- Perform image analysis on the image to validate the alarm trigger
- Notify the security owner
Interfacing with Create
See the snippet below for rotating the Create and capturing a photo.
void moveAndPhoto(int dir) { // dir: 1 stands for counter-clockwise, 2 for clockwise led2 = 1; if (dir == 1) { left(); // rotate counter-clockwise wait(1.3); stop(); // stop } else if (dir == 0) { // moving clockwise right(); wait(1.3); stop(); } led2 = 0; picture(); // take picture } // Left - drive motors set to rotate to left void left() { device.printf("%c%c%c%c%c", DriveDirect, char((speed_right>>8)&0xFF), char(speed_right&0xFF), char(((-speed_left)>>8)&0xFF), char((-speed_left)&0xFF)); } // Right - drive motors set to rotate to right void right() { device.printf("%c%c%c%c%c", DriveDirect, char(((-speed_right)>>8)&0xFF), char((-speed_right)&0xFF), char((speed_left>>8)&0xFF), char(speed_left&0xFF)); }
Components
The major components to this project are categorized by device and cloud. The essential modules are below.
What's on the Device?
Sonar modules
Sonar modules (MB1210) are used to detect changes in the space around the robot. After calibration, the system expects a range of values. If the sonar modules return any values outside of the threshold, an alarm is triggered.
Image Sensor
Following the detection, the mbed rotates the Create camera side front to capture the image. The image sensor used is LS-Y201 Camera. The data is then stored on an SD card.
Wireless module
The mbed will then send this data to a web server for image analysis. To implement the communcation, a Wifly module is being used to connect to a wireless network for data transmission. As a backup we have verified that we can transmit data via Ethernet.
What's in the Cloud?
A web server is used for image analysis as well as emailing notifications to the security owner. Both scripts are written in python. The web server storage and processes are via AWS.
Image Analysis
A quick, but effective way to detect changes in images is using a histogram of the hue saturation values. When the Create is calibrated, it stores images in an array based on position (index). This system creates a histogram of the original image and compares it to a histogram of the space where the detection occurred. If the histograms differ outside of a threshold detection is confirmed. We are using OpenCV's Histogram Comparison for the image analysis on the data.
Code below shows snippets for running the histogram comparison.
Image Analysis
import cvs import numpy as np # Convert BGR to HSV hsvOld = cv2.cvtColor(oldImage, cv2.COLOR_BGR2HSV); hsvNew = cv2.cvtColor(newImage, cv2.COLOR_BGR2HSV); # Red, green, blue channels for histogram computations int channels [] = {1,2,3}; # Take histogram of old and new histOld = cv2.calcHist([hsvOld],[channels],None,[256],[0,256]); histNew = cv2.calcHist([hsvNew],[channels],None,[256],[0,256]); # Compare histograms using correlation method double check = compareHist(histOld,histNew,cv2.cv.CV_COMP_CORREL); # Threshold for correlation if check < .85 # return detection via email script
Alerting the user
An SMTP package was installed on the web server. This gives the security system the ability to send email alerts to the owner.
Code below shows the linux commands for installing the SMTP package on the web server.
Current Status
Our project currently works as 2 individual programs. The embedded program controls our Create, detects motion, captures images, and sends the image data to the server. Our second program is hosted on the server. It processes the image data and sends email notifications to the owner. While we were unsuccessful in sending our data wirelessly, our mbed can successfully transmit data via Ethernet.
Moving forward
The image analysis code has not yet been fully vetted. Moving forward we would combine it with our server code to validate our motion detection. As well as determine the reason our wireless attempts were unsuccessful.
Other Important Snippets of Code
Capturing an image via mbed
void picture() { char fname[64]; snprintf(fname, sizeof(fname) - 1, FILENAME, imgNum); int r = capture(&cam1, fname); if (r == 0) { DEBMSG("[%04d]:OK.", imgNum); NEWLINE(); } else { DEBMSG("[%04d]:NG. (code=%d)", imgNum, r); NEWLINE(); error("Failure."); } wait(3); imgNum++; } int capture(Camera_LS_Y201 *cam, char *filename) { /* * Take a picture. */ if (cam->takePicture() != 0) { return -1; } DEBMSG("Captured."); NEWLINE(); /* * Open file. */ work.fp = fopen(filename, "wb"); if (work.fp == NULL) { return -2; } /* * Read the content. */ DEBMSG("%s", filename); NEWLINE(); if (cam->readJpegFileContent(callback_func) != 0) { fclose(work.fp); return -3; } fclose(work.fp); /* * Stop taking pictures. */ cam->stopTakingPictures(); return 0; }
Repository
Solution for robot controls, motion detection, and image capture
Import program4180_Final_Project
ECE 4180 Project
Solution for sending image data to server
Import programTCP_client
A program that sends a image saved to the sd card to a server through a tcp socket connection
Server Code - used for notifications /media/uploads/pwilson39/finalprojectpython.py
Result
Please log in to post comments.