2.7.1. Giới thiệu Proteus
Proteus là phần mềm mô phỏng mạch điện tử của Lancenter Electronics, cho phép mô phỏng hoạt động của mạch điện tử bao gồm phần thiết kế mạch và viết chương trình điều khiển cho các họ vi điều khiển như MCS-51, PIC, AVR, … mô phỏng cho hầu hết
các linh kiện điện tử thông dụng, đặc biệt hỗ trợ cho cả các MCU như PIC, 8051, AVR, Motorola.
Phần mềm bao gồm 2 chương trình: ISIS cho phép mô phỏng mạch và ARES dùng để vẽ mạch in. Proteus là công cụ mô phỏng cho các loại Vi Điều Khiển khá tốt, nó hỗ trợ
22 các dòng VĐK PIC, 8051, PIC, dsPIC, AVR, HC11, MSP430, ARM7/LPC2000 ... các giao tiếp I2C, SPI, CAN, USB, Ethenet,... ngoài ra còn mô phỏng các mạch số, mạch tương tự một cách hiệu quả. Proteus là bộ công cụ chuyên về mô phỏng mạch điện tử.
2.7.2. Giới thiệu Inventor
Autodesk Inventor là phần mềm xây dựng mô hình 3D, thiết kế, hình mẫu và kiểm tra ý tưởng các sản phầm của hãng Autodesk. Inventor tạo ra các nguyên mẫu mô phỏng chuẩn xác khối lượng, áp lực, độ ma sát, tải trọng,… của các đối tượng sản phẩm trong môi trường 3D. Các công cụ mô phỏng, phân tích được tích hợp trong Inventor cho phép người dùng thiết kế từ khuôn đúc cơ bản đến nâng cao như thiết kế chi tiết máy, trực quan hóa sản phẩm. Inventor còn được tích hợp CAD và các công cụ giao tiếp thiết kế nhằm nâng cao năng suất làm việc của CAD và giảm thiếu phát sinh lỗi, tioết kiệm thời gian.
2.7.3. Giới thiệu Arduino IDE
Arduino IDE là một chương trình phần mềm mã nguồn mở cho phép người dùng viết và tải lên mã trong một môi trường làm việc thời gian thực. Vì mã này sau đó sẽ được lưu trữ trong đám mây, nó thường được sử dụng bởi những người đã tìm kiếm thêm một mức dư thừa. Hệ thống này hoàn toàn tương thích với bất kỳ bo mạch phần mềm Arduino nào.
23 Arduino IDE có thể được triển khai trong các hệ điều hành Windows, Mac và Linux. Phần lớn các thành phần của nó được viết bằng JavaScript để chỉnh sửa và biên dịch dễ dàng. Mặc dù ý định chính của nó là dựa trên các mã viết, có một số tính năng đáng chú ý khác. Nó đã được trang bị một phương tiện để dễ dàng chia sẻ bất kỳ chi tiết nào với các bên liên quan dự án khác. Người dùng có thể sửa đổi bố trí nội bộ và sơ đồ khi cần thiết. Có hướng dẫn trợ giúp chuyên sâu sẽ hữu ích trong quá trình cài đặt ban đầu. Các hướng dẫn cũng có sẵn cho những ai có thể không có nhiều kinh nghiệm với khung công tác Arduino.
24
CHƯƠNG 3: XÂY DỰNG VÀ LẬP TRÌNH HỆ THỐNG
3.1. GIỚI THIỆU
Như đã đề cập ở phần mở đầu, đề tài của chúng em sẽ xây dựng trên cơ sở của đề tài “ Xe tự hành chạy theo Lane và nhận diện biển báo”, mục đích để hoàn thành các tiêu chí như sau:
- Mở rộng phạm vi tự hành (khuôn viên khoa cơ khí động lực) - Giảm số lượng ảnh training đầu vào cho xe
- Lập trình Pid cho hai động cơ chính để xe ổn định - Thiết kế thuật toán phù hợp cho hệ thống lái mới
Để hoàn thành các yêu cầu trên nên việc xây dựng thuật toán sẽ hoàn toàn là thay đổi, chỉnh sửa và tính toán phù hợp cho yêu cầu đề ra.
Mô hình xe được thiết kế, chế tạo và hoàn thiện trong thời gian 15 tuần. Các công việc nhóm đã hoàn thành bao gồm: thiết kế và thi công hệ thống lái sử dụng động cơ bước kết hợp với bộ trục vít – bánh vít để thực hiện đánh lái phục vụ cho mục đích cho xe chạy tự hành; trên xe lắp hai camera bên phải và phía trước để nhận diện lane và nhận diện biển báo stop. Mô hình xe tự hành sử dụng laptop làm bộ xử lý trung tâm để xe có thể hoạt động tốt, ổn định và xử lý được lượng dữ liệu lớn hơn khi cho chạy tự hành trên quãng đường dài hơn.Mô hình xe được xây dựng trên khung xe điện có sẵn nhẹ, nhỏ gọn, phù hợp với điều kiện thực tế và để dễ dàng cho việc nghiên cứu lập trình và thực nghiệm trên xe. Xe
25 được lắp bánh hơi có bán kính 15 cm với niền bánh bằng kim loại và lốp cao su giúp tăn tg độ bám đường, chạy êm và ổn định hơn so với bánh bằng nhựa.
Phần truyền động của xe lắp hai động cơ được nâng cấp hơn để đạt được tốc độ như mong muốn. Để tối ưu hơn về mặt tốc độ và cân bằng tốc độ bánh xe khi xe đi thẳng, nhóm đã thực hiện áp dụng thuật toán PID lên mô hình xe và encoder để lấy tín hiệu tốc độ bánh xe.
Thiết kế sơ đồ khối
Về tổ chức sơ đồ khối vẫn được giữ nguyên như ban đầu, chỉ thay đổi một số chức năng của các khối:
- Khối nguồn: Cung cấp nguồn cho hệ thống
- Khối động cơ: Được chạy độc lập với thuật toán PID chỉ chịu sự ảnh hưởng đóng ngắt nguồn từ khối trung tâm
- Khối điều khiển và xử lý trung tâm: Điều khiển đóng ngắt PID (khi gặp bảng stop) điều khiển khối lái khi vào góc cua phù hợp.
- Khối thu thập ảnh: Cụm 2 camera lấy ảnh từ môi trường truyền vào bộ xử lý trung tâm
26
3.2. XÂY DỰNG PHẦN CỨNG
3.2.1. Xây dựng khối điều khiển lái
Hình 3.4. Cơ cấu hệ thống lái
27 Các hình ảnh trên là toàn bộ các bộ phận hệ thống lái của mô hình xe. Các bộ phận đánh lái đơn giản, nhẹ nhưng vẫn đáp ứng được các yêu cầu đánh lái. Cần đánh lái chính là phần thực hiện đánh lái ăn khớp với bánh vít. Động cơ bước và trục vít được kết nối với nhau, đồng bộ tốc độ bởi một khớp nối kim loại.
3.2.1.1. Bộ Bánh vít – Trục vít
Truyền động trục vít – bánh vít có cấu tạo bao gồm có trục vít và bánh vít phối hợp với nhau cùng với sự ăn khớp giữa ren của trục vít và răng của bánh vít, dùng để truyền động quay giữa hai trục chéo nhau trong không gian, góc giữa hai trục chéo nhau thường là 90 độ, thông thường chuyển động được truyền từ trục vít sang bánh vít với tỷ số truyền rất lớn.
Hình 3.5. Hệ thống lái trên mô hình
Ưu điểm của hệ thống trục vít – bánh vít: - Tỉ số truyền lớn.
- Làm việc êm, không ồn. - Có khả năng tự hãm.
- Có độ chính xác động học cao. Nhược điểm của hệ thống trục vít – bánh vít:
- Hiệu suất thấp.
- Sinh nhiệt nhiều do có vận tốc trượt lớn
Bộ truyền bánh vít – trục vít được nhóm chọn sử dụng nhằm nâng cao mô-men đánh lái, giúp xe có thể đánh lái chính xác theo tín hiệu điều khiển đưa xuống mà không bị ảnh hưởng của điều kiện mặt đường hay sỏi đá, vật cản. Với ưu điểm có độ chính xác, giúp cho
28 khả năng điều khiển lái trong các trường hợp khi xe vào cua được dễ dàng. Trong điều khiển lái khi xe quay vòng, bộ trục vít – bánh vít có khả năng tự hãm cao, làm cho xe tránh tình trạng mất lái boặc vượt lố do quán tính.
Bảng 3.1. Bảng thông số của bộ trục vít – bánh vít Kí hiệu Trục vít Bánh vít Tỉ số truyền i 55 Mo-đun m 1 Góc xoắn ren 8.0171 độ Khoảng cách trục 32 mm Hệ số dịch chỉnh x 0.95 Góc biên dạng ren 19.8198 độ Hệ số đường kính q 7.1 Bước ren p 3.14 mm Số ren z 1 55
Chiều dài phần cắt ren b1 60 mm
Đường kính vòng chia d1,2 7.1 mm 55 mm
Chiều rộng bánh vít b2 42.75 mm
Mo-men xoắn T 0.194 Nm 18.727 Nm
29
3.2.1.2 Động cơ bước 57HS7630A4
Hệ thống lái được điều khiển từ Arduino Uno R3 để sang trái, phải và về giữa. Để dẫn động hệ thống lái, nhóm đã sử dụng động cơ bước size 57.
Thông số động cơ: - Góc bước: 1.8 độ - Số pha: 2 pha - Dòng điện: 3.0A - Momen xoắn: 1.8Nm - Khối lượng: 1.05KG - Đường kính trục: 6.35mm - Số dây: 4 dây
Hình 3.8. Động cơ bước size 57
30 Các chế độ điều khiển động cơ bước:
- Điều khiển dạng sóng (Wave): là phương pháp điều khiển cấp xung điều khiển lần lượt theo thứ tự chon từng cuộn dây pha.
- Điều khiển bước đủ (Full step): là phương pháp điều khiển cấp xung đồng thời cho 2 cuộn dây pha kế tiếp nhau.
- Điều khiển nửa bước (Half step): là phương pháp điều khiển kết hợp cả 2 phương pháp đều khiển dạng sóng và điều khiển bước đủ. Khi điều khiển theo phương pháp này thì giá trị góc bước nhỏ hơn hai lần và số bước của động cơ bước tăng lên 2 lần so với phương pháp điều khiển bước đủ tuy nhiên phương pháp này có bộ phát xung điều khiển phức tạp.
- Điều khiển vi bước (Microstep): là phương pháp mới được áp dụng trong việc điều khiển động cơ bước cho phép động cơ bước dừng và định vị tại vị trí nửa bước giữa 2 bước đủ. Ưu điểm của phương pháp này là động cơ có thể hoạt động với góc bước nhỏ,độ chính xác cao. Do xung cấp có dạng sóng nên động cơ hoạt động êm hơn,hạn chế được vấn đề cộng hưởng khi động cơ hoạt động.
3.2.1.3. Module TB6600
Để điều khiển động cơ bước một cách chính xác và dễ dàng hơn thì cách tối ưu nhất là nên sử dụng driver điều khiển động cơ bước. Vì vậy nhóm em sử dụng TB6600 để điều khiển động cơ bước trên.
Mạch điều khiển động cơ bước TB6600 sử dụng IC TB6600HQ/HG, dùng cho các loại động cơ bước: 42/57/86 2 pha hoặc 4 dây, có dòng tải là 5A/42V DC. Ứng dụng trong làm các máy như CNC, Laser hay các máy tự động khác.
31 Điện áp cấp cho driver có thể từ 12- 48V, với dòng điện đầu ra tối đa là 5A đủ để cung cấp cho động cơ bước trên.
TB6600 cách ly Input và Output bằng opto, bảo vệ quá áp, thấp áp, quá dòng, bảo vệ ngắn mạch, tránh gây cháy động cơ. Nhiệt độ hoạt động từ -10 đến 45 độ C.
Cài đặt và ghép nối:
- DC+: Nối với nguồn điện từ 9 - 40VDC - DC- : Điện áp (-) âm của nguồn
- A+ và A -: Nối vào cặp cuộn dây của động cơ bước - B+ và B- : Nối với cặp cuộn dây còn lại của động cơ
- PUL+: Tín hiệu cấp xung điều khiển tốc độ (+5V) từ BOB cho M6600 - PUL-: Tín hiệu cấp xung điều khiển tốc độ (-) từ BOB cho M6600 - DIR+: Tín hiệu cấp xung đảo chiều (+5V) từ BOB cho M6600 - DIR-: Tín hiệu cấp xung đảo chiều (-) từ BOB cho M6600
- ENA+ và ENA -: khi cấp tín hiệu cho cặp này động cơ sẽ không có lực momen giữ và quay nữa
Có thể đấu tín hiệu dương (+) chung hoặc tín hiệu âm (-) chung.
32 Cơ cấu cơ khí dẫn động thước lái được kéo bằng nguyên lý đơn giản (dẫn động 2 bánh răng) được thay thành khối dẫn động bánh răng trục vít, để đảm bảo độ chính xác, ổn định để khối thu thập hình ảnh có thể thu thập được các bức ảnh và ổn định quá trình thu thập ảnh khi cho chạy thuật toán.
3.2.2. Khối điều khiển và xử lý trung tâm
Vì đề tài “ Xe tự hành chạy theo Lane và nhận diện biển báo” được thiết kế với 2 thuật toán chạy trên 2 nền tảng khác nhau trên Window và Ubuntu, sau khi so sánh và đúc kết kết quả chúng em sử dụng thuật toán trên Window.
3.2.2.1. Laptop HP Pavalion 15
Lý do sử dụng laptop HP Pavalion mà không sử dụng các module như Jetson nano và Raspberry Py là vì quá trình thực nghiệm và nâng cấp cần thực hiện nhiều đa tác vụ cùng một lúc, như là quay màn hình, theo dõi biểu đồ, kiểm tra độ chính xác của file training, vv,… vì những lý do trên nên việc sử dụng laptop là cần thiết và hiệu quả hơn so với sử dụng các module đã nêu trên.
33
Cấu hình chi tiết:
Quá trình thực nghiệm cũng như phát triển đề tài cần phải sử dụng card đồ họa GPU đủ mạnh và độ tin cậy nguyên nhân xuất phát yêu cầu này là từ việc training model, cài đặt
Hình 3.15 Sơ đồ chân GPIO
34 các môi trường ảo cần phải sử dụng CUDA (Compute Unifited Device Architecture) và cuDNN (Nvidia CUDA Deep Neural Network) để tăng tốc các thuật toán sử dụng CNN.
Những vấn đề như cuDNN, CNN và CUDA sẽ được đề cập chi tiết và rõ ràng ở phần sau.
3.2.2.2. Arduino Uno R3
Arduino Uno R3 là kit Arduino Uno thế hệ thứ 3, với khả năng lập trình cho các ứng dụng phức tạp do được trang bị cấu hình mạnh trong các loại bộ nhớ ROM, RAM và Flash, các ngõ vào ra Digital I/O trong đó có nhiều ngõ có khả năng xuất tín hiệu PWM, các ngõ đọc tín hiệu Analog vad các chuẩn giao tiếp đa dạng như UART, SPI, TWI(I2C). Nguồn cấp cho Arduino Uno R3 có thể là 5V thông qua USB hoặc cấp nguồn ngoài với điện áp khuyên dùng là 7-12V DC cho kit Arduino Uno. Nếu nguồn vượt quá ngưỡng giới hạn 20V kit sẽ cháy, nên tuyệt đối cẩn thận khi cấp nguồn ngoài cho kit.
GND (Ground): đất của nguồn điện cấp cho kit. Khi bạn dùng các ứng dụng sử dụng nguồn điện riêng hoặc nhiều nguồn thì phải nối những chân GND này với nhau.
- 5V: Đầu ra điện áp 5V . Các bạn phải lưu ý là dòng tối đa cho phép cấp ở pin này là 0.5A.
- 3.3V: Đầu ra điện áp 3.3V . Dòng tối đa cho phép cấp ở pin này là 0.05A.
35 - Vin (Voltage Input): Cấp nguồn ngoài cho kit. Khi kết nối, tiến hành nối cực dương của nguồn với pin này và cực âm của nguồn với pin GND.
- IOREF: điện áp hoạt động của vi điều khiển trên Arduino UNO. Bạn có thể dùng đồng hồ đo được ở pin này. Khi đo bạn sẽ thấy nó luôn là 5V. Tuy nhiên ko được lấy nguồn từ pin này cấp đi chỗ khác, vì đơn giản chức năng của nó không phải là cấp nguồn.
- RESET: Chân reset sẽ được nối với nút bấm. Khi bạn nhấn nút Reset, kit sẽ reset vi điều khiển. Nguyên lý là chân RESET sẽ được nối với Groundqua 1 điện trở 10KΩ.
- 2 chân Serial:1 (TX) và 0 (RX):dùng để nhận (receive-RX) và gửi (transmit-TX) dữ liệu TTL Serial.Arduino Uno có thể giao tiếp với thiết bị khác qua 2 chân này.
- Chân PWM(~);3,5,6,9,10 và 11:cho phép bạn băm xung PWM với độ phân giải 8 bit(giá trị từ 0 → 28-1 tương ứng với 0V → 5V) bằng hàm analogWrite().
- Chân giao tiếp SPI: 10(SS), 11(MOSI) , 12(MISO), 13(SCK). Ngoài các chức năng thông thường, 4 chân này còn dùng để truyền dữ liệu bằng giao thức SPI với các thiết bị khác.
- Analog Pin: 6 chân analog (A0 → A5) cung cấp độ phân giải tín hiệu 10bit (0 → 210-1) để đọc giá trị điện áp trong khoảng 0V → 5V. Bạn có thể để đưa vào chân AREF trên board điện áp tham chiếu khi sử dụng các chân analog. Nói cách khác, khi bạn cấp điện áp 2.5V vào chân này thì bạn có thể đo điện áp trong khoảng từ 0V → 2.5V với độ phân giải vẫn là 10bit.
- Giao tiếpI2C: 2 chân A4 (SDA) và A5 (SCL) hỗ trợ giao tiếp I2C/TWI với các thiết bị khác.
36
Hình 3.14. Sơ đồ chân trên Arduino trên mạch mô
37
3.2.3. Khối thu thập hình ảnh 3.2.3.1. Camera