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: