Tải bản đầy đủ (.pdf) (74 trang)

ĐỒ ÁN TỐT NGHIỆP: Thiết kế hệ điều khiển xe tự hành sử dụng bánh đa hướng trên nền tảng ROS

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (4.29 MB, 74 trang )

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI

ĐỒ ÁN TỐT NGHIỆP
Thiết kế hệ điều khiển xe tự hành sử dụng
bánh đa hướng trên nền tảng ROS
NGUYỄN ĐỨC TIẾN


Ngành Kỹ thuật điều khiển và tự động hóa
Chun ngành Tự động hóa cơng nghiệp

Giảng viên hướng dẫn:

TS. Nguyễn Mạnh Linh
Chữ ký của GVHD

Bộ mơn:
Viện:

Tự động hóa cơng nghiệp
Điện

HÀ NỘI, 01/2021


ii


ĐỀ TÀI TỐT NGHIỆP
Thiết kế hệ điều khiển xe tự hành sử dụng bánh xe đa hướng trên nền tảng ROS.


Giáo viên hướng dẫn
Ký và ghi rõ họ tên

iii


iv


Lời cảm ơn
Sau một thời gian học tập và nghiên cứu, em đã cố gắng để hoàn thành đồ
án tốt nghiệp của mình. Để có được một bài báo cáo hoàn thiện này, em xin được
gửi lời cảm ơn tới các thầy cô trong viện Điện đã tạo điều kiện cho em học tập,
nghiên cứu và phát triển các kỹ năng cần thiết. Đặc biệt em xin chân thành cảm
ơn sâu sắc tới TS. Nguyễn Mạnh Linh cùng với các bạn trong nhóm lab WSR đã
giúp đỡ em trong thời gian làm đồ án tốt nghiệp để em có thể hồn thành đồ án
này một cách tốt nhất.

Tóm tắt nội dung đồ án
Đề tài được xây dựng trên nền tảng hệ điều hành dành cho robot (ROS –
Robot Operating System), đây là một hệ điều hành mã nguồn mở được tích hợp
rất nhiều cơng cụ, thư viện lớn của đơng đảo các nhà khoa học, các cơng ty,
phịng thí nghiệm trên khắp thế giới. ROS đang dần trở thành một nền tảng phổ
biến và đang được sử dụng rộng rãi để nghiên cứu, chế tạo, phát triển robot
Xe tự hành trong nhà hiện đang bắt đầu có nhiều ứng dụng trong công
nghiệp trên các lĩnh vực khác nhau. Đây cũng là một hướng đi mang tính trọng
tâm trên nền tảng ROS. Đây là quy trình thực hiện để hồn thành mục tiêu của đề
tài :
- Tìm hiểu hệ điều hành ROS.
- Nghiên cứu và mơ phỏng q trình xây dựng bản đồ và điều hướng trên

bản đồ có sẵn trên Gazabo kết hợp với ROS.
- Thiết lập phần cứng di động (Mobile base) cho hệ thống dùng vi điều
khiển PIC32MK(32bit).
- Thiết lập hệ điều hành Ubuntu, ROS trên máy tính cá nhân.
- Đọc cảm biến lidar A1 và giao tiếp với phần cứng di động.
- Tích hợp hệ thống để xây dựng bản đồ và điều hướng trên bản đồ đã dựng
dựa trên hệ thống đã xây dựng.
- Hiệu chỉnh các thơng số của gói ứng dụng đã thiết lập trong môi trường
ROS.

Sinh viên thực hiện
Ký và ghi rõ họ tên

v


MỤC LỤC
CHƯƠNG 1. TỔNG QUAN ĐỀ TÀI ................................................................. 1
1.1

Định hướng cho đề tài ................................................................................ 1

1.2

Mục tiêu của đề tài ..................................................................................... 1

1.3

Đối tượng và phạm vi nghiên cứu ............................................................. 2


1.4

Các bước thực hiện đề tài .......................................................................... 2

CHƯƠNG 2. CƠ SỞ LÝ THUYẾT ................................................................... 3
2.1

Hệ điều hành ROS (Robot Operating System) .......................................... 3
Giới thiệu tổng quan hệ điều hành ROS ..................................... 3
Các thơng tin khác ...................................................................... 4
Mơ hình ROS .............................................................................. 4
Các package quan trọng của ROS ............................................ 10

2.2

Các kiến thức cơ bản về Robotics ............................................................ 18
Hệ tọa độ ................................................................................... 18
Khung tọa độ ............................................................................. 18
Odomertry ................................................................................. 19
Pose ........................................................................................... 19

2.3

SLAM và Navigation ............................................................................... 20
Định vị robot (Robot Localization) .......................................... 20
Xây dựng bản đồ (Robot Mapping) .......................................... 20
SLAM (Simulatanous Localization and Mapping) .................. 20
Dẫn đường (Robot Navigation) ................................................ 21

2.4


Thuật toán Dijkstra cho global planner.................................................... 21

2.5

Thuật tốn Dynamic Window Approach ................................................. 24
Khơng gian tìm kiếm ................................................................ 25
Tối ưu ........................................................................................ 27

2.6

Mơ hình động học của Robot ................................................................... 27
Khung tọa độ gốc (𝑭𝑾) và khung Robot (𝑭𝑹) ....................... 27
Khung tọa độ Robot và khung bánh xe (𝑭𝒊) ............................ 28

CHƯƠNG 3. THIẾT KẾ CHI TIẾT................................................................ 30
3.1

Thiết kế chi tiết phần nguồn .................................................................... 30
Yêu cầu chức năng .................................................................... 30
Lựa chọn linh kiện .................................................................... 30
vi


3.2

Thiết kế chi tiết khối điều khiển trung tâm .............................................. 30
Yêu cầu chức năng .................................................................... 30
Lựa chọn linh kiện .................................................................... 30
Nguyên lý hoạt động ................................................................. 31

Phân tích chức năng chi tiết của các package ........................... 32

3.3

Thiết kế chi tiết khối vi điều khiển .......................................................... 34
Yêu cầu chức năng .................................................................... 34
Lựa chọn linh kiện .................................................................... 34
Nguyên lý hoạt động ................................................................. 43

3.4

Thiết kế khối sensor ................................................................................. 43
Yêu cầu chức năng .................................................................... 43
Lựa chọn linh kiện và phân tích thiết kế ................................... 43

3.5

Thiết kế chi tiết khối động cơ và bánh xe ............................................... 47
u cầu chức năng .................................................................... 47
Tính tốn lựa chọn linh kiện và phân tích thiết kế .................... 47

CHƯƠNG 4. TRIỂN KHAI VÀ KẾT QUẢ .................................................... 51
4.1

Lựa chọn công cụ thực hiện ..................................................................... 51

4.2

Kế hoạch triển khai và kiểm tra ............................................................... 51
Kiểm tra chất lượng nguồn và acquy ........................................ 51

Thực hiện đọc dữ liệu từ cảm biến............................................ 51
Kiểm tra các khả năng của robot............................................... 51

4.3

Kết quả đạt được ...................................................................................... 52
Chất lượng nguồn acquy ........................................................... 52
Dữ liêu đọc được từ cảm biến ................................................... 52
Kết quả các hoạt động của xe ................................................... 54

KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN ........................................................ 57


Những việc đã làm được .............................................................................. 57



Hướng phát triển của đồ án trong tương lai ................................................. 57

TÀI LIỆU THAM KHẢO ................................................................................. 58
PHỤ LỤC ............................................................................................................ 59

vii


DANH MỤC HÌNH VẼ
Hình 2.1 Biểu tượng của ROS ............................................................................... 3
Hình 2.2 Cấu trúc Filesystem của ROS ................................................................. 5
Hình 2.3 Cấu trúc chung của ROS packages ......................................................... 5
Hình 2.4 Các thành phần cơ bản của tầng ROS Computaion Graph ..................... 6

Hình 2.5 Ví dụ về chức năng của ROS Master ...................................................... 7
Hình 2.6 Chức năng, hoạt động của Topic ............................................................ 8
Hình 2.7 Chức năng, hoạt động của ROS Service ................................................. 8
Hình 2.8 Mối quan hệ giữa các thành phần của tầng ROS Computaion Graph .... 9
Hình 2.9 Một số phiên bản của ROS ở từng giai đoạn khác nhau....................... 10
Hình 2.10 Sơ đồ hoạt động của package move_base .......................................... 11
Hình 2.11 Bản đồ costmap trong ROS ................................................................ 12
Hình 2.12 Giá trị chi phí ảnh hưởng đén hoại động của robot ........................... 13
Hình 2.13 Broadcasting và listening của tf package ............................................ 16
Hình 2.14 Ví dụ về sử dụng tf broadcasting stastic tf.......................................... 17
Hình 2.15 Hệ trục tọa độ gồm ấm trà, robot, cái bàn .......................................... 18
Hình 2.16 Tư thế của robot (x,y,θ) ...................................................................... 19
Hình 2.17 Các ứng dụng của SLAM ................................................................... 21
Hình 2.18 Ví dụ về thuật tốn Dijkstra ................................................................ 22
Hình 2.19 Ví dụ về thuật tốn Dijkstra 1 ............................................................. 23
Hình 2.20 Ví dụ về thuật tốn Dijkstra 2 ............................................................. 23
Hình 2.21 Ví dụ về thuật tốn Dijkstra 3 ............................................................. 24
Hình 2.22 Hoạch định đường đi dùng thuật toán Dijkstra ................................... 24
Hình 2.23 Ví dụ tình huống ................................................................................. 25
Hình 2.24 khơng gian vận tốc trong DWA .......................................................... 26
Hình 2.25 Vận tốc trong cửa sổ động Vd ............................................................ 26
Hình 2.26 Heading của robot trong DWA ........................................................... 27
Hình 2.27 Khung tọa độ Robot trong khung tọa đơ gốc ...................................... 28
Hình 2.28 Khung tọa độ bánh xe trong khung tọa độ Robot ............................... 28
Hình 3.1 Sơ đồ nguyên lý hoạt đồn các package thực thi trên máy tính PC ....... 31
Hình 3.2 Tổng quan cấu trúc khối vi điều khiển ................................................. 34
Hình 3.3 Vi điều khiển PIC32MK1024MCF064................................................. 35
Hình 3.4 Sơ đồ khối vi điều khiển ....................................................................... 36
Hình 3.5 Bản vẽ 3D mạch điều khiển động cơ ................................................... 36
Hình 3.6 Sơ đồ nguyên lý khối nguồn ................................................................. 37

Hình 3.7 Sơ đồ nguyên lý khối điều khiển động cơ ............................................ 38
viii


Hình 3.8 Sơ đồ ngun lý khối truyền thơng39Hinh 3.9 Bản vẽ 3D mạch thu thập
tín hiệu sensor ...................................................................................................... 40
Hình 3.10 Sơ đồ nguyên lý khối đọc encoder ...................................................... 40
Hình 3.11 Sơ đồ nguyên lý đọc cảm biến gia tốc ................................................ 41
Hình 3.12 Sơ đồ nguyên lý khối đọc cảm biến siêu âm ....................................... 42
Hình 3.13 Sơ đồ khối hoạt động của khối điều khiển động cơ ............................ 43
Hình 3.14 Cảm biến MPU6050 ............................................................................ 44
Hình 3.15 Cảm biến Lidar A1 .............................................................................. 45
Hình 3.16 Cảm biến siêu âm SRF05 .................................................................... 45
Hình 3.17 Cảm biến địn h vị GPS Neo 6M ......................................................... 46
Hình 3.18 Bộ servo 8Nm JMC 2HSS86H + 86J18118 ....................................... 48
Hình 3.19 Bánh xe mecanum ............................................................................... 49
Hình 3.20 Cách điều hướng của xe khi sử dụng bánh mecanum ......................... 50
Hình 3.21 Sơ đồ thực thi của động cơ .................................................................. 50
Hình 4.1 Dữ liệu nhận từ encoder ........................................................................ 52
Hình 4.2 Dữ liệu nhận được từ lidar A1 .............................................................. 53
Hình 4.3 Dữ liệu từ cảm biến IMU ...................................................................... 53
Hình 4.4 Dữ liệu cảm biến SRF05 ....................................................................... 54
Hình 4.5 Tạo kế hoạch đường đi .......................................................................... 54
Hình 4.6 Khả năng lấp kế hoạch tránh vật cản .................................................... 55
Hình 4.7 Độ chính xác của Odometry................................................................. 55
Hình 4.8 Hình ảnh động cơ và bánh xe ................................................................ 56
Hình 4.9 Hình ảnh tổng thể của xe ....................................................................... 56

ix



DANH MỤC BẢNG BIỂU
Bảng 2.1 File costmap_common_params.yaml ................................................... 14
Bảng 2.2 File global_costmap_params.yaml ....................................................... 15
Bảng 2.3 File local_costmap_params.yaml ......................................................... 15
Bảng 2.4 File base_local_planer_params.yaml ................................................... 16
Bảng 2.5 Tham số bốn bánh xe ............................................................................ 29
Bảng 3.1 Bảng thơng số của máy tính Asus FX505GD ...................................... 30

DANH MỤC CHỮ VIẾT TẮT
ROS
SLAM
DWA
DOF
PWM

Robot Operating System
Simulatanous Localization and Mapping
Dynamic Window Approach
Degrees of freedom
Pulse Width Modulation

x


CHƯƠNG 1. TỔNG QUAN ĐỀ TÀI
1.1 Định hướng cho đề tài
Robot tự hành là robot có khả năng tự di chuyển, tự vận động theo một quỹ
đạo được xác định trước hoặc chưa biết trước và được thực hiện một cơng việc
được giao. Robot có thể hoạt động ở nhiều môi trường khác nhau như trên

không, trên mặt đất, dưới nước hay thậm chí là ngồi vũ trụ. Đây là một hướng đi
có tính ứng dụng rất lớn trên nhiều lĩnh vực từ dân sự, quân sự, vũ trụ và đang
được nghiên cứu phát triển rộng rãi từ các công ty lớn, những phòng nghiên cứu
ở khắp nơi thế giới. Một trong những yếu tố quan trọng của robot phải đảm bảo
về mặt năng lượng cho nó hoạt động đủ lâu trong thời gian thực hiện nhiệm vụ
và có thể tự giải quyết các vấn đề nằm ngồi dự tính như khả năng nhận diện,
phát hiện và tránh vật cản hoặc đi vào môi trường chưa biết.
Robot tự hành được thiết kế dựa trên hệ điều hành dành cho robot (Robot
Operating System, là nền tảng cho việc thiết kế phần mềm dành cho robot). Bằng
việc ứng dụng ROS cho robot, ta có thể điều khiển robot một cách dễ dàng hơn
so với việc chúng ta tự xây dựng thuật toán điều khiển cho robot, giúp cho robot
có thể tự định vị và xử lý được các tình huống trong mơi trường thực tế.
Robot có thể tự định hướng và xác định vị trí hiện tại, ta cần phải mơ phỏng
lại bản đồ khoảng không gian di chuyển của robot – việc này ta gọi là mapping.
Từ việc có được bản đồ của khoảng không gian di chuyển, ta cần phải xác định
vị trí của nó trong khoảng khơng gian ấy – việc này gọi là localization. Sau
những công việc trên, ta sẽ xác định đường đi cho robot và điều khiển để robot đi
theo đúng quỹ đạo của đường đi mà ta sẽ vẽ - việc này gọi là path-planning. Bài
toán cho vấn đề trên thực hiện dựa trên bài toán Simultaneous Localization and
Mapping – SLAM đang được nghiên cứu rộng rãi và tạo ra một cộng đồng phát
triển rất mạnh.
Để xây dựng một hệ thống hồn thiện thì đây là một đề tài khá rộng và cần
có những chuyên gia có kiến thức, kinh nghiệm để có thể phát triển một hệ thống
ổn định, hoạt động trôi chảy trên nhiều điều kiện mơi trường khác nhau. Vì tính
ứng dụng rộng lớn và tính phức tạp của vấn đề, luận văn chỉ ở mức tìm hiểu thuật
tốn và ứng dụng các thuật tốn cơ bản để có thể xây dựng được mơ hình hoạt
động hồn thiện.
1.2 Mục tiêu của đề tài
• Hiểu được cơ bản các thuật tốn trong điều hướng cho xe tự hành dựa trên
bản đồ đã dựng từ mơi trường thực tế.

• Thiết lập được một robot di động để nhận tín hiệu điều khiển và thực thi
đúng với yêu cầu do phần mềm điều hướng điều khiển.
• Ứng dụng được chương trình phần mềm trên máy tính và dùng cảm biến
lidar A1 để xây dựng bản đồ và phát hiện vật cản.
• Hiểu và thực hiện các quá trình để xây dựng một xe tự hành hồn chỉnh từ
cơng việc dựng bản đồ, hoạch định đường đi ngắn nhất, đi theo đường đi
đã hoạch định đồng thời phát hiện và tránh các vật cản.


1.3 Đối tượng và phạm vi nghiên cứu
• Thiết xe tự hành có thể mang được máy tính cá nhân cảm biến lidar A1 và
hoạt động trong môi trường trong nhà.
• Nghiên cứu thuật tốn hoạch định đường đi ngắn nhất và di chuyển theo
đường đi đã hoạch định.
• Thiết lập và xây dựng ứng dụng dựa trên các gói phần mềm có sẵn trên
cộng đồng ROS. Bên cạnh đó, tự xây dựng các gói phần mềm khác để phù
hợp với yêu cầu bài toán của luận văn đưa ra.
1.4 Các bước thực hiện đề tài
• Tìm hiểu hệ điều hành ROS.
• Nghiên cứu và mơ phỏng q trình xây dựng bản đồ và điều hướng trên
bản đồ có sẵn thơng qua Gazabo kết hợp với ROS.
• Thiết lập phần cứng di động cho hệ thống dùng vi điều khiển PIC32MK.
• Thiết lập hệ điều hành Ubuntu, ROS trên máy tính cá nhân
• Đọc cảm biến lidar A1 và giao tiếp với phần cứng di động
• Tích hợp hệ thống để xây dựng bản đồ và điều hướng trên bản đồ đã dựng
dựa trên hệ thống đã xây dựng.
• Hiệu chỉnh các thơng số của gói ứng dụng đã thiết lập trong môi trường
ROS.

2



CHƯƠNG 2. CƠ SỞ LÝ THUYẾT
2.1 Hệ điều hành ROS (Robot Operating System)
Giới thiệu tổng quan hệ điều hành ROS
ROS là gì?
ROS là một hệ điều hành mã nguồn mở dùng cho các ứng dụng robot ,về cơ
bản ROS có đặc trưng của một hệ điều hành như khả năng thực hiễn các tác vụ
(task) song song, giao tiếp, trao đổi dữ liệu với nhau giữa các tác vụ, quản lý dữ
liệu,… Hơn thế nữa, ROS có thể ứng dụng trong lĩnh vực robotics, ROS còn
được phát triển riêng biệt về các thư viện, công cụ dành cho việc thu thập, xử lý,
hiển thị, điều khiển,… ROS có thể kết hợp, tương tác với nhiều robot framework
khác như Player, YARP, Orocos, CARMEN, Orca, Moos và Microsoft Robotics
Studio.

Hình 2.1 Biểu tượng của ROS

ROS là hệ điều hành được phát triển chuyên dụng cho các ứng dụng điều
khiển robot, với ROS ta có thể lập trình, biên dịch, chạy thực thi chương trình
điều khiển qua nhiều máy tính và nhiều hệ thống robot khác nhau. Graph trong
ROS có thể được hiểu như cây (tree graph) biểu diễn quan hệ giữa các thành
phần trong hệ điều hành này như nodes, topics, messages, services v.v (các khái
niệm này sẽ được giải thích rõ hơn trong mục 2.1.3.2). Về mặt trao đổi dữ liệu và
giao tiếp trong ROS: ROS tích hợp một vài chuẩn giao tiếp khác nhau, bao gồm
giao tiếp đồng bộ theo chuẩn RPC qua các services, truyền dữ liệu bất đồng bộ
qua topics và lưu trữ dữ liệu trên các Parameter Server.
Ưu điểm của ROS:
Xây dựng ứng dụng robotics trên nền tảng ROS sẽ giảm đi một lượng đáng
kể các công việc lập trình, thiết kế hệ thống. Nhưng phần này có thể tận dụng
nguồn tài nguyên mã nguồn mở vô cùng phong phú của cộng đồng. Theo

[ROS5], ta có thể so sánh khối lượng công việc kỹ thuật cơ bản (required
engineering) và khối lượng nghiên cứu khoa học nòng cốt (Core Research) như
sau:
Từ đó ta thấy rằng, với sự hiệu quả từ ROS, thời gian dành cho các công
việc kỹ thuật cơ bản sẽ được giảm xuống rất đáng kể, và do đó, tăng thời gian
cho cơng việc nghiên cứu chun sâu, hàm lượng khoa học đạt được trong đề tài
sẽ lớn hơn nhiều lần.

3


Một số đặc điểm làm cho ROS là một hệ điều hành nên được sử dụng:
• ROS là hệ điều hành mã nguồn mở.
• Các tài liệu kỹ thuật, tài liệu hướng dẫn và các kênh hỗ trợ đầy đủ.
Một trong những vấn đề cốt lõi nhất khiến ROS trở nên mạnh mẽ đó là
tính cộng đồng rất lớn. Nguồn tài nguyên được cộng đồng đóng góp hầu như
được xây dựng, phát triển từ những viện nghiên cứu và những trường đại học
hàng đầu.
Những tài nguyên được cung cấp từ ROS thể hiện được sức mạnh trong các
lĩnh vực robotics như là:






Visualization
Object recognition
Navigation
Manipulation/ grasping

Plugging in
Các thông tin khác

ROS chạy trên nền tảng Unix. Phần mềm cho ROS chủ yếu được thử
nghiệm trên Ubuntu và Mac OS X. Cho đến nay cộng đồng ROS cũng đã bắt đầu
xây dựng cho Fedora, Gentoo, Arch Linux và các nền tảng Linux khác. ROS hiện
nay đã được hỗ trợ trên Microsoft Windows nhưng có phần chưa được tối ưu.
Hệ điều hành ROS cùng với các công cụ và thư viện hỗ trợ thường được
phát hành ở dạng ROS Distribution, tương tự như Linux distribution, cung cấp
một bộ phần mềm để người dùng sử dụng, xây dựng và phát triển. ROS là hệ
điều hành mã nguồn mở, do đó thu hút được sự quan tâm đóng góp của cộng
đồng để phát triển hệ thống cũng như các công cụ và thư viện kèm theo. Cộng
đồng ROS tham gia đóng góp mã nguồn ngày càng phát triển, tuy vậy vẫn tập
trung chủ yếu ở Hoa Kỳ, Tây Âu, ngồi ra cịn có Nhật Bản.
Mơ hình ROS
Mơ hình ROS gồm có 3 tầng: Filesystem, Computation Graph, và
Community. Bên cạnh đó, ROS định nghĩa hai kiểu đặt tên (Names): Package
Resource Names và Graph Resource Names.
Tầng ROS Filesystem
Filesystem là nguồn tài nguyên ROS được lưu trữ trên bộ nhớ hệ thống, bao
gồm những thành phần như:

4


Hình 2.2 Cấu trúc Filesystem của ROS

• Packages: gói dữ liệu là đơn vị chính trong tổ chức phần mềm của hệ điều
hành ROS. Một package có thể chứa các lệnh thực thi của ROS (các
nodes), một thư viện phụ thuộc ROS, tập dữ liệu, các file cấu hình, hoặc

các dữ liệu cần thiết khác trong hệ thống, mục đích của package là để tạo
ra tập hợp chương trình có kích thước nhỏ nhất để có thể dễ dàng sử dụng
lại.

Hình 2.3 Cấu trúc chung của ROS packages

Cấu trúc điển hình của ROS packages :
Hình 2.3 mơ tả các file và thư mục cơ bản bên trong một package:
- config: Tất cả các file cấu hình được sử dụng trong ROS packages được
giữ trong thư mục này. Thư mục này được tạo bởi người dùng và cũng là
thủ tục chung đặt tên cho thư mục config để giữ các tệp cấu hình trong
đó.
- include / package_name: Thư mục này bao gồm các tiêu đề và thư viện
cần sử dụng bên trong package.
- scripts: Thư mục này lưu giữ các script Python thực thi.
- src: Thư mục này lưu trữ các srouce code C ++.
- launch: Thư mục này giữ các launch file được sử dụng để khởi chạy một
hoặc nhiều node ROS.
5


msg: Thư mục này chứa các định nghĩa message.
srv: Thư mục này chứa các định nghĩa service.
Action: Thư mục này chứa các định nghĩa hành động.
package.xml: Đây là package manifest file của gói này.
CMakeLists.txt: Đây là build Cmake file của gói này.
Manifests: là bảng kê khai thơng tin dữ liệu package (manifest.xml), cung
cấp cơ sở dữ liệu về package đó, bao gồm điều kiện cho phép (license) và
những yếu tố phụ thuộc của gói dữ liệu đó. Manifest cịn chứa thơng tin về
đặc trưng của ngơn ngữ lập trình ví dụ như các cờ báo (flags) của trình

biên dịch.
• Stacks: là tập hợp các packages phối hợp với nhau để thực hiện một chức
năng cụ thể, chẳng hạn như “navigation stack” là tập hợp các package dẫn
hướng cho robot. Stack cịn mơ tả cách thức phần mềm ROS được xây
dựng và chứa thông tin về phiên bản ROS đang sử dụng.
• Stack Manifests: (stack.xml) cung cấp cơ sở dữ liệu về một stack, bao
điều kiện cho phép (license) và các thơng số phục thuộc vào những stack
khác.
• Message (msg) Types: Thông tin mô tả message, được lưu trữ trong
my_package/msg/MyMessageType.msg, định nghĩa cấu trúc dữ liệu cho
các messages được gửi trong ROS.
• Service (srv) Types: thơng tin mơ tả các services, được lưu trữ trong
my_package/srv/MyserviceType.srv, định nghĩa cấu trúc dữ liệu cho các
lệnh truy cập (request) và các phản hồi (response) của các services trong
ROS.
Tầng ROS Computation Graph
“Computation Graph”, tạm gọi là lược đồ tính tốn, là một mạng
nơi
cá quy trình trong ROS được kết nối với nhau. Computation Graph cơ bản gồm
các thành phần như: các nút (nodes), Master, Parameter Server, messages,
services, topics và bags. Tất cả các thành phần này đều cung cấp dữ liệu cho
Graph bằng những phương thức


Hình 2.4 Các thành phần cơ bản của tầng ROS Computaion Graph

6


Hình 2.4 mơ tả các thành phần cơ bản của tầng ROS Computation Graph,

mỗi thành phần đều có một chức năng riêng và có nhiệm vụ như sau:
• Nodes: là đơn vị thực hiện các lệnh tính tốn, xử lý dữ liệu. Hệ điều hành
ROS được thiết kế mơ-đun hóa, các mô-đun được xây dựng rất chi tiết và
chuyên biệt, một hệ thống điều khiển robot thường bao gồm nhiều nodes.
Ví dụ, một node điều khiển hệ thống cảm biến, một node thực hiện việc
tác vụ định vị, một node hoạch định đường đi, một node vẽ quỹ đạo của
hệ thống... Mỗi node ROS được xây dựng nhờ sử dụng một ROS client
library, chẳng hạn như roscpp hoặc rospy.
• Master: Các ROS Master lưu trữ các topic và thông tin đăng kí services
cho các node cũng như cung cấp tên đăng ký và tra cứu đến phần còn lại
của Computation Graph. Nếu khơng có Master, các node sẽ khơng thể tìm
thấy nhau, trao đổi thơng tin, hay gọi services đều khơng thực hiện được.

