PHAN TÍCH VA THIET KE HE THONG

Một phần của tài liệu Khóa luận tốt nghiệp Kỹ thuật máy tính: Nghiên cứu và xây dựng mô hình robot phục vụ nhà hàng (Trang 32 - 51)

3.1. Phân tích phần cứng

Qua quá trình thực nghiệm kiểm thử robot, nhóm đã quyết định nâng cấp thiết

kế của robot dé phù hợp với môi trường, tính năng và tăng sự linh hoạt hơn cho robot trong quá trình di chuyền.

Sử dụng SolidWorks thiết kế 2d ba mặt trên, giữa và dưới của robot, tạo các dé

dé tôi ưu việc lap đặt các phan cứng:

e Mặt giữa của robot:

Hình 3.1: Thiết kế 2D mặt giữa của robot

o_ Các lỗ kích thước 4.9x4.9 là vị trí đặt Driver điều khiển động cơ.

o Các lỗ được sắp xếp theo hình thang 4.00, 7.00, 5.65 là vị trí dé

RPLidar. Với đáy bé là mặt sau của cảm biến.

o_ Các lỗ có kích thước 3.0x2.4 là nơi gắn động cơ.

o_ Các lỗ còn lại là vị trí đặt các trụ đồng.

22

e Mặt dưới của robot:

Hình 3.2: Thiết kế 2D mặt đưới của robot

o_ Các lỗ có kích thước 8.6x5.8 là vị trí đặt Jetson Nano.

o Hai lỗ cách nhau 4.2 là vị trí đặt mắt trâu.

o Hai lỗ hình chữ nhật là vị trí lộ bánh xe ra dé tiếp xúc với mặt đất.

Sau đó sử dụng các bản vẽ linh kiện trong các thư viện có sẵn trên GrabCAD đề

mô phỏng 3D cho robot, tránh sai lệch trong tính toán.

Hình ảnh mô phỏng 3D khi lắp ghép khung xe với các linh kiện tạo thành mô

hình robot hoàn chỉnh:

23

e_ Sơ đồ kết nối các thành phan của robot:

Motor Motor Driver Motor

Hình 3.4: So đồ khối cấu trúc của robot Trên đây là sơ đồ kết nối các thành phần của robot bao gồm:

o Jetson là bộ điều khiển trung tâm và kết nối với máy tính cá nhân

thông qua RDP (Remote Desktop Protocol)

o Các cảm biến Lidar, IMU kết nối trực tiếp với Jetson thông qua

USB/GPIO

o Jetson kết nối với Arduino và Arduino kết nối với Motor Driver dé

truyền dữ liệu điều khiển động co, Encoder ở động cơ kết nối lại với Arduino dé

3.2. Phân tích phan mềm

Đề sử dụng được chức năng Navigation, cần cài đặt và câu hình các thành phần dưới đây bên trong phần mềm của Jetson và Arduino. Để khởi chạy hệ thống robot thì cần định nghĩa và khởi chạy tất cả các node và khung tọa độ cần thiết cùng một lúc, điều này là hoàn toàn khả thi bởi vì ROS cung cấp một dạng file chuyên dùng để khởi chạy gọi là Launch (XML format) file. File Launch sẽ được đề cập bên dưới là file “jetson_nano_bot.launch”, file này sẽ định nghĩa toàn bộ các thành phan của hệ thống dé khởi chạy chúng.

24

3.2.1. Sử dụng gói tf để định nghĩa các khung cơ sở

Dé có thê mô tả vi trí của robot trên thê giới thực với máy tính, cân phải tạo ra các thành phân của robot và vi trí của các thành phân đó so với nhau trên robot hoặc vi tri của chúng so với môi trường.

Lay ví dụ trong đồ án của nhóm: Gọi base_link là khung chính của robot, laser

là khung mô tả vị trí lidar thì vị trí tương đối giữa laser so với base_link theo sốc tọa độ của chúng lần lượt là: x(0), y(0), z(0.07m) bởi vi sốc tọa độ của laser

so với base_ link theo xy là trùng nhau chỉ khác nhau về độ cao do laser nằm trên

base_ link.

Ví dụ tương tự: Gọi base_footprint là vị trí của robot trên mặt đất nghĩa là từ gốc tọa độ của base_ link xuống mặt dat.

base_ stabilized

base_link

laser_link

map odom base footprint

Hình 3.5: So đồ kết nối các frame

Đề có thể định nghĩa các khung toa độ cho robot thì gói tf cua ROS được sử dụng nó cung cấp dịch vụ để tạo ra, liên kết và quản lý các khung tọa độ một cách dé dàng. Có rất nhiều cách dé sử dụng gói tf nhưng cách mà nhóm sử dụng

là định nghĩa các khung tọa độ trong một file Launch.

25

Broadcaster: /map_to_odom Average rate: 39.890 Hz (Most recent transform: 1686158188.172 ( -0.018 sec old)

Buffer length: 4.888 sec

Broadcaster: /robot_pose_ekf Average rate: 25.273 Hz (Most recent transform: 1686158188.118 ( 0.036 sec old)

Buffer length: 4.867 sec

Broadcaster: /base_link_broadcaster

Average rate: 33.259 Hz {Most recent transform: 1686158188.172 ( -0.018 sec old)

Buffer length: 4.901 sec

Broadcaster: /imu_broadcaster Average rate: 33.219 Hz Most recent transform: 1686158 188.176 ( -0.022 sec old)

Buffer length: 4.907 sec

Broadcaster: /base_link_to_laser

Average rate: 33.070 Hz Most recent transform: 1686158 188.182 ( -0.028 sec old)

Buffer length: 4.899 sec

Hình 3.6: Sơ đồ cây #f trong thực tế của nhóm Như trong hình 3.5 cây tf sẽ bao gồm các khung:

e Map: Gốc tọa độ của bản đồ

e Odom: Tọa độ cua robot trước khi di chuyên

e Base_footprint: Tọa độ của robot trên ban đồ

e Base_ link: Tọa độ chính của robot

e Laser: Tọa độ cua lidar

e Imu: Tọa độ của cảm biến mpu6050 3.2.2. Nguồn dữ liệu cảm biến (dữ liệu từ Lidar)

Sau khi có thể định nghĩa được robot, dé nó có thé di chuyén một cách an toàn trong môi trường thì cần phải có một bản đồ và một cảm biến dé phát hiện vật

2

can.

26

Trong đồ án dé vẽ bản đồ và phát hiện vật cản cho robot nhóm đã sử dụng cảm biến RPLidar (laser) dé phục vụ cho việc này. Trong file Launch, khởi tạo một node có tên “rplidarNode” từ packet “rplidar ros” được cài đặt trong hệ điều hành. Tiếp theo thêm các tham số cần thiết như serial_port (ở đây nhóm dé port

là /dev/ttyUSBO), serial_baudrate là 115200 (là baudrate của cảm biến rplidar

mà nhóm đang dùng), frame_id là “laser”, ... Vậy là đã tao duoc node cho cam

biến RPLidar, khi khởi chạy file Launch thì topic mà cảm biến publish dữ liệu ra

là /scan, thực hiện đăng ký topic trong rviz dé lay được dữ liệu cảm biến.

3.2.3. Nguồn dữ liệu odometry

Sau nguồn dữ liệu từ cảm biến (RPLidar) thì chúng cần thiết lập dit liệu đường

đi cho robot. Việc này giúp tính toán được vận tốc, hướng xoay, hướng di

chuyên, đường đi, hướng đứng của robot gọi chung là odometry.

Dé có thé thiết lập dữ liệu odometry, cần các dit liệu sau:

e Dữ liệu từ động cơ encoder

e_ Dữ liệu cảm biến mpu6050

Kết hợp cả hai dé tạo ra nguồn dữ liệu odometry hoàn chỉnh [14].

SUBSCRIBERS PUBLISHERS

ESTIMATED 3D POSITION AND

ORIENTATION (i.e, POSE)

oe |

robot_pose_ekf ROS Package >

z

£ od :

/robot_pose_ekf/odom_combined

`

Hình 3.7: Sơ đồ kết nói dit liệu của gói robot_pose_ekf

27

Đâu tiên, đê lây dữ liệu encoder thực tê là độ dời của bánh xe so với vi trí ban

dau, mỗi điểm đó nhóm xin được gọi là 1 tick. Trong code Arduino, ứng với mỗi

bánh xe sẽ viet một hàm đêm sô ticks đê làm dữ liệu cho odometry thông qua các loại messages của ROS (định nghĩa message trong thư viện std_msgs/Int16).

Sau khi lấy dữ liệu cần phải xử lý va publish dit liệu, các bước này được thực hiện trong một node gọi là ekf_odom_pub (cpp). Về cơ bản thi node này sẽ nhận

dữ liệu encoder từ Serial node dé tính toán và publish cho một node khác để tong hợp dit liệu odometry hoàn chỉnh thông qua topic /odom_ data_ quat.

Việc kết nối giữa động cơ encoder với robot thông qua Serial_node (Arduino code) sẽ được nói rõ trong phần Bộ điều khiển động cơ, ở đây chỉ đang nói đến

việc lây dữ liệu encoder.

Phần thứ hai trong việc xây dựng nguồn dữ liệu odometry là dữ liệu từ cảm biến mpu6050. Cảm biến này cung cấp cho robot dữ liệu về tốc độ góc (angular velocity) và hướng đi của robot. Từ nguồn dữ liệu này robot có thể biết được hướng mà robot đang hướng đến và góc quay khi robot di chuyển. Dữ liệu của mpu6050 này sẽ trả về topic /imu/imu/data_raw.

Sự kết hợp của 2 phan encoder va imu là phần quan trọng nhất dé hoàn thiện nguồn dữ liệu odometry. Đề thực hiện việc này nhóm đã sử dụng một package được hỗ trợ từ ROS dé sử dụng, đó là gói robot_pose_ekf. Gói này sử dụng bộ lọc Kalman mở rộng (Extended Kalman Filter) để kết hợp các dữ liệu lại với

nhau.

Bằng cách chạy file Launch, sẽ tạo một node tên là robot_pose_ekf lay đữ liệu

từ topic /odom_ data_ quat của node ekf_odom_pub va topic /imu/imu/data_raw

của node imu sau đó đăng ký lại với tên topic lần lượt là /odom và /imu_data. Bằng cách này, robot đã có một node dé hop nhất hai luồng dữ liệu để tạo ra

nguôn dit liệu hoàn chỉnh.

28

|> tlt odom pub >>! dom, dạn quát

ae

— /

Cease ik to Jasar >>

Hình 3.8: Sơ đồ rqt thực tế của nhóm

Với sơ đồ rqt thực tế trên thì về cơ bản nhóm đã thực hiện kết nối các topic và các node đúng địa chỉ như hình 2.13, đúng chức năng, đủ thành phần dé thực

hiện navigation.

3.2.4. Bộ điều khiển động cơ

Moi robot dé hoạt động được cần một bộ điều khiển động cơ, trong đồ án này cũng như vậy, để nhận các lệnh vận tốc cũng như tính toán chỉ số PWM thích hợp truyền vào từng động co hay là gửi các dữ liệu tick cho nguồn dữ liệu odometry déu duoc thuc hién trong một node đại diện cho bộ điều khiến, được

gọi là Serial_ node.

Serial_node được tạo nên từ dit liệu của gói rosserial_python được cung cấp bởi ROS. Để khởi tạo node Serial có rất nhiều cách, ở đây nhóm sử dụng 2 cách khác nhau trong 2 mục đích khác nhau. Cách thứ nhất đó là chạy bằng lệnh Command line, đây là cách thủ công và cũng là cách mà nhóm sử dụng đề điều khiến robot di chuyền trong phòng dé vẽ map. Cách thứ 2 là cách khởi tạo thông qua file Launch, cách này sử dụng sau khi đã vẽ được map, robot cần tạo nhiều node cùng lúc dé thực hiện Navigation trong đó có Serial_node.

29

Cả hai cách trên đều có một điểm chung đó là trước khi sử dụng phải nạp code Arduino cho board Arduino Uno, sau đó mới có thé tìm thấy topic /emd_vel dé nhận các lệnh vận tốc rồi tính toán theo công thức bánh xe vi sai (Phần Lý thuyết về bánh xe vi sai được đề cập ở trên) để chuyên hóa thành chỉ số PWM

phù hợp.

Serial_node sẽ đăng ky chủ đề /emd_vel dé nhận các lệnh vận tốc dé tính toán.

Ví dụ khi vẽ map, một bộ điều khiển vận tốc và hướng đi của robot thông qua

ban phím máy tinh được tạo nên từ chương trình teleop_twist_keyboard.py của

gói rosserial. Gói này cung cấp một ma trận phím dùng dé điều hướng hoặc điều

chỉnh vận tốc di chuyền, vận tốc xoay của robot, sau khi người dùng điều chỉnh

vận tốc, chương trình sé publish dữ liệu vận tốc thông qua topic /emd_vel dé các node khác có thé nhận được, ở đây là Serial node. Còn trong phan Navigation Stack, Serial_node không chi can phải nhận lệnh van tốc, mà còn phải gửi dữ liệu encoder từ động cơ về node ekf_odom_pub thông qua topic /left_ticks và

/right_ticks.

Nhu vậy, Serial_node sé dang ky topic /cmd_ vel va publish các topic /left_ticks

và /right_ticks dé nhận và gửi dir liệu cần thiết cho nó.

3.2.5. Map server

Dé robot hoạt động trong phòng một cách chính xác thì cần phải có một bản đồ cho căn phòng đó, như vậy có thê di chuyền tự động trong môi trường một cách

an toàn và chính xác thì Robot cần được cung cấp một bản đồ để đạt được hiệu quả. Trong thực tế thì Robot có thé không cần đến ban đồ, nhưng trong đồ án này thì nhóm sẽ sử dụng ban đồ dé hỗ trợ cho robot.

Dé thiết lập ban đồ cho robot cần phải sử dụng cảm biến Lidar dé vẽ, hoặc sử dụng file ảnh (.pgm) có sẵn dé làm nguồn dữ liệu. Ở đây, nhóm sử dụng Lidar

dé vẽ sau đó chỉnh sửa lại thành file ảnh dé tạo ra nguồn dữ liệu bản đồ.

30

Đầu tiên, dé vẽ ban đồ nhóm sử dụng bộ điều khiển bang ban phim máy tinh dé điều khiển robot di chuyên trong phòng và vẽ lại bản đồ. Sau khi vẽ xong thì sẽ lưu ban đồ lại dưới dạng hình ảnh.

Dữ liệu bản đồ gồm 2 file: thứ nhất là file hình ảnh (pgm) và file mô tả (yaml).

Sau khi có được 2 file trên thì sẽ khởi tao node map_ server trong file Launch

cùng với các node khác dé sử dụng. Khi khởi động node này sẽ publish dit liệu

thông qua topic /map và khung ‘map’ trong cây tf cũng được tạo ra từ dữ liệu của node map_ server.

Node map_ server sẽ hiển thị map trên phần mềm rviz cung cấp bởi ROS dé hiển thị bản đồ trong khi thực hiện Navigation cho robot. Khi đặt robot vào trong bản

đồ cần phải chú ý hướng và vị trí của nó so với thực tế, điều này sẽ giúp việc

navigation trở nên vô cùng đơn giản và chính xác.

3.2.6. Move_base Node

3.2.6.1. Cấu hình Costmap

Chỉ phí bản đồ (costmap) hiểu đơn giản là phần tài nguyên mà robot có thê sử dụng để di chuyên. Một bản đồ sẽ được hình thành bởi một lưới các ô vuông thì các ô vuông có màu xám sẽ là những ô không bị chiếm dụng đây là phần tài nguyên mà robot có thé sử dụng được, còn các 6 vuông khác có thé là mau đen (vật cản xuất hiện trong bản đồ tĩnh) hoặc màu đỏ (vật can trong thé giới thực được phát hiện khi robot di chuyền) là những tài nguyên đã bị chiếm dụng, robot không thé di chuyên đến những vùng này.

Về lý thuyết navigation thì câu hình costmap sẽ được chia làm 2 loại là:

¢ global costmap các thông số cho việc tính toán đường đi trên toàn bộ bản

đồ. Ví dụ: tính toán đường đi từ đầu bản đồ đến cuối ban đồ.

e_ local costmap các thông số cho việc tính toán đường đi ngắn han. Ví du

khi di chuyển từ đầu đến cuối bản đồ theo kết quả của global costmap thì

31

xuất hiện một vật cản trên đường đi, lúc này local costmap sẽ tính toán

đường di giúp robot tránh vật can đó.

Ở đây chỉ đề cập đến việc thực hiện mô tả 2 loại chi phí trên chứ không đi sâu vào lý thuyết.

Trong đồ án này thì nhóm sử dụng 4 file yaml dé cấu hình costmap bao gồm:

e “costmap_common_params.yaml” để hướng các loại costmap tới các

topic mà chúng cần đề cập nhật dữ liệu e© “global_costmap_params.yaml” cấu hình cho global costmap e© “local_costmap_params.yaml” cấu hình cho local costmap

e© “base local planner_params.yaml” các thông số về vận tốc và gia tốc

cho kế hoạch đường đi của robot.

Các file này được tạo ra dựa trên hướng dẫn trên trang chủ của ROS.

3.2.6.2. Move base Node

Node move_base là nút lớn nhất trong mô hình ROS Navigation có thé nói nó

là trung tâm vận hành của hệ thống robot sử dụng Navigation. Nó chịu trách nhiệm nhận đữ liệu từ các nguồn dit liệu (Lidar, odometry), bản đồ, cây tf dé tính toán vi trí đường đi đến vị trí mong muốn trên bản đồ và tránh các vật cản xuất hiện trên đường đi đó.

Trong hệ thống robot của nhóm thì node move_base được tạo ra bằng cách cau hình nó trong file launch dé khởi tao node. Node move_base được tao dựa trên package move base được cung cap bởi ROS, và lấy tham số được cấu hình ở 4 file costmap ở phần trên dé thực hiện nhiệm vụ.

Node move_base sẽ đăng ký chủ đề /move_base_simple/goal và publish chủ

đề /cmd_ vel.

3.2.7. Cấu hình ACML

ACML là hệ thống định vị của robot, về cơ bản thì nó giúp robot xác định được

vị trí và hướng đứng của mình trên bản đô.

32

Trong đồ án này, node ACML sẽ tạo ra dựa trên gói acml được cung cấp bởi ROS, được khởi tạo trên file launch. Nó lay dữ liệu từ cảm biến Lidar, bản đồ, khung odom của tf va publish dit liệu về vị tri và hướng tương ứng trên bản đồ.

Node ACML đăng ký chủ đề /tf, /scan (Lidar), /map, /initialpose va publish các chủ dé /acml_pose, /particlecloud, /tf.

3.2.8. Khởi động robot với Navigation Stack

Đề khởi động robot với Navigation Stack thì cần thực hiện khởi chạy file

“jetson_nano_bot.launch” để khởi tạo đồng thời tất cả các node và chủ đề ké trên dé thực hiện navigation stack.

Khi chạy file launch này thi phần mềm rviz cũng sé được khởi chạy (do có định nghĩa trong file khởi tạo) sau đó cần thêm các topic cần thiết cho hệ thống để

chạy robot.

3.2.9. Tạo giao diện web và sử dụng rosbridge để giao tiếp với robot

Đề tạo một server local chạy web, sử dụng Flask, một framework phát triển web nhẹ và dễ sử dụng bằng ngôn ngữ lập trình Python. Flask cho phép người dùng

dễ dàng xây dựng và triển khai các ứng dung web trên máy tính.

Sau khi đã tạo được server local sử dụng Flask, sử dụng các ngôn ngữ (HTML,

JavaScript, CSS) dé xây dựng giao diện web cho ứng dụng của mình. HTML được sử dụng dé xác định cau trúc và nội dung của trang web, JavaScript được

sử dụng dé thực hiện các tác vu tương tác và xử lý logic trên trình duyệt kèm theo việc giao tiếp và truyền nhận đữ liệu với robot thông qua tool rosbridge để điều khiển robot và cuối cùng CSS được sử dụng dé định dạng văn bản, màu

sac, hình ảnh, bố cục, ... cho giao diện web được sinh động, dễ nhìn hơn.

Dé kết nối và truyền nhận dữ liệu giữa trang web và robot, sử dụng rosbridge. Rosbridge là một công cụ hỗ trợ kết nối và giao tiếp giữa ROS (Robot Operating System) và các ứng dụng web. Nó cung cấp một công giao tiếp WebSocket dé truyền dữ liệu qua lại giữa trình duyệt và robot.

33

Một phần của tài liệu Khóa luận tốt nghiệp Kỹ thuật máy tính: Nghiên cứu và xây dựng mô hình robot phục vụ nhà hàng (Trang 32 - 51)

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

(52 trang)