Tái tạo và biểu diễn đối tượng 3d sử dụng mạng nơ ron ứng dụng cho robot gắp vật

84 9 0
Tái tạo và biểu diễn đối tượng 3d sử dụng mạng nơ ron ứng dụng cho robot gắp vật

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI LUẬN VĂN THẠC SĨ Tái tạo biểu diễn đối tượng 3D sử dụng Mạng nơ-ron ứng dụng cho robot gắp vật ĐÀO MINH HIẾN minhhienhust199211@gmail.com Ngành Kỹ thuật Cơ điện tử Giảng viên hướng dẫn: TS Hồng Hồng Hải Viện: Cơ khí HÀ NỘI, 04/2021 Chữ ký GVHD Tái tạo biểu diễn đối tượng 3D sử dụng Mạng nơ-ron ứng dụng cho robot gắp vật TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN CƠ KHÍ BỘ MƠN CƠ ĐIỆN TỬ NHIỆM VỤ LUẬN VĂN Họ tên sinh viên: Đào Minh Hiến Lớp: 19ACĐT Khóa: 19A Chuyên ngành: Cơ điện tử MSHV: CA190053 Hệ: Thạc sĩ Tên đề tài Tái tạo biểu diễn đối tượng 3D sử dụng mạng nơ-ron ứng dụng cho robot gắp vật Nội dung thuyết minh Chương Tổng quan thị giác máy tính xử lý ảnh sử dụng cơng nghệ học sâu Chương Phân đoạn vật thể cho robot gắp vật Chương Thiết kế hệ thống robot camera, tích hợp phần mềm Chương Đánh giá hiệu giải pháp Kết luận Hà Nội, ngày tháng năm 2021 Giáo viên hướng dẫn TS Hoàng Hồng Hải Tái tạo biểu diễn đối tượng 3D sử dụng Mạng nơ-ron ứng dụng cho robot gắp vật Lời cảm ơn Tác giả xin chân thành cảm ơn TS Hoàng Hồng Hải, người hướng dẫn giúp đỡ tận tình từ định hướng đề tài, tổ chức thực đến trình viết hồn chỉnh Luận văn Tác giả bày tỏ lịng biết ơn thầy, mơn Cơ điện tử - Viện Cơ khí trường Đại Học Bách Khoa Hà Nội Xin cảm ơn Ban lãnh đạo Viện đào tạo Sau đại học, Viện khí trường Đại Học Bách Khoa Hà Nội tạo điều kiện thuận lợi để tác giả hoàn thành Luận văn Tác giả chân thành cảm ơn TS Trương Công Tuấn – Bộ môn Cơ điện tử Trường Đại Học Bách Khoa Hà Nội hỗ trợ tác giả tham gia thực đề tài “ Nghiên cứu hệ thống đo biên dạng, chụp cắt lớp sử dụng điều biến pha khơng gian” để tích luỹ thêm kiến thức chuyên môn Cuối cùng, tác giả xin xin chân thành cảm ơn gia đình, bạn bè đồng nghiệp tạo điều kiện, quan tâm, giúp đỡ, động viên suốt trình học tập hoàn thành Luận văn Do lực thân cịn nhiều hạn chế nên Luận văn khơng thể tránh khỏi sai sót, tác giả mong đóng góp ý kiến thầy, cơ, nhà khoa học bạn đồng nghiệp Tác giả xin chân thành cảm ơn! Tác giả Đào Minh Hiến Tái tạo biểu diễn đối tượng 3D sử dụng Mạng nơ-ron ứng dụng cho robot gắp vật Tóm tắt nội dung luận văn Robot ngày sử dụng rộng rãi hệ thống dây chuyền sản xuất đại nhiều lĩnh vực ngành công nghiệp để thay người Robot đóng vai trị ngày quan trọng sống hàng ngày Việc nghiên cứu tái tạo biểu diễn đối tượng 3D sử dụng mạng nơ-ron ứng dụng cho Robot gắp vật việc cần thiết việc gắp vật khu vực mà người không trực tiếp làm Tính cấp thiết đề tài Trong nhiều lĩnh vực điều khiển , tự động hóa, công nghệ thông tin…, nhận dạng đối tượng vấn đề mấu chốt định thành công toán Một nhược điểm dùng mạng nơ-ron chưa có phương pháp luận chung thiết kế cấu trúc mạng cho toán nhận dạng điều khiển mà cần tới kiến thức chuyên gia Hiện nay, việc nghiên cứu thuật toán ứng dụng nơ-ron để tái tạo biểu diễn vật 3D ứng dụng cho robot cịn gặp nhiều khó khăn Ý nghĩa thực tiễn Các đối tượng đặt ngẫu nhiên bên thùng với hướng khác nhau: chồng chéo, che khuất, phản xạ, điều kiện ánh sáng , hệ thống tầm nhìn 3D cần phải xác để trích xuất điểm chọn xác Kẹp phải có hiệu việc xử lý phận điểm tiếp xúc khác Mục tiêu - Đề tài để chứng minh tất trình tái cấu trúc biểu diễn đối tượng 3D phụ thuộc hồn tồn vào mạng nơ-ron chuyển tiếp đa lớp Tái tạo biểu diễn đối tượng 3D sử dụng Mạng nơ-ron ứng dụng cho robot gắp vật - Mô khả ứng dụng việc kiểm tra sản phẩm ứng dụng robot gắp vật xác Nội dung nghiên cứu - Tìm hiểu, nghiên cứu tổng quan xử lý ảnh học sâu, khả khôi phục ảnh 3D đo lường nhận dạng ứng dụng công nghệ học sâu - Ứng dụng hệ thống phân loại sản phẩm sử dụng cánh tay robot - Xây dựng thuật toán điều khiển tối ưu phần mềm điều khiển tích hợp thiết bị dựa thuật toán xây dựng Tái tạo biểu diễn đối tượng 3D sử dụng Mạng nơ-ron ứng dụng cho robot gắp vật Mục Lục Danh sách hình Danh sách bảng Chương Tổng quan thị giác máy tính xử lý ảnh sử dụng cơng nghệ học sâu 1.1 Tổng quan thị giác máy tính 1.1.1 Định nghĩa thị giác máy tính 1.1.2 Các ứng dụng thị giác máy tính 10 1.2 Các toán xử lý ảnh 11 1.2.1 Phát đối tượng (Object Detection) 11 1.2.2 Bài toán định vị vật thể (Object Localization) 12 1.2.3 Phân lớp ảnh (Image Classification) 13 1.2.4 Phân đoạn ảnh ( Image Segmentation) 14 1.3 Cơ sở lý thuyết xử lý ảnh 15 1.4 Kết luận chương 19 Chương Phân đoạn vật thể cho Robot gắp vật 20 2.1 Sự phát triển thuật toán 20 2.1.1 Thuật toán dựa vào liệu 2D 20 2.1.2 Thuật toán dựa vào liệu 3D 22 2.2 Phân đoạn vùng biên cạnh vật thể 23 2.2.1 Thu thập liệu 23 2.2.2 Tái tạo đám mây điểm 3D (Generate 3D point cloud) 24 2.2.3 Phân đoạn (Segmentation) ghép nhóm (Clustering) 24 2.2.4 Xây dựng thuật toán 30 Tái tạo biểu diễn đối tượng 3D sử dụng Mạng nơ-ron ứng dụng cho robot gắp vật 2.3 Kết luận chương 37 Chương Thiết kế hệ thống robot camera, tích hợp phần mềm điều khiển 38 3.1 Bài toán 38 3.2 Chọn camera 38 3.3 Chọn robot phù hợp góc nhìn 40 3.4 Hệ thống điều khiển robot 46 3.5 Kết luận chương 53 Chương Kết thực nghiệm 54 4.1 Mơ hình thực nghiệm 54 4.2 Thuật toán 54 4.3 Thực nghiệm gắp vật đánh giá sai số robot 61 4.4 Kết luận chương 67 Kết Luận…… ……………………………………………………………………… 68 Tài liệu tham khảo 69 PHỤ LỤC 72 Tái tạo biểu diễn đối tượng 3D sử dụng Mạng nơ-ron ứng dụng cho robot gắp vật Danh sách hình Hình 1.1 Thị giác máy tính ứng dụng xu cơng nghệ Hình 1.2 Mối quan hệ thị giác máy với ngành liên quan 10 Hình 1.3 Một số ứng dụng công nghiệp thị giác máy 11 Hình 1.4 Đầu toán phát đối tượng .12 Hình 1.5 Đầu tốn định vị vật thể 12 Hình 1.6 Ví dụ tốn phân lớp ảnh 13 Hình 1.7 Đầu tốn Segmentation .14 Hình 1.8 Kết tốn Semantic Segmentation Instace Segmentation .15 Hình 1.9 Ma trận ảnh số 16 Hình 1.10 Không gian màu RGB 16 Hình 1.11 Độ phân giải ảnh 17 Hình 1.12 Độ sâu màu sắc .18 Hình 1.13 Ma trận biểu diễn ảnh xám 18 Hình 1.14 Ma trận biểu diễn ảnh nhị phân 19 Hình 1.15 Ma trận biểu diễn ảnh màu 19 Hình 2.1 Ứng Mask R-CNN để phân đoạn vật thể .21 Hình 2.2 Dữ liệu thu từ camera Kinect V1 24 Hình 2.3 Ví dụ phân đoạn đám mây điểm 26 Hình 2.4 Thuật tốn RANSAC ước lượng mơ hình đường thẳng 28 Hình 2.5 Sơ đồ thuật tốn 31 Tái tạo biểu diễn đối tượng 3D sử dụng Mạng nơ-ron ứng dụng cho robot gắp vật Hình 2.6 Minh hoạ ảnh hưởng bán kính hỗ trợ bề mặt ước tính bình thường đám mây điểm 32 Hình 2.7 So sánh kết Mask R-CNN (bản gốc) với GrabCut DoN 33 Hình 2.8 Minh hoạ phần biên vật thể 34 Hình 3.1 Kích thước khơng gian làm việc Camera 38 Hình 3.2 Cấu trúc Camera Kinect V1 39 Hình 3.3 Quy trình tính động học 40 Hình 3.4 Chiều dài xoắn khâu 41 Hình 3.5 Các thơng số khâu 41 Hình 3.6 Hệ toạ độ robot .42 Hình 3.7 Các khâu chuyển động robot 44 Hình 3.8 Mơ hình cánh tay robot SolidWorks .45 Hình 3.9 Khơng gian làm việc hướng khơng gian 45 Hình 3.10 Sơ đồ điều khiển vòng hở robot 46 Hình 3.11 Sơ đồ nối mạch điều khiển cánh tay robot 47 Hình 3.12 Cấu trúc MoveIt .50 Hình 3.13 Giao diện MoveIt 51 Hình 3.14 Mô robot Rviz 51 Hình 3.15 Giao diện phần mềm Arduino IDE .52 Hình 3.16 Giao tiếp phần mềm ROS Arduino 53 Hình 4.1 Mơ hình thực nghiệm .54 Hình 4.2 Quá trình huấn luyện với Resnet 101 Resnet 50 .56 Hình 4.3 Hình ảnh so sánh ảnh gốc – Mask R-CNN Kết 57 Tái tạo biểu diễn đối tượng 3D sử dụng Mạng nơ-ron ứng dụng cho robot gắp vật Hình 4.4 So sánh phương pháp Mask R-CNN phương pháp đề xuất qua bốn đối tượn 60 Hình 4.5 Sơ đồ thực nghiệm gắp vật .62 Hình 4.6 Ảnh gốc vật thể 3D để training phân đoạn (Segment) 62 Hình 4.7 Vật thể 3D sau phân đoạn (Segment) đưa tâm vị trí gắp 63 Hình 4.8 Nạp code Arduino 63 Hình 4.9 Khởi tạo môi trường ROS 64 Hình 4.10 Kết nối Arduino với hệ điều khiển ROS 64 Hình 4.11 Bắt đầu chọn gắp đặt vật thể 65 Hình 4.12 Quá trình gắp vật thực tế hệ điều hành ROS 65 Hình 4.13 Sai số vị trí theo phương X 66 Hình 4.14 Sai số vị trí theo phương Y 66 Hình 4.15 Sai số vị trí theo phương Z 67 Hình 4.16 Robot gắp vật đặt sang vị trí khác 67 Danh sách bảng Bảng 3.1 Thông số camera 39 Bảng 3.2 Bảng Denavit Hartenberg tham số động học robot 43 Bảng 4.1 Kết so sánh phương pháp 59 Tái tạo biểu diễn đối tượng 3D sử dụng Mạng nơ-ron ứng dụng cho robot gắp vật Hình 4.15 Sai số vị trí theo phương Z Hình 4.16 Robot gắp vật đặt sang vị trí khác 4.4 Kết luận chương Trong chương 4, tác giả tiến hành: - Phân tích đưa mơ hình thực nghiệm phù hợp với trang thiết bị, thực tế Điều giúp cho q trình thực nghiệm đạt ổn định - Kết thực nghiệm cho thấy ưu điểm phương pháp phân đoạn vật thể đưa so với phương pháp phân đoạn truyền thống - Đưa đánh giá sai số robot trình thực nghiệm 67 Tái tạo biểu diễn đối tượng 3D sử dụng Mạng nơ-ron ứng dụng cho robot gắp vật Kết Luận Với nội dung hoàn thiện luận văn giải vấn đề sau: - Đưa tổng quan thị giác máy tính - Xây dựng thuật toán phân đoạn vật thể cho robot gắp vật dựa phương pháp 2D phương pháp 3D - Thiết kế hệ thống robot camera, tích hợp phần mềm điều khiển - Đưa kết quả, đánh giá thuật tốn xây dựng mơ cho robot gắp vật thực tế Dù vậy, giới hạn mặt thời gian, số nhiệm vụ cách thực nghiệm thực tế chưa hoàn chỉnh, cần cải thiện : - Vật liệu cảnh tay robot in 3D, nên trình vận hành dễ xảy vấn đề liên quan đến độ cứng vững - Các khớp robot chưa kiểm soát vị trí thực tế robot Hướng phát triển đề tài: Trong thời gian tới tiếp tục hoàn thiện xây dựng hệ thống, nâng cao độ ổn định robot, độ xác, lắp thêm encoder cho khớp robot Sử dụng động servo thay động bước Mở rộng kết cấu nhằm nâng cao khả ứng dụng phương pháp cho robot gắp vật hệ thống khu công nghiệp 68 Tái tạo biểu diễn đối tượng 3D sử dụng Mạng nơ-ron ứng dụng cho robot gắp vật Tài liệu tham khảo [1] blog.robotiq.com/a-brief-history-of-robots-in-manufacturing [2] "Giáo trình robotic" - PGS.TS Phan Bùi Khôi [3] “Robot công nghiệp” – GS TSKH Nguyễn Thiện Phúc [4] https://robodk.com/doc/en/Robot-Drivers.html [5] "ROS Robotics By Example" - Carol Fairchild, Thomas L.Harman [6] "Mastering ROS for Robotics Program" - Lentin_Joseph [7] blog.robotiq.com/bid/63528/what-are-the-different-types-of-industrial-robots [8]tutroals.readthedocs.io/en/latest/py_tutorials/py_imgproc/py_houghcircles/py_ho ughcircles.html [9] M.A Fischler and R.C Bolles Random sample consensus: A paradigm for model fitting with applications to image analysis and automated cartography Communications of the ACM, 24(6):381–395, 1981 [10] R Girshick, J Donahue, T Darrell, and J Malik, “Region-based convolutional networks for accurate object detection,” TPAMI, 2015 [11] R Girshick, “Fast R-CNN,” in IEEE International Conference on Computer Vision (ICCV), 2015 [12] S Ren, K He, R Girshick, and J Sun Faster R-CNN: Towards real-time object detection with region proposal networks In NIPS, 2015 [13] K He, G Gkioxari, P Dollár, R Girshick, Mask rcnn, IEEE International Conference on Computer Vision, pages 2980–2988, 2017 [14] H Sarbolandi, D Lefloch, A Kolb, Kinect Range Sensing: Structured-Light versus Time-of-Flight Kinect, Computer Vision and Image Understanding, October 2015, Vol 139, Pages 1-20 [15] Olaf Ronneberger, Philipp Fisher, and Thomas Brox, “U-Net: Convolutional Networks for Biomedical Image Segmentation”, Computer Vision and Pattern Recognition, May 2015 [16] Charles R Qi, Hao Su, Kaichun Mo, and Leonidas J Guibas, “PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation”, Computer Vision and Pattern Recognition, April 2017 69 Tái tạo biểu diễn đối tượng 3D sử dụng Mạng nơ-ron ứng dụng cho robot gắp vật [17] X Wu, S Wen, Y Xie, Improvement of Mask-RCNN Object Segmentation Algorithm, ICRIA 2019: Intelligent Robotics and Applications [18] C Xu, G Wang, S Yan, J Yu, B Zhang, S Dai, Y Li, L Xu, Fast Vehicle and Pedestrian Detection Using Improved Mask R-CNN, Mathematical Problems in Engineering, Vol 2020 [19] T Y Lin, P Dollár, R Girshick, K He, S Belongie, Feature pyramid networks for object detection, in Proceedings of the CVPR, IEEE, Honolulu, HI, USA, July 2017 [20] S Xi, R Girshick, P Dollar, Z Tu, K He, Aggregated residual transformations for deep neural networks, in Proceedings of the CVPR, IEEE, Honolulu, HI, USA, July 2017 [21] A K Fattal, M Karg, C Scharfenberger, J Adamy, Saliency-guided region proposal network for cnn based object detection, in Proceedings of the IEEE International Conference on Intelligent Transportation Systems, IEEE, Yokohama, Japan, October 2017 [22] T.-Y Lin, M Maire, S Belongie, J Hays, P Perona, D Ramanan,P Dollár, C L Zitnick, Microsoft COCO: Common objects, in context InECCV 2014 [23] K He, X Zhang, S Ren, J Sun, Deep residual learning for image recognition, in Proceedings of the IEEE Conference on Computer Vision & Pattern Recognition, IEEE, Las Vegas, NV, USA, June 2016 [24] J Shi, Y Zhou, W X Q Zhang, Target Detection Based on Improved Mask Rcnn in Service Robot, in IEEE, Chinese Control Conference, 2019 [25] Z Huang, L Huang, Y, Gong, C Huang, Mask Scoring R-CNN, in Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR), 2019 [26] Y Zhang, J Chu, L Leng, J, Miao, Mask-Refined R-CNN: A Network for Refining Object Details in Instance Segmentation, in Sensors 2020 [27] S Liu, L Qi, H Qin, J Shi J Jia, Path Aggregation Network for Instance Segmentation, in Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition (CVPR), Salt Lake City, SU, USA, 18–22 June 2018 70 Tái tạo biểu diễn đối tượng 3D sử dụng Mạng nơ-ron ứng dụng cho robot gắp vật [28] Z Yang, R Dong, H Xu, J Gu, Instance Segmentation Method Based on Improved Mask R-CNN for the Stacked Electronic Components, Electronics 9, May 2020 [29] J R R Uijlings, K E A van de Sande, T Gevers, and A W M Smeulders, “Selective Search for Object Recognition”, International Journal of Computer Vision, Volume 104, pp 154-171 [30] Saad Albawi, Tareq Abed Mohammed, and Saad AI-Zawi, “Understanding of a convolutional neural network”, International Conference on Engineering and Technology (ICET), August 2017 [31] J Redmon, A Angelova, Real-time grasp detection using convolutional neural networks, in IEEE International Conference on Robotics and Automation (ICRA), May 2015 [32] Y Ioannou, B Taati, R Harrap, M Greenspan, Difference of Normals as a Multiscale Operator in Unorganized Point Clouds, in 2012 Second International Conference on 3D Imaging, Modeling, Processing, Visualization and Transmission [33] R Kurban, F Skuka, H Bozpolat, Plane Segmentation of Kinect Point Clouds using RANSAC, in ICIT 2015 The 7th International Conference on information Technology [34] pcl.readthedocs.io/projects/tutorials/en/latest/don_segmentation.html (Accessed on 1st March 2021) [35] pcl.readthedocs.io/en/latest/cluster_extraction.html (Accessed on 1st March 2021) 71 Tái tạo biểu diễn đối tượng 3D sử dụng Mạng nơ-ron ứng dụng cho robot gắp vật PHỤ LỤC Video mơ q trình gắp vật https://drive.google.com/file/d/1KcB21ksqYgjDx2vpnNfz7w5FPt7o8HtA/view?usp=s haring Code phân đoạn vật thể import import import import import import import import import os sys random math numpy as np skimage.io matplotlib matplotlib.pyplot as plt cv2 # Root directory of the project ROOT_DIR = os.path.abspath(" /") # Import Mask RCNN sys.path.append(ROOT_DIR) # To find local version of the library from mrcnn import utils import mrcnn.model as modellib from mrcnn import visualize # Import COCO config sys.path.append(os.path.join(ROOT_DIR, "samples/coco/")) # To find local version import coco # %matplotlib inline # Directory to save logs and trained model MODEL_DIR = os.path.join(ROOT_DIR, "logs") # Local path to trained weights file COCO_MODEL_PATH = os.path.join(ROOT_DIR, "mask_rcnn_coco.h5") # Download COCO trained weights from Releases if needed if not os.path.exists(COCO_MODEL_PATH): utils.download_trained_weights(COCO_MODEL_PATH) # Directory of images to run detection on IMAGE_DIR = os.path.join(ROOT_DIR, "images") class InferenceConfig(coco.CocoConfig): # Set batch size to since we'll be running inference on # one image at a time Batch size = GPU_COUNT * IMAGES_PER_GPU GPU_COUNT = IMAGES_PER_GPU = config = InferenceConfig() config.display() # Create model object in inference mode model = modellib.MaskRCNN(mode="inference", model_dir=MODEL_DIR, config=config) # Load weights trained on MS-COCO model.load_weights(COCO_MODEL_PATH, by_name=True) 72 Tái tạo biểu diễn đối tượng 3D sử dụng Mạng nơ-ron ứng dụng cho robot gắp vật # COCO Class names # Index of the class in the list is its ID For example, to get ID of # the teddy bear class, use: class_names.index('teddy bear') class_names = ['BG', 'person', 'bicycle', 'car', 'motorcycle', 'airplane', 'bus', 'train', 'truck', 'boat', 'traffic light', 'fire hydrant', 'stop sign', 'parking meter', 'bench', 'bird', 'cat', 'dog', 'horse', 'sheep', 'cow', 'elephant', 'bear', 'zebra', 'giraffe', 'backpack', 'umbrella', 'handbag', 'tie', 'suitcase', 'frisbee', 'skis', 'snowboard', 'sports ball', 'kite', 'baseball bat', 'baseball glove', 'skateboard', 'surfboard', 'tennis racket', 'bottle', 'wine glass', 'cup', 'fork', 'knife', 'spoon', 'bowl', 'banana', 'apple', 'sandwich', 'orange', 'broccoli', 'carrot', 'hot dog', 'pizza', 'donut', 'cake', 'chair', 'couch', 'potted plant', 'bed', 'dining table', 'toilet', 'tv', 'laptop', 'mouse', 'remote', 'keyboard', 'cell phone', 'microwave', 'oven', 'toaster', 'sink', 'refrigerator', 'book', 'clock', 'vase', 'scissors', 'teddy bear', 'hair drier', 'toothbrush'] # Load a random image from the images folder file_names = next(os.walk(IMAGE_DIR))[2] image = skimage.io.imread(os.path.join(IMAGE_DIR, random.choice(file_names))) # Run detection results = model.detect([image], verbose=1) # Visualize results r = results[0] def make_segmentation_mask(image, mask): img = image.copy() img[:,:,0] *= mask img[:,:,1] *= mask img[:,:,2] *= mask cv2.imshow("img",img) cv2.waitKey() plt.axis('off') fig = plt.imshow(mask,cmap='gray',interpolation='nearest') fig.axes.get_xaxis().set_visible(False) fig.axes.get_yaxis().set_visible(False) #extent = ax.get_window_extent().transformed(plt.gcf().dpi_scale_trans.inverted()) #plt.savefig('kmask.jpg',bbox_inches='tight',pad_inches = 0,dpi=1500) # plt.savefig('myfig.jpg',bbox_inches='tight',pad_inches = 0, dpi=96) for n in range(len(r['class_ids'])): mask = r['masks'][:,:,n] # print(len(r['masks'])) # print("mask = ",mask) make_segmentation_mask(image, mask) visualize.display_instances(image, r['rois'], r['masks'], r['class_ids'], class_names, r['scores']) 73 Tái tạo biểu diễn đối tượng 3D sử dụng Mạng nơ-ron ứng dụng cho robot gắp vật Phần code Arduino #if (ARDUINO >= 100) #include #else #include #endif #include #include #include #include #include #include #include #include #include #include // Joint #define E1_STEP_PIN 36 #define E1_DIR_PIN 34 #define E1_ENABLE_PIN 30 // Joint #define Z_STEP_PIN 46 #define Z_DIR_PIN 48 #define Z_ENABLE_PIN 62 #define Z_MIN_PIN 18 #define Z_MAX_PIN 19 // Joint #define Y_STEP_PIN 60 #define Y_DIR_PIN 61 #define Y_ENABLE_PIN 56 #define Y_MIN_PIN 14 74 Tái tạo biểu diễn đối tượng 3D sử dụng Mạng nơ-ron ứng dụng cho robot gắp vật #define Y_MAX_PIN // Joint #define X_STEP_PIN 54 #define X_DIR_PIN 55 #define X_ENABLE_PIN 38 // Joint #define E0_STEP_PIN 26 #define E0_DIR_PIN 28 #define E0_ENABLE_PIN 24 AccelStepper joint1(1,E1_STEP_PIN, E1_DIR_PIN); AccelStepper joint2(1,Z_STEP_PIN, Z_DIR_PIN); AccelStepper joint3(1,Y_STEP_PIN, Y_DIR_PIN); AccelStepper joint4(1,X_STEP_PIN, X_DIR_PIN); AccelStepper joint5(1, E0_STEP_PIN, E0_DIR_PIN); Servo gripper; MultiStepper steppers; int joint_step[6]; int joint_status = 0; ros::NodeHandle nh; std_msgs::Int16 msg; //instantiate publisher (for debugging purposes) //ros::Publisher steps("joint_steps_feedback",&msg); void arm_cb(const moveo_moveit::ArmJointState& arm_steps){ joint_status = 1; joint_step[0] = arm_steps.position1; joint_step[1] = arm_steps.position2; joint_step[2] = arm_steps.position3; joint_step[3] = arm_steps.position4; joint_step[4] = arm_steps.position5; joint_step[5] = arm_steps.position6; //gripper position } void gripper_cb( const std_msgs::UInt16& cmd_msg){ 75 Tái tạo biểu diễn đối tượng 3D sử dụng Mạng nơ-ron ứng dụng cho robot gắp vật gripper.write(cmd_msg.data); // Set servo angle, should be from 0-180 digitalWrite(13, HIGH-digitalRead(13)); // Toggle led } //instantiate subscribers ros::Subscriber arm_sub("joint_steps",arm_cb); //subscribes to joint_steps on arm ros::Subscriber gripper_sub("gripper_angle", gripper_cb); //subscribes to gripper position //to publish from terminal: rostopic pub gripper_angle std_msgs/UInt16 void setup() { //put your setup code here, to run once: //Serial.begin(57600); pinMode(13,OUTPUT); joint_status = 1; nh.initNode(); nh.subscribe(arm_sub); nh.subscribe(gripper_sub); //nh.advertise(steps); // Configure each stepper joint1.setMaxSpeed(1000); joint2.setMaxSpeed(750); joint3.setMaxSpeed(2000); joint4.setMaxSpeed(500); joint5.setMaxSpeed(1000); // Then give them to MultiStepper to manage steppers.addStepper(joint1); steppers.addStepper(joint2); steppers.addStepper(joint3); steppers.addStepper(joint4); steppers.addStepper(joint5); // Configure gripper servo gripper.attach(11) 76 Tái tạo biểu diễn đối tượng 3D sử dụng Mạng nơ-ron ứng dụng cho robot gắp vật digitalWrite(13, 1); //toggle led } void loop() { if (joint_status == 1) // If command callback (arm_cb) is being called, execute stepper command { long positions[5]; // Array of desired stepper positions must be long positions[0] = joint_step[0]; // negated since the real robot rotates in the opposite direction as ROS positions[1] = -joint_step[1]; positions[2] = joint_step[2]; positions[3] = joint_step[3]; positions[4] = -joint_step[4]; // Publish back to ros to check if everything's correct //msg.data=positions[4]; //steps.publish(&msg); steppers.moveTo(positions); nh.spinOnce(); steppers.runSpeedToPosition(); // Blocks until all are in position gripper.write(joint_step[5]); reaches goal // move gripper after manipulator } digitalWrite(13, HIGH-digitalRead(13)); //toggle led joint_status = 0; nh.spinOnce(); delay(1); Code chuyển đổi từ vị trí robot sang số bước động cơ: #include "ros/ros.h" #include "sensor_msgs/JointState.h" #include "moveo_moveit/ArmJointState.h" #include "math.h" moveo_moveit::ArmJointState arm_steps; moveo_moveit::ArmJointState total; 77 Tái tạo biểu diễn đối tượng 3D sử dụng Mạng nơ-ron ứng dụng cho robot gắp vật int stepsPerRevolution[6] = {25600,16000,24000,3200,14080,0};//880 // microsteps/revolution (using 16ths) from observation, for each motor 32800,18000,72000,3280,14400,0 int joint_status = 0; double cur_angle[6]; int joint_step[6]; double prev_angle[6] = {0,0,0,0,0,0}; double init_angle[6] = {0,0,0,0,0,0}; double total_steps[6] = {0,0,0,0,0,0}; int count = 0; //keep a running sum of all the step counts and use that as the final step to send to arduino accelstepper // int angle_to_steps(double x) // { // float steps; // steps=((x / M_PI)*stepsPerRevolution)+0.5; // (radians)*(1 revolution/PI radians)*(200 steps/revolution) // return steps; // } //command callback (for position) function void cmd_cb(const sensor_msgs::JointState& cmd_arm) { if (count==0){ prev_angle[0] = cmd_arm.position[0]; prev_angle[1] = cmd_arm.position[1]; prev_angle[2] = cmd_arm.position[2]; prev_angle[3] = cmd_arm.position[3]; prev_angle[4] = cmd_arm.position[4]; prev_angle[5] = cmd_arm.position[5]; // init_angle[0] = cmd_arm.position[0]; // init_angle[1] = cmd_arm.position[1]; // init_angle[2] = cmd_arm.position[2]; // init_angle[3] = cmd_arm.position[3]; // init_angle[4] = cmd_arm.position[4]; // init_angle[5] = cmd_arm.position[5]; } // ros::NodeHandle nh; // ros::Subscriber sub = nh.subscribe("/move_group/fake_controller_joint_states",1000,cmd_cb); 78 Tái tạo biểu diễn đối tượng 3D sử dụng Mạng nơ-ron ứng dụng cho robot gắp vật // ros::Publisher pub = nh.advertise("joint_steps",50); ROS_INFO_STREAM("Received /move_group/fake_controller_joint_states "); // arm_steps.position1 = (cmd_arm.position[0]*stepsPerRevolution[0]/M_PI+0.5)-prev_angle[0]; // arm_steps.position2 = (cmd_arm.position[1]*stepsPerRevolution[1]/M_PI+0.5)-prev_angle[1]; // arm_steps.position3 = (cmd_arm.position[2]*stepsPerRevolution[2]/M_PI+0.5)-prev_angle[2]; // arm_steps.position4 = (cmd_arm.position[3]*stepsPerRevolution[3]/M_PI+0.5)-prev_angle[3]; // arm_steps.position5 = (cmd_arm.position[4]*stepsPerRevolution[4]/M_PI+0.5)-prev_angle[4]; // arm_steps.position6 = (cmd_arm.position[5]*stepsPerRevolution[5]/M_PI+0.5)-prev_angle[5]; //compute relative step count to move each joint only works if all joint_angles start at //otherwise, we need to set the current command to the initial joint_angles //ROS_INFO_NAMED("test", "cmd_arm.position[4]: %f, prev_angle[4]: %f, init_angle[4]: %f", cmd_arm.position[4], prev_angle[4], init_angle[4]); //ROS_INFO_NAMED("test", "arm_steps.position5 #1: %f", (cmd_arm.position[4]-prev_angle[4])*stepsPerRevolution[4]/M_PI); arm_steps.position1 = (int)((cmd_arm.position[0]prev_angle[0])*stepsPerRevolution[0]/(2*M_PI)); arm_steps.position2 = (int)((cmd_arm.position[1]prev_angle[1])*stepsPerRevolution[1]/(2*M_PI)); arm_steps.position3 = (int)((cmd_arm.position[2]prev_angle[2])*stepsPerRevolution[2]/(2*M_PI)); arm_steps.position4 = (int)((cmd_arm.position[3]prev_angle[3])*stepsPerRevolution[3]/(2*M_PI)); arm_steps.position5 = (int)((cmd_arm.position[4]prev_angle[4])*stepsPerRevolution[4]/(2*M_PI)); arm_steps.position6 = (int)((cmd_arm.position[5]prev_angle[5])*stepsPerRevolution[5]/(2*M_PI)); ROS_INFO_NAMED("test", "arm_steps.position5 #2: %d", arm_steps.position5); //????????????? if (count!=0){ 79 Tái tạo biểu diễn đối tượng 3D sử dụng Mạng nơ-ron ứng dụng cho robot gắp vật prev_angle[0] = cmd_arm.position[0]; prev_angle[1] = cmd_arm.position[1]; prev_angle[2] = cmd_arm.position[2]; prev_angle[3] = cmd_arm.position[3]; prev_angle[4] = cmd_arm.position[4]; prev_angle[5] = cmd_arm.position[5]; } //total steps taken to get to goal // total_steps[0]+=arm_steps.position1; // total_steps[1]+=arm_steps.position2; // total_steps[2]+=arm_steps.position3; // total_steps[3]+=arm_steps.position4; // total_steps[4]+=arm_steps.position5; total.position1 += arm_steps.position1; total.position2 += arm_steps.position2; total.position3 += arm_steps.position3; total.position4 += arm_steps.position4; total.position5 += arm_steps.position5; ROS_INFO_NAMED("test", "total_steps[4]: %f, total: %d", total_steps[4], total.position5); ROS_INFO_NAMED("test", "arm_steps.position5 #3: %d", arm_steps.position5); ROS_INFO_STREAM("Done conversion to /joint_steps"); joint_status = 1; count=1; } int main(int argc, char **argv) { ros::init(argc, argv, "moveo_moveit"); ros::NodeHandle nh; ROS_INFO_STREAM("In main function"); ros::Subscriber sub = nh.subscribe("/move_group/fake_controller_joint_states",1000,cmd_cb); ros::Publisher pub = nh.advertise("joint_steps",50); ros::Rate loop_rate(20); while (ros::ok()) { if(joint_status==1) 80 Tái tạo biểu diễn đối tượng 3D sử dụng Mạng nơ-ron ứng dụng cho robot gắp vật { joint_status = 0; //pub.publish(arm_steps); pub.publish(total); ROS_INFO_STREAM("Published to /joint_steps"); } ros::spinOnce(); loop_rate.sleep(); } //ros::spin(); return 0; } 81 ... để chứng minh tất trình tái cấu trúc biểu diễn đối tượng 3D phụ thuộc hồn tồn vào mạng nơ- ron chuyển tiếp đa lớp Tái tạo biểu diễn đối tượng 3D sử dụng Mạng nơ- ron ứng dụng cho robot gắp vật -... dung: Tái tạo biểu diễn đối tượng 3D sử dụng Mạng nơ- ron ứng dụng cho robot gắp vật + Đầu vào: Các đối tượng 3D đặt ngẫu nhiên + Đầu ra: Tách vật tạo 3D đống vật 2.2.1 Thu thập liệu Sử dụng Camera... nơi mà có nhiều che khuất vật với nhau, mặt nạ đối tượng tạo 21 Tái tạo biểu diễn đối tượng 3D sử dụng Mạng nơ- ron ứng dụng cho robot gắp vật thường không bao phủ hoàn toàn đối tượng Mặt nạ sử

Ngày đăng: 10/12/2021, 19:32

Mục lục

    Tóm tắt nội dung luận văn

    Tài liệu tham khảo

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan