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, các 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 build.vex.comvà các bản dựng tùy chỉnh.

Tùy chọn 1: Gán 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ị, hãy xem bài viết này.

Ảnh chụp màn hình 2023-07-27 lúc 12.37.20 PM.png

Tóm tắt Phương án 1: Gán 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 vĩnh viễn

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ể.

Ảnh chụp màn hình 2023-07-27 lúc 12.51.23 PM.png

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.

Đoạn mã

Giải trình

Ảnh chụp màn hình 2023-07-27 lúc 12.53.38 PM.png

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 chụp màn hình 2023-07-27 lúc 12.54.05 PM.png bộ điều khiển v5.png

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 chụp màn hình 2023-07-27 lúc 12.54.40 PM.png

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 phương án 2: Sử dụng vòng lặp vĩnh viễ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ị)
  • 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.

Ảnh chụp màn hình 2023-07-27 lúc 1.17.23 PM.png

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.

Đoạn mã

Giải trình

Ảnh chụp màn hình 2023-07-27 lúc 1.18.55 chiều.png

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 chụp màn hình 2023-07-27 lúc 1.19.06 chiều.png bộ điều khiển v5.png

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 chụp màn hình 2023-07-27 lúc 1.19.20 chiều.png

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 phương á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: