Mã điều khiển tùy chỉnh trong VEXcode V5

Sử dụng Bộ điều khiển có thể giúp bạn điều khiển và di chuyển rô-bốt để hoàn thành nhiệm vụ dễ dàng hơn. Tuy nhiên, có những hạn chế khi sử dụng chương trình Drive và tùy thuộc vào cấu trúc robot của bạn hoặc nhiệm vụ hiện tại, bạn có thể muốn có các điều khiển khác nhau. Việc mã hóa Bộ điều khiển cho phép bạn tối ưu hóa Bộ điều khiển để phù hợp hơn với rô-bốt và nhiệm vụ hiện tại của bạn. Có một số cách để mã hóa Bộ điều khiển trong VEXcode V5. Mỗi phương pháp đều có những ưu điểm và hạn chế, và một số phương pháp phù hợp hơn với những tình huống nhất định tùy thuộc vào kết quả mong muốn.

Bài viết này sẽ hướng dẫn bạn ba tùy chọn khác nhau để mã hóa tùy chỉnh Bộ điều khiển trong VEXcode V5. Mỗi phương pháp sẽ được mô tả với những ưu điểm, hạn chế và trường hợp sử dụng ví dụ để giúp hướng dẫn bạn khi chọn phương pháp. Vì mục đích của bài viết này, tất cả các ví dụ về mã được hiển thị đều được tạo cho Clawbot. Tuy nhiên, những khái niệm tương tự có thể được áp dụng cho nhiều bản dựng khác được tìm thấy trên builds.vex.comvà các bản dựng tùy chỉnh.

Tùy chọn 1: Gán các nút trong Cấu hình thiết bị

Tùy chọn này rất phù hợp khi bạn đang sử dụng bản dựng tiêu chuẩn, như Speedbot hoặc Clawbot và muốn thiết lập và chạy nhanh chóng.

Tùy chọn này cho phép bạn gán động cơ, hệ thống truyền động hoặc nhóm động cơ cho các nút trên Bộ điều khiển trong Cấu hình thiết bị. Để biết thêm thông tin về cách gán các nút cho Bộ điều khiển trong Cấu hình thiết bị, xem bài viết này.

Menu Thiết bị VEXcode V5 hiển thị các tùy chọn Bộ điều khiển. Sơ đồ điều khiển nút bấm cho thấy hai cần điều khiển điều khiển robot theo cấu hình lái kiểu xe tăng. Các nút Lên và Xuống điều khiển một ArmMotorGroup, còn các nút trục R điều khiển một ClawMotor.

Tóm tắt về Tùy chọn 1: Gán các nút trong Cấu hình thiết bị

Thuận lợi Hạn chế Tình huống ví dụ
  • Thiết lập nhanh chóng mà không cần mã hóa
  • Phương pháp đơn giản nhất
  • Dễ dàng điều chỉnh
  • Có thể gán từng động cơ, hệ thống truyền động tiêu chuẩn và nhóm động cơ cho các nút
  • Việc gán nút được giới hạn ở số lượng nút trên Bộ điều khiển
  • Hệ thống truyền động không thể vượt quá 4 động cơ hoặc được tùy chỉnh (chỉ hỗ trợ ổ đĩa tiêu chuẩn, không hỗ trợ ổ H, holonomic hoặc hệ thống truyền động tùy chỉnh khác)
  • Thao tác với một bản dựng tiêu chuẩn như Speedbot, Clawbot hoặc sửa đổi đơn giản các bản dựng tiêu chuẩn đó. Ví dụ: Speedbot có cửa hút gắn ở phía trước được điều khiển bởi một nhóm động cơ.
  • Thao tác các nút nào tương ứng với các hành vi khác nhau trên robot một cách nhanh chóng mà không cần mã hóa nhiều

Tùy chọn 2: Sử dụng vòng lặp Forever

Nếu bạn đang sử dụng bản dựng tùy chỉnh thay vì bản dựng tiêu chuẩn hoặc muốn có nhiều tùy chỉnh hơn trong Bộ điều khiển của mình thì tùy chọn này là một tùy chọn tốt. Sử dụng vòng lặp Forever là cách giới thiệu tuyệt vời để tạo mã tùy chỉnh cho Bộ điều khiển của bạn.

Tùy chọn này đặt tất cả các điều kiện cho Bộ điều khiển và các nút liên quan của nó vào vòng lặp Mãi mãi. Điều này mang lại sự linh hoạt hơn, đặc biệt là với các thiết kế xây dựng tùy chỉnh, nhưng cũng đòi hỏi một số kinh nghiệm viết mã. Tuy nhiên, một điều cần cân nhắc khi sử dụng tùy chọn này là độ dài và độ phức tạp của dự án của bạn. Càng thêm nhiều điều kiện thì ngăn xếp mã càng dài. Điều này có nghĩa là nhiều khối phải được thực thi theo thứ tự và khi có nhiều khối, điều này có thể làm chậm quá trình thực thi dự án. Việc thực hiện dự án chậm hơn có thể tạo ra độ trễ giữa việc nhấn các nút Bộ điều khiển và xem hành vi của rô-bốt.

Ví dụ cụ thể được hiển thị bên dưới là một cách mà bạn có thể sử dụng vòng lặp Forever với rô-bốt có thiết kế tùy chỉnh (chẳng hạn như rô-bốt có hệ thống truyền động tùy chỉnh) để điều khiển rô-bốt và điều khiển móng vuốt và cánh tay để tương tác với các vật thể.

Không gian làm việc VEXcode V5 với dự án khối Tùy chọn 2 đang được mở. Dự án này có một chồng các khối và các thiết bị đã được cấu hình. Menu Thiết bị được mở ở bên cạnh và liệt kê các thiết bị sau: Controller1, ClawMotor trên cổng 3, ArmMotor trên cổng 8, LeftMotor trên cổng 1 và RightMotor trên cổng 10. Trong không gian làm việc có một chồng các khối để xử lý đầu vào từ bộ điều khiển. Thông báo lỗi trong ngăn xếp như sau: Khi khởi động, hãy đặt ArmMotor dừng ở chế độ giữ và đặt ClawMotor dừng ở chế độ giữ. Phần còn lại của ngăn xếp được chứa trong một vòng lặp vô hạn. Nó ghi là Forever, đặt vận tốc LeftMotor thành vị trí 3% của Controller1, quay LeftMotor về phía trước, đặt vận tốc RightMotor thành vị trí 2% của Controller1, và quay RightMotor về phía trước. Tiếp theo, nếu nhấn nút Lên của Bộ điều khiển 1 thì quay động cơ tay lên, nếu nhấn nút Xuống của Bộ điều khiển 1 thì quay động cơ tay xuống, nếu không thì dừng động cơ tay. Cuối cùng, nếu nút Controller1 A được nhấn thì động cơ gắp sẽ mở ra, nếu nút Controller1 B được nhấn thì động cơ gắp sẽ đóng lại, và nếu không thì động cơ gắp sẽ dừng lại.

Tải xuống tệp dự án VEXcode V5 "Tùy chọn 2" >

Giải thích về Mã tùy chọn 2.

Mã số Giải thích
Ảnh cận cảnh chồng các khối trong dự án VEXcode V5 Tùy chọn 2. Hai khối lệnh được đánh dấu nổi bật và nằm ngoài vòng lặp Forever của ngăn xếp, chúng có nội dung là "set ArmMotor stopping to hold" và "set ClawMotor stopping to hold". Một Clawbot đã được sử dụng cho ví dụ mã này. Khi sử dụng các nút trên Bộ điều khiển để nâng hạ cánh tay, ngay khi nhả nút ra, do trọng lực, cánh tay sẽ rơi ngược xuống. Đặt cả cánh tay và móng vuốt ở chế độ “giữ” sẽ đảm bảo rằng cả cánh tay và móng vuốt sẽ vẫn ở đúng vị trí ngay cả sau khi các nút trên Bộ điều khiển đã được nhả ra.
Ảnh cận cảnh chồng các khối trong dự án VEXcode V5 Tùy chọn 2. Bốn khối được đánh dấu nổi bật bên trong vòng lặp Forever của ngăn xếp. Họ đọc Forever, đặt vận tốc LeftMotor thành vị trí 3% của Controller1, quay LeftMotor về phía trước, đặt vận tốc RightMotor thành vị trí 2% của Controller1, và quay RightMotor về phía trước.

 

Bộ điều khiển V5 hiển thị bố cục các nút của nó.

Một Clawbot đã được sử dụng cho ví dụ mã này. Khi sử dụng các nút trên Bộ điều khiển để nâng hạ cánh tay, ngay khi nhả nút ra, do trọng lực, cánh tay sẽ rơi ngược xuống. Đặt cả cánh tay và móng vuốt ở chế độ “giữ” sẽ đảm bảo rằng cả cánh tay và móng vuốt sẽ vẫn ở đúng vị trí ngay cả sau khi các nút trên Bộ điều khiển đã được nhả ra.

Vòng lặp Forever được sử dụng để liên tục kiểm tra xem nút nào đang được nhấn trên Bộ điều khiển.

Các khối [Đặt tốc độ động cơ] được sử dụng để đặt tốc độ động cơ đến vị trí của Bộ điều khiển hiện tại dọc theo trục 2 và 3. Điều này tương đương với việc cài đặt một chiếc ô tô vào trạng thái lái. Điều đó không nhất thiết làm cho ô tô chuyển động, nó chỉ làm cho ô tô chuyển động.

Mỗi trục cần điều khiển trả về một giá trị trong khoảng từ -100 đến +100 và trả về giá trị bằng 0 khi được căn giữa. Điều này có nghĩa là trục cần điều khiển, khi được đẩy, tương đương với -100% đến 100%. Trục được đẩy càng xa về phía 100 hoặc -100 thì động cơ sẽ quay càng nhanh.

Khối [Spin] sau đó được sử dụng để di chuyển động cơ. Điều này tương đương với việc nhấn ga trên ô tô khi đã xác định được hướng đi. Điều này cho phép mỗi động cơ được điều khiển bởi một trong bốn trục Bộ điều khiển. 

Ảnh cận cảnh chồng các khối trong dự án VEXcode V5 Tùy chọn 2. Khối lệnh if, else if, else được tô sáng bên trong vòng lặp Forever của ngăn xếp. Nó đọc là: nếu nhấn nút Lên của Bộ điều khiển 1 thì quay động cơ tay lên, nếu nhấn nút Xuống của Bộ điều khiển 1 thì quay động cơ tay xuống, và nếu không thì dừng động cơ tay.

 

Một Clawbot đã được sử dụng cho ví dụ mã này. Khi sử dụng các nút trên Bộ điều khiển để nâng hạ cánh tay, ngay khi nhả nút ra, do trọng lực, cánh tay sẽ rơi ngược xuống. Đặt cả cánh tay và móng vuốt ở chế độ “giữ” sẽ đảm bảo rằng cả cánh tay và móng vuốt sẽ vẫn ở đúng vị trí ngay cả sau khi các nút trên Bộ điều khiển đã được nhả ra.

Khối [If then else if then else] được sử dụng để ánh xạ các hành vi nhất định tới các nút được nhấn hoặc nhả trên Bộ điều khiển. Trong phần mã này, các điều kiện được đặt là nếu nhấn nút Lên hoặc Xuống. Nếu vậy, một số hành vi nhất định sẽ xảy ra, chẳng hạn như giơ và hạ cánh tay. Ngoài ra còn có phần khác của điều kiện, nếu không nhấn nút nào, cánh tay sẽ ngừng di chuyển.

Lưu ý phần mã sau đây trong dự án dành cho Móng vuốt cũng có lời giải thích tương tự.

Tóm tắt về Tùy chọn 2: Sử dụng Vòng lặp mãi mãi

Thuận lợi Hạn chế Tình huống ví dụ
  • Có thể đáp ứng các bản dựng tùy chỉnh, đặc biệt là hệ thống truyền động có hơn 4 động cơ
  • Có thể gán nhiều hành vi cho một nút duy nhất
  • Có thể chỉ định hành vi cho các trục khác nhau trên Bộ điều khiển (trái ngược với các tùy chọn duy nhất của Arcade bên trái, Arcade bên phải, Arcade phân chia và Tank Drive trong Cấu hình thiết bị)
  • Yêu cầu một số kiến ​​thức về mã hóa (điều kiện, vòng lặp và kiến ​​thức về các nút/cần điều khiển trên Bộ điều khiển)
  • Khả năng thực hiện dự án chậm hơn hoặc thời gian phản hồi của nút bị chậm. Vì tất cả các lệnh đều được chứa trong một vòng lặp Mãi mãi nên việc thực thi mã có thể chạy chậm tùy thuộc vào các điều kiện được đặt và độ dài của mã.
  • Sử dụng Bộ điều khiển với robot được chế tạo tùy chỉnh, đặc biệt với hệ thống truyền động không chuẩn
  • Khi muốn gán nhiều hành vi cho một nút duy nhất. Ví dụ: khi nhấn Nút Lên, Vuốt có thể mở, lái về phía trước và sau đó đóng xung quanh một vật thể.

Tùy chọn 3: Sử dụng Sự kiện

Nếu bạn muốn có nhiều tùy chỉnh cho Bộ điều khiển của mình, Sử dụng Sự kiện là lựa chọn tốt nhất cho bạn. Một lần nhấn nút có thể kích hoạt nhiều hành vi của robot, chẳng hạn như nhấn nút để mở càng, nâng cánh tay và lái về phía trước trong một khoảng cách đã đặt. Việc cố gắng mã hóa nhiều hành vi cho mỗi nút trong vòng lặp Mãi mãi sẽ khiến quá trình thực thi dự án chậm lại đáng kể – việc sử dụng Sự kiện cho phép bạn thực hiện việc này hiệu quả hơn.

Tùy chọn này sử dụng Sự kiện để chia nhỏ luồng dự án. Điều này tương tự như việc sử dụng vòng lặp Mãi mãi, nhưng cho phép mã được tổ chức chặt chẽ hơn để việc thực thi nút có thời gian phản hồi nhanh hơn. Thời gian phản hồi nhanh hơn có nghĩa là bạn sẽ không thấy độ trễ giữa việc nhấn các nút Bộ điều khiển và xem hành vi của robot. Ví dụ này hiển thị các hành vi tương tự như dự án trước, nhưng được thực hiện bằng cách sử dụng Sự kiện thay vì Vòng lặp vĩnh viễn.

Không gian làm việc VEXcode EXP với dự án khối Tùy chọn 3 đang được mở. Dự án này có 11 chồng khối nhỏ và đã được cấu hình các thiết bị. Menu Thiết bị được mở ở bên cạnh và liệt kê các thiết bị sau: Controller1, ClawMotor trên cổng 3, ArmMotor trên cổng 8, LeftMotor trên cổng 1 và RightMotor trên cổng 10. Trong không gian làm việc có 11 khối nhỏ xếp chồng lên nhau, dùng để xử lý đầu vào của Bộ điều khiển. Lệnh đầu tiên ghi: Khi khởi động, đặt ArmMotor dừng ở chế độ giữ và sau đó đặt ClawMotor dừng ở chế độ giữ. Đoạn mã thứ hai ghi: Khi trục 3 của Bộ điều khiển 1 được thay đổi, hãy đặt vận tốc của Động cơ bên trái thành vị trí 3 của Bộ điều khiển 1 (%) và sau đó quay Động cơ bên trái về phía trước. Dòng lệnh thứ ba ghi: Khi trục 2 của Bộ điều khiển 1 được thay đổi, hãy đặt vận tốc của RightMotor thành vị trí % của Bộ điều khiển 1 2 và sau đó quay RightMotor về phía trước. Dòng lệnh thứ tư ghi: Khi nhấn nút Lên trên của Bộ điều khiển 1, hãy quay Động cơ tay lên. Dòng lệnh thứ năm ghi: Khi nhả nút Up trên Bộ điều khiển 1, hãy dừng ArmMotor. Dòng lệnh thứ sáu ghi: Khi nhấn nút Down của Bộ điều khiển 1, hãy quay ArmMotor xuống. Dòng lệnh thứ bảy ghi: Khi nhả nút Down của Controller1, hãy dừng ArmMotor. Dòng lệnh thứ tám ghi: Khi nhấn nút A của Bộ điều khiển 1, hãy mở ClawMotor. Dòng lệnh thứ chín ghi: Khi nút A của Bộ điều khiển 1 được nhả ra, hãy dừng ClawMotor. Dòng lệnh thứ mười ghi: Khi nhấn nút B của Bộ điều khiển 1, hãy quay mô-tơ gắp. Dòng lệnh thứ mười một và cuối cùng có nội dung: Khi nút B của Bộ điều khiển 1 được nhả ra, hãy dừng ClawMotor.

Tải xuống tệp dự án VEXcode V5 "Tùy chọn 3" >

Giải thích về Mã tùy chọn 3.

Mã số Giải thích
Ảnh cận cảnh một chồng khối trong dự án Option 3 VEXcode V5. Thông báo lỗi trong ngăn xếp như sau: Khi khởi động, hãy đặt trạng thái dừng của ArmMotor thành giữ và sau đó đặt trạng thái dừng của ClawMotor thành giữ.
Một Clawbot đã được sử dụng cho ví dụ mã này. Khi sử dụng các nút trên Bộ điều khiển để nâng hạ cánh tay, ngay khi nhả nút ra, do trọng lực, cánh tay sẽ rơi ngược xuống. Đặt cả cánh tay và móng vuốt ở chế độ “giữ” sẽ đảm bảo rằng cả cánh tay và móng vuốt sẽ vẫn ở đúng vị trí ngay cả sau khi các nút trên Bộ điều khiển đã được nhả ra.
Ảnh cận cảnh hai chồng khối trong dự án VEXcode V5 Tùy chọn 3. Lệnh đầu tiên có nội dung: Khi trục 3 của Bộ điều khiển 1 thay đổi, hãy đặt vận tốc của Động cơ bên trái thành vị trí 3 của Bộ điều khiển 1 (%) và sau đó quay Động cơ bên trái về phía trước. Đoạn mã thứ hai ghi: Khi trục 2 của Bộ điều khiển 1 được thay đổi, hãy đặt vận tốc của RightMotor thành vị trí % của Bộ điều khiển 1 2 và sau đó quay RightMotor về phía trước.

 

Bộ điều khiển V5 hiển thị bố cục các nút của nó.

Một Clawbot đã được sử dụng cho ví dụ mã này. Khi sử dụng các nút trên Bộ điều khiển để nâng hạ cánh tay, ngay khi nhả nút ra, do trọng lực, cánh tay sẽ rơi ngược xuống. Đặt cả cánh tay và móng vuốt ở chế độ “giữ” sẽ đảm bảo rằng cả cánh tay và móng vuốt sẽ vẫn ở đúng vị trí ngay cả sau khi các nút trên Bộ điều khiển đã được nhả ra.

{When controller axis} Khối sự kiện được sử dụng để kích hoạt một số hành vi nhất định khi một trong bốn trục trên Bộ điều khiển được thay đổi bằng cách sử dụng cần điều khiển.

Các khối [Đặt tốc độ động cơ] được sử dụng để đặt tốc độ động cơ đến vị trí của Bộ điều khiển hiện tại dọc theo trục A và D. Điều này tương đương với việc cài đặt một chiếc ô tô vào trạng thái lái. Điều đó không nhất thiết làm cho ô tô chuyển động, nó chỉ làm cho ô tô chuyển động.

Mỗi trục cần điều khiển trả về một giá trị trong khoảng từ -100 đến +100 và trả về giá trị bằng 0 khi được căn giữa. Điều này có nghĩa là trục cần điều khiển, khi được đẩy, tương đương với -100% đến 100%. Trục được đẩy càng xa về phía 100 hoặc -100 thì động cơ sẽ quay càng nhanh.

Khối [Spin] sau đó được sử dụng để di chuyển động cơ. Điều này tương đương với việc nhấn ga trên ô tô khi đã xác định được hướng đi. Điều này cho phép mỗi động cơ được điều khiển bởi một trong bốn trục Bộ điều khiển. 

Ảnh cận cảnh bốn chồng khối trong dự án Option 3 VEXcode V5. Dòng lệnh đầu tiên có nội dung: Khi nhấn nút Lên trên của Bộ điều khiển 1, hãy quay Động cơ tay lên. Lệnh thứ hai ghi: Khi nhả nút Up của Controller1, dừng ArmMotor. Dòng lệnh thứ ba ghi: Khi nhấn nút Down của Bộ điều khiển 1, hãy quay ArmMotor xuống. Dòng lệnh thứ tư có nội dung: Khi nhả nút Down của Controller1, hãy dừng ArmMotor.

 

Một Clawbot đã được sử dụng cho ví dụ mã này. Khi sử dụng các nút trên Bộ điều khiển để nâng hạ cánh tay, ngay khi nhả nút ra, do trọng lực, cánh tay sẽ rơi ngược xuống. Đặt cả cánh tay và móng vuốt ở chế độ “giữ” sẽ đảm bảo rằng cả cánh tay và móng vuốt sẽ vẫn ở đúng vị trí ngay cả sau khi các nút trên Bộ điều khiển đã được nhả ra.

{When controller axis} Các khối sự kiện được sử dụng để ánh xạ các hành vi nhất định tới các nút được nhấn hoặc nhả trên Bộ điều khiển. Trong phần mã này, các điều kiện được đặt là nếu nhấn nút Lên hoặc Xuống. Nếu vậy, một số hành vi nhất định sẽ xảy ra, chẳng hạn như giơ tay lên, hạ xuống hoặc dừng lại.

Lưu ý phần mã cuối cùng trong dự án dành cho Móng vuốt cũng có lời giải thích tương tự.

Tóm tắt Tùy chọn 3: Sử dụng Sự kiện

Thuận lợi Hạn chế Tình huống ví dụ
  • Có thể đáp ứng các bản dựng tùy chỉnh, đặc biệt là hệ thống truyền động có hơn 4 động cơ
  • Có thể gán nhiều hành vi cho một nút duy nhất
  • Có thể chỉ định hành vi cho các trục khác nhau trên Bộ điều khiển (trái ngược với các tùy chọn duy nhất của Arcade bên trái, Arcade bên phải, Arcade phân chia và Tank Drive trong Cấu hình thiết bị)
  • Thực thi mã nhanh hơn và do đó, khả năng phản hồi của nút (vì mỗi điều kiện được gọi riêng biệt và không được nhúng vào một chồng mã duy nhất)
  • Yêu cầu kiến ​​thức mã hóa nhiều nhất về các tùy chọn (điều kiện, vòng lặp, sự kiện và kiến ​​thức về các nút/cần điều khiển trên Bộ điều khiển)
  • Sử dụng Bộ điều khiển với robot được chế tạo tùy chỉnh, đặc biệt với hệ thống truyền động không chuẩn
  • Khi muốn gán nhiều hành vi cho một nút duy nhất mà không bị lag. Ví dụ: khi nhấn Nút Lên, Vuốt có thể mở, lái về phía trước và sau đó đóng xung quanh một vật thể.

For more information, help, and tips, check out the many resources at VEX Professional Development Plus

Last Updated: