2. 3 Phương pháp điều khiển tránh vật cản
2.6.2 Mô phỏng trên Gazebo
2.6.2.1 Tạo thế giới
Khởi chạy file gazebo
Sau khi làm việc với Gazebo, bây giờ đã đến lúc chạy mô phỏng trên đó và làm việc với một số người máy.
Sau khi cài đặt các gói, chúng ta có thể bắt đầu chạy mô phỏng. Có một số lần ra mắt các tệp bên trong các gói rùa-vọng lâu có các tệp thế giới khác nhau. Một thế giới Gazebo tệp (* .world) là tệp SDF bao gồm các thuộc tính
của các mô hình trong môi trường. Khi tệp world thay đổi, Gazebo sẽ tải với một môi trường khác.
Đến launch file theo đường dẫn: catkin_ws/src/rrt_exploration_tutorials/ launch/single_simulated_house.launch. Open with gedit và sửa lại như sau:
<arg name="world_name" value="$(find
rrt_exploration_tutorials)/launch /includes/worlds/emty.world"/>
Lưu ý: Ở trên là đối với trường hợp có một tệp world trống rỗng và có tên là emty.world (được lưu tại catkin_ws/src/rrt_exploration_tutorials/launch/ include/worlds). Nếu không có thì có thể tạo.
Lệnh sau sẽ bắt đầu một thế giới có một tập hợp các thành phần nhất định: $ cd catkin_ws
$ source devel/setup.bash
$ cd src/rrt_exploration_tutorials/launch $ roslaunch single_simulated_house.launch
Khi chạy mô phỏng lần đầu sẽ mất một khoảng thời gian để tải dữ liệu và khi hoàn tất, ta có được robot với một thế giới trống
Hình 2.23 Mô hình trong trình mô phỏng Gazebo
Bên trên là hình ảnh robot với thế giới mặc định của gazebo có sẵn. Để thực hiện đề tài, trước hết cần tạo một thế thới riêng trên Gazebo
Trên giao diện phần mềm Gazebo. Ở thanh công cụ trên nhấp chọn Edit -> Building Editor
Hình 2.24 Công cụ edit của gazebo
Một giao diện mới được mở ra:
Hình 2.25 Giao diện Building Editor
Với thanh công cụ bên trái, ta có thể thêm những bức tường, cửa, cầu thang,màu sắc,…. Việc vẽ được thực hiện trên phần lưới màu trắng, tương tự như AutoCad nhưng đơn giản hơn.
Lưu ý mọi việc thiết kế đều trên phần lưới màu trắng
Khi thực hiện tạo vật, ta có thể chỉnh sửa bằng cách chuột phải đối tượng chọn Open Wall Inspector hoặc xóa đối tượng
Ta có thể chỉnh sửa tọa độ, chiều dài, dày, cao, màu sắc, tính chất của đối tượng cần chỉnh sửa trong cửa sổ Wall Inspector
Hình 2.27 Cửa sổ Wall Inspector
Lưu file khung gazebo
Sau khi tạo xong phần khung, ta lưu file: File -> Save as.
Hệ thống sẽ tự tạo cho chúng ta 1 folder mới Building_editor_models ở Home và tiến hành lưu phần khung tại đó.
Sau đó thoát khỏi chức năng Building Editor. Khung hiện tại được thiết kế theo môi trường sau:
Xuất khung đã lưu
Bình thường hệ thống sẽ tự động giữ lại khung mà mình đã vẽ trên giao diện của Gazebo. Tuy nhiên nếu bạn quên không lưu file Gazebo vừa tạo, có thể vào lại Gazebo và lấy lại phần thiết kế vừa làm bằng cách chọn mục Insert. Tại mũi tên cuối, chọn tên của khung đã lưu .
Hình 2.29 Công cụ insert Gazebo
Thêm các đối tượng trong Gazebo
Có thể thêm các đối tượng tại mục Insert mũi tên của http:// gazebosim.org/ models Xem tại mục Insert. Tại đó, ta có thể thêm các đối tượng có sẵn trong gazebo hoặc có thể thêm các đối tượng tải trên các gói về. Nhiều gói có chứa cả một khung giống như chúng ta đã làm ở phía trên, thậm chí còn tốt hơn rất nhiều.
Lưu file Gazebo
Sau đó lưu lại file gazebo: File-> save world as : nchouse.world <rand> Ở đây chúng ta sẽ lưu file gazebo này theo đường dẫn sau
catkin_ws/src/rrt_exploration_tutorials/launch/ include/worlds
2.6.2.2 Khởi chạy lại Gazebo với thế giới vừa tạo
Ta vào file dùng để khởi chạy gazebo. Đây là đường dẫn của file
Click chuột phải tại file single_simulated_house.launch chọn open with Gedit
Sửa đổi dòng này trong file:
<arg name="world_name" value="$(find rrt_exploration_tutorials)/ launch /includes/worlds/emty.world"/>
Thành như sau để thay đổi thế giới:
<arg name="world_name" value="$(find rrt_exploration_tutorials)/ launch /includes/worlds/nchouse.world"/>
Ở đây chính là thay đổi thể giới trong gazebo bằng file gazebo vừa lưu. Khởi chạy lại Gazebo và quan sát kết quả đạt được:
$ cd catkin_ws
$ source devel/setup.bash
$ cd src/rrt_exploration_tutorials/launch $ roslaunch single_simulated_house.launch
Ta được giao diện gazebo hoàn chỉnh sau khi tạo thế giới:
Hình 2.30 Giao diện thế giới gazebo hoàn chỉnh
2.6.3 Sử dụng package rrt_exploration
Với package rrt_exploration_tutorials. Việc chạy gazebo đã chạy luôn Rviz để mô phỏng. Vì vậy việc tiếp đến là sử dụng rrt_exploration package kết hợp với Rviz để mô phỏng và quan sát.
Theo đường dẫn catkin_ws/src/rrt_exploration /launch
Sau khi khởi chạy robot thực hiện mô phỏng trên Gazebo và Rviz. Tiếp tục khởi chạy single.launch để sử dụng package rrt_exploration
$ cd catkin_ws
$ source devel/setup.bash $ cd src/rrt_exploration /launch $ roslaunch single.launch
Launch file single.launch dùng để chạy các node đã được nêu tại mục 6.2.2. Điều đó được thể hiện trong launch file như:
<node pkg="rrt_exploration" type="global_rrt_detector" name =" global _detector" outpu t="screen">
<node>
<node pkg="rrt_exploration" type="local_rrt_detector" name="local_detector" output="screen">
<node>
<node pkg="rrt_exploration" type="filter.py" name="filter" output="screen"> <node>
<node pkg="rrt_exploration" type="assigner.py" name="assigner" output ="screen">
<node>
Đi kèm là một số điều kiện đặt ra cho các node cho launch file này. Ở trên đã nêu 5 node được sử dụng, tuy nhiên ở đây chỉ sử dụng 4 node. Node OpenCV được loại bỏ vì nó không thực sự cần thiết khi đã sử dụng 2 node global_rrt_detector và
local_rrt_detector.
Sau khi chạy launch file thành công. Mở Rviz và tiến hành mô phỏng.
2.6.4 . Mô phỏng trên Rviz
Các package cho phép chúng ta lựa chọn khu vực hoạt động của thuật toán RRT được cho bởi 5 điểm và được chia làm 2 loại như sau:
- 4 điểm đầu: Dùng để xác định vùng hoạt động của thuật toán, thuật toán sẽ bị giới hạn bởi tứ giác tạo nên bởi 4 điểm này.
- Điểm cuối: Được gọi là điểm gốc hay còn gọi là điểm bắt đầu. Robot sẽ cố gắng tiến đến để cảm biến đọc được dữ liệu từ điểm này. Cây sẽ cố gắng phát triển đến điểm này và tiếp tục phát triển về sau.
Chạy mô phỏng
Ở thanh công cụ bên trên của Rviz, click chọn Publish Point
Hình 2.31 Thanh công cụ trên của rviz
Chọn 4 điểm đầu, ở đây nên chọn 4 điểm này để tạo nên một tứ giác đủ lớn để bao quát bản đồ trong môi trường. Vì dữ liệu đọc được từ cảm biến có thể sẽ nằm ngoài tứ giác này, tuy nhiên nếu thuật toán cây ngẫu nhiên không được phát triển trọn vẹn một khu vực thì có thể dẫn đến thiếu sót. Tiếp đến chọn điểm thứ 5 để bắt đầu thuật toán
Hình 2.32 Các điểm yêu cầu của thuật toán
Khi robot quét được điểm thứ 5, cây toàn cục (rrt_global) bắt đầu từ điểm này và phát triển. Một vài hình ảnh robot trong quá trình hoạt động
Hình 2.33 Quá trình quét của robot
Có thể thấy 2 cây được thể hiện trong trình mô phỏng Rviz. Cây màu đỏ thể hiện cho local_rrt và cây màu xanh được thể hiện cho global_rrt.
- Global_rrt hay còn gọi là cây toàn cục, cây này sẽ liên tục phát triển từ điểm thứ 5 đến khác khu vực không xác định nằm trong tứ giác tạo bởi 4 điểm đầu. Đối với cây này, do liên tục phát triển và vùng phát triển ngày càng lớn nên cây sẽ phát triển chậm dần nhưng theo nhiều hướng khác nhau. Tuy nhiên việc này lại phù hợp với việc khám phá những góc cạnh trên bản đồ, phù hợp với môi trường có nhiều góc cạnh.
- Local_rrt hay còn gọi là cây cục bộ, cũng giống như cây toàn cục nhưng cây này sẽ bắt đầu từ robot và được lặp lại sau mỗi lần tìm thấy điểm biên giới. Chính vì yếu tố này nên nó phù hợp với việc khám phá nhanh nhưng khu vực chưa xác định <unknow>. Phù hợp với môi trường rộng lớn.
Việc kết hợp 2 node này đã đem lại hiệu quả tốt hơn trong việc khám phá tự trị của thuật toán RRT.
Đây là sự khác biệt về việc chọn khu vực hoạt động có thể dẫn đến một vài thiếu sót trong quá trình hoạt động của thuật toán đã nêu ở trên. Để thấy rõ hơn, ở đây sẽ so sánh với hình hoàn chỉnh
2.6.5 Điều hướng robot
Do launch file single_simulated_house.launch đã đồng thời chạy cả gazebo, rviz bên cạnh đó cũng chạy cùng node gmapping và rviz nên có thể điều hướng robot ngay sau khi khám phá tự trị. [1]
Việc điều hướng chỉ có thể xảy ra khi việc khám phá tự trị dừng lại <không nhất thiết phải dừng hoàn toàn>
Sử dụng nút 2D navigation trên thanh công cụ Rviz và tiến hành điều hướng robot. [10]
2.6.5.1 Đồ thị rqt_mutilplot
Để có thể thấy rõ hơn sự thay đổi về vận tốc dài và vận tốc góc của robot trong quá trình chuyển động, ta sử dụng đồ thị rqt_mutilplot trong 3 trường hợp điều hướng robot khác nhau.
Robot của không thể lái sang ngang (tuyến tính.y) hoặc xoay quanh trục x và y. Do đó, sẽ chỉ sử dụng linear.x và angle.z để hiển thị đồ thị
Thao tác với rqt_multiplot
Mở 1 terminal khác và nhập như sau: $ cd catkin_ws
$ source /opt/ros/kinetic/setup.bash $ rosrun rqt_multiplot rqt_multiplot Ta được giao diện rqt_multiplot
Hình 2.35 Giao diện rqt_multiplot
- Run all plots: Chạy tất cả đồ thị - Pause all plots: Dừng tất cả đồ thị
- Delete all line: Xóa các đường đồ thị trước đó - Setting: Cài đặt cho đồ thị
Chọn setting để bắt đầu cài đặt đồ thị. - Phần Title: Tên cho đồ thị sử dụng
- Tiến vào Add curve. Ta có cửa sổ mới. Ở cửa số này ta sẽ thiết lập đường, trục x,y,….
Đồ thị vận tốc
- Ta chọn trục x là Message receipt time nghĩa là thời gian thực trên gazebo: Thời gian bắt đầu từ khi chọn vị trí cho robot di chuyển tự động điều hướng cho đến khi dừng hẳn.
- Trục y: + Mục topic chọn /cmd_vel (Lưu ý với mỗi loại robot khi thiết kế phần này có thể khác nhau cd: /turtlebot/cmd_vel)
+ Mục fiel: chọn linear -> x float
Hình 2.36 Cài đặt đồ thị vận tốc dài rqt
Đồ thị gia tốc
Hình 2.37 Cài đặt đồ thị vận tốc góc rqt
Kết hợp 2 biểu đồ với Plot Table 2x1 ta có giao diện sau:
Hình 2.38 Đồ thị chung
2.6.5.2 Điều hướng và đồ thị
Điều hướng theo đường thẳng
Quan sát robot di chuyển theo đường thẳng và đi đến mục tiêu đã chọn kết hợp với đồ thị, ta thấy vận tốc của robot hầu hết đạt trạng thái lớn nhất trong khi vận tốc góc nhỏ nhất. Cả 2 có sự biến động nhỏ, robot di chuyển thành công đến vị trí đã chọn
Hình 2.39 Điều hướng robot không vật cản
Hình 2.40 Đồ thị điều hướng robot không vật cản
Với dữ liệu từ bản đồ sau khi quét xong, tiến hành điều hướng né vật cản
Hình 2.41 Điều hướng robot có vật cản
Quan sát đồ thị thấy có sự biến đổi lớn về vận tốc góc tại thời điểm robot rẽ (trái >0, phải<0)
Hình 2.42 Đồ thị điều hướng robot né vật cản
Khác với trường hợp trên, tiến hành đặt một vật cản tại một điểm trên đường đi mà dự đoán robot sẽ đi qua khu vực đó và tiến hành quan sát.
Điều hướng robot di chuyển đến một vị trí, để rõ hơn chúng ta sẽ bật thêm bản đồ cục bộ (local costmap)
Hình 2.43 Điều hướng robot né vật cản tức thời
Đặt thêm vật cản trên Gazebo
Hình 2.44 Đặt vật cản tức thời trên gazebo
Quan sát robot di chuyển đến vùng gần vật cản, lúc này cảm biến laser đã phát hiện ra nhưng chi phí lạm phát của vật cản vẫn chưa được hình thành do vật cản chưa nằm trong khu vực phát sinh lạm phát từ robot.
Khi vật cản nằm trong khu vực phát sinh chi phí lạm phát của robot, lúc này chi phí lạm phát của vật cản được tạo nên, tuy nhiên kế hoạch đường đi tổng quát vẫn không thay đổi. Cho đến khi vật cản nằm trong bản đồ cục bộ của robot, đường kế hoạch mới được tạo.
Sau khi robot đến gần hơn, nằm trong vùng hoạt động của bản đồ chi phí cục bộ. Nó sẽ tạo nên chi phí lạm phát của vật cản . Kế hoạch tổng quát trước đó sẽ không còn khả thi nữa. Bản đồ sẽ lập lại kế hoạch cũng như đổi mới dữ liệu và tính toán lại đường tổng quát
Hình 2.45 Đường đi tổng quát mới của robot
Chi phí lạm phát được tạo dựa trên dữ liệu từ cảm biến phát hiện ra góc cạnh của vật cản, những cạnh cảm biến không quét tới thì chi phí lạm phát tại đó chưa hoàn chỉnh. Khi chi phí lạm phát của vật cản đạt đến mức cần thiết để robot di chuyển, một đường kế hoạch tổng quát mới được tạo, robot né vật cản tức thời và di chuyển đến điểm đích.
Hình 2.46 Robot né vật cản tức thời
Quan sát đồ thị thấy robot có một khoảng dừng khi đường di chuyển tổng quát được thay đổi
Hình 2.47 Đồ thị vận tốc và vận tốc góc robot khi né vật cản tức thời
2.6.6 Khảo sát các thông số liên quan 2.6.6.1 Góc quét <α - deg> 2.6.6.1 Góc quét <α - deg>
Quan sát sự ảnh hưởng của góc quét đến việc khám phá tự trị của robot
α Map T (s)
150 221
120 239
90 267
60 309
Từ bảng trên có thể thấy rằng:
Đối với các trường hợp góc quét từ 150-180deg, quá trình lập bản đồ là ổn định. Do yếu tố không xác định của bản đồ nên trên bản đồ có các cạnh nhỏ và hẹp, dẫn đến khi rô bốt sử dụng góc quét tia laze nhỏ sẽ xảy ra hiện tượng các lớp lưới bản đồ bị vỡ. Khi góc quét nhỏ hơn 150 độ (90 độ-120 độ), bản đồ có các lớp lưới bị hỏng. Đặc biệt là ở các góc quét nhỏ (60), bản đồ gần như bị vỡ.
2.6.6.2 Tốc độ tăng trưởng <eta>
Nghiên cứu này cũng tiến hành khảo sát thời gian quét bản đồ dựa trên sự thay đổi của tốc độ sinh trưởng của cây (eta)
Tham số (Eta) xác định tốc độ tăng trưởng của RRT được sử dụng để tìm kiếm các điểm trong vùng biên giới. Khi tăng lên, cây sẽ phát triển nhanh hơn, dẫn đến việc tìm kiếm các điểm ranh giới nhanh hơn. Tuy nhiên, do tốc độ phát triển nhanh nên sẽ có các đỉnh và các cạnh của vật thể bị bỏ sót, dẫn đến việc robot phải quay lại các vị trí đó từ đó làm tăng thời gian quét. Do đó, thông số này cần được điều chỉnh theo địa hình và kích thước của bản đồ.
Với giá trị mặc định ban đầu eta của local và global đều là 10. Tiến hành thay đổi lần lượt 2 loại và xem sự ảnh hưởng của tốc độ tăng trưởng đến thời gian quét
Dưới đây là sự ảnh hưởng của tốc độ tăng trưởng cây của rrt_local
Hình 2.48 Biểu đồ thay đổi eta cục bộ
Với sự thay đổi của rrt_local thì việc tìm ra những điểm biên khi khu vực không xác định và gần robot nhanh hơn tuy nhiên còn phụ thuộc vào địa hình, việc tìm điểm biên quá nhanh có thể dẫn đến tình trạng đi quay trở lại của robot. Vậy nên với một khu vực ít vật cản dạng góc cạnh thì nên để cây cục bộ tăng trưởng nhanh
Hình 2.49 Biểu đồ thay đổi eta toàn cục
Tương tự với cây cục bộ tuy nhiên sự thay đổi của rrt_global lại phù hợp với những góc cạnh còn thiếu sót khi những điểm biên được quét bởi rrt_local. Vì vậy mà rrt_global phù hợp với môi trường nhiều góc cạnh hay vật cản vì cây có xu hướng tăng trưởng rộng nhưng chậm hơn.
CHƯƠNG 3: TÍNH TOÁN, THIẾT KẾ ROBOT 3.1 Tính toán, thiết kế hệ thống cơ khí