Mục lục:

Cánh tay robot: Jensen: 4 bước
Cánh tay robot: Jensen: 4 bước

Video: Cánh tay robot: Jensen: 4 bước

Video: Cánh tay robot: Jensen: 4 bước
Video: REVIEW PHIM TAY ĐẤM THÉP || REAL STEEL || SAKURA REVIEW 2024, Tháng mười một
Anonim
Cánh tay robot: Jensen
Cánh tay robot: Jensen

Jensen là một cánh tay robot được xây dựng trên nền tảng Arduino với trọng tâm là lập kế hoạch chuyển động trực quan, được thực hiện như một dự án độc lập 1 tín chỉ dưới sự cố vấn của Tiến sĩ Charles B. Malloch. Nó có thể tái tạo một loạt các chuyển động được lập trình bằng cách di chuyển cánh tay theo cách thủ công. Tôi có cảm hứng để chế tạo nó từ việc nhìn thấy các cánh tay robot khác được chế tạo trong không gian chế tạo UMass Amherst M5. Hơn nữa, tôi muốn học cách sử dụng phần mềm CAD và tôi muốn thực hiện một dự án Arduino nâng cao. Tôi xem đây là cơ hội để làm tất cả những điều đó.

Bước 1: Thiết kế và phạm vi ban đầu

Thiết kế và Phạm vi ban đầu
Thiết kế và Phạm vi ban đầu

Phần mềm CAD mà tôi chọn để học cho dự án này là OnShape và thứ đầu tiên tôi lập mô hình là một servo tương tự HiTec HS-422. Tôi chọn servo bởi vì nó có sẵn cho tôi tại địa phương và nó là một mức giá hợp lý. Nó cũng là phương pháp tốt để học OnShape trước khi chuyển sang thiết kế các bộ phận của riêng tôi. Vào thời điểm ban đầu của dự án, tôi đã có ý tưởng chung về những gì tôi muốn cánh tay có khả năng. Tôi muốn nó có một phạm vi chuyển động phù hợp và một cái kẹp để nhặt đồ. Các thông số kỹ thuật chung này đã thông báo cho thiết kế khi tôi tiếp tục mô hình hóa nó trong CAD. Một hạn chế thiết kế khác mà tôi gặp phải vào thời điểm này là kích thước của giường in trên máy in 3D của tôi. Đó là lý do tại sao phần đế mà bạn nhìn thấy trong bức ảnh trên là một hình vuông tương đối nguyên thủy.

Trong giai đoạn này của dự án, tôi cũng đang suy nghĩ về cách tôi muốn điều khiển cánh tay. Một cánh tay robot mà tôi đã lấy cảm hứng từ trong không gian chế tạo đã sử dụng một cánh tay con rối để điều khiển. Một phương pháp khác sử dụng phương pháp lập trình đường dẫn trực quan trong đó cánh tay được người dùng di chuyển vào các vị trí khác nhau. Sau đó, cánh tay sẽ quay trở lại các vị trí đó.

Kế hoạch ban đầu của tôi là hoàn thành việc xây dựng cánh tay và sau đó thực hiện cả hai phương pháp kiểm soát này. Tôi cũng muốn tạo một ứng dụng máy tính để điều khiển nó vào một thời điểm nào đó sau đó. Như bạn có thể nói, tôi đã kết thúc việc giảm phạm vi khía cạnh này của dự án. Khi tôi bắt đầu làm việc với hai phương pháp điều khiển đầu tiên đó, tôi nhanh chóng nhận ra rằng phương pháp lập trình đường dẫn trực quan phức tạp hơn tôi nghĩ. Đó là khi tôi quyết định lấy nó làm trọng tâm và đặt các phương pháp kiểm soát khác vào chế độ giữ vô thời hạn.

Bước 2: Kiểm soát

Điều khiển
Điều khiển

