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

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 EXP. 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 EXP. 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ư BaseBot 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ị EXP VEXcode với các tùy chọn Bộ điều khiển được hiển thị. Sơ đồ điều khiển bằng nút bấm cho thấy hai cần điều khiển điều khiển robot theo cấu hình truyền động xe tăng. Các nút Lên và Xuống điều khiển ArmMotorGroup và các nút trục R điều khiển 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ư BaseBot, Clawbot hoặc sửa đổi đơn giản các bản dựng tiêu chuẩn đó. Ví dụ: BaseBot 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 EXP với khối tùy chọn 2 đã mở. Dự án có một chồng khối và các thiết bị được cấu hình. Menu Thiết bị được mở sang bên cạnh và liệt kê các thiết bị sau: ArmMotor trên cổng 3, ClawMotor trên cổng 4, Controller, LeftMotor trên cổng 6 và RightMotor trên cổng 10. Cuối cùng là một chồng khối để xử lý đầu vào của bộ điều khiển. Ngăn xếp có nội dung Khi bắt đầu, hãy đặt ArmMotor dừng lại để giữ và đặt ClawMotor dừng lại để giữ. Phần còn lại của ngăn xếp được chứa trong vòng lặp Forever. Nó đọc là Mãi mãi, đặt vận tốc LeftMotor ở vị trí Bộ điều khiển 3 %, quay LeftMotor về phía trước, đặt vận tốc RightMotor ở vị trí Bộ điều khiển 2 % và quay RightMotor về phía trước. Tiếp theo, nếu nhấn Controller Up thì xoay ArmMotor lên, nếu không, nếu nhấn Controller E Down thì xoay ArmMotor xuống, nếu không thì dừng ArmMotor. Cuối cùng, nếu Bộ điều khiển A được nhấn thì xoay ClawMotor để mở, nếu không thì nếu Bộ điều khiển B được nhấn thì xoay ClawMotor để đóng, nếu không thì dừng ClawMotor.

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

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

Mã số

Giải thích

Cận cảnh chồng khối trong dự án VEXcode EXP của Option 2. Hai khối được đánh dấu và nằm ngoài vòng lặp Forever của ngăn xếp, chúng đọc lệnh set ArmMotor dừng để giữ và lệnh set ClawMotor dừng để 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.

Cận cảnh chồng khối trong dự án VEXcode EXP của Option 2. Bốn khối được đánh dấu bên trong vòng lặp Forever của ngăn xếp. Họ đọc Forever, đặt vận tốc LeftMotor ở vị trí Bộ điều khiển 3 %, quay LeftMotor về phía trước, đặt vận tốc RightMotor ở vị trí Bộ điều khiển 2 % và quay RightMotor về phía trước. Sơ đồ Bộ điều khiển EXP với các nút bấm và cần điều khiển được ghi chú. Hình ảnh nhìn từ phía trước bộ điều khiển. Các trục của cần điều khiển bên trái được đánh số là 3 và 4. Nút giữa của cần điều khiển bên trái được gắn nhãn L3. Hai nút tròn bên dưới cần điều khiển bên trái được dán nhãn Lên và Xuống. Các trục của cần điều khiển bên phải được đánh số là 1 và 2. Nút ở giữa cần điều khiển bên phải được gắn nhãn R3. Hai nút tròn bên dưới cần điều khiển bên phải được dán nhãn là A và B.

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.

Cận cảnh chồng khối trong dự án VEXcode EXP của Option 2. Khối if, else if, else được tô sáng bên trong vòng lặp Forever của ngăn xếp. Nó sẽ đọc nếu nhấn Controller Up thì quay ArmMotor lên, nếu không thì nhấn Controller Down thì quay ArmMotor xuống, nếu không thì 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.

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 khối tùy chọn 3 đã mở. Dự án có 11 chồng khối nhỏ và có các thiết bị được cấu hình. Menu Thiết bị được mở sang bên cạnh và liệt kê các thiết bị sau: ArmMotor trên cổng 3, ClawMotor trên cổng 4, Controller, LeftMotor trên cổng 6 và RightMotor trên cổng 10. Cuối cùng là 11 ngăn xếp khối nhỏ xử lý dữ liệu đầu vào của Bộ điều khiển. Ngăn xếp đầu tiên có nội dung Khi bắt đầu, hãy thiết lập ArmMotor dừng lại để giữ và sau đó thiết lập ClawMotor dừng lại để giữ. Ngăn xếp thứ hai đọc Khi trục bộ điều khiển 3 thay đổi, hãy đặt vận tốc LeftMotor thành vị trí Bộ điều khiển 3 % rồi xoay LeftMotor về phía trước. Ngăn xếp thứ ba ghi Khi trục Bộ điều khiển 2 thay đổi, hãy đặt vận tốc RightMotor thành vị trí Bộ điều khiển 2 % rồi xoay RightMotor về phía trước. Ngăn xếp thứ tư ghi rằng Khi nhấn nút Bộ điều khiển Lên, hãy xoay ArmMotor lên. Ngăn xếp thứ năm ghi là Khi nút Bộ điều khiển được thả ra, hãy dừng ArmMotor. Ngăn xếp thứ sáu ghi rằng Khi nhấn nút Bộ điều khiển, hãy xoay ArmMotor xuống. Ngăn xếp thứ bảy ghi rằng Khi nút Bộ điều khiển được thả ra, hãy dừng ArmMotor. Ngăn xếp thứ tám ghi rằng Khi nhấn nút Bộ điều khiển A, hãy xoay ClawMotor để mở. Ngăn xếp thứ chín ghi rằng Khi nút Bộ điều khiển A được nhả ra, hãy dừng ClawMotor. Ngăn xếp thứ mười ghi rằng Khi nhấn nút điều khiển B, hãy xoay ClawMotor để đóng lại. Ngăn xếp thứ mười một và cũng là ngăn xếp cuối cùng có nội dung: Khi nút Bộ điều khiển B được nhả, hãy dừng ClawMotor.

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

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

Mã số

Giải thích

Cận cảnh một chồng khối trong dự án VEXcode EXP Option 3. Ngăn xếp có nội dung Khi bắt đầu, hãy thiết lập ArmMotor dừng để giữ và sau đó thiết lập ClawMotor dừng để 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.

Cận cảnh hai chồng khối trong dự án VEXcode EXP Option 3. Ngăn xếp đầu tiên đọc Khi trục Bộ điều khiển 3 thay đổi, hãy đặt tốc độ Động cơ bên trái thành vị trí Bộ điều khiển 3 % rồi xoay Động cơ bên trái về phía trước. Ngăn xếp thứ hai ghi Khi trục Bộ điều khiển 2 thay đổi, hãy đặt vận tốc RightMotor thành vị trí Bộ điều khiển 2 % rồi xoay RightMotor về phía trước. Sơ đồ Bộ điều khiển EXP với các nút bấm và cần điều khiển được ghi chú. Hình ảnh nhìn từ phía trước bộ điều khiển. Các trục của cần điều khiển bên trái được đánh số là 3 và 4. Nút giữa của cần điều khiển bên trái được gắn nhãn L3. Hai nút tròn bên dưới cần điều khiển bên trái được dán nhãn Lên và Xuống. Các trục của cần điều khiển bên phải được đánh số là 1 và 2. Nút ở giữa cần điều khiển bên phải được gắn nhãn R3. Hai nút tròn bên dưới cần điều khiển bên phải được dán nhãn là A và B.

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.

Cận cảnh bốn chồng khối trong dự án VEXcode EXP Option 3. Ngăn xếp đầu tiên ghi là Khi nhấn nút Bộ điều khiển Lên, hãy xoay ArmMotor lên. Ngăn xếp thứ hai ghi là Khi nút Bộ điều khiển được nhả ra, hãy dừng ArmMotor. Ngăn xếp thứ ba ghi rằng Khi nhấn nút Bộ điều khiển xuống, hãy xoay ArmMotor xuống. Ngăn xếp thứ tư ghi là Khi nút Bộ điều khiển được thả ra, 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: