Tính toán, thiết kế hệ thống điều khiển

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

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

3.2 Tính toán, thiết kế hệ thống điều khiển

3.2.1 Mô tả hệ thống điều khiển

Robot di động thường bao gồm các khối cơ bản sau: khối nguồn, khối cảm biến, khối điều khiển trung tâm, khối điều khiển động cơ và cơ cấu chấp hành. Các khối này được minh họa bằng sơ đồ khối như hình sau:

Hình 3.11 Sơ đồ khối kết nối của Robot di động

Tín hiệu từ cảm biến được đưa vào khối điều khiển trung tâm qua các cổng và phương thức giao tiếp. Dựa vào tín hiệu từ khối cảm biến, khối điều khiển trung tâm sẽ tính toán để xác định trạng thái của robot đang di chuyển. Từ đó khối điều khiển trung tâm sẽ điều khiển các động cơ thông qua mạch công suất điều khiển động cơ. Việc này sẽ giúp robot di động có thể tự di chuyển

Mô hình robot thí nghiệm của nhóm đồ án được thiết kế dưới dạng hai bánh vi sai gồm hai bánh chủ động và hai bánh tự lựa, có trang bị những cảm biến laser, la bàn số để tích hợp và thử nghiệm. Bộ điều khiển trung tâm sử dụng máy tính laptop có chức năng xử lí các thông tin và được lập trình trên hệ điều hành ROS để đánh giá và thu thập dữ liệu thí nghiệm. Vi điều khiển Arduino Mega có chức năng kết nối với các thiết bị ngoại vi: La bàn số (IMU), Driver Smart PID,…La bàn số được đặt tại tâm của robot nhằm đo góc quay và vận tốc góc xoay khi robot di chuyển. Vi điều khiển giao tiếp với máy tính laptop qua giao thức UART để tiếp nhận dữ liệu từ các cảm biến. Cảm biến RPLIDAR A1 360° Laser Range Scanner được đặt trước robot đảm bảo được vùng quét không bị che khuất và thu thập dữ liệu từ môi trường ổn định. Dựa vào các tín

hiệu từ các cảm biến khối điều khiển trung tâm sẽ điều khiển các động cơ thông qua mạch công suất điều khiển động cơ (Driver Smart PID). Từ đó khối điều khiển trung tâm sẽ tính toán để xác định trạng thái và điều khiển robot di chuyển theo các bài toán. Những cảm biến trên giúp cho hệ thống định vị ổn định.

3.2.2 Thiết kế, lựa chọn hệ thống mạch điện

Hình 3.12 Sơ đồ hệ thống mạch điện

3.3 Chế tạo và thử nghiệm robot 3.3.1 Kết nối wifi hoặc dây 3.3.1 Kết nối wifi hoặc dây

Kết nối Wifi

Để kết nối wifi thì sẽ cần thêm Raspberry. Để kết nối, có thể tham khảo tại đường dẫn sau : Connecting to wifi

Ưu điểm: Tiện lợi, dễ lắp đặt, thiết kế

Nhược điểm: Cần cài đặt thanh công kết nối Raspberry và máy, chi phí đắt

Kết nối dây

Đơn giản hơn với kết nối wifi thì chỉ kết nối có dây chỉ cần cắm trực tiếp vào máy tính thay vì sử dụng Raspberry.

Ưu điểm: Nhanh, dễ làm

Nhược điểm: Do kết nối có dây nên yêu cầu phải thiết kế robot phù hợp để có

thể đặt máy tính kết nối

3.3.2 Kết nối cảm biến RPLidar A1 3.3.2.1 RPLidar_ROS 3.3.2.1 RPLidar_ROS

Bài này sử dụng RP LiDAR A1 để thiết kế, bước đầu tiên là cài đặt các trình điều khiển cần thiết. Trình điều khiển là một gói ROS

Để tiện lợi trong việc cài đặt RPLiDAR package, bạn có thể lấy tệp RPLidar_Hector_SLAM. Trong tệp nguồn. Bên trong có chứa package rplindar_ros cần thiết để thực hiện bước này. [8]

Cho thư mục RPLidar_Hector_SLAM vào catkin_ws/src và biên dịch bằng catkin_make. Sau đó tiến hành làm như sau

Kiểm tra cổng kết nối với rplidar: $ ls -l /dev |grep ttyUSB

Thêm quyền truy cập. thường là dev/ttyUSB0 $ sudo chmod 666 /dev/ttyUSB0

Chạy nút rplidar và tiến hành quan sát trên Rviz <+chạy roscore> $ roslaunch rplidar_ros view_rplidar.launch

Hình 3.14 Dữ liệu nhận được từ laser trên Rviz

3.3.2.2 Hector_Slam

Vì tệp RPLidar_Hector_SLAM chứa cả package này và đã biên dịch từ lần bên trên.

Đối với việc tải package từ trên github cần phải làm như sau:

Sao chép kho lưu trữ GitHub vào không gian làm việc catkin/src và chạy: $ git clone https://github.com/tu-darmstadt-ros-pkg/hector_slam.git

$ cd ..

$ catkin_make

$ source devel/setup.bash

Cần thực hiện một số sửa đổi đối với các tệp hướng dẫn Hector SLAM để chúng hoạt động. Đầu tiên chúng ta lưu ý đến các phép biến đổi có sẵn cho chúng ta về \tf chủ đề này và các hệ quy chiếu mà chúng sử dụng.

Quay lại với node rplidar đã cài ở trên, bật lên và mở một terminal mới chạy $ rostopic echo /tf

Ở đây chỉ có 2 khung là /base_footprint và /laser_frame. Tiến đến tệp

Catkin_ws/src/RPLidar_Hector_SLAM/hector_slam/hector_mapping/launch Mở mapping_default.launch và sửa như sau:

<arg name="base_frame" default="base_footprint"/> <arg name="odom_frame" default="nav"/>

Sửa thành

<arg name="base_frame" default="base_link"/> <arg name="odom_frame" default="base_link"/> Từ

<!--<node pkg="tf" type="static_transform_publisher" name="map_nav_broadcaster" args="0 0 0 0 0 0 map nav 100"/>-->

Sửa thành

<node pkg="tf" type="static_transform_publisher" name="base_to_laser_broadcaster" args="0 0 0 0 0 0 base_link laser 100" />

Theo đường dẫn sau đến tệp tutorials.launch

Catkin_ws/src/RPLidar_Hector_SLAM/hector_slam/hector_slam_launch/launch

Sửa

<param name="/use_sim_time" value="true"/> Thành

<param name="/use_sim_time" value="false"/> Điều này sẽ bỏ qua thời gian thực và chạy thực tế

Chạy nút rplidar như đã hướng dẫn ở trên. Tiếp tục chạy hector slam $ cd catkin_ws

$ source devel/setup.bash

$ cd src/RPLidar_Hector_SLAM/hector_slam/hector_slam_launch/launch $ roslaunch tutorial.launch

Hình 3.15 Lidar với gói hector slam

3.3.3 Cài đặt và kết nối Arduino IDE

Tổng quát

Bo mạch Arduino được sử dụng để xây dựng các robot nhỏ và có điều khiển đơn giản. Nhưng với khả năng tính toán và phần mềm hạn chế, không thể chuyển sang các robot phức tạp hơn. Cách thông thường tìm kiếm phần mềm dành riêng cho người máy, vì Arduino chỉ cung cấp một phần điều khiển. [7]

Hệ điều hành Robot (ROS) là một trong những khung phần mềm phần mềm trung gian cho người máy phổ biến nhất và được sử dụng rộng rãi. Đây là một nền tảng mã nguồn mở giúp các nhà sản xuất và nhà phát triển như nhau bắt đầu với phần mềm robot mà không cần phải phát minh lại bánh xe. ROS cung cấp một kiến trúc truyền thông tiêu chuẩn để tích hợp, sử dụng, phát triển và triển khai liền mạch các thành phần khác nhau của hệ thống robot bao gồm điều khiển, nhận thức, lập kế hoạch và hơn thế nữa. Nó là một nền tảng bất khả tri ngôn ngữ với hỗ trợ giao tiếp đa nền tảng cho các máy khác nhau bất kể nơi triển khai của chúng.

Arduino là bảng phát triển vi điều khiển mã nguồn mở được sử dụng nhiều nhất, nó cung cấp giao diện phần mềm-phần cứng dễ sử dụng và cộng đồng người dùng ngày càng mở rộng. Arduino hầu như tương thích với tất cả các mạch kỹ thuật số và tương tự cũng như các thiết bị bên ngoài hỗ trợ giao diện truyền thông nối tiếp như SPI, I2C và UART.

Các khung phần mềm dựa trên ROS chạy các thuật toán và quy trình cấp cao như suy luận, lọc, tạo chiến lược chuyển động, thuật toán bộ điều khiển, v.v. Bộ điều khiển Arduino gắn trên rô bốt được sử dụng để thực hiện điều khiển và cảm biến mức thấp / nhúng. Nó bao gồm bất kỳ hoặc tất cả điều khiển động cơ, cảm biến nhiệt độ và siêu âm, IMU và bộ mã hóa bánh xe, và các thiết bị khác.

Hình 3.16 Sự tương tác giữa Arduino và ROS

3.3.4 Mô hình giao tiếp giữa ROS và Arduino

Ở đây giao tiếp giữa ROS trên máy với Arduino dựa trên mô hình nhiều người xuất bản và người đăng kí (many-to-many publisher-subscriber). Ngoài ra còn một mô hình giao tiếp khác là (peer-to-peer) phương pháp dịch vụ.

Gói rosserial ROS sử dụng giao tiếp máy thu / phát không đồng bộ (UART) phổ quát của Arduino và chuyển đổi bo mạch thành ROS node có thể xuất bản thông báo ROS và đăng ký nhận thông báo. Nhà phát hành Arduino ROS node có thể gửi dữ liệu (từ cảm biến hoặc trạng thái rô bốt) từ bảng tới máy chạy ROS trong khi người đăng ký nút Arduino ROS có thể nhận hướng dẫn từ máy. Thư viện Ros_lib Arduino cho phép bảng Arduino giao tiếp với ROS.

3.3.5 Thiết lập cơ bản

1. Cài đặt thông công ROS và chạy các package 2. Cài đặt Rosserials

$ sudo apt-get install ros-kinetic-rosserial

$ sudo apt-get install ros-kinetic-rosserial-arduino

3. Cài đặt Arduino IDE

Có thể cài đặt trực tiếp trên terminal hoặc tải và cài đặt

Tải Arduino IDE tại: Download Arduino IDE . Nên chọn bản phù hợp với máy Giải nén tệp sau đó, nên để riêng một thư mục vì arduino sẽ chạy từ đó

Mở cửa sổ Terminal và chuyển vào thư mục gốc arduino-1.6.x và chạy lệnh sau: $ sudo sh install.sh

Lưu ý:

Có thể xảy ra trường hợp khi bạn tải lên chương trình - sau khi đã chọn bo mạch và cổng nối tiếp nhưng lại gặp lỗi khi mở cổng nối tiếp ... Nếu gặp lỗi này, bạn cần đặt quyền cổng nối tiếp.

$ ls -l /dev/ttyACM0

ở đây sẽ nhận được trên terminal một dòng tương tự $ crw-rw---- 1 root dialout 155, 0 5 may 16.01 ttyACM0

"0" ở cuối ACM có thể là một số khác hoặc nhiều mục nhập có thể bị trả lại. Dữ liệu cần là "dialout" (chủ sở hữu nhóm của tệp).

Thêm người dùng vào nhóm $ sudo chmod a+rw /dev/ttyACM0

*** Xử lý nếu tiếp tục gặp lỗi

- Đi đến Arduino/libraries/Rosserial_Arduino_library/src/ros - Mở và chọn edit tệp: msg.h

- Tại dòng 40 sửa thành #include <string.h> - Tại dòng 68 và 180, bỏ đi std:: trước memcpy

4. Cài đặt gói ros_lib trong IDE

Trong giao diện Arduino IDE chọn Sketch > Include Library > Manage Library Tìm kiếm rosserial và cài đặt

Sau khi cài xong tiến đến Sketch > Include Library có thể nhìn thấy thư viện Rosserial Arduino được tải xuống

5. Thực hiện chương trình:

