Robot và mô phỏng

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 30)

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

2.4 Robot và mô phỏng

2.4.1 Cài đặt cần thiết

Với đề tài thiết kế, mô phỏng robot di động quét bản đồ tự động và tránh vật cản chúng ta sẽ sử dụng những phần mềm, ứng dụng và hệ điều hành như: ROS, Gazebo, Rviz… Mục tiêu cuối cùng là thiết kế và mô phỏng robot dựa trên phần mềm, qua đó chúng ta sẽ đi qua về tìm hiểu phần mềm, giới thiệu và hướng dẫn cách cài đặt phần mềm và quá trình thực hiện.

Robot operating system (ROS) là một hệ thống phần mềm có tính linh hoạt và chuyên dụng cao dùng để lập trình và điều khiển robot. ROS bao gồm các thư viện, công cụ hỗ trợ lập trình, công cụ đồ họa, các công cụ hỗ trợ giao tiếp điều khiển trực tiếp với

phần cứng cũng như các thư viện hỗ trợ việc lấy dữ liệu từ các cảm biến và các thuật toán phổ biến trong lập trình điều khiển robot.

Các tính năng chính mà ROS cung cấp:  Giao diện truyền thông điệp.  Trừu tượng hóa phần cứng.  Điều khiển thiết bị cấp thấp.  Tính toán phân tán.  Tái sử dụng mã.  Độc lập ngôn ngữ.  Kiểm tra dễ dàng.  Chia tỷ lệ.  Mã nguồn mở và miễn phí.

ROS là sự kết hợp của hệ thống truyền thông điệp, công cụ, khả năng và hệ sinh thái. Có các công cụ mạnh mẽ trong ROS để gỡ lỗi và trực quan hóa dữ liệu robot. Có các khả năng sẵn có của rô bốt trong ROS, chẳng hạn như điều hướng rô bốt, bản địa hóa, lập bản đồ, thao tác, v.v. Chúng giúp tạo ra các ứng dụng robot mạnh mẽ.

Có ba cấp độ tổ chức chính trong ROS:

 Hệ thống tệp ROS

 Biểu đồ tính toán ROS

 Cộng đồng ROS

ROS giúp đơn giản và tiết kiệm thời gian việc lập trình các hành vi phức tạp của robot. ROS như là một mạng lưới điểm (node) được kết nối bởi nhiều node mà mỗi node có nhiệm vụ riêng tương ứng với các thành phần cấu tạo nên robot. Mỗi node riêng có thể được tùy chỉnh phát triển và lập trình theo ý tưởng của người phát triển mà không cần quan tâm đến việc phải thống nhất sử dụng cùng một ngôn ngữ lập trình, điều đó có nghĩa là node này bạn phát triển trên ngôn ngữ C++ nhưng node khác bạn có thể phát triển trên ngôn ngữ Python. Python và C++ là hai ngôn ngữ nền tảng mà bạn cần phải học trước khi làm quen với ROS.

ROS chạy trên nền Ubuntu, do đó bạn phải cài ROS trên nền Ubuntu. Hiện tại có hai phiên bản phổ biến là ROS Melodic và ROS Kinetic, phiên bản Melodic tương thích và chạy trên Ubuntu 18 trong khi đó Kinetic chạy trên nền Ubuntu 16. Có thể dễ dàng cài đặt ROS theo hướng dẫn trên trang chủ của ROS, ở đây sẽ viết bài hướng dẫn và sẽ lưu ý trong bài viết tiếp theo.

ROS bao gồm các cấu thành bởi các thành phần như hình sau:

Hình 2.10 Các thành phần của ROS

Nodes: là đơn vị cơ bản nhằm hỗ trợ giao tiếp với các thành phần cấu thành nên

robot. Vì dụ như một con robot thường có các node như Laser scanner, Camera, Node gửi vận tốc đến thiết bị điều khiển động cơ. Các nodes này có thể giao tiếp và tương tác với nhau qua Master.

