1. Trang chủ
  2. » Luận Văn - Báo Cáo

Hiện thực robot di động trên nền tảng ros2

71 0 0

Đ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

Thông tin cơ bản

Định dạng
Số trang 71
Dung lượng 2,98 MB

Nội dung

ĐẠI HỌC QUỐC GIA TP.HCM TRƯỜNG ĐẠI HỌC BÁCH KHOA KHOA KHOA HỌC VÀ KỸ THUẬT MÁY TÍNH LUẬN VĂN TỐT NGHIỆP ĐẠI HỌC HIỆN THỰC ROBOT DI ĐỘNG TRÊN NỀN TẢNG ROS2 Ngành : KỸ THUẬT MÁY TÍNH HỘI ĐỒNG: KỸ THUẬT MÁY TÍNH GVHD: TS Phạm Hồng Anh GVPB: TS Lê Trọng Nhân -o0o SVTH: Nguyễn Thành Vinh - 1713981 TP HỒ CHÍ MINH, 12/2022 TRƯỜNG ĐẠI HỌC BÁCH KHOA KHOA KH & KT MÁY TÍNH CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập - Tự - Hạnh phúc -Ngày 09 tháng 01 năm 2023 PHIẾU CHẤM BẢO VỆ LVTN (Dành cho người phản biện) Họ tên SV: Nguyễn Thành Vinh MSSV: 1713981 Ngành (chuyên ngành): Kỹ Thuật Máy tính Đề tài: Hiện thực Robot di động tảng ROS2 Họ tên người phản biện: Lê Trọng Nhân Tổng quát thuyết minh: Số trang: 56 Số chương: Số bảng số liệu: Số hình vẽ: 30 Số tài liệu tham khảo: Phần mềm tính tốn: Hiện vật (sản phẩm) Tổng quát vẽ: - Số vẽ: Bản A1: Bản A2: Khổ khác: - Số vẽ vẽ tay Số vẽ máy tính: Những ưu điểm LVTN: • Sinh viên thực ứng dụng xử lý đa luồng tảng ROS2 • Sinh viên thực ứng dụng di chuyển Robot để tối đa không gian bao phủ Những thiếu sót LVTN: • Chiến thuật di chuyển Robot chưa định nghĩa rõ ràng • Thiết kế máy trạng thái chưa hợp lý Đề nghị: Được bảo vệ  Bổ sung thêm để bảo vệ  Không bảo vệ  câu hỏi SV phải trả lời trước Hội đồng: a Sinh viên trình bày chiến thuật di chuyển Robot để tối đa không gian bao phủ cho trường hợp khơng có vật cản khơng gian di chuyển (có thể trình bày dựa máy trạng thái thiết kế) b Sinh viên trình bày vai trị Topic ứng dụng di chuyển Robot 10 Đánh giá chung (bằng chữ: giỏi, khá, TB): Khá Điểm : 7/10 Ký tên (ghi rõ họ tên) TS Lê Trọng Nhân Lời cam đoan Em cam đoan ngoại trừ kết tham khảo từ công trình khác ghi rõ phần Tài liệu tham khảo luận văn, số liệu kết trình bày luận văn em thực chưa có phần nội dung luận văn nộp để lấy cấp trường đại học khác Lời cảm ơn / Lời ngỏ Trước hết, em muốn gửi lời cảm ơn chân thành đến giáo viên hướng dẫn trực tiếp em, thầy Phạm Hoàng Anh Thầy đưa lời khuyên hữu ích, cung cấp tài liệu theo dõi suốt trình thực đề tài Sự nhiệt huyết tận tâm thầy giúp đỡ to lớn giúp em hồn thành đề tài tốt Em muốn bày tỏ lời cảm ơn đến cô Thu Trang Như Vi Cảm ơn hai dành thời gian quý báu để phản hồi thông tin giúp em giải vấn đề liên quan đến đăng ký môn học bảo lưu đề tài Cuối cùng, em xin gửi lời cảm ơn chân thành đến thầy cô công tác Khoa Khoa học Kỹ thuật Máy tính nói riêng trường Đại học Bách Khoa TP Hồ Chí Minh nói chung Những người ln nhiệt tình tận tâm cơng tác giảng dạy để em có đủ kiến thức tảng cần thiết thực đề tài Tóm tắt nội dung Luận văn tiến hành nghiên cứu thành phần cần thiết chương trình ROS2 Từ xây dựng ứng dụng tìm đường bao phủ đơn giản ROS2 Turtlebot3 Trong ứng dụng này, robot tự động di chuyển zigzag để bao phủ không gian số điều kiện định Ứng dụng trình bày luận văn cịn đơn giản Tuy nhiên, tham khảo từ luận văn để phát triển ứng dụng phức tạp tảng ROS2 Turtlebot3 Mục lục Giới thiệu đề tài 1.1 Lý thực đề tài 1.2 Mục tiêu đề tài 1.3 Nội dung thực đề tài Tổng quan ROS2 Turtlebot3 2.1 Giới thiệu TurtleBot3 Burger 2.2 Giới thiệu ROS2 2.2.1 ROS2 gì? 2.2.2 Tại chọn ROS2? 2.2.3 Các thuật ngữ ROS2 2.2.4 ROS2 version: Foxy Fitzroy 2.2.5 SLAM Navigation 2.3 Các phần cần thiết thực ứng dụng robot di động ROS2 2.3.1 Topic 2.3.2 Đa luồng ROS2 2.3.3 Launch file ROS2 2.4 So sánh ROS1 ROS2 2.4.1 ROS1 vs ROS2: Viết node 2.4.2 ROS1 vs ROS2: Giao tiếp node 2.4.3 ROS1 vs ROS2: Packages môi trường làm việc 2.4.4 Các phiên ROS1 ROS2 2.4.5 Kết luận Hiện thực ứng dụng tìm đường bao phủ đơn giản ROS2 3.1 Tìm đường bao phủ gì? 3.2 Một số phương pháp giải toán bao phủ 3.2.1 Phương pháp phân chia vùng làm việc cổ điển 3.2.2 Phương pháp dựa lưới ô vuông 3.3 Hiện thực đường bao phủ đơn giản 3.3.1 Các công cụ sử dụng: 3.3.2 Ý tưởng thực đường bao phủ 3.4 Máy trạng thái ứng dụng đường bao phủ 3.4.1 Giải thích trạng thái máy trạng thái 3.4.2 Các điều kiện chuyển trạng thái 3.4.3 Giải thích điều kiện 3.5 Các thành phần ứng dụng đường bao phủ 3.5.1 Subscriber Node i 1 3 7 9 11 11 18 26 28 28 30 31 31 31 32 32 33 33 34 35 35 36 37 38 39 39 40 40 3.5.2 3.5.3 3.5.4 Publisher Node Chương trình quay robot Các launch file 42 43 47 Kết thực nghiệm 4.1 Các kịch thực nghiệm kết 4.1.1 Thử nghiệm không gian trống 4.1.2 Thử nghiệm robot không gian có vật cản 49 49 49 51 Tổng kết 5.1 Những kết đạt hạn chế 5.2 Hướng phát triển tương lai 54 54 54 Tài liệu tham khảo 55 Phụ lục 57 Danh sách bảng 2.1 2.2 2.3 2.4 Các phận Turtlebot3[3] 360 Laser Distance Sensor LDS-01[4] OpenCR1.0 Hardware[5] Servo motor Robotics XL430-W250-T Hardware Specification[6] 4.1 4.2 Bảng thống kê kết chạy robot không gian trống Bảng thống kê kết chạy robot khơng gian có vật cản 50 52 iii while : error_angle = pi - yaw r ot a t io n al _ ve l o ci t y = abs ( alpha * error_angle ) - Giai đoạn 2: Robot quay đến target_angle2: target_angle2 = pi - ( desired_angle - target_angle1 ) while : error_angle = target_angle2 + yaw r ot a t io n al _ ve l o ci t y = abs ( alpha * error_angle ) • Trường hợp 3: initial_yaw < target_angle = yaw + desired_angle 0: Trong trường hợp này, trình quay chia thành giai đoạn, target_angle chia thành target_angle1 target_angle2 45 Hình 3.21: Trường hợp - Giai đoạn 1: Robot quay đến target_angle1: target_angle1 = yaw while : error_angle = abs ( yaw ) r ot a t io n al _ ve l o ci t y = abs ( alpha * error_angle ) - Giai đoạn 2: Robot quay đến target_angle2: target_angle2 = desired_angle + target_angle1 while : error_angle = target_angle2 - yaw r ot a t io n al _ ve l o ci t y = abs ( alpha * error_angle ) • Trong trường hợp trường hợp 4, error_angle < 0.005 lần có nghĩa robot hồn thành giai đoạn q trình quay, robot tạm thời dừng lại, thông báo "ROTATE PARTIALLY COMPLETED" in hình Sau đó, error_angle đặt lại robot bắt đầu giai đoạn trình quay Nếu error_angle < 0.005 lần thứ nghĩa robot hồn thành q trình quay, robot dừng lại thông báo "ROTATE COMPLETED" in hình • Trong trường hợp trường hợp 3, q trình quay có giai đoạn, Nếu error angle < 0.005 robot hồn thành q trình quay, robot dừng lại thơng báo "ROTATE COMPLETED" in hình • Trong trường hợp, alpha hệ số giúp robot quay tốc độ ổn định Ban đầu, giá trị error_angle lớn hệ số alpha nhỏ, giá trị error_angle giảm dần, hệ số alpha tăng dần Khi error_angle nhỏ, tốc độ quay robot (rotational_velocity) gán 0.01 khác với mơ phỏng, robot thực tế có trọng lượng, tốc độ quay nhỏ không đủ để di chuyển robot if abs ( error_angle ) > 03 : if abs ( error_angle ) < np pi : if abs ( error_angle ) > : r ot a t io n al _ ve l o ci t y = * abs ( error_angle ) elif abs ( error_angle ) > and abs ( error_angle ) < = : 46 r ot a t io n al _ ve l o ci t y = * abs ( error_angle ) else : r ot a t io n al _ ve l o ci t y = * abs ( error_angle ) else : r ot a t io n al _ ve l o ci t y = 01 10 11 3.5.4 Các launch file ứng dụng gồm launch file: • move_robot.launch.py: chịu trách nhiệm khởi chạy robot from launch import Launc hDescrip tion from launch_ros actions import Node def g e n e r a t e _ l a u n c h _ d e s c r i p t i o n () : return LaunchD escripti on ( [ Node ( package = ’ move_ robot_zi gzag ’ , executable = ’ move_zigzag_exe ’ , output = ’ screen ’ , emulate_tty = True ) , ]) 10 11 • main.launch.py: khỏi chạy launch file khác: move_robot.launch navigation2.launch.py nằm turtlebot3_navigation2 package để hiển thị robot lên rviz2 import os from from from from a men t_ in dex _p yt hon packages import g e t _ p a c k a g e _ s h a r e _ d i r e c t o r y launch import Launc hDescrip tion launch actions import I n c l u d e L a u n c h D e s c r i p t i o n launch l a u n c h _ d e s c r i p t i o n _ s o u r c e s import PythonLaunchDescriptionSource from launch substitutions import L au n ch C o nf i gu r a ti o n from launch actions import D e c l a r e L a u n c h A r g u m e n t 10 def g e n e r a t e _ l a u n c h _ d e s c r i p t i o n () : 11 12 turtlebot3_launch_dir = os path join ( g e t _ p a c k a g e _ s h a r e _ d i r e c t o r y ( ’ t u r t l e b o t _ n a v i g a t i o n ’) , ’ launch ’) 13 14 use_sim_time = L au n ch C o nf i gu r a ti o n ( ’ use_sim_time ’ , default = ’ false ’) 15 16 17 18 map_dir = L a un c h Co n fi g ur a t io n ( ’ map ’ , default = os path join ( os path expanduser ( ’~ ’) , ’ t u r t l e b o t _ wo r l d _ m a p yaml ’) ) 19 20 21 22 23 24 25 move_robot = I n c l u d e L a u n c h D e s c r i p t i o n ( PythonLaunchDescriptionSource ( os path join ( g e t _ p a c k a g e _ s h a r e _ d i r e c t o r y ( ’ mov e_robot_ zigzag ’ ) , ’ launch ’ , ’ move_robot launch py ’) , ) ) 47 26 27 28 29 30 31 32 start_rviz = I n c l u d e L a u n c h D e s c r i p t i o n ( P y t h o n L a u n c h D e s c r i p t i o n S o u r c e ( [ turtlebot3_launch_dir , ’/ navigation2 launch py ’] ) , launch_arguments = { ’ map ’: map_dir , ’ use_sim_time ’: use_sim_time , } items () , ) 33 34 35 36 37 38 return LaunchD escripti on ( [ DeclareLaunchArgument ( ’ map ’ , default_value = map_dir , description = ’ Full path to map file to load ’) , 39 DeclareLaunchArgument ( ’ use_sim_time ’ , default_value = ’ false ’ , description = ’ Use simulation ( Gazebo ) clock if true ) ’ , 40 41 42 43 44 move_robot , start_rviz , 45 46 47 48 ]) • Ngồi nội dung trình bày phần trước, file main.launch.py định nghĩa thêm đối số: map use_sim_time cho phép đối số truyền thơng qua command line chương trình chạy Nếu khơng có đối số truyền vào giá trị mặc định sử dụng 48 Chương Kết thực nghiệm 4.1 Các kịch thực nghiệm kết Thử nghiệm chuyển động tìm đường bao phủ robot kịch bản: khoảng không gian trống, vật cản khoảng khơng gian có vật cản Điều kiện chung kịch th nghim: ã Khụng gian cú din tớch 1.67 ì 1.55 m, khơng gian có hình chữ nhật • Mặt đất gạch, khơng có độ dốc, khơng gồ ghề • Mơi trường tối ưu (khơng có gió, mưa, đủ ánh sáng để cảm biến nhận diện) • Ban đầu, robot đặt vng góc với góc tường bên phải (bên phải đằng sau robot tường, bên trái phía trước mặt khơng có vật cản) Robot cách tường phía sau 0.15m tường phía bên trái 0.15m Về số liệu bảng kết trường hợp: • tỉ lệ bao phủ = dien tich da bao phu duoc dien tich can bao phu ì 100% ã Quá trình di chuyển robot quay lại, dựa vào trình di chuyển với số tính tốn đo đạc để thu số liệu khác như: chiều dài đường đi, diện tích bao phủ 4.1.1 Thử nghiệm không gian trống • Chuyển động robot khơng gian khơng có vật cản thể hình bên 49 Hình 4.1: chuyển động robot khơng gian khơng có vật cản • Chuyển động robot quan sát rviz2 • Bảng kết Tổng chiều dài đường Tổng diện tích cần phải bao phủ Tổng diện tích bao phủ Tỷ lệ bao phủ 18.46 m 2.5885 m2 1.8 m2 69.5% Bảng 4.1: Bảng thống kê kết chạy robot không gian trống 50 Hình 4.2: robot rviz2 khơng gian trống 4.1.2 Thử nghiệm robot khơng gian có vật cản • vật cản có dạng hình hộp chữ nhật, có kích thước 0.35 × 0.125 × 0.24 m • Chuyển động robot khơng gian có vật cản thể hình bên 51 Hình 4.3: chuyển động robot khơng gian có vật cản • Chuyển động robot quan sát rviz2 • Bảng kết Tổng chiều dài đường Tổng diện tích cần phải bao phủ Tổng diện tích bao phủ Tỷ lệ bao phủ 15,15 m 2.54 m2 1.597 m2 63% Bảng 4.2: Bảng thống kê kết chạy robot không gian có vật cản 52 Hình 4.4: robot rviz2 khơng gian có vật cản 53 Chương Tổng kết 5.1 Những kết đạt hạn chế Kết đạt • Trình bày thành phần cấu trúc ROS2 phần cần thiết để lập trình ROS2 Turtlebot3 • Có so sánh ROS2 ROS1 để thấy cải tiến ROS2 so với ROS1 • Xây dựng di chuyển cho Turtlebot3 tảng ROS2 Robot thẳng, lùi, quay đến góc định, dừng • Xây dựng ứng dụng tìm đường bao phủ đơn giản ROS2 Turtlebot3 Robot tự động di chuyển để bao phủ khoảng trống diện tích khơng có vật cản, diện tích có vật cản Hạn chế • Giải thuật tìm đường bao phủ robot đơn giản, dựa vào khoảng cách từ robot đến vật cản Để thực bao phủ, robot cần thực nhiều thao tác xoay thẳng Tuy nhiên, thực tế nhà lát gạch có độ chênh lệch nhỏ viên gạch, khơng hồn tồn phẳng, thực nhiều thao tác xoay thẳng dẫn đến robot lệch so với quỹ đạo mong muốn Dẫn đến hiệu suất bảo phủ thấp • Robot thực bao phủ với hiệu suất 60% khoảng khoảng không gian nhỏ (1.67 x 1.55 m) có cấu trúc đơn giản (trống gồm vật thể) 5.2 Hướng phát triển tương lai • Cải tiến giải thuật tìm đường bao phủ: Tìm hiểu cách lấy thơng tin từ đồ (được tạo sau hồn tất q trình SLAM) như: có điểm đồ? điểm vật cản? điểm không gian trống? Từ chia phần khơng gian cần thực bao phủ thành khơng gian trống có diện tích nhỏ Sau để robot thực di chuyển bao phủ phần diện tích hết Q trình bao phủ robot khơng cịn dựa vào khoảng cách từ robot đến vật cản mà dựa vào toạ độ điểm, robot di chuyển từ điểm nguồn đến điểm đích Nếu robot tới điểm đích q trình bao phủ chưa hồn thành điểm đích tạo, robot tiếp tục đến trình bao phủ kết thúc 54 • Robot đạt hiệu suất bao phủ 70% diện tích lớn hơn, có nhiều chướng ngại vật với nhiều hình dạng khác 55 Tài liệu tham khảo [1] ROS Documentation - Foxy: https:// docs.ros.org/ en/ foxy/ Last visited on 07-12-2022 23:17 GMT+7 [2] Turtlebot3-Burger Overview: https:// emanual.robotis.com/ docs/ en/ platform/ turtlebot3/ overview/ Last visited on 07-12-2022 23:17 GMT+7 [3] Turtlebot3-Burger Features: https:// emanual.robotis.com/ docs/ en/ platform/ turtlebot3/ features/ #features Last visited on 07-12-2022 23:17 GMT+7 [4] LDS-01 specification: 360 Laser Distance Sensor LDS-01 specifications: https:// emanual.robotis.com/ docs/ en/ platform/ turtlebot3/ appendix_lds_01/ Last visited on 07-12-2022 23:17 GMT+7 [5] OpenCR1.0 specification: https:// emanual.robotis.com/ docs/ en/ parts/ controller/ opencr10/ Last visited on 07-12-2022 23:17 GMT+7 [6] DYNAMIXEL XL430-W250-T specifications: https:// www.robotis.us/ dynamixel-xl430-w250-t/ Last visited on 07-12-2022 23:17 GMT+7 [7] ROS Wikipedia: https:// en.wikipedia.org/ wiki/ Robot_Operating_System Last visited on 07-12-2022 23:17 GMT+7 [8] Why ROS 2?: https:// docs.ros.org/ en/ foxy/ _downloads/ 2a9c64e08982f3709e23d20e5dc9f294/ ros2-brochure-ltr-web.pdf Last visited on 07-12-2022 23:17 GMT+7 [9] Navigation: https:// emanual.robotis.com/ docs/ en/ platform/ turtlebot3/ navigation/ #run-navigation-nodes Last visited on 07-12-2022 23:17 GMT+7 [10] The Constructsim: ROS2 Basic in days (Python) course https:// www.theconstructsim.com/ Last visited on 07-12-2022 23:17 GMT+7 [11] ROS2 Topic: https:// docs.ros.org/ en/ foxy/ Tutorials/ Beginner-CLI-Tools/ Understanding-ROS2-Topics/ Understanding-ROS2-Topics.html Last visited on 07-12-2022 23:17 GMT+7 56 [12] Function converts Quaternion to Euler: https:// gist.github.com/ salmagro/ 2e698ad4fbf9dae40244769c5ab74434 Last visited on 07-12-2022 23:17 GMT+7 [13] The Constructsim: ROS2 Intermediate course https:// docs.ros2.org/ foxy/ api/ nav_msgs/ msg/ Odometry.html Last visited on 07-12-2022 23:17 GMT+7 [14] Nguyễn Thùy Linh (2016), Nghiên cứu thuật tốn tìm đường bao phủ nhóm robot di động [15] ROS2 LaserScan message: http:// docs.ros.org/ en/ melodic/ api/ sensor_msgs/ html/ msg/ LaserScan.html Last visited on 07-12-2022 23:17 GMT+7 [16] ROS2 Odometry message: https:// docs.ros2.org/ foxy/ api/ nav_msgs/ msg/ Odometry.html Last visited on 07-12-2022 23:17 GMT+7 [17] ROS2 PoseWithCovarianceStamped message: https:// docs.ros2.org/ latest/ api/ geometry_msgs/ msg/ PoseWithCovarianceStamped.html Last visited on 07-12-2022 23:17 GMT+7 [18] ROS2 Twist message: http:// docs.ros.org/ en/ noetic/ api/ geometry_msgs/ html/ msg/ Twist.html Last visited on 07-12-2022 23:17 GMT+7 57 Phụ lục Hướng dẫn cài đặt chạy ứng dụng Clone project từ repo $ git clone https :// github com / ThanhVinhCE / m o v e _ z i g z a g _ T u r t l e b o t _ R O S git Compile project sử dụng colcon build source workspace $ colcon build packages - select move_rob ot_zigza g $ source ~/ your_workspace / install / setup bash Trong terminal mới, chạy SLAM Node lưu lại đồ trình SLAM kết thúc • Chạy Bringup TurtleBot3 SBC $ ssh ubuntu@ { I P _ A D D R E S S _ O F _ R A S P B E R R Y _ P I } $ export TURTLEBOT3_MODEL = burger $ ros2 launch tu rt le bot 3_ br ing up robot launch py • Chạy SLAM Node $ export TURTLEBOT3_MODEL = burger $ ros2 launch t u r t l e b o t _ c a r t o g r a p h e r cartographer launch py • Chạy Teleoperation Node để điều khiển TurtleBot3 bắt đầu quét thực vẽ đồ $ export TURTLEBOT3_MODEL = burger $ ros2 run turtle bot3_tele op teleop_keyboard • Sau vẽ đồ mong muốn, lưu đồ lại tắt SLAM Node Teleoperation Node tổ hợp phím ctrl+c ros2 run nav2_map_server map_saver_cli -f ~/ map_name Chạy move_robot_zigzag Node $ export TURTLEBOT3_MODEL = burger $ ros2 launch move_ro bot_zigza g main launch py map := $HOME / map_name yaml use_sim_time := True Xác định vị trí ban đầu robot • Nhấn vào nút 2D Pose Estimate RViz2 menu 58 • Click vào đồ nơi mà robot đứng môi trường thật kéo mũi tên màu xanh đến vị trí hướng phía trước robot Sau initial_pose đặt, robot bắt đầu di chuyển sau 10s 59

Ngày đăng: 20/06/2023, 20:40

w