From eddef1364f860e3b47da2ddb9cfaf1496571eafb Mon Sep 17 00:00:00 2001 From: weiquan Date: Mon, 1 Nov 2021 10:41:55 +0800 Subject: [PATCH] Integrate aikit code --- mycobot_ai/local_photo/img/goal1.jpeg | Bin 0 -> 5145 bytes mycobot_ai/local_photo/img/goal2.jpeg | Bin 0 -> 6483 bytes mycobot_ai/local_photo/img/goal3.jpeg | Bin 0 -> 4927 bytes mycobot_ai/local_photo/img/goal4.jpeg | Bin 0 -> 4532 bytes mycobot_ai/local_photo/img/goal5.jpeg | Bin 0 -> 4435 bytes mycobot_ai/scripts/ai_windows.py | 8 +- mycobot_ai/scripts/detect_encode.py | 124 ++++++++---- mycobot_ai/scripts/detect_obj_color.py | 9 +- mycobot_ai/scripts/detect_obj_img.py | 266 ++++++++++--------------- 9 files changed, 195 insertions(+), 212 deletions(-) create mode 100644 mycobot_ai/local_photo/img/goal1.jpeg create mode 100644 mycobot_ai/local_photo/img/goal2.jpeg create mode 100644 mycobot_ai/local_photo/img/goal3.jpeg create mode 100644 mycobot_ai/local_photo/img/goal4.jpeg create mode 100644 mycobot_ai/local_photo/img/goal5.jpeg diff --git a/mycobot_ai/local_photo/img/goal1.jpeg b/mycobot_ai/local_photo/img/goal1.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..da80fc63855ca5afebfac062cd33ef280e82daaf GIT binary patch literal 5145 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 literal 0 HcmV?d00001 diff --git a/mycobot_ai/local_photo/img/goal3.jpeg b/mycobot_ai/local_photo/img/goal3.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..fae436511cf3d46373e022cf7af039be8be38d89 GIT binary patch literal 4927 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 J^C+iG{s%9MrJDc% literal 0 HcmV?d00001 diff --git a/mycobot_ai/local_photo/img/goal5.jpeg b/mycobot_ai/local_photo/img/goal5.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..51ec096b72f751cfb7680ef26a5e913df9ba055b GIT binary patch literal 4435 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 5: # mm + if (abs(x - self.cache_x) + abs(y - self.cache_y)) / 2 > 5: # mm self.cache_x, self.cache_y = x, y return else: @@ -131,35 +168,37 @@ class Detect_marker(Movement): # init mycobot def init_mycobot(self): - self.pub_pump(False,self.Pin) + if self.raspi: + self.gpio_status(False) + else: + self.pub_pump(False, self.Pin) for _ in range(5): print _ - self.pub_coords([135.0, -65.5, 280.1, 178.99, 5.38, -179.9], 20, 1) - time.sleep(0.5) - + self.pub_coords([145.6, -64.9, 285.2, 179.88, 7.67, -177.06], 20, 1), 20, 1) + time.sleep(0.5) def run(self): global pump_y, pump_x - self.init_mycobot() - num = sum_x = sum_y = 0 + self.init_mycobot() + num=sum_x=sum_y=0 while cv.waitKey(1) < 0: - success, img = self.cap.read() + success, img=self.cap.read() if not success: print("It seems that the image cannot be acquired correctly.") break # transfrom the img to model of gray - gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY) + gray=cv.cvtColor(img, cv.COLOR_BGR2GRAY) # Detect ArUco marker. - corners, ids, rejectImaPoint = cv.aruco.detectMarkers( - gray, self.aruco_dict, parameters=self.aruco_params + corners, ids, rejectImaPoint=cv.aruco.detectMarkers( + gray, self.aruco_dict, parameters = self.aruco_params ) if len(corners) > 0: if ids is not None: # get informations of aruco - ret = cv.aruco.estimatePoseSingleMarkers( + ret=cv.aruco.estimatePoseSingleMarkers( corners, 0.03, self.camera_matrix, self.dist_coeffs ) # rvec:rotation offset,tvec:translation deviator @@ -167,11 +206,11 @@ class Detect_marker(Movement): (rvec - tvec).any() xyz = tvec[0, 0, :] # calculate the coordinates of the aruco relative to the pump - xyz = [round(xyz[0]*1000+pump_y, 2), round(xyz[1]*1000+pump_x, 2), round(xyz[2]*1000, 2)] - + xyz = [round(xyz[0]*1000+pump_y, 2), round(xyz[1] + * 1000+pump_x, 2), round(xyz[2]*1000, 2)] for i in range(rvec.shape[0]): - # draw the aruco on img + # draw the aruco on img cv.aruco.drawDetectedMarkers(img, corners) cv.aruco.drawAxis( img, @@ -182,16 +221,19 @@ class Detect_marker(Movement): 0.03, ) - if num < 40 : + if num < 40: + if self.raspi: + sum_x -= 30 sum_x += xyz[1] sum_y += xyz[0] num += 1 - elif num ==40 : + elif num == 40: self.decide_move(sum_x/40.0, sum_y/40.0) num = sum_x = sum_y = 0 cv.imshow("encode_image", img) + if __name__ == "__main__": detect = Detect_marker() detect.run() diff --git a/mycobot_ai/scripts/detect_obj_color.py b/mycobot_ai/scripts/detect_obj_color.py index 83c5c3e..8a27d06 100644 --- a/mycobot_ai/scripts/detect_obj_color.py +++ b/mycobot_ai/scripts/detect_obj_color.py @@ -1,4 +1,5 @@ # encoding:utf-8 +#!/usr/bin/env python2 from tokenize import Pointfloat import cv2 @@ -33,7 +34,7 @@ class Object_detect(Movement): self.move_coords = [ [120.1, -141.6, 240.9, -173.34, -8.15, -83.11], # above the red bucket # above the yello bucket - [208.2, -127.8, 260.9, -157.51, -17.5, -71.18], + [215.2, -127.8, 260.9, -157.51, -17.5, -71.18], [209.7, -18.6, 230.4, -168.48, -9.86, -39.38], [196.9, -64.7, 232.6, -166.66, -9.44, -52.47], [126.6, -118.1, 305.0, -157.57, -13.72, -75.3], @@ -140,7 +141,7 @@ class Object_detect(Movement): time.sleep(1.5) if "dev" in self.robot_m5 or self.raspi: self.pub_coords([x, y, 90, -178.9, -1.57, -25.95], 20, 1) - else: + elif "dev" in self.robot_wio: h = 0 if 165 < x < 180: @@ -172,7 +173,6 @@ class Object_detect(Movement): self.pub_marker( self.move_coords[4][0]/1000.0, self.move_coords[4][1]/1000.0, self.move_coords[4][2]/1000.0) - print 'down:', self.move_coords[color] self.pub_coords(self.move_coords[color], 20, 1) self.pub_marker(self.move_coords[color][0]/1000.0, self.move_coords[color] [1]/1000.0, self.move_coords[color][2]/1000.0) @@ -202,7 +202,8 @@ class Object_detect(Movement): return else: self.cache_x = self.cache_y = 0 - if "dev" not in self.robot: + # 调整吸泵吸取位置,y增大,向左移动;y减小,向右移动;x增大,前方移动;x减小,向后方移动 + if "dev" not in self.robot_wio: if (y < -30 and x > 140) or (x > 150 and y < -10): x -= 10 diff --git a/mycobot_ai/scripts/detect_obj_img.py b/mycobot_ai/scripts/detect_obj_img.py index 8cd76ba..eed80a2 100644 --- a/mycobot_ai/scripts/detect_obj_img.py +++ b/mycobot_ai/scripts/detect_obj_img.py @@ -1,4 +1,5 @@ # encoding:utf-8 +#!/usr/bin/env python2 from tokenize import Pointfloat import cv2 @@ -24,28 +25,38 @@ class Object_detect(Movement): super(Object_detect, self).__init__() # get path of file dir_path = os.path.dirname(__file__) - # 移动角度 + # 移动角度 self.move_angles = [ - [-7.11, -6.94, -55.01, -24.16, 0, -38.84], # init the point + [-7.11, -6.94, -55.01, -24.16, 0, -38.84], # init the point [-1.14, -10.63, -87.8, 9.05, -3.07, -37.7], # point to grab [17.4, -10.1, -87.27, 5.8, -2.02, -37.7], # point to grab ] # 移动坐标 self.move_coords = [ - [120.1, -141.6, 240.9, -173.34, -8.15, -83.11], # above the red bucket - [208.2, -127.8, 260.9, -157.51, -17.5, -71.18], # above the yello bucket - [209.7, -18.6, 230.4, -168.48, -9.86, -39.38], - [196.9, -64.7, 232.6, -166.66, -9.44, -52.47], - [126.6, -118.1, 305.0, -157.57, -13.72, -75.3], + [120.1, -141.6, 240.9, -173.34, -8.15, -83.11], # above the red bucket + # above the yello bucket + [208.2, -127.8, 260.9, -157.51, -17.5, -71.18], + [209.7, -18.6, 230.4, -168.48, -9.86, -39.38], + [196.9, -64.7, 232.6, -166.66, -9.44, -52.47], + [126.6, -118.1, 305.0, -157.57, -13.72, -75.3], ] # 判断连接设备:ttyUSB*为M5,ttyACM*为seeed - self.robot = os.popen("ls /dev/ttyUSB*").readline()[:-1] - if "dev" in self.robot: + self.robot_m5 = os.popen("ls /dev/ttyUSB*").readline()[:-1] + self.robot_wio = os.popen("ls /dev/ttyACM*").readline()[:-1] + self.robot_raspi = os.popen("ls /dev/ttyAMA*").readline()[:-1] + self.raspi = False + if "dev" in self.robot_m5: self.Pin = [2, 5] - else: + elif "dev" in self.robot_wio: self.Pin = [20, 21] for i in self.move_coords: i[2] -= 20 + elif "dev" in self.robot_raspi: + import RPi.GPIO as GPIO + GPIO.setmode(GPIO.BCM) + GPIO.setup(20, GPIO.OUT) + GPIO.setup(21, GPIO.OUT) + self.raspi = True # choose place to set cube self.color = 0 @@ -113,6 +124,14 @@ class Object_detect(Movement): self.marker.color.g = self.color self.pub.publish(self.marker) + def gpio_status(self, flag): + if flag: + GPIO.output(20, 0) + GPIO.output(21, 0) + else: + GPIO.output(20, 1) + GPIO.output(21, 1) + # Grasping motion def move(self, x, y, color): # send Angle to move mycobot @@ -125,11 +144,10 @@ class Object_detect(Movement): # send coordinates to move mycobot self.pub_coords([x, y, 165, -178.9, -1.57, -25.95], 20, 1) time.sleep(1.5) - - if "dev" in self.robot: + # 根据不同底板机械臂,调整吸泵高度 + if "dev" in self.robot_m5: self.pub_coords([x, y, 90, -178.9, -1.57, -25.95], 20, 1) - else: - + elif "dev" in self.robot_wio: h = 0 if 165 < x < 180: h = 10 @@ -137,11 +155,13 @@ class Object_detect(Movement): h = 20 elif x < 135: h = -20 - # print 'down_1:',[x, y, 31.9+h, -178.9, -1, -25.95] self.pub_coords([x, y, 31.9+h, -178.9, -1, -25.95], 20, 1) time.sleep(1.5) # open pump - self.pub_pump(True, self.Pin) + if self.raspi: + self.gpio_status(True) + else: + self.pub_pump(True, self.Pin) time.sleep(0.5) self.pub_angles(self.move_angles[2], 20) time.sleep(3) @@ -163,14 +183,16 @@ class Object_detect(Movement): [1]/1000.0, self.move_coords[color][2]/1000.0) time.sleep(2) # close pump - self.pub_pump(False, self. -Pin) + if self.raspi: + self.gpio_status(False) + else: + self.pub_pump(False, self.Pin) if color == 1: - self.pub_marker( - self.move_coords[color][0]/1000.0+0.04, self.move_coords[color][1]/1000.0-0.02) + self.pub_marker( + self.move_coords[color][0]/1000.0+0.04, self.move_coords[color][1]/1000.0-0.02) elif color == 0: - self.pub_marker( - self.move_coords[color][0]/1000.0+0.03, self.move_coords[color][1]/1000.0) + self.pub_marker( + self.move_coords[color][0]/1000.0+0.03, self.move_coords[color][1]/1000.0) self.pub_angles(self.move_angles[0], 20) time.sleep(3) @@ -184,7 +206,8 @@ Pin) return else: self.cache_x = self.cache_y = 0 - if "dev" not in self.robot: + # 调整吸泵吸取位置,y增大,向左移动;y减小,向右移动;x增大,前方移动;x减小,向后方移动 + if "dev" not in self.robot_wio: if (y < -30 and x > 140) or (x > 150 and y < -10): x -= 10 y += 10 @@ -193,7 +216,7 @@ Pin) elif x > 170: x -= 10 y += 10 - else: + elif "dev" not in self.robot_m5: y += 10 x -= 5 if y < -20: @@ -203,13 +226,17 @@ Pin) # init mycobot def run(self): + if self.raspi: + self.gpio_status(False) + else: + self.pub_pump(False, self.Pin) for _ in range(5): self.pub_angles([-7.11, -6.94, -55.01, -24.16, 0, -38.84], 20) print(_) time.sleep(0.5) - self.pub_pump(False, self.Pin) # draw aruco + def draw_marker(self, img, x, y): # draw rectangle on img cv2.rectangle( @@ -285,14 +312,14 @@ Pin) if self.x1 != self.x2: # the cutting ratio here is adjusted according to the actual situation frame = frame[int(self.y2*0.2):int(self.y1*1.15), - int(self.x1*0.7):int(self.x2*1.15)] + int(self.x1*0.7):int(self.x2*1.15)] return frame # according the class_id to get object name def id_class_name(self, class_id): for key, value in self.labels.items(): - if class_id == int(key): - return value + if class_id == int(key): + return value # detect object def obj_detect(self, img, goal): @@ -405,107 +432,20 @@ Pin) except Exception as e: pass - else: - if(len(good) < MIN_MATCH_COUNT): + # else: + # if(len(good) < MIN_MATCH_COUNT): - i += 1 - if(i % 10 == 0): - print("Not enough matches are found - %d/%d" % - (len(good), MIN_MATCH_COUNT)) + # i += 1 + # if(i % 10 == 0): + # print("Not enough matches are found - %d/%d" % + # (len(good), MIN_MATCH_COUNT)) - matchesMask = None + # matchesMask = None if x+y > 0: return x, y else: return None - def take_photo(self): - # 提醒用户操作字典 - print("*********************************************") - print("* 热键(请在摄像头的窗口使用): *") - print("* z: 拍摄图片 *") - print("* q: 退出 *") - print("*********************************************") - - # 创建/使用local_photo文件夹 - class_name = "local_photo" - if(os.path.exists("local_photo")): - pass - else: - os.mkdir(class_name) - - # 设置特定值 - - index = 'takephoto' - cap = cv2.VideoCapture(0) - - while True: - # 读入每一帧 - ret, frame = cap.read() - - cv2.imshow("capture", frame) - - # 存储 - input = cv2.waitKey(1) & 0xFF - # 拍照 - if input == ord('z'): - cv2.imwrite("%s/%s.jpeg" % (class_name, index), - cv2.resize(frame, (600, 480), interpolation=cv2.INTER_AREA)) - break - - # 退出 - if input == ord('q'): - break - - # 关闭窗口 - cap.release() - cv2.destroyAllWindows() - - def cut_photo(self): - path = os.getcwd()+'/local_photo/img' - print path - for i,j,k in os.walk(path): - file_len = len(k) - print("请截取要识别的部分") - # root = tk.Tk() - # root.withdraw() - # temp1=filedialog.askopenfilename(parent=root) #rgb - # temp2=Image.open(temp1,mode='r') - # temp2= cv.cvtColor(np.asarray(temp2),cv.COLOR_RGB2BGR) - # cut = np.array(temp2) - - cut = cv2.imread(r"local_photo/takephoto.jpeg") - - cv2.imshow('original', cut) - # C:\Users\Elephant\Desktop\pymycobot+opencv\local_photo/takephoto.jpeg - - # 选择ROI - roi = cv2.selectROI(windowName="original", img=cut, - showCrosshair=False, fromCenter=False) - x, y, w, h = roi - print(roi) - - # 显示ROI并保存图片 - if roi != (0, 0, 0, 0): - crop = cut[y:y+h, x:x+w] - cv2.imshow('crop', crop) - cv2.imwrite('local_photo/img/goal{}.jpeg'.format(str(file_len+1)), crop) - print('Saved!') - - # 退出 - cv2.waitKey(0) - cv2.destroyAllWindows() - - def distinguist(self): - print("请选择要识别的物体图片") - root = tk.Tk() # 显式创建根窗体 - root.withdraw() # 将根窗体隐藏 - file = filedialog.askopenfilename(parent=root) - load = Image.open(file, mode='r') - load = cv.cvtColor(np.asarray(load), cv.COLOR_RGB2BGR) - goal = np.array(load) - return goal - def run(): @@ -515,7 +455,7 @@ def run(): goal = [] path = os.getcwd()+'/local_photo/img' - for i,j,k in os.walk(path): + for i, j, k in os.walk(path): for l in k: goal.append(cv2.imread('local_photo/img/{}'.format(l))) cap_num = 0 @@ -526,78 +466,77 @@ def run(): detect = Object_detect() # init mycobot detect.run() - - _init_ = 20 # + + _init_ = 20 # init_num = 0 nparams = 0 num = 0 real_sx = real_sy = 0 while cv2.waitKey(1) < 0: # read camera - _,frame = cap.read() + _, frame = cap.read() # deal img frame = detect.transform_frame(frame) - if _init_ > 0: - _init_-=1 + _init_ -= 1 continue # calculate the parameters of camera clipping if init_num < 20: if detect.get_calculate_params(frame) is None: - cv2.imshow("figure",frame) + cv2.imshow("figure", frame) continue else: - x1,x2,y1,y2 = detect.get_calculate_params(frame) - detect.draw_marker(frame,x1,y1) - detect.draw_marker(frame,x2,y2) - detect.sum_x1+=x1 - detect.sum_x2+=x2 - detect.sum_y1+=y1 - detect.sum_y2+=y2 - init_num+=1 + x1, x2, y1, y2 = detect.get_calculate_params(frame) + detect.draw_marker(frame, x1, y1) + detect.draw_marker(frame, x2, y2) + detect.sum_x1 += x1 + detect.sum_x2 += x2 + detect.sum_y1 += y1 + detect.sum_y2 += y2 + init_num += 1 continue - elif init_num==20: + elif init_num == 20: detect.set_cut_params( - (detect.sum_x1)/20.0, - (detect.sum_y1)/20.0, - (detect.sum_x2)/20.0, - (detect.sum_y2)/20.0, + (detect.sum_x1)/20.0, + (detect.sum_y1)/20.0, + (detect.sum_x2)/20.0, + (detect.sum_y2)/20.0, ) detect.sum_x1 = detect.sum_x2 = detect.sum_y1 = detect.sum_y2 = 0 - init_num+=1 + init_num += 1 continue # calculate params of the coords between cube and mycobot if nparams < 10: if detect.get_calculate_params(frame) is None: - cv2.imshow("figure",frame) + cv2.imshow("figure", frame) continue else: - x1,x2,y1,y2 = detect.get_calculate_params(frame) - detect.draw_marker(frame,x1,y1) - detect.draw_marker(frame,x2,y2) - detect.sum_x1+=x1 - detect.sum_x2+=x2 - detect.sum_y1+=y1 - detect.sum_y2+=y2 - nparams+=1 + x1, x2, y1, y2 = detect.get_calculate_params(frame) + detect.draw_marker(frame, x1, y1) + detect.draw_marker(frame, x2, y2) + detect.sum_x1 += x1 + detect.sum_x2 += x2 + detect.sum_y1 += y1 + detect.sum_y2 += y2 + nparams += 1 continue - elif nparams==10: - nparams+=1 + elif nparams == 10: + nparams += 1 # calculate and set params of calculating real coord between cube and mycobot detect.set_params( - (detect.sum_x1+detect.sum_x2)/20.0, - (detect.sum_y1+detect.sum_y2)/20.0, - abs(detect.sum_x1-detect.sum_x2)/10.0+abs(detect.sum_y1-detect.sum_y2)/10.0 + (detect.sum_x1+detect.sum_x2)/20.0, + (detect.sum_y1+detect.sum_y2)/20.0, + abs(detect.sum_x1-detect.sum_x2)/10.0 + + abs(detect.sum_y1-detect.sum_y2)/10.0 ) print "ok" continue - # get detect result - detect_result = detect.obj_detect(frame,goal) + detect_result = detect.obj_detect(frame, goal) if detect_result is None: - cv2.imshow("figure",frame) + cv2.imshow("figure", frame) continue else: x, y = detect_result @@ -613,11 +552,10 @@ def run(): real_sy += real_y real_sx += real_x - cv2.imshow("figure",frame) - - + cv2.imshow("figure", frame) + + if __name__ == "__main__": run() # Object_detect().take_photo() # Object_detect().cut_photo() -