Hình 2.5 Ví dụ về chức năng của ROS Master

Hình 2.5 Mơ tả hoạt động giao tiếp giữa các topic với nhau thông qua ROS
Master. Node ” Hello World Publisher “ giao tiếp với ROS Master báo thơng tin
đăng kí của node. Node “ Hello World Subscriber “ đăng kí nhận tin từ topic “
Hello World “.
• Parameter Server: Parameter Server cho phép dữ liệu được lưu trữ bởi các
từ khóa trong một vị trí trung tâm, nó là một phần của Master,
• Messages: các node giao tiếp với nhau thông qua các message. Một
message đơn giản là một cấu trúc dữ liệu, bao gồm các trường được định
kiểu. Các kiểu dữ liệu chuẩn (như interger, floating point, boolean…) và
mảng (array) với kiểu chuẩn đều được hỗ trợ. Messages có thể bao gồm
các cấu trúc và các mảng lồng nhau (giống như kiểu structs của ngôn ngữ
C).

7



Hình 2.6 Chức năng, hoạt động của Topic

Hình 2.6 mơ tả chức năng của Topic giống như khái niệm của nó, các node
giao tiếp với nhau thơng qua các topic.
• Topics: Messages được định tuyến thông qua một hệ thống trao đổi
(transport system), trong đó phân loại các thơng điệp thành 2 dạng:
publish (đưa tin) và subscribe (đăng ký nhận thông tin). Một node gửi đi
một message bằng việc đưa thông tin tới một topic (chủ đề). Tên của topic
được dùng để quy định nội dung của message. Một node liên quan đến
loại dữ liệu như thế nào sẽ được đăng ký nhận tin từ topic tương ứng. Một
topic có thể có nhiều đối tượng đưa tin (publishers) cũng như nhiều đối
tượng đăng ký nhận tin (subcribers) và mỗi node cũng có thể truyền tin
nhiều topic khác nhau, cũng như có thể nhận tin từ nhiều topic. Các nguồn
truyền tin và các đối tượng nhận tin nhìn chung khơng cần phải biết về sự
tồn tại của nhau. Ý tưởng xây dựng ROS ở đây là tách biệt nguồn tạo ra
thông tin với bộ phần sử dụng thơng tin đó. Topic được xem như là một
kênh truyền các thông điệp được định kiểu. Mỗi kênh truyền này có một
tên riêng và node nào cũng có thể kết nối với kệnh này để gửi/ nhận thông
điệp, miễn là thông điệp cùng kiểu với topic đó.

Hình 2.7 Chức năng, hoạt động của ROS Service

8


Hình 2.7 mơ tả chức năng hoạt động của ROS Service không giống như
topic, service là giao tiếp one-time, khi một Client gửi yêu cầu sau đó Server sẽ
gửi lại tín hiệu phản hồi.
• Services: Mơ hình truyền thơng theo mẫu publish/subcribe như trình bày ở

trên là một mơ hình rất linh hoạt, tuy vậy, đặc điểm của nó là thông tin
được truyền đa đối tượng, một nhiều (many-to-many, one-way) đôi khi lại
không phù hợp với các trường hợp cần tương tác theo kiểu request/reply
(yêu cầu/đáp ứng), kiểu tương này thường gặp trong các hệ thống phân
phối. Do vậy, cần có thêm một thành phần nữa trong ROS Graph, đó là
“services”, nhằm thực hiện được các yêu cầu tương tác theo kiểu
request/reply. Services là một cặp cấu trúc thông điệp: một thông điệp để
gửi yêu cầu và một thông điệp dành cho đáp ứng. Một node cung ứng một
service với một thuộc tính “name”, một client sử dụng service đó bằng
cách gửi đi một thông điệp yêu cầu (request message) rồi đợi phản hồi.
Trong thư viện client của ROS, phương thực tương tác này thường được
cung cấp như một hàm được gọi từ xa.
• Bags: là một định dạng để lưu và phát lại dữ liệu từ các ROS messages.
Bags là một cơ chế quan trong để lưu trữ dữ liệu, chẳng hạn như dữ liệu
cảm biến, những dữ liệu này là cần thiết để phát triển và thử nghiệm các
thuật tốn.

Hình 2.8 Mối quan hệ giữa các thành phần của tầng ROS Computaion Graph

Hình 2.8 mơ tả đầy đủ mối quan hệ cũng như liên kết giữa các thành phần
của tầng ROS Computation Graph.
Community
Giải thích/ hướng dẫn các cơng cụ và các khái niệm để chia sẻ kiến thức,
thuật tốn chương trình từ bất kỳ nhà phát triển nào. Đây là cấp độ quan trọng vì
nó ảnh hưởng đến sự phát triển lớn mạnh của cộng đồng ROS.

9


Distributions: là tổng hợp các phiên bản của stack mà chúng ta có thể cài

đặt. ROS Distributions có vai trị tương tự như Linux Distributions.

Hình 2.9 Một số phiên bản của ROS ở từng giai đoạn khác nhau

