4.3.1. Viết tài liệu hƣớng dẫn sử dụng.
Bƣớc 1: kết nối Camera Kinect vào khung Robot, đặt máy tính điều khiển lên Robot và kết nối Arduino, Camera Kinect vào máy tính.
49
Bƣớc 2: đặt Robot vào vị trí di chuyển, tránh ánh nắng quá cao và sàn di chuyển phải bằng phẳng.
Bƣớc 3: cài đặt các thông số cho hệ thống và tiến hành chạy chƣơng trình.
Bƣớc 4: con ngƣời di chuyển để Robot di chuyển theo.
4.3.2. Quy trình thao tác.
Hình 4.9: Hệ thống chạy thực tế.
Sơ đồ các bƣớc thực hiện chạy xe Robot:
Ngƣời mà robot đang đi theo
Laptop
Camera Kinect
50
Begin
Kết nối camera Kinect và board Arduino với máy tính
Mở một Terminal mới Vào không gian làm việc
catkin_ws
Chạy lệnh mở cổng giao tiếp giữa Arduino và máy tính
Nạp chƣơng trình vào board Arduino DUE
Khởi tạo hệ thống chạy trong shell bằng lệnh source ./devel/setup.bash Chạy hệ thống bằng lệnh roslaunch human_tracking_robot_demo.launch End
Hình 4.10: Quy trình các bước thực hiện.
Kết nối Camera Kinect vào khung Robot và cắm cổng giao tiếp USB của Kinect vào máy tính. Tƣơng tự cho board Arduino.
Sau đó ta mở chƣơng trình của Arduino lên và chọn Board Arduino. Vào Tools Board “Arduino Due (Programming Port)” Arduino Due (Programming Port) và tiếp tục chọn cổng giao tiếp giửa Arduino và máy tính.
Vào Tools Port “/dev/ttyACM(Arduino Due(Programming Port)) nhƣ hình bên dƣới.
51
Hình 4.11: Chọn board Arduino.
52 Sau khi chọn board và chọn cổng giao tiếp ta tiến hành ở terminal để chạy lệnh mở cổng giao tiếp.
Hình 4.13:Mở cổng giao tiếp giữa Arduino và máy tính
Sau khi mở cổng giao tiếp ta tiến hành đổ chƣơng trình cho board Arduino Due.
Hình 4.14: Upload chương trình cho board Arduino.
Chạy lệnh mở cổng giao tiếp Bƣớc 1: Đổ chƣơng trình Bƣớc 2: upload thành công
53 Sau khi chạy chƣơng trình cho Arduino xong ta tiến hành chạy hệ thống. Ta mở một terminal mới và vào không gian làm việc nơi chứa chƣơng trình của hệ thống bằng lệnh: cd catkin_ws và build lại chƣơng trình bằng lệnh catkin_make.
Hình 4.15: Build chương trình.
Sau khi build chƣơng trình xong ta tiếp tục khởi tạo môi trƣờng cho hệ thống chạy trong shell bằng câu lệnh: source ./devel/setup.bash. Sau đó chạy hệ thống
bằng câu lệnh: roslaunch human_tracking_robot
human_tracking_robot_demo.launch.
Build chƣơng trình
Câu lệnh setup biến môi trƣờng và lệnh chạy hệ thống
54
Hình 4.16: Setup môi trường và chạy hệ thống.
Sau khi chạy câu lệnh hệ thống sẽ khởi động.
Hình 4.17: Hình ảnh hiện trên màn hình máy tính.
Khi có ngƣời đứng trƣớc camera, trên màn hình máy tính sẽ xuất hiện khung xƣơng và robot bắt đầu di chuyển theo ngƣời.
Hình 4.18: Khi có người trước camera kinect
Thông báo chƣa tìm thấy ngƣời
Tốcđộ robot
Hình ảnh depth từ camera
55
Chƣơng 5
KẾT QUẢ SO SÁNH, THỰC NGHIỆM VÀ PHÂN TÍCH
Trong suốt quá trình nghiên cứu và thực hiện đề tài “Lập trình Robot 3 bánh di chuyển theo con ngƣời sử dụng cảm biến Kinect” thì nhóm chúng em đã lập trình và thi công đƣợc Robot với chức năng di chuyển theo con ngƣời và có thể ứng dụng vào thực tế. Sử dụng camera Kinect để nhận dạng ngƣời nhờ sự hỗ trợ của thƣ viện Openni_tracker để điều khiển động cơ bằng phƣơng pháp PWM. Nhận xét, đánh giá đƣợc kết quả thực hiện nhằm rút ra đƣợc những ƣu, nhƣợc điểm của đề tài để từ đó tối ƣu hoá những vƣớng mắc mà đề tài chƣa thực hiện đƣợc đồng thời phát triển những thế mạnh và điểm mới mà đề tài đã thực hiện đƣợc để định hƣớng phát triển xa hơn lĩnh vực này.
5.1. Kết quả quá trình thực hiện đề tài và phân tích 5.1.1. Kết quả nhận diện con ngƣời 5.1.1. Kết quả nhận diện con ngƣời
Nhận diện và di chuyển theo con ngƣời là mục tiêu mà đề tại hƣớng đến. Ở đây, để nhận dạng đƣợc con ngƣời chúng ta sử dụng Camera Kinect và gói thƣ viện Openni_tracker để hỗ trợ. Camera Kinect nhận dạng con ngƣời bằng cách đọc toạ độ trên khung xƣơng mà con ngƣời tạo ra, vậy đầu tiên muốn có khung xƣơng đó chúng ta phải thực hiện động tác nhƣ hình 5.1.
56 Sau khi thực hiện đúng động tác, camera Kinect sẽ nhận dạng đƣợc khung xƣơng nhƣ hình 5.2 và tọa độ các vị trí trên khung xƣơng nhƣ hình 5.3.
Hình 5.2: Camera Kinect nhận dạng được khung xương
57
a. Khoảng cách nhận diện của camera Kinect:
Trên lý thuyết:
Camera Kinect có thể nhận biết đƣợc vật thể trong khoảng cách 0.4m => 8m nhƣ hình 5.4.
Hình 5.4: Khoảng cách Kinect đo được trên lý thuyết
Trên thực tế:
- Khoảng cách xa nhất camera Kinect có thể nhận dạng đƣợc: Với điều kiện trong nhà:
Trong môi trƣờng ánh sáng trong nhà thì camera Kinect có thể nhìn thấy con ngƣời ở khoảng cách 4.1m, kết quả đƣợc minh chứng ở hình 5.5.
Hình 5.5: Khoảng cách xa nhất camera Kinect đo được trong điều kiện trong
58 Với điều kiện ngoài trời khi không có nắng:
Trong môi trƣờng ngoài trời khi không có nắng thì camera Kinect có thể nhận dạng con ngƣời ở khoảng cách 1.8m, kết quả đƣợc minh chứng ở hình 5.6.
Hình 5.6: Khoảng cách xa nhất đo được trong điều kiện ngoài trời không có nắng
Với điều kiện ngoài trời khi có nắng:
Trong môi trƣờng ngoài trời khi có nắng thì camera Kinect không thể nhận dạng đƣợc con ngƣời, kết quả đƣợc minh chứng ở hình 5.7.
Hình 5.7: Khoảng cách xa nhất Kinect đo được trong điều kiện ngoài trời có
59 Với điều kiện không có ánh sáng:
Trong môi trƣờng không có ánh sáng (buổi tối) thì camera Kinect có thể nhận dạng đƣợc con ngƣời ở khoảng cách 4.2m, kết quả đƣợc minh chứng ở hình 5.8.
Hình 5.8: Khoảng cách xa nhất camera Kinect đo được trong điều kiện không
có ánh sáng
- Khoảng cách gần nhất camera Kinect nhận diện đƣợc ngƣời: Với điều kiện trong nhà:
Trong môi trƣờng ánh sáng trong nhà thì camera Kinect có thể nhận dạng con ngƣời ở khoảng cách 0.6m, kết quả đƣợc minh chứng ở hình 5.9.
60 Với điều kiện ngoài trời khi không có nắng:
Trong môi trƣờng ánh sáng ngoài trời thì camera Kinect có thể nhận dạng con ngƣời ở khoảng cách 0.4m, kết quả đƣợc minh chứng ở hình 5.10.
Hình 5.10: Khoảng cách gần nhất camera Kinect đo được trong điều kiện
ngoài trời không có nắng
Với điều kiện ngoài trời khi có nắng:
Trong môi trƣờng ngoài trời khi có nắng, camera Kinect không thể nhận dạng đƣợc ngƣời, kết quả đƣợc minh chứng ở hình 5.11.
Hình 5.11: Khoảng cách gần nhất camera Kinect đo được trong điều kiện
61 Với điều kiện không có ánh sáng:
Trong môi trƣờng không có ánh sáng, camera Kinect có thể nhận dạng con ngƣời ở khoảng cách 0.9m, kết quả đƣợc minh chứng ở hình 5.12.
Hình 5.12: Khoảng cách gần nhất camera Kinect đo được trong điều kiện
không có ánh sáng
b. Góc nhận diện của camera Kinect:
Trên lý thuyết:
Góc nhận diện của camera Kinect là 430 chiều dọc và 570 chiều ngang. Trên thực tế:
- Góc lớn nhất camera Kinect có thể nhận dạng ngƣời: Với điều kiện trong nhà:
Trong môi trƣờng trong nhà, góc lớn nhất camera Kinect có thể nhận dạng là 350, kết quả đƣợc minh chứng ở hình 5.13.
62
Hình 5.13: Góc lớn nhất camera Kinect đo được trong điều kiện trong nhà
Với điều kiện ngoài trời không có nắng:
Trong môi trƣờng ngoài trời không có nắng, góc lớn nhất camera Kinect có thể nhận dạng là 330, kết quả đƣợc minh chứng ở hình 5.14.
Hình 5.14: Góc lớn nhất camera Kinect đo được trong điều kiện ngoài trời
63 Với điều kiện ngoài trời có nắng:
Trong môi trƣờng ngoài trời có nắng, góc lớn nhất camera Kinect có thể nhận dạng là 00(không nhận dạng đƣợc ngƣời), kết quả đƣợc minh chứng ở hình 5.15.
Hình 5.15: Góc lớn nhất Kinect đo được trong điều kiện ngoài trời có nắng
Với điều kiện không có ánh sáng:
Trong môi trƣờng không có ánh sáng, góc lớn nhất camera Kinect có thể nhận dạng là 340, kết quả đƣợc minh chứng ở hình 5.16.
64 - Góc nhỏ nhất camera Kinect có thể nhận dạng ngƣời:
Với điều kiện trong nhà:
Trong môi trƣờng trong nhà, góc nhỏ nhất camera Kinect có thể nhận dạng là −290, kết quả đƣợc minh chứng ở hình 5.17.
Hình 5.17: Góc nhỏ nhất camera Kinect đo được trong điều kiện trong nhà
Với điều kiện ngoài trời không có nắng:
Trong môi trƣờng ngoài trời không có nắng, góc nhỏ nhất camera Kinect có thể nhận dạng là −290, kết quả đƣợc minh chứng ở hình 5.18.
Hình 5.18: Góc nhỏ nhất camera Kinect đo được trong điều kiện ngoài trời
65 Với điều kiện ngoài trời có nắng:
Trong môi trƣờng ngoài trời có nắng, góc nhỏ nhất camera Kinect có thể nhận dạng là 00( không nhận dạng đƣợc ngƣời ), kết quả đƣợc minh chứng ở hình 5.19.
Hình 5.19: Góc nhỏ nhất Kinect đo được trong điều kiện ngoài trời có nắng
Với điều kiện không có ánh sáng:
Trong môi trƣờng ngoài không có ánh sáng, góc nhỏ nhất camera Kinect có thể nhận dạng là −280, kết quả đƣợc minh chứng ở hình 5.20.
66 Từ những số liệu thu thập ta thấy Kinect hoạt động phụ thuộc vào điều kiện môi trƣờng, ta có thể thấy rõ hơn ở bảng 5.1.
Bảng 5.1:Bảng thu thập dữ liệu của Kinect trong các điều kiện môi trƣờng khác nhau. Trong nhà Không có nắng Có nắng Không có ánh sáng Khoảng cách max 4.1 m 1.8 m 0 4.2 m Khoảng cách min 0.6 m 0.4 m 0 0.9 m Góc max 350 330 0 340 Góc min -290 -290 0 -280
Từ bảng thống kê trên chúng ta có thể nhận xét rằng Kinect làm việc tốt nhất trong điều kiện môi trƣờng trong nhà với khoảng cách từ 0.6m – 4,1m và góc từ 350- -290 (phù hợp với tiêu chuẩn lý thuyết của Camera Kinect ) nên chúng ta có thể sử dụng đề tài này cho các hỗ trợ cần thiết trong nhà. Ngoài ra, với số liệu trên chúng ta còn thấy rằng Kinect có thể hoạt động đƣợc ở môi trƣờng thiếu ánh sáng do đó làm tăng thêm tính ứng dụng cho đề tài là có thể sử dụng vào việc vận chuyển đồ ở những nơi thiếu ánh sáng nhƣ nhà kho…
5.1.2. Kết quả quá trình điều khiển Robot
Điều khiển Robot là quá trình thu thập dữ liệu ngõ vào từ Camera Kinect bằng gói thƣ viện Openni_tracker để xử lí và đƣa ra ngõ ra là PWM_left và PWM_right để điều khiển động cơ giúp Robot chuyển động nhƣ mong muốn, muốn điều khiển đƣợc hai động cơ thì cần phải điều khiển thông qua Angular_kinect (góc) và Linear_kinect(khoảng cách). Và khi điều khiển hai thành phần này chúng ra dùng thuật toán PID mà cụ thể ta chỉ thay đổi thành phần KP trong thuật toán PID để làm tăng tốc độ đáp ứng của hệ thống cụ thể đƣợc trình bày ở phần dƣới.
a. Điều khiển Angular của Robot.
- Sự thay đổi của Angular_Kinect ảnh hƣởng đến sự thay đổi vận tốc của bánh xe trái (V_left) và bánh xe phải (V_right).
67 Khi Angular_Kinect nhỏ tức là khi đó con ngƣời đang đi chuyển về bên trái của Robot thì khi đó tốc độ bánh xe bên phải sẽ lớn hơn tốc độ của bánh xe bên trái để Robot có thể xoay theo ngƣời sang trái, theo nhƣ kết quả hình 5.21.
Hình 5.21: Tốc độ của 2 bánh xe khi Angular_Kinect nhỏ.
Khi Angular_Kinect lớn:
Khi Angular_Kinect lớn tức là khi đó con ngƣời đang đi chuyển về bên phải của Robot thì khi đó tốc độ bánh xe bên trái sẽ lớn hơn tốc độ của bánh xe bên phải để Robot có thể xoay theo ngƣời sang phải, theo nhƣ kết quả hình 5.22.
68 Để so sánh vận tốc của hai bánh xe khi Angular_Kinect thay đổi thì chúng ta có biểu đồ nhƣ sau:
Hình 5.23:Biểu đồ vận tốc khi con người đứng ở giữa Kinect.
69
Hình 5.25: Biểu đồ vận tốc khi con người đứng bên trái Kinect.
Từ ba biểu đồ trên cho chúng thấy đƣợc sự ảnh hƣởng rất lớn của Angular_Kinect đến tốc độ của hai bánh xe. Ở hình 5.23 là hình đồ thị khi con ngƣời đứng ở giữa Kinect tƣơng ứng Argular_Kinect xấp xỉ bằng 0 thì tốc độ hai bánh xe của Robot cũng xấp xỉ bằng nhau và lúc đó Robot sẽ chuyển động đi thẳng. Ở hình 5.24 là khi con ngƣời đứng lệch về bên phải thì ta thấy tốc độ bánh xe trái sẽ chuyển động nhanh hơn tốc độ bánh xe phải lúc này Robot sẽ rẽ phải còn ở hình 5.25 là khi ngƣời đi lệch về bên trái thì ta thấy tốc độ bánh xe phải sẽ nhanh hơn tốc độ bánh xe trái lúc đó Robot sẽ rẽ trái.
- Xét sự ảnh hƣởng của Kp_Angular đến sự thay đổi tốc độ của bánh xe. Với Kp_Angular = 2
70 Với Kp_Angular = 6
Hình 5.27: Tốc độ của 2 bánh xe khi Kp_Angular bằng 6.
Từ hình 5.26, 5.27 có thể cho chúng ta thấy đƣợc sự thay đổi của Kp_Angular ảnh hƣởng rất lớn đến sự đáp ứng về tốc độ của bánh xe Robot mà cụ thể là khi Kp_Angular càng lớn thì tốc độ đáp ứng của tốc độ hai bánh xe càng nhanh.
- Xét sự di chuyển của con ngƣời thay đổi theo thời gian để thấy đƣợc ảnh hƣởng của Angular_Kinect.
Cụ thể ở đây khi con ngƣời di chuyển liên tục từ trái qua phải thì tốc độ của hai bánh xe cũng thay đổi, khi con ngƣời ở bên trái thì V_right sẽ lớn hơn V_left lúc này Robot sẽ xoay trái, khi di chuyển đến giữa thì tốc độ hai bánh xe sẽ bằng nhau lúc này Robot sẽ đi thẳng và khi con ngƣời di chuyển sang đến bên phải thì V_left sẽ lớn hơn V_right lúc này Robot sẽ xoay phải, sự thay đổi này thể hiện ở hình 5.28.
71
Hình 5.28: Sự thay đổi tốc độ bánh xe khi con người di chuyển từ trái sang
phải.
b. Điều khiển Linear của Robot.
- Sự thay đổi của Linear_Kinect ảnh hƣởng đến sự thay đổi vận tốc của bánh xe trái (V_left) và bánh xe phải (V_right).
Nếu ở mục a chúng ta xét về sự thay đổi của Angular_Kinect là sự thay đổi về góc thì ở phần này chúng ta xét về sự thay đổi của Linear_Kinect là sự thay đổi về di chuyển thẳng của Robot.
Khi Linear_Kinect nhỏ:
Khi Linear_Kinect nhỏ tức là khi đó con ngƣời di chuyển về gần Robot hơn, lúc này tốc độ của hai bánh xe bằng nhau và khi con ngƣời đứng đúng vị trí giới hạn (0,5m) của Robot thì khi đó tốc độ hai bánh xe bằng 0 và Robot đứng yên nhƣ hình 5.29.
72
Hình 5.29: Tốc độ của 2 bánh xe khi Linear_Kinect nhỏ.
Khi Linear_Kinect lớn:
Khi Linear_Kinect lớn tức là khi con ngƣời di chuyển ra xa Robot, theo phƣơng thẳng thì lúc đó tốc độ hai bánh xe lớn và bằng nhau, nếu đi chuyển ra xa hơn so với tầm nhìn của Kinect thì Robot không còn nhận thấy con ngƣời nữa và khi đó Robot sẽ đứng lại, theo kết quả nhƣ hình 5.30.
73 Để so sánh tốc độ hai bánh xe khi Linear_Kinect thay đổi thì chúng ta có biểu đồ nhƣ sau:
Hình 5.31: Biểu đồ thể hiện tốc độ 2 bánh xe khi con người di chuyển lại gần
Robot.
Hình 5.32: Biểu đồ thể hiện tốc độ 2 bánh xe khi con người di chuyển ra xa
Robot.
Từ hình 5.31, 5.32 cho chúng ta thấy đƣợc khi Linear_Kinect thay đổi thì hai bánh xe Robot luôn có tốc độ bằng nhau. Đối với hình 5.32 thì khi chúng ta đứng gần Robot với khoảng cách nhỏ hơn hoặc bằng 0,5m thì lúc này tốc độ hai bánh xe bằng 0 và Robot đứng yên. Với hình 5.32 thì khi chúng ta di chuyển ra xa Robot thì càng di chuyển tốc độ của hai bánh xe càng tăng. Từ đó chúng ta nhận thấy rằng
74 Linear_Kinect chỉ điều khiển tốc độ bánh xe Robot dựa vào khoảng cách giữa Robot và con ngƣời chứ không giống nhƣ Angular_Kinect là điều khiển tốc độ bánh