Phương pháp kiểm soát mà tôi chọn hoạt động như thế này: bạn di chuyển cánh tay bằng bàn tay của bạn vào các vị trí khác nhau và "lưu" các vị trí đó. Mỗi vị trí có thông tin về góc giữa mỗi liên kết của cánh tay. Sau khi bạn hoàn tất việc lưu các vị trí, bạn nhấn một nút phát lại và cánh tay quay trở lại từng vị trí đó theo trình tự.

Trong phương pháp kiểm soát này, có rất nhiều điều cần tìm hiểu. Để mỗi servo quay trở lại một góc đã lưu, tôi phải bằng cách nào đó "lưu" những góc đó ngay từ đầu. Điều này yêu cầu Arduino Uno mà tôi đang sử dụng có thể nhận được góc hiện tại của mỗi servo. Bạn của tôi, Jeremy Paradie, người đã chế tạo ra một cánh tay robot sử dụng phương pháp điều khiển này, đã níu kéo tôi bằng cách sử dụng chiết áp bên trong của mỗi servo sở thích. Đây là chiết áp mà servo tự sử dụng để mã hóa góc của nó. Tôi chọn một servo thử nghiệm, hàn một dây vào chân giữa của chiết áp bên trong và khoan một lỗ trên vỏ để đưa dây ra bên ngoài.

Bây giờ tôi có thể nhận được góc hiện tại bằng cách đọc điện áp trên chân giữa của chiết áp. Tuy nhiên, có hai vấn đề mới. Thứ nhất, đã có nhiễu ở dạng xung đột điện áp trên tín hiệu đến từ chân giữa. Vấn đề này đã trở thành một vấn đề thực sự sau đó. Thứ hai, phạm vi giá trị để gửi một góc và nhận một góc là khác nhau.

Yêu cầu động cơ servo sở thích di chuyển đến một góc nào đó từ 0 đến 180 độ liên quan đến việc gửi tín hiệu PWM với thời gian cao tương ứng với góc đó. Ngược lại, sử dụng chân đầu vào tương tự của Arduino để đọc điện áp trên chân giữa của chiết áp trong khi di chuyển còi servo từ 0 đến 180 độ sẽ trả về một dải giá trị riêng biệt. Do đó, một số phép toán là cần thiết để dịch một giá trị đầu vào đã lưu thành giá trị đầu ra PWM tương ứng cần thiết để trả lại servo về cùng một góc.

Suy nghĩ đầu tiên của tôi là sử dụng một bản đồ phạm vi đơn giản để tìm PWM đầu ra tương ứng cho mỗi góc đã lưu. Điều này đã hiệu quả, nhưng nó không chính xác lắm. Trong trường hợp dự án của tôi, phạm vi giá trị thời gian cao PWM tương ứng với phạm vi góc 180 độ lớn hơn nhiều so với phạm vi giá trị đầu vào tương tự. Ngoài ra, cả hai phạm vi này đều không liên tục và chỉ bao gồm các số nguyên. Do đó, khi tôi ánh xạ một giá trị đầu vào đã lưu với một giá trị đầu ra, độ chính xác đã bị mất. Đó là vào thời điểm này, tôi nhận ra rằng tôi cần một vòng điều khiển để đưa các Servos của tôi đến nơi chúng cần thiết.

Tôi đã viết mã cho một vòng điều khiển PID trong đó đầu vào là điện áp chân giữa và đầu ra là đầu ra PWM, nhưng nhanh chóng phát hiện ra rằng tôi chỉ cần điều khiển tích phân. Trong trường hợp này, đầu ra và đầu vào đều đại diện cho các góc, do đó, việc thêm điều khiển tỷ lệ và đạo hàm có xu hướng làm cho nó vượt quá hoặc có hành vi không mong muốn. Sau khi điều chỉnh điều khiển tích phân, vẫn có hai vấn đề. Thứ nhất, nếu sai số ban đầu giữa dòng điện và góc mong muốn lớn, thì servo sẽ tăng tốc quá nhanh. Tôi có thể giảm hằng số cho điều khiển tích phân, nhưng điều đó làm cho chuyển động tổng thể quá chậm. Thứ hai, chuyển động bị chập chờn. Đây là kết quả của tiếng ồn trên tín hiệu đầu vào tương tự. Vòng điều khiển liên tục đọc tín hiệu này, do đó điện áp tăng đột biến gây ra chuyển động chập chờn. (Tại thời điểm này, tôi cũng đã chuyển từ một servo thử nghiệm của mình sang lắp ráp như hình trên. Tôi cũng đã tạo một đối tượng vòng điều khiển cho mỗi servo trong phần mềm.)

Tôi đã giải quyết vấn đề tăng tốc quá nhanh bằng cách đặt bộ lọc trung bình động có trọng số theo cấp số nhân (EWMA) trên đầu ra. Bằng cách lấy trung bình đầu ra, các đột biến lớn trong chuyển động đã được giảm bớt (bao gồm cả rung giật do tiếng ồn). Tuy nhiên, tiếng ồn trên tín hiệu đầu vào vẫn là một vấn đề, vì vậy giai đoạn tiếp theo của dự án của tôi đang cố gắng giải quyết vấn đề đó.

Bước 3: Tiếng ồn

Tiếng ồn
Tiếng ồn

Hình trên

Màu đỏ: tín hiệu đầu vào ban đầu

Màu xanh lam: tín hiệu đầu vào sau khi xử lý

Bước đầu tiên để giảm nhiễu trên tín hiệu đầu vào là tìm hiểu nguyên nhân của nó. Việc kiểm tra tín hiệu trên một máy hiện sóng cho thấy rằng các đột biến điện áp đang xảy ra với tốc độ 50Hz. Tôi tình cờ biết rằng tín hiệu PWM được gửi đến servos cũng ở tốc độ 50Hz, vì vậy tôi đoán các xung đột biến điện áp có liên quan đến điều đó. Tôi đã giả thuyết rằng sự chuyển động của các servo bằng cách nào đó đã gây ra xung đột điện áp trên chân V + của chiết áp, do đó làm rối loạn việc đọc trên chân giữa.

Đây là nơi tôi đã thực hiện nỗ lực đầu tiên của mình trong việc giảm tiếng ồn. Tôi lại mở từng servo và thêm một dây đến từ chân V + trên chiết áp. Tôi cần nhiều đầu vào tương tự hơn để đọc chúng so với Arduino Uno có, vì vậy tôi cũng đã chuyển sang Arduino Mega tại thời điểm này. Trong mã của tôi, tôi đã thay đổi đầu vào góc từ là một số đọc tương tự của điện áp trên chân giữa thành tỷ lệ giữa điện áp trên chân giữa với điện áp trên chân V +. Hy vọng của tôi là nếu có một sự gia tăng điện áp trên các chân, nó sẽ triệt tiêu theo tỷ lệ.

Tôi đã đặt mọi thứ lại với nhau và kiểm tra nó, nhưng sự đột biến vẫn xảy ra. Những gì tôi nên làm vào lúc này là thăm dò căn cứ của tôi. Thay vào đó, ý tưởng tiếp theo của tôi là đặt chiết áp hoàn toàn vào một nguồn điện riêng biệt. Tôi đã ngắt kết nối dây V + khỏi các đầu vào tương tự trên Arduino và nối chúng với nguồn điện riêng. Tôi đã thăm dò các chân trước đây để tôi biết điện áp nào để cấp nguồn cho chúng. Tôi cũng đã cắt kết nối giữa bảng điều khiển và chân V + trong mỗi servo. Tôi đặt mọi thứ lại với nhau, hoàn nguyên mã đầu vào góc về trạng thái trước đó và sau đó kiểm tra nó. Đúng như mong đợi, không có thêm đột biến điện áp trên chân đầu vào. Tuy nhiên, có một vấn đề mới xảy ra - việc đặt chiết áp vào một nguồn điện riêng đã làm rối loạn hoàn toàn các vòng điều khiển bên trong của các servo. Mặc dù các chân V + vẫn nhận được điện áp tương tự như trước đây, nhưng chuyển động của các servo rất thất thường và không ổn định.

Tôi không hiểu tại sao điều này lại xảy ra, vì vậy cuối cùng tôi đã kiểm tra kết nối đất của mình trong các Servos. Có một sự sụt giảm điện áp trung bình khoảng 0,3 Volt trên mặt đất và nó thậm chí còn tăng cao hơn khi các servo hút dòng điện. Đối với tôi sau đó rõ ràng rằng những chân đó không còn được coi là "nối đất", và tốt hơn có thể được mô tả như là chân "tham chiếu". Các bảng điều khiển trong servo phải được đo điện áp trên chân giữa của chiết áp so với cả điện áp trên chân V + và chân tham chiếu. Việc cấp nguồn riêng cho các chiết áp đã làm rối loạn phép đo tương đối đó vì bây giờ thay vì mức tăng đột biến điện áp xảy ra trên tất cả các chân, nó chỉ xảy ra trên chân tham chiếu.

Người cố vấn của tôi, Tiến sĩ Malloch, đã giúp tôi gỡ lỗi tất cả những điều này và đề nghị tôi cũng đo điện áp trên chân giữa so với các chân khác. Đó là những gì tôi đã làm cho nỗ lực thứ ba và cuối cùng của mình trong việc giảm nhiễu của đầu vào góc. Tôi mở từng servo, gắn lại dây mà tôi đã cắt và thêm dây thứ ba đến từ chân tham chiếu trên chiết áp. Trong mã của tôi, tôi đã thực hiện đầu vào góc tương đương với biểu thức sau: (pin giữa - chân tham chiếu) / (V + pin - chân tham chiếu). Tôi đã thử nghiệm nó và nó đã làm giảm thành công ảnh hưởng của các xung điện áp. Ngoài ra, tôi cũng đặt một bộ lọc EWMA trên đầu vào này. Tín hiệu đã xử lý này và tín hiệu ban đầu được hình trên.

Bước 4: Kết thúc mọi thứ

Kết thúc mọi thứ
Kết thúc mọi thứ

Với khả năng của mình, vấn đề tiếng ồn đã được giải quyết, tôi bắt đầu sửa chữa và tạo ra những phần cuối cùng của thiết kế. Cánh tay đã đặt quá nhiều trọng lượng lên servo trong đế, vì vậy tôi đã làm một chân đế mới hỗ trợ trọng lượng của cánh tay bằng cách sử dụng một ổ trục lớn. Tôi cũng đã in bộ kẹp và chà nhám một chút để nó hoạt động.

Tôi rất hài lòng với kết quả cuối cùng. Lập kế hoạch chuyển động trực quan hoạt động nhất quán và chuyển động mượt mà và chính xác, xem xét mọi thứ. Nếu ai đó muốn thực hiện dự án này, trước tiên tôi đặc biệt khuyến khích họ tạo một phiên bản đơn giản hơn của nó. Theo nhận thức sâu sắc, việc chế tạo một thứ như thế này bằng cách sử dụng động cơ servo theo sở thích là rất ngây thơ và khó khăn mà tôi gặp phải để nó hoạt động đã chứng tỏ điều đó. Tôi coi đó là một điều kỳ diệu khi cánh tay hoạt động tốt như nó. Tôi vẫn muốn tạo ra một cánh tay robot có thể giao tiếp với máy tính, chạy các chương trình phức tạp hơn và di chuyển với độ chính xác cao hơn, vì vậy, đối với dự án tiếp theo của tôi, tôi sẽ làm điều đó. Tôi sẽ sử dụng các servos rô bốt kỹ thuật số chất lượng cao và hy vọng điều đó sẽ giúp tôi tránh được nhiều vấn đề mà tôi gặp phải trong dự án này.

Tài liệu CAD:

cad.onshape.com/documents/818ea878dda7ca2f…

Đề xuất: