Điều khiển robot tự hành Giảng viên TS Bùi Đình Bá TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN CƠ KHÍ BỘ MÔN CƠ ĐIỆN TỬ ĐIỀU KHIỂN ROBOT TỰ HÀNH Đề tài Ứng dụng SLAM trong điều khiển robot tự hành (ROBOT dạng 2 bánh – Differential Drive) Giảng viên hướng dẫn TS Bùi Đình Bá Nhóm sinh viên thực hiện Nhóm 14 Lê Xuân Tùng ( 20170979) Nguyễn Văn Tùng ( 20170987) Nguyễn Văn Việt ( 20170955) Hà Nội, tháng 6 năm 2021 Lê Xuân Tùng, Nguyễn Văn Tùng, Nguyễn Văn Việt Điều khiển robot tự hành Giảng viên TS Bùi Đì.
Trang 2TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN CƠ KHÍ
BỘ MÔN CƠ ĐIỆN TỬ -* -
ĐIỀU KHIỂN ROBOT TỰ HÀNH
Đề tài: Ứng dụng SLAM trong điều khiển robot tự hành
(ROBOT dạng 2 bánh – Differential Drive)
Giảng viên hướng dẫn: TS Bùi Đình Bá Nhóm sinh viên thực hiện: Nhóm 14
Lê Xuân Tùng ( 20170979)Nguyễn Văn Tùng ( 20170987)Nguyễn Văn Việt ( 20170955)
Hà Nội, tháng 6 năm 2021
Trang 3BẢN NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN
Giáo viên hướng dẫn: TS Bùi Đình Bá
Nhóm sinh viên thực hiện: Lê Xuân Tùng, Nguyễn Văn Tùng, Nguyễn Văn Việt
1 Nội dung
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
2 Nhận xét của giáo viên hướng dẫn ………
………
………
………
………
………
………
Hà Nội, ngày……….tháng………năm Giáo viên hướng dẫn ký tên
Trang 4MỤC LỤC
Chương 1: Tổng quan về robot 2 bánh chủ động (Differential Drive Robot) 81.1 Giới thiệu robot 2 bánh (Differential Drive Robot - DDR): 8
1.1.2 Nguyên lý di chuyển, mô hình động học thuận của robot: 101.2 Tổng quan cơ cấu chấp hành, mạch điện của robot Omni 12
2.2.1 Thuật toán xây dựng bản đồ (mapping): 22
2.3.4 Thuật toán lập kế hoạch đường đi (path planning): 33
4 Nền tảng cho máy tính PC: ROS Melodic trên nền Ubuntu 18.04 42
Trang 55 Nền tảng cho máy tính nhúng Raspberry Pi: ROS Kinectic trên nền
Ubuntu 16.04, sử dụng Lubuntu của Ubiquity Robot: 42
Trang 6DANH MỤC HÌNH ẢNH
Hình 1 16 Module chuyển đổi USB sang UART CP2102 15
Hình 2 5 Một phần dữ liệu nhận được từ Lidar 23Hình 2 6 Rviz mô phỏng lại dữ liệu nhận được từ scan 23Hình 2 7 Tạo map bằng gmapping không sử dụng laser scan matcher 25Hình 2 8 Tạo map sử dụng gmapping kết hợp laser scan matcher 26
Trang 7Hình 2 22 Mô tả thuật toán Dijkstra 37
Trang 8LỜI MỞ ĐẦU
Cùng với cuộc phát triển của con người, các ngành khoa học kỹ thuậtkhông ngừng tìm kiếm ra các công nghệ mới, đặc biệt là robot đang dần thaythế các công việc của con người Để robot hoạt động được, ta không chỉ cần cómột phần cơ cấu chấp hành hoàn hảo mà còn cần cả một bộ điều khiển để đápứng các nhu cầu điều khiển robot Tuy nhiên, chỉ khi có một bộ não hoàn hảo,robot mới có thể hoạt động một cách chính xác Chính vì vậy trong quá trìnhđiều khiển robot, chúng ta cần sử dụng các thuật toán điều khiển, các hàm điềukhiển để làm cho hệ thống ổn định, ít ảnh hưởng với nhiễu nhất có thể Các bộđiều khiển ngày nay đã và đang đáp ứng được rất nhiều yêu cầu điều khiển phứctạp Do đó, điều khiển thông minh trên robot ngày càng được chú trọng và ứngdụng rộng rãi trong các ngành công nghiệp, thay thế cho các hoạt động của conngười trong các môi trường độc hại, nguy hiểm Và robot tự hành là một trongcác loại robot được ứng dụng rộng rãi nhất
Robot tự hành có rất nhiều loại, với nhiều ứng dụng khác nhau ví dụ nhưrobot phun khử khuẩn trong dịch covid 19, robot hút bụi, Đặc điểm của cácloại robot tự hành đang sử dụng phổ biến hiện nay đều là các robot di chuyểnbằng bánh xe Và đơn giản và dễ điều khiển, dễ ứng dụng nhát đó là loại robot 2bánh (differential drive robot)
Vì vậy, trong khuôn khổ môn học Điều khiển robot tự hành , chúng em
lựa chọn đề tài “Ứng dụng SLAM trong điều khiển robot tự hành” để tiến hành
nghiên cứu và điều khiển robot Và trong bài tập lớn này, chúng em lựa chọnbài toán như sau:
Sử dụng RP-Lidar để quét map và định vị cho robot trong môi trường,sau đó dùng Path Planning để đưa ra điểm đích cho robot, robot sẽ tự động tínhtoán, tìm ra đường đi và đi đến vị trí đó Phần lập bản đồ, định vị và pathplanning được điều khiển trên nền tảng ROS trên linux, sau đó gửi về bộ điềukhiển trung tâm để điều khiển robot
Em xin cảm ơn thầy Bùi Đình Bá đã nhiệt tình hướng dẫn cho chúng emtrong môn học Trí tuệ nhân tạo trong robot này, kính chúc thầy có nhiều sứckhỏe!
Trang 9PHÂN CHIA CÔNG VIỆC
Để hoàn thành bài tập lớn này chúng em đã tiến hành phân chia công việc nhưsau:
Lê Xuân Tùng: Lập trình điều khiển robot, ghép nối hệ thống PC vàrobot, test robot, thuyết trình
Nguyễn Văn Tùng: Nghiên cứu, ghép nối Raspberry Pi với lidar, sử dụngROS trên linux, ghép nối các package để hoàn thành hệ thống SLAM chorobot
Nguyễn Văn Việt: Tìm hiểu về Mapping, amcl và các thuật toán định vịrobot trong môi trường, tìm hiểu package amcl trên ROS Hỗ trợ làmslide thuyết trình
Trang 10Chương 1: Tổng quan về robot 2 bánh chủ động
(Differential Drive Robot)1.1 Giới thiệu robot 2 bánh (Differential Drive Robot - DDR):
Robot DDR là một loại mobile robot di chuyển nhờ 2 động cơ riêng biệtđược đặt ở 2 bên của robot Nó có thể thay đổi hướng nhờ việc thay đổi tốc độcủa 2 bánh Thông thường robot loại này thường có thêm từ 1 đến 2 bánh phụ(bánh bị động) hay còn gọi là bánh đa hướng dùng để dẫn hướng và giữ thăngbằng cho robot
Hình 1 1 Hình ảnh một số loại robot DDR.
Ở hình trên, 2 bánh màu đen là 2 bánh chủ động, được gắn với động cơ
để điều khiển robot Bánh màu vàng là bánh đa hướng Các robot có thêm 2bánh đa hướng sẽ giữ thăng bằng tốt hơn tuy nhiên 4 bánh sẽ khó đồng phẳngnhau hơn so với loại 3 bánh
Trang 11Hình 1 2 Một số hình ảnh robot DDR của nhóm.
Hình 1 3 Một số hình ảnh robot DDR của nhóm.
Trang 12Hình 1 4 Mô hình vẽ 3D robot DDR của nhóm.
1.1.1 Cấu trúc robot của nhóm:
Khung robot được thiết kế với biên dạng hình tròn, bao gồm 3 tầng, tầng trên cùng cố định lidar mà mạch Raspberry Pi, tầng giữa cố định các mạch điều khiển trung tâm STM32 và driver điều khiển động cơ, tầng dưới cùng để pin và động cơ
Robot sử dụng bánh xe thường loại đường kính 65mm và 2 bánh xe đa hướng dạng hình cầu, động cơ giảm tốc có encoder GA25
Hình 1 5 Mô hình thiết kế của nhóm.
1.1.2 Nguyên lý di chuyển, mô hình động học thuận của robot:
Dựa vào những đặc điểm về cách thiết kế khung xe và bánh xe như trên
Trang 13thì ta có sơ đồ robot như sau:
Hình 1 6 Mô hình động học robot DDR.
Robot DDR với 2 bánh chủ động được bố trí ở 2 bên
- :là tọa độ và góc của robot theo hệ tọa độ cố định
- : là tốc độ tịnh tiến theo phương x,y và tốc độ góc của robot
- : khoảng cách giữa trục của 2 bánh xe
- : vận tốc của các bánh xe, có thể là m/s hoặc rad/s
- : Góc của robot khi chuyển động theo cung tròn với tâm quay ICC
- : Độ dài cung tròn
- : Bán kính cung tròn
Các phương trình động học:
- Vị trí của robot được xác định bởi tọa độ
- Vận tốc tịnh tiến và tốc độ góc của robot:
- Công thức biến đổi vận tốc từ hệ tọa độ cố định sang hệ tọa độ động gắntrên robot Để đơn giản ta gọi vận tốc góc của robot khi quay xung quanhtâm quay ICC với bánh kính R là
- Khi đó ta có:
Trang 14+ Nếu , robot sẽ đi thẳng Bán kính quay R bằng vô cùng, tốc độgóc của robot bằng 0
+ Nếu , robot quay tròn tại tâm robot Bán kính quay R=0
+ Nếu , robot quay với tâm quay là bánh trái Bán kính quay khi đóbằng 1 nửa khoảng cách giữa 2 bánh xe R=l/2 Ngược lại đối với trườnghợp
+ Trong các trường hợp khác thì robot sẽ chuyển động theo cungtròn với bán kính quay là R xung quanh tâm quay ICC
Phương trình động học thuận của robot:
Vị trí của tâm quay ICC:
Vị trí của robot ở một thời điểm bất kì
1.2 Tổng quan cơ cấu chấp hành, mạch điện của robot Omni
1.2.1 Khối cơ cấu chấp hành bao gồm:
- 2 động cơ giảm tốc GA25 12V có encoder, tốc độ 280RPM
Trang 15Hình 1 7 Động cơ giảm tốc GA25 12V 280RPM.
Trang 16Mạch điều khiển chính (main) có vai trò điều khiển các động cơcủa robot Trong quá tr
ình di chuyển của robot, main nhận dữ liệu sai lệch góc từ các cảmbiến như (la bàn, camera) để tính toán cấp xung điều khiển robot mộtcách chính xác
- La bàn số (cảm biến gia tốc góc MPU6050 kết hợp với bộ xử lý)
Hình 1 10 La bàn số.
La bàn số có nhiệm vụ tính toán góc quay của robot trong quá trình
di chuyển, sau đó gửi dữ liệu về main để main tính toán đưa ra vận tốc
phù hợp cho các bánh robot
- Nguồn nuôi robot: Pin lithium 3cell
Hình 1 11 Pin lithium.
- Máy tính nhúng Raspberry Pi 3:
Trang 17Hình 1 12 Máy tính nhúng Raspberry Pi 3.
Máy tính nhúng Pi có nhiệm vụ làm master cho ROS, chạy chươngtrình lidar, sau đó thông qua ROS publish các thông tin về máy tính đểmáy tính xử lý quá trình tạo map cũng như định vị cho robot Sau khithực hiện xong, máy tính giao tiếp với pi thông qua các Node để đưa ratín hiệu điều khiển xuống main
- RP Lidar A1
Hình 1 13 RP Lidar A1.
Cảm biến Laser Radar (Lidar) RPLIDAR A1 360°Laser RangeScanner được sản xuất bởi hãng SLAMTEC được sử dụng cho các ứngdụng phát hiện vật cản, lập bản đồ bằng tia Laser trong xe, robot tự hành,
hệ thống chống trộm, , cảm biến có độ ổn định và độ chính xác cao
- 2 Driver điều khiển động cơ:
Trang 18Hình 1 14 Driver điều khiển động cơ encoder.
Nhận tín hiệu điều khiển từ main và xuất ra động cơ cho động cơ
chạy, đồng thời driver này có tích hợp 1 vi điều khiển STM32 để đọc
encoder từ động cơ và tính toán điều khiển bằng PID để đảm bảo tốc độ động cơ
- Module nguồn LM2596
Hình 1 15 Module nguồn LM2596.
Mạch hạ áp pin 12V xuống 5V để nuôi main và máy tính nhúng Raspberry Pi
- Mạch chuyển đổi USB to UART CP2102
Hình 1 16 Module chuyển đổi USB sang UART CP2102.
Trang 19Mạch chuyển đổi dữ liệu từ cổng USB qua dữ liệu dạng UART để
vi điều khiển đọc tín hiệu điều khiển từ Pi
Trang 20Chương 2: SLAM trong robot tự hành2.1 SLAM là gì:
SLAM (Simultaneous localization and mapping) là hệ thống sử dụngthông tin ảnh thu được từ camera, hoặc Lidar hay 1 số loại cảm biến khác để táitạo môi trường bên ngoài bằng cách đưa thông tin môi trường vào một map (2Dhoặc 3D), từ đó thiết bị (robot, camera, xe) có thể định vị (localization) đang ởđâu, trạng thái, tư thế của nó trong map để tự động thiết lập đường đi (pathplanning) trong môi trường hiện tại
Điều khiển tự động thiết bị robot chia làm 3 vấn đề chính:
1 Định vị (localization)
2 Tái tạo môi trường (mapping)
3 Hoạch định đường đi (path planning)
Ban đầu, hai vấn đề định vị và tái tạo môi trường được nghiên cứu độc lập,tuy nhiên, sau khi nhận thấy:
● Định vị: cần xác định vị trí hiện tại của robot dựa vào bản đồ tái tạo
● Tái tạo bản đồ: cần xác định vị trí của đối tượng trong bản đồ, để xâydựng bản đồ chính xác nhất, ít sai số
Vì thế, trong giai đoạn 1985-1990, Raja Chatila và Jean-Paul Laumond(1985) và Randall Smith (1990) đã đề xuất gộp hai vấn đề với nhau để nghiêncứu Một thời gian sau đó, SLAM ra đời đại diện cho localization và mapping
Để tái tạo môi trường vào map, thực thể phải nhận thông tin các phần tửtrong môi trường xung quanh nhờ các cảm biến.Và hầu như mọi cảm biến đều
bị ảnh hưởng bởi nhiễu và khả năng của chúng có hạn, với 3 cảm biến (sonar,laser, camera) chỉ có thể thu được những vùng cục bộ của môi trường, thêm nữa
là do các thiết bị trên quá đắt, cồng kềnh do trang bị nhiều thiết bị Cảm biếnGPS không thể hoạt động ở dưới nước, ở các hành tinh khác, và ngay cả trongnhà Hệ thống SLAM lỗi khi hoạt động trong môi trường động, môi trường vớiphạm vi quá lớn, môi trường có quá nhiều hoặc quá ít đặc trưng (salientfeatures), khi camera di chuyển không ổn định, và khi các cảm biến xảy ra xungđột Những nguyên nhân này làm cho việc sử dụng chúng vào ứng dụng thực tếkhó khăn
Đã có những nghiên cứu nâng cao độ chính xác của mô hình SLAM bằngcách kết hợp các thông tin thu được từ các cảm biến Tuy nhiên, vấn đề kinh phílàm cho hướng phát triển này ít đi vào thực tế Đồng thời, việc hướng đến tạo ramột sản phẩm tốt, lại rẻ tiền là xu hướng tất yếu của thị trường Và vì vậy,
Trang 21xây dựng được một mô hình SLAM tốt Điều này dẫn đến sự ứng dụng kiếnthức trong lĩnh vực thị giác máy tính để xử lý và cấu trúc hình ảnh thu được từcamera.
2.2 Mô tả hệ thống robot mà nhóm xây dựng:
- Hệ thống máy tính nhúng Raspberry Pi: Nhận dữ liệu từ lidar, chạy ROS master, gửi lệnh điều khiển xuống main
- Mạch điều khiển (Main) và driver: Nhận lệnh từ Pi và cấp tín hiệuđiều khiển cho Driver điều khiển động cơ
- Hệ thống cảm biến (IMU, Encoder, Lidar): Các cảm biến giúp điều hướng robot và định vị robot
2.2.2 Tổng quan về ROS và khối Navigation Stack:
a) Tổng quan về ROS:
Robot operating system (ROS) là một hệ thống phần mềm có tính linh
Trang 22cá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ợ giaotiế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.
ROS giúp người dùng có thể dễ dàng kết nối các máy tính ở trên robot(Raspberry pi, Jetson Nano, các loại máy tính nhúng, mini computer, ) vớilaptop để điều khiển hoặc thao tác từ xa
Camera sẽ thu thập dữ liệu từ môi trường, thông qua Camera Node gửitới Master, master sẽ chứa toàn bộ thông tin của hệ thống và giao tiếp với cácnode khác
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ứctạp của robot ROS như là một mạng lưới điểm (node) được kết nối bởi nhiềunode 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ênrobot Mỗi node riêng có thể được tùy chỉnh phát triển và lập trình theo ý tưởngcủ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ụngcù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ênngô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àmquen 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ảnMelodic tương thích và chạy trên Ubuntu 18 trong khi đó Kinetic chạy trên nềnUbuntu 16 Ngoài ra còn có ROS Noetic cho bản Ubuntu 20 Các bạn có thể dễdàng cài đặt ROS theo hướng dẫn trên trang chủ của ROS
Hình 2 SEQ Hình_2 \* ARABIC 2.Ví dụ 1 mô hình
Trang 23ROS bao gồm các cấu thành bởi các thành phần như hình sau:
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ư Laserscanner, Camera, Node gửi vận tốc đến thiết bị điều khiển động cơ Các nodesnà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ácnode nào trong hệ thống Sau khi gọi xong, các node có thể kết nối và tương tácvớ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ácthông số trong thời gian chạy Do nó không có hiệu suất cao nên thường dùngvớ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ácnode 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
publish là đăng kí gửi thông tin
subscribe là đăng ký nhận thông tin
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ợpviệ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íchbởi các công cụ mô phỏng trong ROS như Rviz
Hình 2 SEQ Hình_2 \* ARABIC 3 Các thành