基于AI控制器的捡网球机器人,是基于创意之星AI控制器,并搭建出捡网球机器人构型。
搭建方案请参考随机说明的《捡网球机器人搭建手册》
请务必注意舵机ID的设置。
基于创意之星捡网球构型的AI控制器程序位于创意之星AI控制器的up_cyzx_demo文件夹下的cyzx_pickball_robot.py文件中。
对于网球的识别,主要还是基于颜色识别,对于颜色识别与跟踪可以先参考下面两篇教程。
通过下文学习颜色识别的原理和opencv处理:
通过下文学习如何基于创意之星AI组件包控制器摄像头进行颜色跟踪:
在本案例中,颜色识别等技术与之前的教程一致,重点在于识别到网球后的逻辑处理。
核心代码如下:
if len(c_list) == 1:
(x, y, w, h) = c_list[0]
cv2.rectangle(result, (x, y), (x + w, y + h), (0, 0, 255), 2)
self.target_x = x + w/2
self.target_y = y + h/2
#计算颜色中心相对于图像中心的像素距离
offset_x = self.target_x - img.shape[1] / 2
if(offset_x >= 10 and self.enable_move):
self.movement.move_left(190)
elif(offset_x <= -10 and self.enable_move):
self.movement.move_right(190)
else:
if(self.enable_move and not self.isPick):
self.movement.stop()
self.movement.pick_ball()
self.isPick = True
经过上面的代码,我们依托识别到的颜色中心控制构型机器人对齐网球,当网球中心与摄像头像素中心差值小于一定阈值则停止运动,然后捡起网球。
在实际应用中,可以根据实际情况调整阈值。
后续可以增加其他逻辑,比如运动到某个位置,控制舵机托盘,将网球扔到指定位置等。