Master: đóng vai trò kết nối các node với nhau. Do đó, master luôn được khởi

động đầu tiên bằng cầu lệnh roscore sau đó thì bạn có thể gọi bất kỳ các node nào trong hệ thống. Sau khi gọi xong, các node có thể kết nối và tương tác với nhau.

Parameter Server: Là một cấu trúc nhiều tham số có thể truy cập trong lúc chạy

ROS. Các node sử dụng cấu trúc này nhằm lưu trữ và truy xuất các thông số trong thời gian chạy. Do nó không có hiệu suất cao nên thường dùng với kiểu dữ liệu tĩnh, chẳng hạn như các thông số cấu hình, thời gian hệ thống.

Message: Đây là cấu trúc dữ liệu được các node sử dụng để trao đổi với nhau

tương tự như các kiểu dữ liệu double, int trong các ngôn ngữ lập trình. Các node tương tác với nhau bằng cách send và receive ROS message.

Topics: là phương pháp giao tiếp trao đổi dữ liệu giữa hai node, nó bao gồm

nhiều cấp bậc thông tin mà chúng có thể giao tiếp thông qua ROS message. Hai phương thức trong topic bao gồm publish và subscribe.

Services: Là một giao tiếp trao đổi dữ liệu/ thông tin giữa hai node thông qua

phương thức request và response. Thường được áp dụng trong trường hợp việc thực hiện một lệnh cần nhiều thời gian xử lý nên dữ liệu tính toán được lưu ở server và sẽ dùng khi cần xử lý.

Bags: là một định dạng tệp trong ROS dùng để lưu trữ dữ liệu message với phần

mở rộng là .bag có vai trò quan trọng và có thể được xử lý, phân tích bởi các công cụ mô phỏng trong ROS như Rviz.

2.4.1.1 Cài đặt Ubuntu

Cài đặt bản phân phối ROS hỗ trợ lâu dài, ổn định (LTS) được gọi là Kinetic trên Ubuntu 16.04.3 LTS. ROS Kinetic Kame sẽ được nhắm mục tiêu chủ yếu vào Ubuntu 16.04 LTS. Có 2 cách cài Ubuntu:

 Cách 1: Cài song song bằng cách: Tạo USB Boot (Yêu cầu cần có USB 2GB) => Cài Ubuntu-16.04-desktop-amd64.iso => Cài ROS.

Tham khảo ở đây: Cài đặt song song

 Cách 2: Cài trên máy ảo bằng cách:

Cài VirtualBox => Cài Ubuntu 16.04 => Cài ROS. Tải VirtualBox tại: Tải VirtualBox

Tải file iso Ubuntu bản 16.04.07: Tải trên trang chủ Ubuntu

2.4.1.2 Cài ROS trên Ubuntu

1. Định cấu hình kho lưu trữ Ubuntu để cho phép các tệp có thể tải xuống. Chúng tôi có thể cài đặt nó bằng cách sử dụng công cụ Software & Update của Ubuntu. Chúng ta có thể lấy công cụ này bằng cách tìm kiếm trên menu tìm kiếm Ubuntu Unity và đánh dấu vào các hiển thị trong ảnh

Hình 2.11 Ubuntu và công cụ cập nhật

2. Thiết lập hệ thống của bạn để chấp nhận các gói ROS từ package.ros.org. ROS Kinetic chỉ được hỗ trợ trên Ubuntu 16.04. Lệnh sau sẽ lưu trữ package.ros.org trong danh sách kho lưu trữ apt của Ubuntu:

$ sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

3. Tiếp theo, chúng ta phải thêm apt-key. Một khóa apt được sử dụng để quản lý danh sách các khóa được sử dụng bởi apt để xác thực các gói. Các gói đã được xác thực bằng các khóa này sẽ được coi là đáng tin cậy. Lệnh sau sẽ thêm các phím apt cho các gói ROS:

$ sudo apt install curl

$ curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -

4. Sau khi thêm các phím apt, chúng ta phải cập nhật danh sách gói Ubuntu. Các lệnh sau sẽ thêm và cập nhật các gói ROS, cùng với các gói Ubuntu: $ sudo apt-get update

5. Sau khi cập nhật các gói ROS, chúng ta có thể cài đặt các gói. Lệnh sau sẽ cài đặt tất cả các gói, công cụ và thư viện cần thiết của ROS. Cài đặt Toàn màn hình: (Khuyến nghị) : ROS, rqt , rviz , thư viện rô bốt chung, trình mô phỏng 2D / 3D, điều hướng và nhận thức 2D / 3D

$ sudo apt-get install ros-kinetic-desktop-full 6. Để kiểm tra cài đặt

$ apt-cache search ros-kinetic

7. Để truy cập các công cụ và lệnh của ROS trên bash shell hiện tại, chúng ta có thể thêm các biến môi trường ROS vào tệp .bashrc. Điều này sẽ thực hiện vào đầu mỗi phiên bash. Sau đây là lệnh để thêm biến ROS vào .bashrc:

$ echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc

Lệnh sau sẽ thực thi tập lệnh .bashrc trên shell hiện tại để tạo ra thay đổi trong shell hiện tại:

$ source ~/.bashrc

8. Một công cụ hữu ích để cài đặt phần phụ thuộc của một gói là rosinstall. Công cụ này phải được cài đặt riêng. Nó cho phép bạn dễ dàng tải xuống nhiều cây nguồn cho gói ROS bằng một lệnh:

$ sudo apt install python-rosdep python-rosinstall python-rosinstall-generator python-wstool build-essential

9. Trước khi có thể sử dụng nhiều công cụ ROS, bạn cần khởi tạo rosdep . rosdep cho phép bạn dễ dàng cài đặt các phụ thuộc hệ thống cho nguồn bạn muốn biên dịch và được yêu cầu để chạy một số thành phần cốt lõi trong ROS. Hãy làm như sau:

$ sudo apt install python-rosdep Khởi tạo rosdep

$ sudo rosdep init $ rosdep update

Tuy nhiên hiện tại việc cài đặt ROS có thể được cập nhật liên tục nên hãy tham khảo và đối chiếu tại Cài đặt ROS Kinetic

2.4.1.3 Trình mô phỏng Gazebo

Giới thiệu về Gazebo

Gazebo là một trình mô phỏng rô bốt mã nguồn mở và miễn phí, trong đó chúng tôi có thể kiểm tra các thuật toán của riêng mình, thiết kế rô bốt và kiểm tra rô bốt trong các môi trường mô phỏng khác nhau. Gazebo có thể mô phỏng chính xác và hiệu quả các robot phức tạp trong môi trường trong nhà và ngoài trời. Gazebo được xây dựng với một công cụ vật lý mà chúng tôi có thể tạo ra đồ họa và kết xuất chất lượng cao.

Các tính năng của Gazebo như sau:  Mô phỏng động

 Đồ họa 3D nâng cao  Hỗ trợ cảm biến  Plugin  Mô hình rô bốt  Truyền tải TCP / IP  Mô phỏng đám mây  Các công cụ Command-line  Cài đặt Gazebo

Hướng dẫn này bao gồm việc cài đặt các gói Gazebo bằng cách sử dụng kho lưu trữ osrfoundation.org, được thiết kế cho những người muốn đi theo con đường phát triển nhanh hơn nhưng vẫn ổn định.

a) Cài đặt mặc định: (Khuyến nghị)

1. Tải gazebo bằng dòng lệnh $ curl-sSL http://get.gazebosim.org|sh

2. Chạy $ gazebo

b) Cài đặt thay thế: Từng bước

Tham khảo theo hướng dẫn sau để biết them về cài đặt mặc định và từng bước: Cài đặt Gazebo

Khởi chạy Gazebo

$ gazebo

Hình 2.12 Giao diện Gazebo

