├── Poster.pdf ├── Resources.pdf ├── imshow.launch ├── motor_subscriber.py ├── README.md ├── image.py └── motor_publisher.py /Poster.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jayasurya-Marasani/ROS-Enabled-Survelliance-Robot/HEAD/Poster.pdf -------------------------------------------------------------------------------- /Resources.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jayasurya-Marasani/ROS-Enabled-Survelliance-Robot/HEAD/Resources.pdf -------------------------------------------------------------------------------- /imshow.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /motor_subscriber.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | import rospy 3 | import time 4 | from std_msgs.msg import String 5 | def callback(msg): print(msg.data) 6 | rospy.init_node('listener',anonymous=True) 7 | sub=rospy.Subscriber('chatter',String,callback) 8 | rospy.spin() -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ROS-Enabled-Survelliance-Robot 2 | Software and Hardware based project. A ROS-Enabled surveillance robot is designed which can be controlled remotely and streams the video feed simultaneously. Robotic operating system (ROS) is used in this project in order to control the movement and the video stream. 3 | -------------------------------------------------------------------------------- /image.py: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env python3 2 | import rospy 3 | import cv2 4 | from sensor_msgs.msg import Image 5 | from cv_bridge import CvBridge, CvBridgeError 6 | cap = cv2.VideoCapture(0) 7 | print(cap.isOpened()) 8 | bridge = CvBridge() 9 | def talker(): 10 | pub = rospy.Publisher('/webcam',Image,queue_size = 1) 11 | rospy.init_node('image', anonymous = False) 12 | rate = rospy.Rate(10) 13 | while not rospy.is_shutdown(): 14 | ret,frame = cap.read() 15 | if not ret: 16 | break 17 | msg = bridge.cv2_to_imgmsg(frame, "bgr8") 18 | pub.publish(msg) 19 | if cv2.waitKey(1) & 0xFF == ord('q'): 20 | break 21 | if rospy.is_shutdown(): 22 | cap.release() 23 | if __name__=='__main__': talker() -------------------------------------------------------------------------------- /motor_publisher.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | import RPi.GPIO as GPIO 3 | import curses 4 | import rospy 5 | from std_msgs.msg import String 6 | from time import sleep 7 | en,in1,in2=25,23,24 8 | en1,in3,in4=17,22,27 9 | temp1=1 10 | GPIO.setmode(GPIO.BCM) 11 | GPIO.setup(in1,GPIO.OUT) 12 | GPIO.setup(in2,GPIO.OUT) 13 | GPIO.setup(in3,GPIO.OUT) 14 | GPIO.setup(in4,GPIO.OUT) 15 | GPIO.setup(en,GPIO.OUT) 16 | GPIO.setup(en1,GPIO.OUT) 17 | GPIO.setup(in1,GPIO.LOW) 18 | GPIO.setup(in2,GPIO.LOW) 19 | GPIO.setup(in3,GPIO.LOW) 20 | GPIO.setup(in4,GPIO.LOW) 21 | p1 = GPIO.PWM(en,555) 22 | p2 = GPIO.PWM(en1,555) 23 | GPIO.output(in1,GPIO.LOW) 24 | GPIO.output(in2,GPIO.LOW) 25 | GPIO.output(in3,GPIO.LOW) 26 | GPIO.output(in4,GPIO.LOW) 27 | p1.start(25) 28 | p2.start(25) 29 | print("working") 30 | screen = curses.initscr() 31 | curses.noecho() 32 | curses.cbreak() 33 | screen.keypad(True) 34 | GPIO.output(in2,GPIO.LOW) 35 | pub=rospy.Publisher('chatter',String,queue_size=10) 36 | rospy.init_node('talker',anonymous=True) 37 | try: 38 | while True: 39 | char = screen.getch() 40 | if char == curses.KEY_UP: 41 | str="MOVING FORWARD" 42 | rospy.loginfo(str) 43 | pub.publish(str) 44 | GPIO.output(in1,GPIO.HIGH) 45 | GPIO.output(in2,GPIO.LOW) 46 | GPIO.output(in3,GPIO.HIGH) 47 | GPIO.output(in4,GPIO.LOW) 48 | char2 = screen.getch() 49 | if char2 == curses.KEY_DOWN: 50 | str1="STOPPED FBACK" 51 | rospy.loginfo(str1) 52 | pub.publish(str1) 53 | GPIO.output(in1,GPIO.LOW) 54 | GPIO.output(in2,GPIO.LOW) 55 | GPIO.output(in3,GPIO.LOW) 56 | GPIO.output(in4,GPIO.LOW) 57 | 58 | if char == curses.KEY_DOWN: 59 | str2="MOVING BACKWARD" 60 | rospy.loginfo(str2) 61 | pub.publish(str2) 62 | GPIO.output(in1,GPIO.LOW) 63 | GPIO.output(in2,GPIO.HIGH) 64 | GPIO.output(in3,GPIO.LOW) 65 | GPIO.output(in4,GPIO.HIGH) 66 | char3 = screen.getch() 67 | if char3 == curses.KEY_UP: 68 | str3="STOPPED" 69 | rospy.loginfo(str3) 70 | pub.publish(str3) 71 | GPIO.output(in1,GPIO.LOW) 72 | GPIO.output(in2,GPIO.LOW) 73 | GPIO.output(in3,GPIO.LOW) 74 | GPIO.output(in4,GPIO.LOW) 75 | if char3 == curses.KEY_RIGHT: 76 | str4="MOVING BACK RIGHT" 77 | rospy.loginfo(str4) 78 | pub.publish(str4) 79 | GPIO.output(in1,GPIO.LOW) 80 | GPIO.output(in2,GPIO.LOW) 81 | GPIO.output(in3,GPIO.LOW) 82 | GPIO.output(in4,GPIO.HIGH) 83 | if char3 == curses.KEY_LEFT: 84 | str5="MOVING BACK LEFT" 85 | rospy.loginfo(str5) 86 | pub.publish(str5) 87 | GPIO.output(in1,GPIO.LOW) 88 | GPIO.output(in2,GPIO.HIGH) 89 | GPIO.output(in3,GPIO.LOW) 90 | GPIO.output(in4,GPIO.LOW) 91 | if char == curses.KEY_RIGHT: 92 | str6="MOVING RIGHT" 93 | rospy.loginfo(str6) 94 | pub.publish(str6) 95 | GPIO.output(in1,GPIO.HIGH) 96 | GPIO.output(in2,GPIO.LOW) 97 | GPIO.output(in3,GPIO.LOW) 98 | GPIO.output(in4,GPIO.LOW) 99 | char4 = screen.getch() 100 | if char4 == curses.KEY_LEFT: 101 | str7="STOPPED" 102 | rospy.loginfo(str7) 103 | pub.publish(str7) 104 | GPIO.output(in1,GPIO.LOW) 105 | GPIO.output(in2,GPIO.LOW) 106 | GPIO.output(in3,GPIO.LOW) 107 | GPIO.output(in4,GPIO.LOW) 108 | if char == ord(' '): 109 | print("BRAKE") 110 | GPIO.output(in1,GPIO.LOW) 111 | GPIO.output(in2,GPIO.LOW) 112 | GPIO.output(in3,GPIO.LOW) 113 | GPIO.output(in4,GPIO.LOW) 114 | if char == curses.KEY_LEFT: 115 | str8="MOVING LEFT" 116 | rospy.loginfo(str8) 117 | pub.publish(str8) 118 | GPIO.output(in1,GPIO.LOW) 119 | GPIO.output(in2,GPIO.LOW) 120 | GPIO.output(in3,GPIO.HIGH) 121 | GPIO.output(in4,GPIO.LOW) 122 | char5 = screen.getch() 123 | if char5 == curses.KEY_RIGHT: 124 | str9="STOPPED" 125 | rospy.loginfo(str9) 126 | pub.publish(str9) 127 | GPIO.output(in1,GPIO.LOW) 128 | GPIO.output(in2,GPIO.LOW) 129 | GPIO.output(in3,GPIO.LOW) 130 | GPIO.output(in4,GPIO.LOW) 131 | 132 | if char == ord('q'): 133 | GPIO.cleanup() 134 | break 135 | finally: 136 | curses.nocbreak();screen.keypad(0);curses.echo() 137 | curses.endwin() 138 | --------------------------------------------------------------------------------