Luận văn Robot tự hành tránh vật cản sử dụng thiết bị Kinect

Đề mục Trang

Lời cảm ơn . i

Tóm tắt luận văn . ii

Mục lục . iii

Danh mục từ viết tắt . v

Danh mục hình . viii

Danh mục bảng . xi

Mục lục

Chương 1: Giới thiệu . 1

1.1 Xu hướng phát triển của robot hiện đại . 2

1.2 Những vấn đề của robot di động . 2

1.3 Mục tiêu luận văn và phương pháp thực hiện . 3

1.4 Sơ lược về nội dung luận văn . 4

Chương 2: Tìm hiểu về Kinect . 5

2.1 Giới thiệu chung . 6

2.2 Những thành phần chính của Kinect . 7

2.3 Tính toán độ sâu . 8

2.4 Một số đặc tính khác . 12

Chương 3: Thư viện xử lý ảnh . 15

3.1 Thư viện hỗ trợ Kinect . 16

3.2 So sánh Kinect SDK beta và OpenNI . 17

3.3 Point Cloud Library . 20

Chương 4: Phát hiện vật cản . 22

4.1 Các phương pháp phát hiện vật cản không sử dụng camera . 23

4.1.1 Dùng công tắc hành trình. 23

4.1.2 Dùng cảm biến siêu âm [13] . 23

4.2 Các phương pháp phát hiện vật cản sử dụng camera . 26

iv

4.2.1 Xử lý ảnh với một camera (Monocular vision) . 26

4.2.2 Xử lý ảnh với hai camera (Stereo vision) . 29

4.3 Phát hiện vật cản sử dụng Kinect . 31

Chương 5: Module điều khiển động cơ . 39

5.1 PIC 18F4550 . 40

5.1.1 Giới thiệu chung . 40

5.1.2 Những module chính sử dụng trong luận văn . 45

5.2 Mạch công suất (mạch cầu H) . 55

Chương 6: Động cơ và giải thuật PID vị trí . 56

6.1 Động cơ Servo DC . 57

6.1.1 Động cơ DC . 57

6.1.2 Encoder . 59

6.2 Giải thuật PID vị trí [19] . 63

Chương 7: Tính toán tọa độ Robot và Kinect . 68

7.1 Các phép chuyển đổi hệ trục tọa độ cơ bản . 69

7.2 Tính toán tọa độ robot . 70

7.3 Tính toán tọa độ Kinect . 73

Chương 8: Chương trình điều khiển . 76

8.1 Nội dung chương trình điều khiển . 77

8.2 Giải thuật chương trình do máy tính xử lý . 77

8.3 Giải thuật chương trình do vi điều khiển xử lý . 88

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

TÀI LIỆU THAM KHẢO . 92

PHỤ LỤC 1: Kết hợp thư viện OpenNI và Code Laboratories Kinect (CL) để sử

dụng chức năng điều khiển động cơ Kinect. . 93

PHỤ LỤC 2: Cách đấu dây dùng pin 12V thay adapter và tạo đế gắn lên robot

cho Kinect . 96

PHỤ LỤC 3: Kích thước robot . 99

pdf114 trang | Chuyên mục: MATLAB | Chia sẻ: dkS00TYs | Lượt xem: 3405 | Lượt tải: 1download
Tóm tắt nội dung Luận văn Robot tự hành tránh vật cản sử dụng thiết bị Kinect, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
t 
Hình 8.6: Vật cản bên trái robot 
Quan sát hình 8.6, góc quay cần thiết để thoát khỏi vật cản là anpha( ) 
khi robot ở vị trí cách vật cản một đoạn. Góc anpha hoàn toán tính được 
khi ta biết được tọa độ max_point, góc  và độ lớn O’L. 
_ ax1os ( )
'
x m
c
O L
   
    , hướng quay về phía bên phải robot. 
Chương 8: Chương trình điều khiển 
 Trang 84 
 Vật cản nằm bên phải robot 
Hình 8.7: Vật cản bên phải robot 
Tương tự trường hợp vật cản nằm bên trái, góc anpha được tính như sau: 
1os ( _ min/ ' )c x O L       , hướng quay về phía bên trái robot. 
Chương 8: Chương trình điều khiển 
 Trang 85 
 Vật cản nằm ở giữa đường robot 
Hình 8.8: Vật cản nằm ở giữa đường di chuyển của robot 
Trong trường hợp này, robot sẽ tìm góc quay né vật sao cho anpha nhỏ 
nhất; lúc đó, nếu độ lớn vật cản nhiều hơn về phía bên trái thì robot quay 
về bên phải (như trên hình 8.8) và ngược lại. Công thức tính trong từng 
trường hợp: (trong đó góc  và O’L = O’L’ biết trước) 
Quay trái: 
1 _ minsin ( )
'
x
O L
    

    
Quay phải: 
1 _ axsin ( )
'
x m
O L
       
Chương 8: Chương trình điều khiển 
 Trang 86 
 Tính góc quay ngược lại tránh vật: 
Như các trường hợp quay một góc xác định né vật cản, nhưng thay vì quay theo 
hướng có góc quay nhỏ hơn thì robot sẽ quay theo hướng ngược lại. Công thức tính 
hoàn toàn tương tự. 
 Đi một đoạn an toàn: 
Sau khi quay một góc tránh vật, robot sẽ di chuyển tiếp một đoạn để thoát hoàn 
toàn khỏi vật. 
Hình 8.9: Đi một đoạn an toàn về phía phải vật cản 
Quãng đường di chuyển an toàn để thoát khỏi vật cản bằng đoạn O’H cộng thêm 
một giá trị cố định vừa đủ deltaMove(ở đây chọn deltaMove = 15 cm dựa trên thực 
nghiệm ). 
Chương 8: Chương trình điều khiển 
 Trang 87 
Đi bên phải vật cản: 
' cos( )
1
_ ax2 2 1( _ ax _ ur) ( _ ax _ ur) os( tan ( ))
_ ax
OH OM
x m
x m x c y m y c c
y m
 

  
     
Đi bên trái vật cản: 
' cos( )
1
_ in2 2 1( _ in _ ur) ( _ ax _ ur) os( tan ( ))
_ ax
OH OM
x m
x m x c y m y c c
y m
 

  
     
 Cờ báo có vật cản (Obstacle_flag) và đường trống (freePath_flag): 
Hình 8.10: Cờ báo có vật cản và đường trống 
Hình 8.10 biểu diễn không gian xuất hiện vật cản phía trước robot, lúc đó các cờ 
tương ứng sẽ bật lên trong các vùng xác định. Tầm nhìn xa của robot giới hạn ở 
khoảng cách 140 cm. 
Chương 8: Chương trình điều khiển 
 Trang 88 
 Cờ báo đủ không gian cho robot lách qua: 
Hình 8.11: Không gian cho robot lách qua 
Cờ báo đủ không gian cho robot lách qua sẽ bật lên 1 khi khoảng cách H1H2 (hình 
8.11) đủ lớn cho robot lọt qua (không gian đủ cho robot lọt qua khi H1H2>50 cm). 
Trong đó O’H1 được tính như trong hàm đi một đoạn an toàn, O’H2 tương tự, ta có: 
2 4
42 2 1
4 4
4
' ' cos( )
( _ ur) ( _ ur) cos(tan ( ))
O H O M
x
x x c y y c
y


 
    
' '
1 2 2 1
H H O H O H   
8.3 Giải thuật chương trình do vi điều khiển xử lý 
Công việc điều khiển động cơ và tính toán tọa độ, thực hiện giao tiếp với máy 
tính sẽ được PIC 18F4550 xử lý. Để thực hiện các công việc này, PIC18F4550 kết hợp 
thông tin lệnh từ máy tính và tín hiệu hồi tiếp về từ encoder thông qua các ngắt ngoài. 
Sau đây là sơ đồ khối mô tả hoạt động của chương trình chính xử lý bởi PIC18F4550: 
Chương 8: Chương trình điều khiển 
 Trang 89 
Start
Khởi tạo các module
Timer1_flag = 1
InitPID_flag = 1
 Khởi tạo các giá trị đầu 
cho PID
 InitPID_flag = 0
 donePID_flag = 0
Target_flag = 1
 Tính toán tọa độ robot
 Gửi thông tin lên máy tính
 Target_flag = 0
donePID_flag = 1
 Tính toán tọa độ robot
 Gửi thông tin lên máy tính
 donePID_flag = 0
 Thực hiện PID cho 2 bánh 
xe (khi PID thực hiện xong, 
donePID_flag = 1)
 Timer1_flag = 0
Yes
No
Yes
No
No
Yes
Yes
No
Hình 8.12: Sơ đồ giải thuật trên 
vi điều khiển 
 Khởi tạo các module: 
Khởi tạo các module sử dụng trên PIC: các 
port I/O, timer, ngắt ngoài, PWM và giao 
tiếp RS232. 
 Timer1_flag: 
Cờ báo bằng 1 khi timer1 tràn sau 5 ms, 
phục vụ cho việc lấy mẫu, tính toán PID. 
 InitPID_flag: 
Cờ báo khởi tạo PID, bằng 1 khi nhận 
được lệnh từ máy tính. 
 Khởi tạo các giá trị đầu cho PID: 
Khởi tạo các giá trị ban đầu cho tính toán 
PID: các thông số kp, ki, kd; giá trị đặt. 
 Target_flag: 
Cờ báo lên 1 khi robot đang di chuyển về 
đích và gặp vật cản. 
 Tính toán tọa độ robot: 
Tính toán tọa độ robot, đã được trình bày 
tại mục 7.2. 
 Gửi thông tin lên máy tính: 
Thông tin về tọa độ và góc hiện tại của 
robot: (x_cur, y_cur, angle_cur). 
 Thực hiện PID trên hai bánh xe: 
Dựa trên giải thuật PID vị trí đã được trình 
bày ở mục 6.2. PID được thực hiện xong 
khi sai số nằm trong khoảng cho phép (xấp 
xỉ bằng không), lúc đó donePID_flag bằng 
1.
Kết luận và hướng phát triển 
 Trang 90 
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 
Với mục đích xây dựng mô hình robot có khả năng di chuyển đến điểm đích xác 
định trước, tránh chướng ngại vật và đến đích an toàn. Nhóm đã áp dụng công nghệ xử 
lý ảnh 3D cho phần thị giác của robot với thiết bị chơi game Kinect, đáp ứng được độ 
tin cậy cao hơn so với các cảm biến truyền thống. Quá trình thực hiện đã hoàn thành 
những nhiệm vụ sau: 
- Thiết kế và thi công mô hình mobile robot hoàn chỉnh. 
- Chương trình xử lý ảnh khôi phục được không gian phía trước robot dưới dạng 
3D, cung cấp đầy đủ thông tin về môi trường cho robot. 
- Tốc độ xử lý ảnh trên máy tính khoảng 13-15 fps, đủ đáp ứng thời gian thực cho 
robot. 
- Hoàn thành kế hoạch di chuyển đến đích có vật cản với sai số chấp nhận được ở 
môi trường trong nhà. 
 Một số điểm cần khắc phục: 
- Phần cơ khí của mobile robot không được hoàn hảo nên ảnh hưởng đến sai số 
khi di chuyển. Ở điểm này, một con robot omi sẽ đáp ứng đầy đủ cho ứng dụng 
robot di chuyển trong nhà với sự linh hoạt, kết cấu gọn nhẹ và sự chính xác cao. 
Kết luận và hướng phát triển 
 Trang 91 
Một con robot rất đáng quan tâm là iRobot với các lựa chọn khác nhau, giá dao 
động từ 130$ ÷300$, chi tiết xem tại:  
- Phần thị giác robot chỉ quan sát được không gian phía trước robot nên robot có 
thể sẽ đụng vật cản bên hông hay phía sau khi di chuyển lùi. Vấn đề này có thể 
được giải quyết bằng biệc trang bị thêm các cảm biến phát hiện vật cản xung 
quanh robot; hoặc thiết kế thêm hệ thống xoay cho phần thị giác, thị giác sẽ xoay 
một góc xác định trước khi quyết định di chuyển. 
- Tích hợp thêm các cảm biến định vị cần thiết để tăng sự chính xác. 
- Chương trình được viết trên môi trường Windows với sự hỗ trợ từ thư viện Point 
Cloud còn nhiều hạn chế, nhất là ở tốc độ xử lý. Sẽ tối ưu nhất nếu viết trên môi 
trường Linux và nếu phát triển thành sản phẩm thương mại sẽ hạ được giá thành 
phần mềm xuống, tăng tính cạnh tranh. 
 Hướng phát triển: 
- Mục đích của đề tài tạo ra nền tảng cho việc xây dựng một mô hình robot dịch 
vụ hoàn chỉnh: một robot có khả năng làm các công việc thay cho con người 
như: bưng bê đồ ăn, lau nhà, hướng dẫn khách hàng, … 
- Bên cạnh đó, với sức mạnh của thiết bị Kinect có thể giúp ta xây dựng được bản 
đồ (mapping) dạng 3D. Và việc tích hợp lên robot sẽ giúp ta xây dựng được bản 
đồ ở những khu vực mà con người không thể vào được. 
Tài liệu tham khảo 
 Trang 92 
TÀI LIỆU THAM KHẢO 
[1]  
[2]  
[3] Mikkel Viager, “Analysis of Kinect for Mobile Robots,” Technical University of 
Denmark, p. 11 
[4]  
[5] Jacob Kjær. A Qualitative Analysis of Two Automated Registration Algorithms In 
a Real World Scenario Using Point Clouds from the Kinect. June 27, 2011. 
[6]  
[7]  
[8]  
[9]  
[10]  
[11]  
[12]  
[13]  Hiện tượng crosstalk. 
[14]  
[15] Radu Bogdan RUSU. PointCloud(2) processing in ROS. May 2, 2010 
[16]  
[17]  
[18]  
[19] John A. Shaw, The PID Control Algorithm , 2003 
[20]  
[21] Erick Ball, Greg Taschuk. Reverse Engineering the Kinect Stereo Algorithm 
[22] Michael YingYang, Wolfgang Forstner. Plane Detection in Point Cloud Data. 
January 25, 2010. 
Phụ lục 1 
 Trang 93 
PHỤ LỤC 1: Kết hợp thư viện OpenNI và Code Laboratories Kinect (CL) 
để sử dụng chức năng điều khiển động cơ Kinect. 
Như đã trình bày trong mục 3.2, thư viện OpenNI không hỗ trợ cho việc điều 
khiển động cơ của Kinect. Sau đây là thủ thuật bằng việc cài đặt thêm CL. Cả OpenNI 
và CL đều đóng vai trò như driver truy xuất phần cứng Kinect nên sẽ xung đột nếu cài 
đặt đồng thời hai thư viện này. 
 Bước 1: 
Cài đặt CL bình thường và đảm bảo chưa cài OpenNI và các chương trình đi kèm 
trước đó (nếu có thì phải gỡ bỏ). 
CL có thể tải về tại:  
 Bước 2: 
Mở cửa sổ Computer Management, và chọn Uninstall các mục dưới CL devices: 
NUI audio, NUI camera, NUI Motor. 
Phụ lục 1 
 Trang 94 
 Bước 3: 
Cài đặt OpenNI và các chương trình kèm theo. 
 Bước 4: 
Vào lại cửa sổ như ở bước 1, lúc này Kinect được nhận bởi PrimeSense. Ta nhấp 
phải chuột trên Kinect Motor và chọn Update Driver Software 
Và duyệt tới thư mục driver của CL: 
Phụ lục 1 
 Trang 95 
Lúc này ta có thể sử dụng chức năng điều khiển động cơ Kinect trên thư viện 
OpenNI kết hợp với CL. 
Phụ lục 2 
 Trang 96 
PHỤ LỤC 2: Cách đấu dây dùng pin 12V thay adapter và tạo đế gắn lên 
robot cho Kinect 
 Cách đấu dây dùng pin 12V thay adapter cho Kinect 
Để tạo sự linh động cho robot, ta không dùng nguồn adapter mà thay bằng nguồn 
pin. Đầu tiên cắt dây adapter ra: 
Sau đó dùng đầu cắm DC cho pin và đoạn dây trên: 
Phụ lục 2 
 Trang 97 
 Tạo đế cho Kinect để gắn lên robot 
Đây là bước quan trọng nhằm giữ sự an toàn cho Kinect và tránh bị rung khi di 
chuyển (sẽ ảnh hưởng tới kết quả xử lý ảnh trên máy tính). 
Đầu tiên tháo phần đế gắn trên Kinect: 
Phụ lục 2 
 Trang 98 
Sau khi tháo: 
Khoan bốn lỗ và gắn bốn ốc từ trong đế ra: 
Và kết quả cuối cùng: 
Phụ lục 3 
 Trang 99 
PHỤ LỤC 3: Kích thước robot 
Gồm các kích thước cơ bản các chiều trên các hình chiếu đứng, bằng và cạnh. Đơn vị 
là milimet. 

File đính kèm:

  • pdfLuận văn Robot tự hành tránh vật cản sử dụng thiết bị Kinect.pdf
Tài liệu liên quan