Respositories: là nguồn tài nguyên dựa trên cộng đồng mạng lưới các tổ
chức khác nhau phát triển và phát hành những mơ hình riêng của họ.
The ROS Wiki: gồm nhiều tài liệu về ROS. Bất cứ ai cũng có thể chia sẻ tài
liệu, cung cấp các bản cập nhật, viết các bài hướng dẫn,… bằng tài khoản mà họ
đã đăng ký.
Các package quan trọng của ROS
2.1.4.1 navigation
Navigation stack lấy thông in từ odometry, sensor và tư thế đích để đưa ra
vận tốc mong muốn để gửi đến robot. Có thể sử dụng navigation stack trên robot
tùy ý, tuy nhiên robot phải được chạy ROS, có cây truyển tf và gửi dữ liệu cảm
biến sử dụng chính xác các Message type của ROS.
Mặc dù Navigation stack được thiết kế sao cho dùng trong mục đích chung
nhất có thể, nhưng vẫn có một số u cầu bắt buộc về phần cứng như sau:
• Nó được thiết kế dành cho cả mơ hình robot lái bằng hiệu tốc độ
(differential drive) và mơ hình robot có bánh xe đa hướng (holonomic
wheeled robots). Nó chỉ việc gửi trực tiếp giá trị vận tốc xuống cho bộ
phận điều khiển di chuyển của robot để đạt được các giá trị của robot
mong muốn như vận tốc theo trục x, vận tốc theo trụ y và vận tốc xoay.

10


• Navigation stack cần phải được lắp một cảm biến laser scan được gắn lên
robot. Laser scan này dùng để xây dựng bản đồ (mapping), định vị
(localization) và phát hiện vật cản.
• Nó được phát triển trên những robot có hình vng vì thế để được hiệu

năng tốt nhất thì hình dạng robot nên là hình vng hoặc hình trịn.
Navigation stack cũng làm việc được trên robot có hình dạng và kích
thước bất kỳ nhưng sẽ khó khăn với những robot có kích thước lớn khi
làm việc trong những khơng gian hẹp.
2.1.4.2. move_base
Package move_base cung cấp triển khai một hành động bằng cách đưa ra
mục tiêu của điểm cần đến trên bản đồ, nó sẽ cố gắng đưa robot tới điểm đó. [1]

Hình 2.10 Sơ đồ hoạt động của package move_base

Hình 2.10 trên ta thấy những thành phần bên trong move_base (Màu trắng)
là những thành phần bắt buộc phải có. Những thành phần acml,map_server(màu
xám) là những thành phần tùy chọn, và những thành phần còn lại (màu xanh) là
những thành phần phải có tùy thuộc vào robot mà ta thiết kế.
• Global_planner : package này cung cấp cơng cụ lập kế hoạch đường dẫn
toàn cầu hoạt động trên global_costmap, và cung cấp các thư viện và các
node cho việc lập kế hoạch đường đi tối ưu từ vị trí hiện tại của robot tới
vị trí mục tiêu. Gói này có triển khái thuật tốn tìm đường đi như A*,
Djikstra … để tìm đường đi ngắn nhất.
• Local_planner : chức năng chính của package này là điều hướng robot
trong phần của đường dẫn toàn cầu đã được lập kế hoạch bằng cách sử
dụng global planner. Local planner hoạt động trên local_costmap chỉ sử
dụng thông tin cảm biến cục bộ để xây dựng bản đồ chướng ngại vật đồng
thời gửi một vận tốc thích hợp ra lệnh cho bộ điều khiển robot hoàn thành
một đoạn đường của kế hoạch đường dẫn toàn cầu. ROS cung cấp hai
thuật toán lập kế hoạch đường dẫn cục bộ cụ thể là Trajectory Rollout và
Dynamic Window Approach (DWA) .
a. Costmap 2D
11



Costmap 2D là một package để triển khai bản đồ chi phí (costmap) từ việc
lấy dữ liệu của cảm biến từ môi trường, xây dựng một lưới các nơi bị chiếm chỗ
và tăng vùng chi phí trong bản đồ chi phí 2D dựa trên lưới các nơi bị chiếm chỗ
và bán kính tăng chi phí do người dùng định nghĩa. [2]

Hình 2.11 Bản đồ costmap trong ROS

Trong hình trên, các ô màu đỏ đại diện cho các chướng ngại vật trong bản
đồ chi phí, các ơ màu xanh biểu thị cho các chướng ngại vật bị thổi phồng bởi
bán kính nội tiếp của robot và đa giác màu đỏ đại diện cho dấu chân robot. Để
robot tránh va chạm , base_footprint của robot không được giao với các ô màu đỏ
và tâm của robot không bao giờ được cắt qua ô màu xanh lam.
Costmap 2D dùng để chứa thông tin các vật cản cũng như những nơi mà
robot không thể tới được. Costmap sử dụng dữ liệu của các cảm biến từ bản đồ
đã được xây dựng trước đó và cập nhật thông tin của vật cản vào costmap.
Các phương pháp cơ bản sử dụng để ghi dữ liệu lên costmap được cấu hình
đầy đủ, mỗi bit chức năng nằm trên một lớp khác nhau. Ví dụ, bản đồ tĩnh (bản
đồ đã được dựng trước đó) được nằm trên một lớp, và các vật cản được nằm trên
một lớp khác. Lớp chứa vật cản lưu trữ thông tin các vật thể theo ba hướng nhằm
cho vấn đề xử lý các vật cản trong bản đồ thông minh hơn.
Costmap tự động đăng ký nhận dữ liệu từ các topic của cảm biến thông qua
ROS và cập nhật các thông tin cho chính costmap này một cách thích hợp. Mỗi
cảm biến được sử dụng để đánh dấu các vật cản hoặc loại bỏ các vật cản trong
costmap. Nếu các vật thể được lưu trữ thơng tin ở dạng ba chiều thì được chuyển
thành hai chiều khi đặt vào costmap.

12



Hình 2.12 Giá trị chi phí ảnh hưởng đén hoại động của robot

Hình 2.12 trên chỉ cho ta thấy được giá trị chi phí ảnh hưởng đến hoạt động
của robot như thế nào.
• Cost_lethal: là giá trị của một cell chứa,nếu trọng tâm của robot đi vào
vùng này thì chắc chắn robot sẽ bị va chạm.
• Cost_inscribed: là giá trị của một cell từ vật cản đến bán kính nối tiếp
của robot, nếu tâm của robot nằm trong vùng này thì robot chắc chắn sẽ
chỉ va chạm vào cật cản
• Cost_possibly_circumscribed: là giá trị chi phí tương tự cost_inscribed
nhưng đó là giá trị từ vật cản đến bán kính nối của robot, nếu tâm của
robot đi vào vùng này thì khả năng robot sẽ va chạm vật cản phụ thuộc
của hướng đi của robot sẽ như thế nào.
• Cost_freespace: có giá trị bằng 0, thể hiện rằng khơng có vật cản nơi
này,robot có thể di chuyển tự do trong vùng này
• Cost_unknow: là những cell chưa có thơng thin về giá trị của chi phí.
b. Cách cấu hình costmap
Để bắt đầu cấu hình, chúng ta cần biết mỗi costmap được dùng để làm gì.
Robot sẽ di chuyển trong map với hai định hướng đường đi là toàn cục (global)
và cục bộ (local): định hướng đường đi toàn cục (global navigation) được dùng
để tạo đường đi cho mục tiêu trong bản đồ hoặc đường đi có khoảng cách xa;
định hướng đường đi cục bộ (local navigation) được dùng để tạo đường đi trong
khoảng cách gần và để tránh vật cản khi robot di chuyển.
Các module này sử dụng costmap để giữ thơng tin về bản đồ. Định hướng
đường đi tồn cục thì dùng costmap tồn cục (global costmap) và costmap cục bộ
(local costmap) dùng cho định hướng cục bộ. Mỗi costmap sẽ có những thơng số
13


riêng của nó và cũng có những thơng số dùng chung. Chúng được cấu hình dựa

vào các file: costmap_common_params.yaml, global_costmap_params-.yaml,
local_costmap_params.yaml.
Bảng 2.1 File costmap_common_params.yaml

obstacle_range: 2.5
raytrace_range: 3.0
footprint: [[-0.3, -0.3], [-0.3, 0.3], [0.3, 0.3], [0.3, -0.3]]
inflation_radius: 0.55
transform_tolerance: 0.5
observation_sources: scan
scan:
data_type: LaserScan
topic: scan
marking: true
clearing: true
map_type: costmap
Đoạn chương trình trên nằm trong file costmap_common_params.yaml
dùng để cấu hình các biến dùng chung cho cả local_costmap và global_costmap
Thuộc tính obstacle_range và được dùng để chỉ khoảng cách tối đa mà
cảm biến có thể đọc và sinh ra thơng tin mới về môi trường trong costmap. Nếu
robot phát hiện ra vật cản có khoảng cách nhỏ hơn obstacle_range thì nó sẽ đặt
một vật cản vào costmap. Nếu robot di chuyển, nó có thể xóa costmap và cập
nhật freespace. Lưu ý rằng chúng ta chỉ có thể cập nhật các giá trị được trả về từ
thông tin laser trên bề mặt vật cản mà khơng thể nhận biết được tồn bộ vật cản.
Nhưng với những thông tin này, ta đã có thể xây dựng được bản đồ.
Thuộc tính footprint dùng để chỉ cho Navigation stack nhận biết được hình
thái của robot. Các thông số này dùng để giữ khoảng cách giữa vật cản và robot
để không xảy ra sự va chạm hoặc robot có thể di chuyển qua những nơi có
khoảng cách hẹp.
Thuộc tính inflation_radius là thơng số để giữ khoảng cách nhỏ nhất giữa

tâm của robot và vật thể.
Thuộc tính laser_scan_sensor dùng để khai báo các thơng tin về loại cảm
biến được dùng (ở đây là dùng laser scan) và được dùng để thêm/xóa vật cản
trong costmap.

14


Bảng 2.2 File global_costmap_params.yaml

global_costmap:
global_frame: /map
robot_base_frame: /base_footprint
update_frequency: 1.0 #before: 5.0
publish_frequency: 0.5 #before 0.5
static_map: true
transform_tolerance: 0.5
cost_scaling_factor: 10.0
inflation_radius: 0.55
Các thông tin trên là dùng để khai báo các biến cho file
global_costmap_params.yaml
Thuộc tính global_frame và robot_base_frame được định nghĩa frame
toàn cục và frame gắn với Mobile base
Thuộc tính update_frequency dùng để khai báo tần số cập nhật cho
costmap, ở đây giá trị là 1Hz.
Thuộc tính static_map để dùng khai báo có hay khơng dùng bản đồ đã
dựng trước đó.
Bảng 2.3 File local_costmap_params.yaml

local_costmap:

global_frame: /odom
robot_base_frame: /base_footprint
update_frequency: 1.0 #before 5.0
publish_frequency: 2.0 #before 2.0
static_map: false
rolling_window: true
width: 2.5
height: 2.5
resolution: 0.05 #increase to for higher res 0.025
transform_tolerance: 0.5
cost_scaling_factor: 5
inflation_radius: 0.55
Các thuộc tính global_frame, robot_base_frame, update_frequency và
static_map giống với file global_costmap_params.yaml
Thuộc tính publish_frequency để xác định tần số cập nhật thơng tin
Thuộc tính rolling_window dùng để giữ costmap nằm ở tâm của robot khi
di chuyển
15


×