Kết nối bo mạch Arduino Mega với máy tính xách tay qua cáp USB và xác nhận rằng bo mạch xuất hiện trong danh sách các cổng nối tiếp có sẵn trong Arduino IDE (Ở công cụ tool-> Board, port)

File > Examples > Rosserial Arduino Library > HelloWorld

Tại terminal 2: rostopic list.

Lúc này trên terminal chỉ có /rosout và rosout_agg vì chưa kết nối cổng serial Nhập dòng lệnh sau tại terminal 3

$ rosrun rosserial_python serial_node.py /dev/ttyACM0

Tại terminal 2: nhập lại rostopic list, lúc này sẽ thấy danh sách chủ đề được thêm rostopic echo /chatter và quan sát

3.3.6 Tạo launch file

Các bước để tạo một launch file

Một cách để thực thi một chương trình trong ROS, nó khởi chạy một nút tại một thời điểm. ROS có một công cụ gọi là roslaunch cho phép bạn khởi chạy nhiều nút cùng một lúc.

Mở terminal và đi đến gói mà muốn chạy. Ví dụ đi đến gói hello_word: $ cd catkin_ws/src/hello_world

Tạo một folder tên launch: $ mkdir launch

Tạo launch file bên trong launch folder $ cd launch

$ gedit

Ghi mã vào trong launch file và lưu. Dạng file <name>.launch

Ở đây sẽ lưu là talker_listener.launch và được lưu tại

catkin_ws/src/hello_world/launch

Tệp này sẽ khởi chạy các tệp thực thi C++ <launch>

<node name="listener_node" pkg="hello_world" type="listener" output="screen"/>

<node name="talker_node" pkg="hello_world" type="talker" output="screen"/>

</launch>

Ví dụ muốn chạy tệp có tên là example.py thì ta nhập như sau

<node name="listener_node" pkg="hello_world" type="example.py" output="screen"></node>

Để đảm bảo ROS có thể tìm thấy code. Cần thay đổi quyền của tệp lệnh Python. Ta làm như sau:

$ chmod + x example.py

Thay đổi quyền của tệp khởi chạy. Mở một terminal mới và nhập:

$ cd catkin_ws/src/hello_world/launch $ sudo chmod +x talker_listener.launch Chạy launch file

$ roslaunch hello_world talker_listener.launch

**** Đối với ROSLAUNCH thì sẽ tự khởi động ROSCORE không như ROSRUN nên không cần khởi chạy ROSCORE****

Launch file được tạo

<!-- Launch file for the rrt-detector and the assigner --> <launch>

<node pkg="rosserial_arduino" type="serial_node.py" name="serial_arduino ">

<param name="port" value="/dev/ttyACM0" /> </node>

<launch>

<arg name="eta" value="1.0"/> <arg name="Geta" value="15.0"/>

<node pkg="rrt_exploration" type="global_rrt_detector" name=" global _detector" output="screen">

<param name="eta" value="$(arg Geta)"/>

<param name="map_topic" value="/robot_1/map"/> </node>

<node pkg="rrt_exploration" type="local_rrt_detector" name= "local_detecto r" output="screen">

<param name="eta" value="$(arg eta)"/>

<param name="map_topic" value="/robot_1/map"/>

<param name="robot_frame" value="/robot_1/base_link"/> </node>

<node pkg="rrt_exploration" type="filter.py" name="filter" output ="screen ">

<param name="map_topic" value="/robot_1/map"/> <param name="info_radius" value="1"/>

<param name="goals_topic" value="/detected_points"/> <param name="namespace" value="/robot_"/>

<param name="n_robots" value="1"/> </node>

<node pkg="rrt_exploration" type="assigner.py" name="assigner" output= "screen">

</node>

CHƯƠNG 4: KẾT LUẬN VÀ ĐỀ XUẤT 4.1 Kết luận

Trong đề tài này, chúng em đã thành công trong việc khởi tạo robot vi sai đơn giản và đưa lên trình mô phỏng và thực hiện chạy điều hướng tự động né vật cản. Qua đó, chúng em cũng hiểu được cơ bản về những gì liên quan đến đề tài này như:

- Hệ điều hành ROS, cách cài đặt phần mềm, ứng dụng có liên quan,… - Phân tích được mô hình động học của robot dạng vi sai

- Quy trình cài đặt và sử dụng các package trên ROS - Mô phỏng và sử dụng các package trên gazebo và rviz - Can thiệp và hiểu được cơ bản về thuật toán RRT

- Tiến hành điều hướng robot tự động né vật cản tức thì trên mô phỏng - Khảo sát các thông số liên quan ảnh hưởng đến thuật toán

- Quy trình cài đặt, kết nối giữa ros và robot - Lấy dữ liệu dạng bản đồ 2D từ RPLidar

- Giải quyết một số lỗi cơ bản khi sử dụng và cài đặt các gói trên ROS

- Nghiên cứu và thiết kế được mô hình, xuất bản vẽ lắp và bản vẽ gia công cơ bản của robot

4.2 Hạn chế của đề tài

Trong quá trình thực hiện đồ án tốt nghiệp, nhóm đồ án đã cố gắng hoàn thiện việc mô phỏng và sử dụng các gói, kết nối giữa ros và robot, thiết kế chế tạo mô hình động học robot vi sai dạng 2 bánh dẫn động 2 bánh tự lựa một cách tốt nhất có thể. Tuy nhiên trong thời gian ngắn, việc mô phỏng, kết nối, thiết kế, chế tạo , gia công gặp nhiều khó khăn như:

- Chưa sử dụng thành thạo và hiểu rõ hết các quy trình thiết kế, chế tạo cần thiết trên ros

- Việc sử dụng các package chỉ mới sử dụng được trên mô phỏng và chưa áp dụng được cho robot thực

4.3 Hướng phát triển của đề tài

Tuy gặp nhiều hạn chế trong quá trình làm nhưng để có thể phát triển đề tài và đạt được thành công trong của đồ án ở mức độ cao hơn, nhóm đồ án dự kiến hướng phát triển như sau:

- Nghiên cứ và thực hiện việc kết nối và sử dụng các package trên mô hình robot thực.

- Can thiệp sâu hơn và cải tiến thuật toán sử dụng hiện tại. - Nghiên cứu sử dụng nhiều thuật toán khác nhau cho robot.

- Nghiên cứu về phương pháp định vị nhằm đảm báo tính ổn định của robot trong việc xác định vị trí của robot trong bản đồ 2D trong nhiều loại robot và môi trường khác nhau.

- Nghiên cứu về phương pháp điều hướng, tạo hiệu quả tốt hơn trong quá trình di chuyển của robot trong môi trường.

TÀI LIỆU THAM KHẢO

[1] R. Barber, J. Crespo, C. Gomez, A. C. Hernamdez, M. Galli (2018), “Mobile Robot Navigation in Indoor Environments: Geometric, Topological, and Semantic Navigation”, London, U.K.: IntechOpen, pp. 1–25.

[2] A. Koubaa, H. Bennaceur, I. Chaari, S. Trigui, A. Ammar, M.-F. Sriti, M. M. Alajlan, O. Cheikhrouhou, Y. Javed (2018), ‘‘Introduction to mobile robot path planning’’, Robot Path Planning and Cooperation, Studies in Computational Intelligence. Cham, Switzerland: Springer, pp. 3–12.

[3] J.-H. Park, U.-Y. Huh (2016), ‘‘Path planning for autonomous mobile robot based on safe space’’, J. Electr. Eng. Technol., Vol. 11, pp. 1441–1448.

[4] D. Xin, C. Hua-Hua, G. Wei-Kang (2005), ‘‘Neural network and genetic algorithm based global path planning in a static environment’’, J. Zhejiang Univ.-Sci. A, Vol. 6, pp. 549–554.

[5] V. Aenugu, P.-Y. Woo (2012), ‘‘Mobile robot path planning with randomly moving obstacles and goal’’, Int. J. Intell. Syst. Appl., Vol. 4, pp. 1–15.

[6] Siegwart, R., Nourbakhsh, I.R., Scaramuzza, D. (2011), “Introduction to Autonomous Mobile Robots”, PHI Learning Private Limited, New Delhi.

[7] Yuan, Y., Su, W., Li, Z., Shi, G. (2019), “Brain-computer interface-based stochastic navigation and control of a semiautonomous mobile robot in indoor

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