Xây dựng thuật toán cho robot dị line trong mơi trường ROS2

Một phần của tài liệu Robot tự vận hành (Trang 71 - 75)

IV. CHƯƠNG 4: XÂY DỰNG THUẬT TOÁN CHO ROBOT TỰ HÀNH

4.5. Xây dựng thuật toán cho robot dị line trong mơi trường ROS2

4.5.1. Tạo ROS 2 package

Để robot hoạt động trong môi trường ROS 2, chúng ta cần phải tạo package chứa các tập tin cần thiết cho việc lập trình cho robot như các tập tin cài đặt, các tập tin chứa code của các node, tập tin thực thi,... trong workspace.

Các thành phần tạo nên một ROS 2 package:

package.xml: chứa những thông tin cơ bản của robot như tên robot, thông tin

người làm,...

setup.py: đây là một file python chứa các hướng dẫn về cách cài đặt package setup.cfg: file này bắt buộc phải có khi thực thi một package, mơi trường ROS 2

sẽ chạy file này và tiếp tục chạy những file chứa node

/<package_name>: đây là một đường dẫn chứa các file code của các node trong

hệ thống (có thể đặt cùng tên với package).

Tạo ROS 2 package trong đường dẫn ros2_ws (ROS 2 workspace):

Vào đường dẫn ros2_ws/src/

Tạo các file package.xml, setup.py, setup.cfg với nội dung như sau:

package.xml

<package format="3">

<name>ros2_robot</name> <version>0.0.1</version>

<description>Read data from line trace sensor and publish data to ros2 topic</description>

<maintainer email="mhuy219@hotmail.com">Huy Nguyen</maintainer> <license>Apache License 2.0</license>

<exec_depend>rclpy</exec_depend> <exec_depend>std_msgs</exec_depend>

<test_depend>ament_copyright</test_depend> <test_depend>ament_flake8</test_depend>

59 <test_depend>ament_pep257</test_depend> <test_depend>python3-pytest</test_depend> <export> <build_type>ament_python</build_type> </export> </package>

File này chứa một số thông tin và các phụ thuộc (dependencies) bắt buộc cho package.

setup.py

from setuptools import find_packages from setuptools import setup

package_name = 'ros2_robot' setup( name=package_name, version='0.0.1', packages=find_packages(), py_modules=[], install_requires=['setuptools'], zip_safe=True, author='Huy Nguyen', author_email='mhuy219@hotmail.com', keywords=['ROS2'], classifiers=[

'Intended Audience :: Developers',

'License :: OSI Approved :: Apache Software License', 'Programming Language :: Python',

'Topic :: Software Development', ],

description=(

'Read data from line trace sensor and publish data to ros2 topic'

),

license='Apache License, Version 2.0', tests_require=['pytest'],

entry_points={

'console_scripts': [

'linetrace = robot_nodes.line_node:main', 'raspi = robot_nodes.raspi_node:main',

'motor = robot_nodes.motor_node:main', 'rfid = robot_nodes.rfid_node:main', ],

} )

Khi biên dịch package, nó sẽ cho biết chúng ta cần cài đặt cái gì, cài đặt ở đâu, cách liên kết các phần phụ thuộc,... setup.cfg [develop] script-dir=$base/lib/ros2_robot [install] install-scripts=$base/lib/ros2_robot

File này sẽ cho biết nơi các tập lệnh sẽ được cài đặt, trong trường hợp này là vị trí package ros2_robot.

Và cuối cùng là tạo package chứa các node trong trong hệ thống.

Tại đường dẫn ros2_ws/src/ tạo thêm một thư mục có tên là robot_nodes, đây là nơi sẽ chứa các file của các node làm việc trong hệ thống dưới dạng file python. Như đã liệt kê ở phần trước, hệ thống của nhóm có tổng cộng 6 nodes. Ở phần này, nhóm chỉ tập trung tạo node cho phần cứng, phần node cho web sẽ được nêu ở phần sau. Do đó chỉ cịn lại 5 node trong mục này, bao gồm:

line_node.py encoder_node.py raspi_node.py motor_node.py rfid_node.py

61

Hình 54: Cây thư mục trong package ros2_robot.

Mỗi node trong hệ thống sẽ thực hiện chức năng subscriber hoặc publisher như đã thể hiện trong sơ đồ giao tiếp giữa các node thông qua topic ở phần trên.

Về phần giải thuật cho mỗi node, nhóm thực hiện sử dụng lưu đồ như lưu đồ ở mục 4.4.2

4.5.2. Các node trên robot

Dựa theo sơ đồ khối đã thiết kế ở chương 3, mỗi khối trong sơ đồ chúng ta có thể coi nó là một node. Vì vậy, hệ thống (trừ khối nguồn) sẽ có tổng cộng 6 nodes.

- Node cảm biến dò line. - Node RFID.

- Node cảm biến tốc độ.

- Node bộ xử lý trung tâm - ở đây là Raspberry Pi. - Node hiển thị - trang web.

4.5.3. Topic, Publisher và Subscriber

Như đã đề cập ở chương 2, topic là phương pháp để giao tiếp và trao đổi dữ liệu giữa hai node. ROS topic giống như một kênh tin nhắn, trong đó dữ liệu được tra đổi bằng ROS message. Mỗi topic sẽ có một tên khác nhau phụ thuộc vào những thơng tin mà nó phụ trách cung cấp. Một node sẽ publish (thiết lập) thông tin cho một topic và một node có thể đọc thơng tin từ topic đó bằng cách subscribe (truy cập/ đăng ký) với nó. Publisher là nơi truyền dữ liệu để gửi đi thông điệp (messages) của một hoặc nhiều chủ đề (topics). Subscriber là nơi thực thi nhận dữ liệu và lắng nghe thông điệp (messages) của một hoặc nhiều chủ đề (topics). Từ đó có thể suy ra mơ hình giao tiếp giữa các node của robot thơng qua topic như sau:

Hình 55: Sơ đồ giao tiếp thơng qua Topic

Một phần của tài liệu Robot tự vận hành (Trang 71 - 75)

Tải bản đầy đủ (PDF)

(90 trang)