Welcome to DOGZILLA-Lite repository
12. Independent football exercise
Independent football exercise
1. Purpose of the experiment
This tutorial will teach you how to locate a ground target ball through visual recognition and use motion planning algorithms to control the robot dog to perform controlled movements.
2. Main source code path
First end the large program and then enter the terminal
xxxxxxxxxxcd ~/home/pi/DOGZILLA_Lite_class/6.AI Visual Interaction Course/12.Football Sportpython3 play_football.py
3. Experimental Phenomenon
After running the source code, by placing the ball within the range that the robot dog can identify, you can let the robot dog track the ball and then kick the ball. The yellow ball is recognized by default, and you can switch the color of a building block by pressing the button in the upper right corner of the screen.
Identification:

Playing football:

result:

4. Main source code analysis
xxxxxxxxxxwhile 1: ret, frame = cap.read() frame_ = cv2.GaussianBlur(frame,(5,5),0) hsv = cv2.cvtColor(frame,cv2.COLOR_BGR2HSV) mask = cv2.inRange(hsv,color_lower,color_upper) mask = cv2.erode(mask,None,iterations=2) mask = cv2.dilate(mask,None,iterations=2) mask = cv2.GaussianBlur(mask,(3,3),0) cnts = cv2.findContours(mask.copy(),cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)[-2] if g_mode == 1: if len(cnts) > 0: cnt = max (cnts, key = cv2.contourArea) (color_x,color_y),color_radius = cv2.minEnclosingCircle(cnt) if color_radius > 10: cv2.circle(frame,(int(color_x),int(color_y)),int(color_radius),(255,0,255),2) X_track_PID.SystemOutput = color_x - obj_error #X 因为球要在右足方向上 Because the ball needs to be in the right foot direction X_track_PID.SetStepSignal(X_Middle_error) X_track_PID.SetInertiaTime(0.01, 0.1) x_real_value = int(X_track_PID.SystemOutput) x_real_value = limit_fun(x_real_value ,-18,18) g_dog.move('y',x_real_value) if color_y > 225 or color_y ==0 : g_dog.move('x',0) else : g_dog.move('x',10) #停止定点,进行踢球运动 Stop stationary and start playing soccer if color_y > 225 : if abs(color_x -obj_error -160)<25:###6 step = step+1 else : step = 0 if step > 5: g_dog.stop() g_mode = 2 #进入踢球运动 Enter the sport of football else: color_x = 0 color_y = 0 g_dog.stop() #print([color_x,color_y]) cv2.putText(frame, "X:%d, Y%d" % (int(color_x), int(color_y)), (40,40), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0,255,255), 3) t_start = time.time() fps = 0 elif g_mode == 2: #踢球运动 Football sports g_dog.translation(['x'],[-10]) time.sleep(0.5) g_dog.attitude(['p'],[0]) time.sleep(0.5) g_dog.motor_speed(200) #加快运动速度 Accelerate the speed of movement time.sleep(0.2) g_dog.motor(four_leg,[7.18, 31.65, -0.12, -32.35, 55.49, -0.82, 4.35, 39.18, 1.76, 4.82, 39.8, 0.12])#收 Close time.sleep(0.2) g_dog.motor(four_leg,[7.18, 31.65, 1.06, 46.71, -22.31, -0.59, 4.35, 38.55, 1.76, 4.82, 39.18, 0.12])#伸 extend time.sleep(0.2) g_dog.motor(four_leg,[7.18, 31.65, 1.06, 50.0, -54.94, -0.82, 4.35, 38.55, 1.76, 5.29, 39.18, 0.12])#踢 kick time.sleep(0.2) g_dog.motor(four_leg,[5.29, 31.65, -0.35, 5.76, 31.65, 0.35, 2.94, 39.18, -0.35, 3.88, 39.18, 0.12])#收回 retract time.sleep(1) g_dog.translation(['x'],[0])#恢复追踪目标的姿态 Restore the posture of the tracked target time.sleep(0.2) g_dog.attitude(['p'],[15]) time.sleep(0.2) g_dog.pace('slow') #恢复寻找目标的速度 Restore the speed of searching for targets time.sleep(0.2) step = 0 g_mode = 1 The above code is the main process of a kicking motion by identifying the ball of the target color.