How To Make An Object Tracking Robot Using Raspberry Pi - Automatic Addisonasdfsdf
How To Make An Object Tracking Robot Using Raspberry Pi - Automatic Addisonasdfsdf
Automatic Addison
Build the Future
In this tutorial, I will show you how to give your wheeled robot the ability to follow a colored ball. You will get your rst
taste of computer vision and image processing.
Special shout out to Matt Timmons-Brown for this project idea. He is the author of a really good book on Raspberry Pi
robotics: (Learn Robotics with Raspberry Pi). Go check it out!
https://automaticaddison.com/how-to-make-an-object-tracking-robot-using-raspberry-pi/ 1/10
3/26/2021 How to Make an Object Tracking Robot Using Raspberry Pi – Automatic Addison
Video
Here is a video of what we will build in this tutorial.
Requirements
Here are the requirements:
Build a wheeled robot powered by Raspberry Pi that must identify and follow a yellow rubber ball using OpenCV, a
library of programming functions for real-time computer vision and image processing.
The following components are used in this project. You will need:
Wheeled Robot
Yellow Rubber Ball (available from eBay)
Raspberry Pi Camera Module V2-8 (Standard)
2×2 Lego Brick (available from eBay)
VELCRO Brand Thin Clear Fasteners
Directions
Open the Camera Serial Interface on the Raspberry Pi. It is located next to the 3.5mm audio jack. Pull it upwards
delicately from either side.
https://automaticaddison.com/how-to-make-an-object-tracking-robot-using-raspberry-pi/ 2/10
3/26/2021 How to Make an Object Tracking Robot Using Raspberry Pi – Automatic Addison
Insert the ribbon of the camera module into the Camera Serial Interface. Make sure the silver contacts face away from
the 3.5mm audio jack.
Hold the ribbon in place while pushing down on the Camera Serial Interface port. Make sure it is closed.
https://automaticaddison.com/how-to-make-an-object-tracking-robot-using-raspberry-pi/ 3/10
3/26/2021 How to Make an Object Tracking Robot Using Raspberry Pi – Automatic Addison
sudo raspi-config
Interfacing Options –> ENTER –> Camera –> ENTER –> Yes
Advanced Options –> Resolution –> DMT Mode 82 1920×1080 60Hz 16: 9 –> ENTER –> Finish
sudo reboot
We need to take a test photo with our newly installed camera module.
raspistill -o test_photo.jpg
Go to your home directory to see if the test photo is there. Here is the photo that mine took (back of my head).
https://automaticaddison.com/how-to-make-an-object-tracking-robot-using-raspberry-pi/ 4/10
3/26/2021 How to Make an Object Tracking Robot Using Raspberry Pi – Automatic Addison
Now, we need to con gure our system so the robot can track a yellow rubber ball.
Download the dependencies for OpenCV, a library of programming functions for real-time computer vision and image
processing.
Y –> ENTER.
https://automaticaddison.com/how-to-make-an-object-tracking-robot-using-raspberry-pi/ 5/10
3/26/2021 How to Make an Object Tracking Robot Using Raspberry Pi – Automatic Addison
Open IDLE in your Raspberry Pi, and create a new le in your robot directory. Name it color_tester.py.
32
33 hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
34
35 color_mask = cv2.inRange(hsv, lower_red, upper_red)
36
37 result = cv2.bitwise_and(image, image, mask= color_mask)
38
39 cv2.imshow("Camera Output", image)
40 cv2.imshow("HSV", hsv)
41 cv2.imshow("Color Mask", color_mask)
42 cv2.imshow("Final Result", result)
43
44 rawCapture.truncate(0)
45
46 k = cv2.waitKey(5) #& 0xFF
47 if "q" == chr(k & 255):
48 break
python3 color_tester.py
Choose 60.
https://automaticaddison.com/how-to-make-an-object-tracking-robot-using-raspberry-pi/ 7/10
3/26/2021 How to Make an Object Tracking Robot Using Raspberry Pi – Automatic Addison
To try a di erent hue value, select any of the four windows above. Press Q to halt the output of the video.
Go to the terminal window, and try a new hue valve. I’ll try 29 this time. It worked!
You keep trying di erent numbers until Window 4 shows mostly your ball and nothing else. Be patient and try LOTS of
numbers.
Write down the hue value you ended up with on a sheet of paper.
ball_following_yellow. py
Here is the code (Credit to Matt Timmons-Brown, the author of a really good book on Raspberry Pi robotics: (Learn
Robotics with Raspberry Pi):
9 image_width = 640
10 image_height = 480
11 camera.resolution = (image_width, image_height)
12 camera.framerate = 32
13 rawCapture = PiRGBArray(camera, size=(image_width, image_height))
14 center_image_x = image_width / 2
15 center_image_y = image_height / 2
16 minimum_area = 250
17 maximum_area = 100000
18
19 robot = gpiozero.Robot(left=(22,27), right=(17,18))
20 forward_speed = 1.0
21 turn_speed = 0.8
22
23 HUE_VAL = 29
24
25 lower_color = np.array([HUE_VAL-10,100,100])
26 upper_color = np.array([HUE_VAL+10, 255, 255])
27
28 for frame in camera.capture_continuous(rawCapture, format="bgr", use_video_port=True):
29 image = frame.array
30
31 hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
32
33 color_mask = cv2.inRange(hsv, lower_color, upper_color)
34
35 image2, countours, hierarchy = cv2.findContours(color_mask, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMP
36
37 object_area = 0
38 object_x = 0
39 object_y = 0
40
41 for contour in countours:
42 x, y, width, height = cv2.boundingRect(contour)
43 found_area = width * height
44 center_x = x + (width / 2)
45 center_y = y + (height / 2)
46 if object_area < found_area:
47 object_area = found_area
48 object_x = center_x
49 object_y = center_y
50 if object_area > 0:
51 ball_location = [object_area, object_x, object_y]
52 else:
53 ball_location = None
54
55 if ball_location:
56 if (ball_location[0] > minimum_area) and (ball_location[0] < maximum_area):
57 if ball_location[1] > (center_image_x + (image_width/3)):
58 robot.right(turn_speed)
59 print("Turning right")
60 elif ball_location[1] < (center_image_x - (image_width/3)):
61 robot.left(turn_speed)
62 print("Turning left")
63 else:
64 robot.forward(forward_speed)
65 print("Forward")
66 elif (ball_location[0] < minimum_area):
67 robot.left(turn_speed)
68 print("Target isn't large enough, searching")
69 else:
70 robot.stop()
71 print("Target large enough, stopping")
72 else:
73 robot.left(turn_speed)
74 print("Target not found, searching")
75
76 rawCapture.truncate(0)
Place your robot in an open space on the oor with the yellow rubber ball.
python3 ball_following_yellow.py
https://automaticaddison.com/how-to-make-an-object-tracking-robot-using-raspberry-pi/ 9/10
3/26/2021 How to Make an Object Tracking Robot Using Raspberry Pi – Automatic Addison
https://automaticaddison.com/how-to-make-an-object-tracking-robot-using-raspberry-pi/ 10/10