2.4.1.4 Trình mô phỏng Rviz

Giới thiệu về Rviz

Rviz là một công cụ trực quan hóa 3D cho các ứng dụng ROS. Nó cung cấp chế độ xem mô hình rô bốt của bạn, thu thập thông tin cảm biến từ cảm biến rô bốt và phát lại dữ liệu đã chụp. Nó có thể hiển thị dữ liệu từ máy ảnh, tia laser, từ các thiết bị 3D và 2D bao gồm cả hình ảnh và đám mây điểm.

Cài đặt Rviz

Bạn có thể cài đặt Rviz theo hướng dẫn sau: Cài đặt Rviz Có thể chạy các lệnh sau để cài đặt Rviz:

Ở đây chúng ta dùng ros-kinetic nên ta cài đặt như sau: $ sudo apt-get install ros-fuerte-visualization

$ sudo apt-get install ros-kinetic-rviz

Khởi chạy Rviz

$ source /opt/ros/kinetic/setup.bash $ roscore &

Mở Terminal 2 chạy dòng lệnh sau: $ rosrun rviz rviz

Sau khi cài đặt và chạy xong, với lần mở sau ta chỉ cần chạy Terminal 1:

$ roscore

Terminal 2: $ rosrun rviz rviz

Lệnh roscore là một tập hợp các nút và chương trình. Nó là điều kiện tiên quyết của một hệ thống dựa trên ROS. Bạn phải có một roscore đang chạy để các nút ROS có thể giao tiếp. Nó được khởi chạy bằng lệnh roscore .

Để hiểu hơn về roscore. Tham khảo tại ROSCORE Sau khi khởi chạy ta sẽ có:

Hình 2.13 Trình mô phỏng Rviz

Sự khác nhau giữa Gazebo và Rviz

Đến đây sẽ có những câu hỏi như tại sao mô phỏng Gazebo rồi, chúng ta lại cần phải có thêm một mô phỏng nữa. Hai công cụ phần mềm phổ biến được sử dụng với ROS. Rốt cuộc, cả hai chương trình đều cho phép xem một robot mô phỏng ở chế độ 3D. Hãy xem chúng khác nhau như thế nào.

Gazebo là trình mô phỏng vật lý thế giới thực thực tế mà bạn sẽ thiết lập một thế giới và mô phỏng robot của bạn di chuyển xung quanh.

Rviz (viết tắt của “ROS visualization”) là phần mềm trực quan hóa 3D cho robot, cảm biến và thuật toán, cho phép bạn xem dữ liệu gazebo (nếu bạn đang mô phỏng)

hoặc dữ liệu thế giới thực (nếu bạn không sử dụng Gazebo mà là một rô bốt thực). Nó sử dụng dữ liệu cảm biến để cố gắng tạo ra một mô tả chính xác về những gì đang diễn ra trong môi trường của robot

2.4.1.5 Phần mềm Meshlab

Giới thiệu

MeshLab là một hệ thống mã nguồn mở, di động và có thể mở rộng để xử lý và chỉnh sửa các mắt lưới tam giác 3D không có cấu trúc. Hệ thống này nhằm giúp xử lý các mô hình phi cấu trúc không nhỏ điển hình phát sinh trong quá trình quét 3D, cung cấp một bộ công cụ để làm sạch, chữa bệnh, kiểm tra và chuyển đổi loại mắt lưới này.

Tuy nhiên trong bài viết này. Chúng ta chỉ sử dụng meshlab để lấy hình ảnh 1 bộ phận cần thiết trong quá trình mô phỏng robot

Cài đặt và khởi chạy Meshlab

Để cài đặt Meshlab. Ta nhập dòng sau $ sudo apt-get install meshlab

Để có thể khởi chạy meslab, thay vì dùng câu lệnh trên Terminal, ta có thể tìm trực tiếp trên các phần mềm đã cài đặt

Hình 2.14 Khởi chạy meshlab

2.4.1.6 Rqt_mutiplot

Rqt_multiplot cung cấp một plugin để hiển thị các giá trị số trong nhiều ô 2D bằng cách sử dụng phần phụ trợ vẽ đồ thị. (Phần này chúng ta nên cài sau khi mô

phỏng được robot và cho chạy điều hướng bởi khi đó chúng ta sẽ quen hơn với thao tác trên terminal và hiểu các câu lệnh).

Cài đặt theo hướng dẫn: Cài Rqt_mutilplot Rqt: Cho bản ROS kinetic

$ sudo apt-get install ros-kinetic-rqt $ sudo apt-get update

$ sudo apt-get install ros-kinetic-rqt-multiplot

Xây dựng nguồn: Tạo liên kết trong không gian làm việc $ ln -s ~/git/rqt_multiplot_plugin ~/catkin_ws/src

$ cd ~/catkin_ws

$ catkin build rqt_multiplot Cài đặt:

$ sudo add-apt-repository ppa:anybotics/ros $ sudo apt-get update

$ sudo apt-get install ros-kinetic-rqt-multiplot

Sau khi cài đặt. Để khởi chạy rqt_multiplot. Bật một terminal mới với lệnh roscore để khởi chạy ROS master.

Terminal 1: chạy ros-master $ roscore

Terminal 2: Khởi động rqt-multiplot $ rosrun rqt_multiplot rqt_multiplot

Rqt_multiplot không hoạt động

Với trường hợp không chạy được, ta có thể làm theo hướng dẫn bên dưới:

Sau khi chạy lệnh trên một đồ thị trống sẽ được hiện lên. Trong trường hợp vẫn không thể chạy rqt-multiplot. Ta tiến hành làm như sau

+ Vào không gian làm việc xóa đi file rqt_multiplot (Đường dẫn tìm đến file: catkin_ws/src).

Sau đó tạo một terminal mới và tiến hành tải gói rqt multiplot theo đường dẫn sau:

$ cd catkin_ws/src

$ git clone https://github.com/anybotics/rqt_multiplot_plugin.git $ cd ..

$ catkin_make

Sau khi chạy catkin_make thành công. Ta tiến hành truy cập không gian và khởi chạy rqt_multiplot

Terminal 1: Chạy ros-master $ roscore

Terminal 2: Khởi động rqt-multiplot $ cd catkin_ws

$ source /opt/ros/kinetic/setup.bash $ rosrun rqt_multiplot rqt_multiplot

Sau khi chạy ta sẽ được giao diện của rqt_multiplot:

Hình 2.15 Giao diện của rqt_multiplot

Để sử dụng Rqt_mutiplot cho robot, thao tác tương tự như hướng dẫn cuối cùng của khởi động Rqt_mutiplot

2.4.2 Yêu cầu trên mô phỏng

Trong chương này, chúng ta sẽ xem xét cách tạo mô hình rô bốt truyền động vi sai của robot này. Trường hợp sử dụng chính của robot mà chúng ta sẽ thiết kế. Mô hình robot thực tế được triển khai thực tế có thể có kích thước lớn, nhưng ở đây chúng ta dự định xây dựng một phiên bản thu nhỏ để kiểm tra phần mềm của chúng ta.

Để chế tạo phần cứng của robot, trước tiên chúng ta cần có các yêu cầu của robot. Sau nhận được các yêu cầu, chúng tôi có thể thiết kế và vẽ mô hình trong các công cụ CAD 2D để sản xuất các bộ phận của rô bốt. Mô hình 3D của robot sẽ cho chúng ta thêm ý tưởng về ngoại hình của robot.

Yêu cầu của robot

Theo đề tài yêu cầu, chúng ta chủ yếu xây dựng robot trên phần mềm nên có thể tự thiết kế theo ý riêng nhưng vẫn đảm bảo được tính tất yếu của mô phỏng.

Sau đây là tập hợp các yêu cầu cần phải đáp ứng của Robot này:

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 30)