Các thư mục chính

Một phần của tài liệu nghiên cứu, thiết kế và chế tạo robot di động dẫn đường sử dụng giải thuật cây ngẫu nhiên (Trang 47 - 52)

2. 3 Phương pháp điều khiển tránh vật cản

2.5.6 Các thư mục chính

Chức năng tổng quát

Rrt_exploration (robot và mô phỏng): Đây là một gói ROS triển khai thuật toán

khám phá bản đồ cho rô bốt di động. Nó dựa trên thuật toán Cây Ngẫu nhiên Khám phá Nhanh (RRT). Nó sử dụng các grid sử dụng làm đại diện bản đồ.

Rrt_exploration_tutorial (robot và mô phỏng): Gói này là một gói bổ sung cho

gói ROS rrt_exploration. Nó cung cấp tất cả các tệp mô phỏng Gazebo cần thiết để đưa ra các robot Kobuki được trang bị máy quét laser và sẵn sàng cho gói rrt_exploration.

Navigation (robot): Một ngăn xếp điều hướng 2D lấy thông tin từ đo đường, luồng

cảm biến, tư thế mục tiêu và xuất các lệnh vận tốc an toàn được gửi đến robot di động.

Gmapping (robot): Gói này chứa một trình bao bọc ROS cho OpenSlam's

Gmapping. Gói gmapping cung cấp SLAM dựa trên laser (Bản địa hóa và ánh xạ đồng thời), như một nút ROS được gọi là slam_gmapping. Sử dụng slam_gmapping, bạn có thể tạo bản đồ lưới chiếm dụng 2-D (giống như sơ đồ mặt bằng của tòa nhà) từ tia laser và tạo dữ liệu được thu thập bởi rô bốt di động.

Rrt_Exploration Package

Các node trong rrt_exploration Rrt_exploration có 5 thành phần chính:

 Global RRT frontier point detector node.  Local RRT frontier point detector node.  Filter node.

 Assigner node.

 OpenCV- based frontier detector node. Quy trình được thể hiện như hình bên dưới

Hình 2.17 Sự liên kết giữa các node

Chức năng các node

Nhận một lưới chiếm dụng và tìm các điểm giới hạn (là các mục tiêu thăm dò) trong đó. Nó xuất bản các điểm được phát hiện để nút bộ lọc có thể xử lý. Chạy các phiên bản bổ sung của máy dò biên giới toàn cầu có thể nâng cao tốc độ phát hiện điểm biên giới

Local_rrt_frontier_detector:

Nút này tương tự global_rrt_frontier_detector. Tuy nhiên, nó hoạt động theo cách khác, vì cây ở đây tiếp tục đặt lại mỗi khi phát hiện ra điểm biên giới. Nút này được thiết kế để chạy dọc theo nút global_rrt_frontier_detector, nó có nhiệm vụ phát hiện nhanh các điểm biên nằm trong vùng lân cận gần của rô bốt.

frontier_opencv_detector: Nút này là một bộ dò biên giới khác, nhưng nó không

dựa trên RRT. Nút này sử dụng các công cụ OpenCV để phát hiện các điểm biên giới. Nó được thiết kế để chạy một mình và trong cấu hình nhiều rô bốt chỉ nên chạy một phiên bản (chạy các phiên bản bổ sung của nút này không tạo ra bất kỳ sự khác biệt nào).

Filter: Các nút bộ lọc nhận các điểm biên giới được phát hiện từ tất cả các máy

dò, lọc các điểm và chuyển chúng đến nút của người chỉ định để chỉ huy rô bốt. Lọc bao gồm việc loại bỏ các điểm cũ và không hợp lệ, đồng thời nó cũng loại bỏ các điểm thừa.

Assigner: Nút này nhận các mục tiêu thăm dò mục tiêu, là các điểm biên được

lọc do nút lọc xuất bản và ra lệnh cho rô bốt tương ứng. Nút người gán lệnh cho rô bốt thông qua move_base_node. Đây là lý do tại sao bạn hiển thị ngăn xếp điều hướng trên rô bốt của mình.

Rrt_Exploration_Tutorials Package

Gói này sử dụng hai bản đồ chi phí để lưu trữ thông tin về các chướng ngại vật. Một bản đồ chi phí được sử dụng để lập kế hoạch toàn cầu (global) [4], nghĩa là tạo ra các kế hoạch dài hạn cho toàn bộ môi trường và bản đồ còn lại được sử dụng để lập kế hoạch địa phương (local) và tránh chướng ngại vật. Có một số tùy chọn cấu hình mà cả bản đồ chi phí tuân theo và một số tùy chọn đặt trên từng bản đồ riêng lẻ. Do đó, có ba phần bên dưới cho cấu hình bản đồ chi phí.

Costmap_common_params.yaml

Tệp này chứa các tùy chọn cấu hình chung cho hai bản đồ chi phí được sử dụng trong navigation stack để biết thêm chi tiết về các tham số trong tệp này và danh sách đầy đủ các tham số được sử dụng bởi bản đồ chi phí. Bên dưới là một vài thông số có trong tệp [11]

map_type: costmap # Đặt mức dung sai obstacle_range: 3.5 raytrace_range: 4.0

Các thông số này thiết lập các ngưỡng thông tin về chướng ngại vật được đưa vào costmap. Tham số " obstacle_range " xác định giá trị của cảm biến phạm vi tối đa sẽ dẫn đến việc đưa chướng ngại vật vào sơ đồ. Ở đây, nó ở mức 3,5 mét, có nghĩa là robot sẽ chỉ cập nhật bản đồ của nó với thông tin về các chướng ngại vật nằm trong phạm vi 3,5 mét. Tham số "raytrace_range" xác định phạm vi mà chúng ta sẽ chuyển vùng tự do raytrace cho phép đọc cảm biến. Ở trên là 4.0 mét có nghĩa là rô bốt sẽ cố gắng dọn sạch không gian phía trước nó cách xa tới 4.0 mét khi có cảm biến đọc.

# Tham số hàm chi phí inflation_radius: 0.55

Tham số inflation_radius là bán kính tính bằng mét mà bản đồ làm tăng giá trị chi phí chướng ngại vật. Ví dụ: đặt bán kính lạm phát ở mức 0,55 mét có nghĩa là robot sẽ coi tất cả các con đường cách chướng ngại vật từ 0,55 mét trở lên là có giá trị như nhau. Hiểu đơn giản hơn là giống như việc đặt vỉa hè để tránh oto đi vào

# Cấu hình cho các cảm biến mà bản đồ chi phí sẽ sử dụng để cập nhật bản đồ Tham số "Obser_sources" xác định danh sách các cảm biến sẽ truyền thông tin đến bản đồ chi phí được phân tách bằng dấu cách. Ở đây chỉ có một

observation_sources: laser_scan_sensor

laser_scan_sensor: {sensor_frame: base_laser_link, data_type: LaserScan, topic: /base_scan, marking: true, clearing: true}

Dòng này thiết lập các thông số trên một cảm biến được đề cập trong

Obser_sources và ví dụ này xác định laser_scan_sensor. Thông số " sensor_frame "

là tên của khung tọa độ của cảm biến, thông số "data_type" phải được đặt thành

LaserScan hoặc PointCloud tùy thuộc vào thông báo mà chủ đề sử dụng và

"topic_name" phải được đặt thành tên của chủ đề mà cảm biến xuất bản dữ liệu. Các thông số " marking " và " clearing " xác định liệu cảm biến sẽ được sử dụng để thêm thông tin chướng ngại vật vào bản đồ chi phí, xóa thông tin chướng ngại vật khỏi bản đồ vật cản hay thực hiện cả hai.

Global_costmap_params.yaml

Thông số

global_frame: map robot_base_frame: base_link update_frequency: 2.0 publish_frequency: 2.0 static_map: true rolling_window: true width: 100.0 height: 100.0 resolution: 0.05

Tham số "global_frame" xác định khung tọa độ mà bản đồ chi phí sẽ chạy, trong trường hợp này, khung là / map.

Tham số "robot_base_frame" xác định khung tọa độ mà bản đồ chi phí nên tham chiếu cho cơ sở của rô bốt.

Tham số "update_frequency" và “publish_frequency” xác định tần số, tính bằng Hz, tại đó bản đồ chi phí sẽ chạy vòng lặp cập nhật và xuất bản dữ liệu của nó.

Tham số "static_map" xác định liệu bản đồ chi phí có nên tự khởi tạo dựa trên bản đồ do map_server cung cấp hay không . Nếu bạn không sử dụng bản đồ hoặc máy chủ bản đồ hiện có, hãy đặt tham số static_map thành false .

Tham số “rolling_window” xác định bản đồ chi phí có tập trung xung quanh robot khi robot di chuyển hay không.

Tham số “ width, height, resolution” xác định chiều rộng và độ phân giải mét/ô của bản đồ chi phí. Độ phân giải này khác với độ phân giải tĩnh của bản đồ

Local_costmap_params.yaml local_costmap: global_frame: odom robot_base_frame: base_link update_frequency: 5.0 publish_frequency: 5.0 static_map: false rolling_window: true width: 1.5 height: 1.5 resolution: 0.01

Tương tự như global costmap tuy nhiên local costmap sẽ đặt giá trị “static_map” là failse vì bản đồ cục bộ được cập nhật liên tục mà không dựa vào dữ liệu lấy từ bản đồ chi phí có sẵn

Base_local_planner_params.yaml

Base_local_planner chịu trách nhiệm tính toán các lệnh vận tốc để gửi đến cơ sở di động của robot. Chúng tôi sẽ cần thiết lập một số tùy chọn cấu hình dựa trên thông số kỹ thuật của rô-bốt của chúng tôi để thiết lập và chạy mọi thứ.

Gói base_local_planner cung cấp một bộ điều khiển để điều khiển một robot trong mặt phẳng. Bộ điều khiển này dùng để kết nối công cụ lập kế hoạch đường đi với rô bốt. Sử dụng bản đồ, người lập kế hoạch tạo quỹ đạo động học để rô bốt đi từ đầu đến vị trí mục tiêu. Trên đường đi, người lập kế hoạch tạo, ít nhất là cục bộ xung quanh rô bốt, một hàm giá trị, được biểu diễn dưới dạng bản đồ lưới. Hàm giá trị này mã hóa chi phí di chuyển qua các ô lưới. Công việc của bộ điều khiển là sử dụng hàm giá trị này để xác định các vận tốc dx, dy, dtheta để gửi tới robot.

Phần này chỉ bao gồm các tùy chọn cấu hình cơ bản cho TrajectoryPlanner

TrajectoryPlannerROS:

max_vel_x: 0.3 // Vận tốc max m/s min_vel_x: 0.05 // Vận tốc min max_vel_theta: 0.9 //Vt quay max rad/s min_in_place_vel_theta: 0.7 //Vtq quay tại chỗ rad/s acc_lim_theta: 2.0 // Gia tốc quay max rad/s^2 acc_lim_x: 0.05 //Gia tốc x max rad/s^2 acc_lim_y: 0.2 //Gia tốc y max

Có thể tham khảo thêm tại Base local planner

Một phần của tài liệu nghiên cứu, thiết kế và chế tạo robot di động dẫn đường sử dụng giải thuật cây ngẫu nhiên (Trang 47 - 52)