robot 3 bậc DR3
robot 3 bậc DR3
ĐỒ ÁN MÔN HỌC
Mụ c lụ c
Lời cảm ơn.............................................................................................................................1
Chương 1. TỔNG QUAN ĐỀ TÀI....................................................................................2
1.1 Định hướng cho đề tài:............................................................................................2
1.2 Mục tiêu đề tài :.......................................................................................................2
1.3 Đối tượng và phạm vi nghiên cứu :.........................................................................3
Chương 2. Tổng quan về phần mềm và cơ sở lý thuyết....................................................4
2.1 Ngôn ngữ C# trong lập trình giao diện điều khiển :................................................4
2.2 Phần mềm lập trình ARDUINO IDE......................................................................4
2.2.1 Arduino IDE.....................................................................................................4
2.2.2 Arduino IDE hoạt động như thế nào?..............................................................4
2.2.3 Lý do nên sử dụng Arduino IDE......................................................................5
2.2.4 Thư viện hỗ trợ phong phú...............................................................................5
2.3 Tổng quan về phần mềm Matlab.............................................................................5
2.3.1 Giới thiệu phần mềm Matlab...........................................................................5
2.3.2 Hệ thống Matlab...............................................................................................6
2.3.3 Tính năng của Matlab......................................................................................7
2.3.4 Ứng dụng của Matlab.......................................................................................7
2.4 Tạo giao diện điều khiển trên matlab bằng tool Design app...................................8
2.5 Tổng quan về phần mềm SolidWork.......................................................................9
2.5.1 Phần mềm SOLIDWORKS.............................................................................9
2.5.2 Lịch sử hình thành và phát triển của phần mềm SOLIDWORKS.................10
2.5.3 Chức năng phần mềm SOLIDWORKS.........................................................10
2.5.4 Tính năng của SOLIDWORKS......................................................................11
2.5.5 Ưu điểm của phần mềm SOLIDWORKS :....................................................13
2.6 Phần mềm thiết kế 2D bằng AutoCad :.................................................................14
2.6.1 Phần mềm AutoCAD là gì?...........................................................................14
2.6.2 Nguồn gốc của phần mềm AutoCAD :..........................................................15
2.6.3 Ứng dụng phần mềm AutoCAD vào đời sống :.............................................15
2.7 Đặt trục cho robot 3 bậc tự do...............................................................................17
2.8 Tính toán động học thuận :.....................................................................................18
2.8.1 Động học thuận :............................................................................................18
2.8.2 Tính toán động học thuận :............................................................................18
2.9 Tính toán động học nghịch :..................................................................................19
− Lời cảm ơn
Những kiến thức và kỹ năng em đã thu được trong môn học này chắc chắn sẽ có lợi
cho em trong các hoạt động học tập và nghề nghiệp tương lai. Em rất háo hức để áp dụng
những hiểu biết và kỹ thuật này trong lĩnh vực robot và đóng góp tích cực vào ngành đang
phát triển nhanh chóng này.
Một lần nữa, em xin bày tỏ lòng biết ơn chân thành với sự tận tụy, chuyên môn và
cống hiến của thầy trong việc giảng dạy môn học Kỹ thuật Robot. Em xin cảm ơn vì đã
truyền cảm hứng và hướng dẫn em trong hành trình học tập và khám phá này.
Trân trọng,
Nhóm Quân và Long
GVHD : Nguyễn Văn Thái
Tình hình robot trên thế giới đang phát triển mạnh mẽ và đa dạng. Dưới đây là một
số xu hướng và tình hình chung về robot trên thế giới:
Robot công nghiệp: Robot công nghiệp tiếp tục được áp dụng rộng rãi trong các
ngành công nghiệp, bao gồm sản xuất ô tô, điện tử, y tế, dệt may và nhiều ngành công
nghiệp khác. Robot công nghiệp giúp tăng năng suất, cải thiện chất lượng và an toàn lao
động.
Robot dịch vụ: Robot dịch vụ đã có sự phát triển đáng kể trong các lĩnh vực như
khách sạn, nhà hàng, bệnh viện, giao thông và ngành du lịch. Các robot này có thể thực
hiện các nhiệm vụ như đón tiếp khách, phục vụ thức ăn, hướng dẫn du khách, chăm sóc
bệnh nhân và hỗ trợ trong các hoạt động dịch vụ khác.
Robot giáo dục: Robot đang được sử dụng trong giáo dục để hỗ trợ quá trình học tập.
Chúng có thể hướng dẫn, tương tác và cung cấp phương pháp học tương tác cho học sinh ở
mọi độ tuổi. Robot giáo dục có thể giúp nâng cao hiệu suất học tập và tạo ra môi trường
học tập thú vị.
Robot nông nghiệp: Sự phát triển của robot trong nông nghiệp giúp tự động hóa quy
trình canh tác, gieo hạt, thu hoạch và chăm sóc cây trồng. Robot nông nghiệp có thể giúp
nâng cao hiệu suất, sử dụng tài nguyên hiệu quả hơn và giảm sự phụ thuộc vào lao động.
Robot hội nhập xã hội: Robot hội nhập xã hội là robot được thiết kế để tương tác và
làm việc cùng con người trong các môi trường xã hội. Chúng có khả năng giao tiếp, nhận
diện khuôn mặt, di chuyển và thực hiện các tác vụ hỗ trợ.
Robot tự hành và trí tuệ nhân tạo (AI): Robot tự hành và trí tuệ nhân tạo đang phát
triển nhanh chóng. Các công nghệ như xe tự lái, robot dịch vụ tự động và hệ thống trí tuệ
nhân tạo ngày càng tiến bộ, mở ra những khả năng mới cho robot.
Tình hình robot trên thế giới đang tiếp tục phát triển và có vai trò quan trọng trong
nhiều ngành công nghiệp và lĩnh vực. Robot đang trở thành một phần không thể thiếu
trong cuộc sống hàng ngày và dự kiến sẽ tiếp tục phát triển và mở rộng ứng dụng trong
tương lai.
1.2 Mục tiêu đề tài :
− Tính toán được các phương trình động học của robot.
− Lập trình giao diện điều khiển bằng ngôn ngữ Csharp.net.
− Tìm hiểu về cách gửi nhận dữ liệu từ c# và arduino thông qua truyền thông nối tiếp
UART.
− Thực hiện lắp ráp mô hình bằng vật liệu mica.
− Thiết lập chương trình điều khiển động cơ bước và ngoại vi thông qua arduino.
Điều khiển robot để kiểm chứng tính toán động học thuận và ngược.
GVHD : Nguyễn Văn Thái
thuyết
2.1 Ngôn ngữ C# trong lập trình giao diện điều khiển :
C# hay còn được gọi với một cái tên khác là C Sharp, phát triển bởi tập đoàn
Microsoft và ra mắt vào năm 2000.
Có thể nói, C# là ngôn ngữ lập trình khá đơn giản, nằm trong nhóm những ngôn ngữ
hiện đại và có tính chất hướng đối tượng.
Nó kế thừa những ưu điểm nổi bật của hai ngôn ngữ lập trình mạnh nhất hiện nay,
C++ và Java. Bên cạnh đó, C# cũng được giới chuyên gia nhận định có sự cân bằng giữa
C++, Visual Basic, Java và cả Delphi.
Đối với những ứng dụng tạo ra từ .NET framework, mã nguồn chương trình sẽ biên
dịch sang Microsoft Intermediate Language (ngôn ngữ trung gian MSIL). Sau đó, nó cần
thông qua Common Language Runtime (CLR) để chương trình có thể chạy được trên hệ
điều hành.
Nhờ có sự hỗ trợ của .NET framework mà công việc tạo ra chương trình cho
Windows Form, WPF hay phát triển game, cũng như các ứng dụng web và mobile đã trở
nên dễ dàng, nhanh chóng hơn rất nhiều.
Windowns Forms là thuật ngữ mô tả một ứng dụng được viết dùng .NET
FrameWorrk và có giao diện người dùng Windows Forms (màn hình windows).
Mỗi màn hình windows cung cấp một giao diện giúp người dùng giao tiếp với ứng
dụng. Giao diện này được gọi là giao diện đồ họa (GUI) của ứng dụng.
Là các ứng dụng windows chạy trên máy tính - mã lệnh thực thi ngay trên máy
tính: Microsoft Word, Excel, Access, Calculator, Yahoo, Mail,... là các ứng dụng Windows
Forms.
2.2 Phần mềm lập trình ARDUINO IDE
Arduino IDE là một phần mềm với một mã nguồn mở, được sử dụng chủ yếu để viết
và biên dịch mã vào module Arduino. Nó bao gồm phần cứng và phần mềm. Phần cứng
chứa đến 300,000 board mạch được thiết kế sẵn với các cảm biến, linh kiện. Phần mềm
giúp bạn có thể sử dụng các cảm biến, linh kiện ấy của Arduino một cách linh hoạt phù
hợp với mục đích sử dụng.
Đây là một phần mềm Arduino chính thống, giúp cho việc biên dịch mã trở nên dễ
dàng, ngay cả một người bình thường không có kiến thức kỹ thuật cũng có thể làm được.
2.2.2 Arduino IDE hoạt động như thế nào?
Khi người dùng viết mã và biên dịch, IDE sẽ tạo file Hex cho mã. File Hex là các
file thập phân Hexa được Arduino hiểu và gửi đến bo mạch bằng cáp USB. Mỗi bo
GVHD : Nguyễn Văn Thái
Arduino đều được tích hợp một bộ vi điều khiển, bộ vi điều khiển sẽ nhận file Hex và chạy
theo mã được viết.
2.2.3 Lý do nên sử dụng Arduino IDE
Phần mềm lập trình mã nguồn mở miễn phí IDE trong Arduino IDE là phần có nghĩa
là mã nguồn mở. Nghĩa là phần mềm này miễn phí cả về phần tải về lẫn phần bản quyền.
Người dùng có quyền sửa đổi, cải tiến, phát triển, nâng cấp theo một số nguyên tắc chung
được nhà phát hành cho phép mà không cần xin phép ai, điều mà họ không được phép làm
đối với các phần mềm nguồn đóng.
Tuy là phần mềm mã nguồn mở nhưng khả năng bảo mật thông tin của Arduino IDE
là vô cùng tuyệt vời, khi phát hiện lỗi nhà phát hành sẽ vá nó và cập nhật rất nhanh khiến
thông tin của người dùng không bị mất hoặc rò rỉ ra bên ngoài.
Sử dụng ngôn ngữ lập trình C/C++ thân thiện với các lập trình viên Arduino IDE sử
dụng ngôn ngữ lập trình C/C++ rất phổ biến trong giới lập trình. Bất kỳ đoạn code nào của
C/C++ thì Arduino IDE đều có thể nhận dạng, giúp các lập trình viên thuận tiện trong việc
thiết kế chương trình lập cho các bo mạch Arduino.
Arduino có một module quản lý bo mạch, nơi người dùng có thể chọn bo mạch mà
họ muốn làm việc cùng và có thể thay đổi bo mạch thông qua Menu. Quá trình sửa đổi lựa
chọn cũng liên tục tự động cập nhật để các dữ liệu có sẵn trong bo mạch và dữ liệu sửa đổi
đồng nhất với nhau. Bên cạnh đó, Arduino IDE cũng giúp bạn tìm ra lỗi từ code mà bạn
viết, qua đó giúp bạn sửa lỗi kịp thời tránh tình trạng bo mạch Arduino làm việc với code
lỗi quá lâu dẫn đến hư hỏng hoặc tốc độ xử lý bị giảm sút.
2.2.4 Thư viện hỗ trợ phong phú
Arduino IDE tích hợp với hơn 700 thư viện, được viết và chia sẻ bởi nhà phát hành
Arduino Software và thành viên trong cộng đồng Arduino. Mọi người có thể tận dụng
chúng cho dự án của riêng mình mà không cần phải bỏ ra bất kỳ chi phí nào.
Giao diện đơn giản, dễ sử dụng Arduino IDE có một giao diện đơn giản, dễ sử dụng
giúp người dùng thuận tiện hơn trong thao tác. Dưới đây là một số tính năng chúng ta
thường sử dụng:
Nút kiểm tra chương trình (Verify): giúp dò lỗi phần code định truyền xuống bo
mạch Arduino.
Nút tải đoạn code vào bo mạch Arduino (Upload): giúp nhập đoạn code vào bo mạch
Arduino.
Vùng lập trình: người dùng sẽ viết chương trình tại khu vực này.
Thanh Menu: gồm những thẻ chức năng nằm trên cùng như File, Edit, Sketch, Tools,
Help.
2.3 Tổng quan về phần mềm Matlab
Matlab viết tắt của Matrix Laboratory, là một môi trường phần mềm trong
toán học tính toán. Phần mềm được phát triển vào cuối những năm 70 bởi Cleve
Moler (Stanford) với mục đích giúp sinh viên thực hiện các tính toán số mà không
cần phải học một ngôn ngữ lập trình bậc thấp.
GVHD : Nguyễn Văn Thái
Matlab được thiết kế bởi công ty MathWorks là một ngôn ngữ lập trình bậc
cao chuyên sử dụng cho các tính toán kỹ thuật, đặc biệt là các bài toán có dạng ma
trận hoặc vector. Phần mềm tích hợp các tính toán, đồ họa và lập trình trong một
môi trường thân thiện, cho phép thể hiện các bài toán và nghiệm dưới dạng các ký
hiệu toán học quen thuộc.
Matlab là một hệ tương tác, có các thành phần dữ liệu cơ bản là một mảng mà
không cần khai báo trước số chiều. Phần mềm đã trải qua nhiều năm phát triển với
sự đóng góp của nhiều chuyên gia. Trong trường đại học, nó là một công cụ chuẩn
cho các khoa học về toán, kỹ thuật và khoa học từ mở đầu đến nâng cao. Trong
công nghiệp, matlab là một công cụ hữu ích cho việc nghiên cứu, phát triển và phân
tích các sản phẩm chất lượng cao.
2.3.2 Hệ thống Matlab
Ngôn ngữ matlab: là một ngôn ngữ lập trình bậc cao (scritp) với các lệnh
điều khiển, chức năng, cấu trúc dữ liệu, đầu vào/đầu ra và khả năng lập trình.
Môi trường làm việc Matlab: giúp sử dụng các hàm và tệp trong Matlab bao
gồm các công cụ quản lý biến và xuất nhập dữ liệu trong môi trường làm
việc. Ngoài ra, nó cũng có các công cụ để phát triển, quản lý, gỡ lỗi và lập hồ sơ các
tệp m và các ứng dụng matlab.
Xử lý đồ họa: một công cụ giúp bạn xem dữ liệu của mình ở định dạng biểu đồ.
Ngoài ra, có thể xây dựng giao diện đồ họa.
Thư viện hàm tính toán: nó là một tập hợp các thuật toán tính toán từ các hàm cơ
bản như tổng, sin, cos và tính toán số học phức tạp đến các hàm phức tạp như ma
trận nghịch đảo, giá trị duy nhất, vectơ cụ thể của ma trận, hàm bessel và các phép
biến đổi fourier nhanh.
GVHD : Nguyễn Văn Thái
Matlab API: là một thư viện cho phép bạn viết phần mềm c và fortran và tương
tác với matlab bao gồm các công cụ để gọi các quy trình lặp matlab (liên kết
động). Sử dụng matlab như một công cụ máy tính để đọc và ghi m tệp.
Matlab là một ngôn ngữ lập trình cao cấp để tính toán số và phát triển ứng dụng.
Cung cấp một môi trường tương tác để điều tra, thiết kế và giải quyết các vấn
đề.
Nó cung cấp một thư viện lớn các hàm toán học để giải các hàm số tuyến tính,
thống kê, phân tích Fourier; lọc, tối ưu hóa, tích phân và phương trình vi phân bình
thường.
Matlab cung cấp các biểu đồ tích hợp để trực quan hóa dữ liệu và các công cụ để
tạo biểu đồ tùy chỉnh.
Cung cấp các công cụ phát triển để tăng khả năng bảo trì chất lượng mã và tối đa
hóa hiệu suất.
Cung cấp các công cụ để xây dựng ứng dụng bằng giao diện đồ họa tùy chỉnh.
Các chức năng để tích hợp các thuật toán dựa trên Matlab với các ứng dụng bên
ngoài và các ngôn ngữ khác như c, java, net và microsoft excel.
2.3.4 Ứng dụng của Matlab
Tính ứng dụng của matlab khá rộng rãi, được sử dụng như công cụ tính toán trong
lĩnh vực khoa học và kỹ thuật: công nghệ, toán học, hóa học, vật lý…
Matlab được sử dụng hầu hết trong các việc như:
- Xử lý tín hiệu và truyền thông.
- Xử lý chất lượng hình ảnh, video.
GVHD : Nguyễn Văn Thái
App Designer là một công cụ phát triển ứng dụng đồ họa trong MATLAB, cho phép bạn
tạo giao diện người dùng (GUI) tương tác cho các ứng dụng MATLAB của mình một cách
dễ dàng. Với App Designer, bạn có thể tạo ra các ứng dụng GUI phong phú và linh hoạt
mà không cần viết mã phức tạp.
Dưới đây là một số đặc điểm và tính năng chính của App Designer:
− Môi trường kéo và thả: App Designer cung cấp một môi trường làm việc trực quan
và dễ sử dụng, cho phép bạn kéo và thả các thành phần như nút, hộp văn bản, biểu
đồ và hình ảnh vào giao diện người dùng của ứng dụng của bạn. Bằng cách sử dụng
các công cụ nhanh chóng và dễ dùng này, bạn có thể xây dựng giao diện người
dùng theo ý muốn của mình.
− Editor mã: App Designer kết hợp một trình soạn thảo mã tích hợp, cho phép bạn
tùy chỉnh hành vi và xử lý sự kiện của các thành phần trong ứng dụng. Bạn có thể
viết mã MATLAB để xử lý sự kiện như nhấn nút, thay đổi giá trị trong hộp văn
bản, hoặc tương tác với dữ liệu.
− Giao diện dễ thao tác: Với App Designer, bạn có thể tạo ra giao diện người dùng
tương tác với các thành phần như nút bấm, ô đầu vào và biểu đồ. Bạn có thể thay
đổi thuộc tính của các thành phần này, ví dụ như màu sắc, kích thước và vị trí, để
tạo ra giao diện phù hợp với nhu cầu của ứng dụng.
− Tương tác dữ liệu: App Designer cho phép bạn tương tác với dữ liệu và thực hiện
tính toán trong ứng dụng của mình. Bạn có thể sử dụng các biểu đồ, bảng và biểu
thức toán học để hiển thị và xử lý dữ liệu theo cách bạn mong muốn.
− Tích hợp dễ dàng: App Designer tích hợp một cách mượt mà với các công cụ và
tính năng khác trong MATLAB. Bạn có thể sử dụng các hàm và công cụ MATLAB
mạnh mẽ để thực hiện tính toán và phân tích dữ liệu trong ứng dụng của mình.
− App Designer là một công cụ mạnh mẽ để tạo ra các ứng dụng GUI tương tác trong
MATLAB một cách nhanh chóng và dễ dàng. Với khả năng kéo và thả và tích hợp
các công cụ MATLAB, bạn có thể tạo ra các ứng dụng GUI phong phú và tùy
chỉnh theo ý muốn của mình để phục vụ các nhu cầu phân tích dữ liệu và tính toán
của bạn.
GVHD : Nguyễn Văn Thái
SOLIDWORKS là một phần mềm thiết kế 3D chạy trên hệ điều hành Windows thuộc
hãng Dassault Systèmes của Pháp. Được biết đến với tính dễ sử dụng và trực quan nhưng
SOLIDWORKS là một phần mềm thiết kế 3D mạnh mẽ và cung cấp cho người dùng
những tính năng tuyệt vời nhất để thiết kế các chi tiết của khối 3D, lắp ráp các chi tiết để
tạo thành bộ phận của máy móc sản xuất.
Hiện nay, SOLIDWORKS là một trong những phần mềm CAD phổ biến nhất.
Trong thực tế, SOLIDWORKS đang được sử dụng bởi hơn 2 triệu kỹ sư và hơn 200.000
doanh nghiệp và tập đoàn trên toàn thế giới. Với nhiều tính năng nổi trội, SOLIDWORKS
không chỉ được sử dụng trong lĩnh vực cơ khí mà nó còn được mở rộng ra nhiều ngành
nghề và lĩnh vực khác như: Điện, xây dựng, khoa học ứng dụng,..
GVHD : Nguyễn Văn Thái
Trải qua thời gian dài phát triển với nhiều phiên bản ra đời, SOLIDWORKS đã có
nhiều bước tiến vượt trội về tính năng, hiệu suất để đáp ứng các nhu cầu thiết kế 3D
chuyên nghiệp cho các ngành kỹ thuật, công nghiệp.
2.5.2 Lịch sử hình thành và phát triển của phần mềm SOLIDWORKS
SOLIDWORKS được phát triển bởi Jon Hirschtick, tốt nghiệp đại học MIT. Vào
tháng 12/1993, tổng công ty SOLIDWORKS được thành lập. Hirschtick tuyển dụng một
đội ngũ kỹ sư với để xây dựng phần mềm CAD 3D mà dễ sử dụng, giá cả phải chăng, và
chạy trên Windows. Và sau đó được Dassault Systèmes mua vào năm 1997 với giá $
310.000.000.
SOLIDWORKS phát hành sản phẩm đầu tiên SOLIDWORKS 95 vào tháng 11
năm 1995. Từ đó đến nay, trải qua 26 phiên bản, DS SOLIDWORKS Corp đã bán được
hơn 1,5 triệu giấy phép của SOLIDWORKS trên toàn thế giới và CEO điều hành hiện tại
là Bertrand Sicot. SOLIDWORKS được du nhập vào nước ta với phiên bản 2003, chuyên
thiết kế mô hình 3D dựa trên cách tiếp cận thành phần - tham số để tạo mô hình và lắp ráp.
Vào năm 2021, SOLIDWORKS 3D đã trở thành một giải pháp nền tảng trong lĩnh vực
thiết kế với trên 500 giải pháp đối tác, hỗ trợ cho hàng loạt các ngành công nghiệp, thiết kế
và chế tạo cho hơn 80 quốc gia trên thế giới.
2.5.3 Chức năng phần mềm SOLIDWORKS
− Phân tích quá trình rót kim loại lỏng vào khuôn
GVHD : Nguyễn Văn Thái
Hình 2-7 Khả năng thiết kế mô hình 3D hoàn hảo của SolidWork
Visual Analytics: Đây là nền tảng hỗ trợ phân tích và báo cáo trực qua cho phép
người dùng nhận được thông tin quan trọng và hình dung kết quả trong thiết kế 3D, đẩy
nhanh quá trình thiết kế.
2.5.5 Ưu điểm của phần mềm SOLIDWORKS :
Dễ sử dụng và thiết kế :
SOLIDWORKS cung cấp một cửa sổ nhập kích thước khi đang vẽ đường hoặc
hình dạng trước khi hoàn thành. Trong một cú nhấp chuột, bạn có thể có một dòng có độ
dài như ý muốn. Chỉ trong hai lần nhấp chuột nữa, đường của bạn có thể được đặt so với
tính năng hiện có ở góc chính xác mà bạn yêu cầu.
Dễ lập mô hình hình học :
Để tạo một bộ phận, bản phác thảo cần được chuyển thành dạng 3D. Điều này
thường xảy ra bằng cách dùng bản phác thảo, nhưng quá trình này cũng có thể sử dụng
nhiều chức năng hơn.
Dễ kết xuất :
Với gói kết xuất đi kèm, việc xuất hình ảnh là một quá trình trực tiếp và đơn
giản. Đối với gói SOLIDWORKS Premium cho phép hiển thị tức thì trong khi thiết
kế. Điều này có thể giúp khách hàng hình dung một cách trực quan hơn. Bên cạnh đó, các
kỹ sư cũng hiểu rõ hơn về độ trong suốt hoặc phản chiếu khi thiết kế một sản phẩm.
Xử lý nhanh :
Điều này còn tùy thuộc vào cấu hình máy tính cá nhân nhưng nếu như so sánh với
một số đối thủ khác thì SOLIDWORKS hoạt động nhanh và mượt mà hơn. Đặc biệt, đối
GVHD : Nguyễn Văn Thái
với các phiên bản SOLIDWORKS sau này, máy vẫn vận hành trơn tru đối với các bản vẽ
có nhiều chi tiết phức tạp.
2.6 Phần mềm thiết kế 2D bằng AutoCad :
AutoCAD (viết tắt của Automatic Computer Aided Design) là một ứng dụng phần
mềm được phát triển bởi Autodesk cho phép thiết kế và soạn thảo với sự hỗ trợ máy tính
(CAD). Phần mềm này được sử dụng để tạo bản vẽ 2D và 3D, cho phép người dùng khái
niệm hoá các ý tưởng, tạo ra các thiết kế và bản vẽ theo mức độ chính xác kỹ thuật cần
thiết. Thậm chí, AutoCAD có thể thực hiện tính toán và mô phỏng thiết kế nhanh chóng
trên một loạt các ngành công nghiệp.
AutoCAD là một sản phẩm chủ lực của Autodesk, đi đầu trong ngành công nghiệp
CAD. Phiên bản AutoCAD đầu tiên đã được trình diễn tại Comdex năm 1982, và được
phát hành vào tháng 12 cùng năm. Bản phát hành đã chứng tỏ sự rung chuyển mạnh mẽ
đối với ngành công nghiệp CAD. AutoCAD cũng là một trong những gói CAD đầu tiên
chạy trên PC và có sẵn cho khách hàng trên toàn thế giới.
2.6.2 Nguồn gốc của phần mềm AutoCAD :
Một trong những thông tin không thể bỏ qua về AutoCAD chính là nguồn gốc ra
đời của phần mềm này. AutoCAD là sản phẩm của Autodesk được thành lập vào năm 1982
GVHD : Nguyễn Văn Thái
bởi John Walker cùng 15 người đồng sáng lập khác. Họ xác định AutoCAD sẽ là sản phẩm
chủ lực, đồng thời, cho ra mắt AutoCAD tại triển lãm thương mại COMDEX ở Las Vegas
với tư cách là chương trình CAD đầu tiên trên thế giới chạy trên PC.
Hình 2-10 Trong gần 40 năm phát triển, AutoCAD sở hữu 31 phiên bản đã được cho ra mắt từ lần phát hành
đầu tiên vào năm 1982.
Chỉ sau 4 năm được giới thiệu, tháng 3 năm 1986, AutoCAD trở thành ứng dụng
thiết kế được sử dụng rộng rãi nhất trên toàn thế giới, và vẫn giữ vững này cho đến tận
hôm nay.
Trong gần 40 năm phát triển, AutoCAD sở hữu 31 phiên bản đã được cho ra mắt từ
lần phát hành đầu tiên vào năm 1982. Đơn vị sở hữu Autodesk cũng đã bổ sung thêm các
tính năng và chương trình mới để thu hút các ngành nghề khác.
Cụ thể, phần mềm hỗ trợ APIs để tùy chỉnh và tự động hóa, cho phép tạo ra các sản
phẩm chuyên ngành như AutoCAD Architecture, AutoCAD Electrical, AutoCAD Civil
3D,…. Trong năm năm qua, Autodesk cũng đã tạo ra các ứng dụng di động và ứng dụng
đám mây, bao gồm AutoCAD 360 , Fusion 360 và A360 Viewer. Các chương trình này
kết hợp các công cụ thiết kế và tài liệu cùng với khả năng chia sẻ và cộng tác qua Internet.
2.6.3 Ứng dụng phần mềm AutoCAD vào đời sống :
Ban đầu, phần mềm AutoCAD được tạo ra cho các kỹ sư cơ khí, nhưng nhanh
chóng được mở rộng khả năng ứng dụng để phục vụ một số lĩnh vực khác. Trên thực tế, sự
thành công của phần mềm AutoCAD phần lớn dựa vào sự ủng hộ và chấp nhận của các
chuyên gia thiết kế, bao gồm: kiến trúc sư, quản lý dự án, hoạ sĩ hoạt hình hay kỹ sư.
Sau đây là 2 lĩnh vực mà phần mềm AutoCAD được sử dụng nhiều nhất. :
Kiến trúc & xây dựng :
GVHD : Nguyễn Văn Thái
Hình 2-11 AutoCAD được sử dụng chủ yếu trong lĩnh vực xây dựng.
AutoCAD được sử dụng chủ yếu trong lĩnh vực xây dựng. Autodesk Building
Design Suite, hiện là Autodesk AEC Collection cung cấp một gói các phần mềm thiết kế
xây dựng 3D kết hợp Công cụ mô hình thông tin xây dựng (BIM) và các công cụ CAD để
giúp các kỹ sư xây dựng thiết kế, trực quan hóa, mô phỏng và xây dựng hiệu quả hơn.
Việc sử dụng BIM cũng cho phép các đơn vị, đội nhóm phân tích thiết kế để cải thiện khả
năng chính xác của quyết định; giám sát phân tích năng lượng công trình thân thiện với
môi trường hơn cũng như tiết kiệm vật liệu xây dựng.
Kỹ thuật cơ khí:
Hình 2-12 AutoCAD được sử dụng hiệu quả trong lĩnh vực Kỹ thuật Cơ khí
AutoCAD giúp thực thi hiệu quả, giảm thiểu lỗi tối đa các bản vẽ của thành phần
kỹ thuật, thiết kế cơ sở hạ tầng và phân tích các hệ thống HVAC đóng vai trò chính trong
hầu hết các lĩnh vực kỹ thuật, các ngành kỹ thuật, cơ khí, hệ thống và kỹ thuật điện.
AutoCAD cũng là một trong những phần mềm thiết kế cung cấp cho các chuyên gia ngành
kỹ thuật cơ khí các công cụ soạn thảo độc đáo có thể được sử dụng để đưa các ý tưởng kỹ
thuật của họ vào thực tế với độ chính xác mà họ yêu cầu.
GVHD : Nguyễn Văn Thái
Từ đó, AutoCAD trở thành phần mềm để thiết kế các thành phần cơ khí, phân tích
các hệ thống điện và đường ống và giải quyết các vấn đề thiết kế có thể phát sinh.
Trên đây là những thông tin về phần mềm AutoCAD được Xây dựng Hoà Bình tổng hợp
lại nhằm giúp các bạn độc giả có những thông tin chính xác nhất về phần mềm thiết kế
này.
2.7 Đặt trục cho robot 3 bậc tự do
Thông số Ý nghĩa
L1 = 105 mm Chiều dài của khâu 1
L2 = 162 mm Chiều dài của khâu 2
L3 = 130 mm Chiều dài của khâu 3
D1 = 52mm Khoảng cách giữa trục {1} và trục {2}
Quy tắc đặt hệ trục tọa độ trong robot :
1. Hệ trục thứ {i} sẽ gắn với khâu thứ {i}.
2. Trục là trục của khớp thứ i.
3. Trục là đường vuông góc chung và cắt cả và .
4. Trục được suy ra từ quy tắc bàn tay phải.
5. Hệ trục {0} sẽ là hệ trục 1 khi biến khớp 1 có giá trị bằng 0.
6. Hệ trục N được chọn tùy ý sao cho càng nhiều thông số khâu và khớp bằng 0 càng
tốt.
Bảng DH rút ra được như sau :
Bảng DH :
Bảng 2-2 Bảng DH cho robot
i
1 0 0 0
2 90 0
GVHD : Nguyễn Văn Thái
3 0 0
Động học thuận (Forward Kinematics) là một khái niệm trong robot học và động
học. Nó liên quan đến việc xác định vị trí và định hướng của bộ phận cuối cùng của robot
(có thể là bàn tay, công cụ hoặc đầu robot) dựa trên các thông số của các khớp hoặc liên
kết trong robot.
Trong một hệ thống robot, động học thuận mô tả quá trình tính toán đường đi từ
các khớp đến đầu ra hoặc công cụ của robot. Nó bao gồm việc xác định hệ tọa độ và các
tham số hình học của các khớp và liên kết trong robot.
Để thực hiện động học thuận, thông thường sử dụng các phương pháp hình học và
ma trận biến đổi để tính toán các vị trí và định hướng của các khớp và liên kết. Các thông
số của các khớp, chẳng hạn như góc quay, độ dài và bán kính, đóng vai trò quan trọng
trong quá trình tính toán này.
Kết quả của động học thuận là một ma trận biến đổi (thường được gọi là ma trận
đồng nhất) mô tả vị trí và định hướng của bộ phận cuối cùng của robot trong không gian
toạ độ toàn cục hoặc không gian công việc của robot.
Động học thuận là một khái niệm quan trọng trong robot học, đặc biệt trong việc
điều khiển robot và lập trình robot để thực hiện các tác vụ cụ thể. Nó cho phép xác định vị
trí và định hướng của bộ phận cuối cùng của robot dựa trên các thông số của các khớp
hoặc liên kết, từ đó giúp định rõ quỹ đạo và vận động của robot.
2.8.2 Tính toán động học thuận :
Ở bài toán này, nhóm sinh viên sẽ đặt trục và tính toán động học thuận cho robot theo
phương pháp được đề ra ở cuốn sách “Introduction to ROBOTICS Mechanical and Control
” của tác giả John Craig, phương trình tổng quát được đề ra như sau :
Ta đặt :
Mục đích của bài toán động học nghịch là tìm các biến khớp của tay máy khi biết vị trí
khâu tác động cuối của tay máy.
Có 2 phương pháp để giải bài toán động học nghịch là phương pháp hình học và phương
pháp đại số.
Ở bài toán này nhóm sử dụng phương pháp đại số để tính toán ra các góc khớp khi đã biết
vị trí điểm đầu cuối của robot:
Ở phương trình (1.7) sau khi giải bài toán động học thuận ta tìm được điểm đầu cuối của
robot 3 bậc tự do so với điểm tọa độ thứ {0}:
Ta nhân lần lượt cho phương trình x và y ta thu được kết quả :
Lấy ta được :
GVHD : Nguyễn Văn Thái
Ta suy ra được :
Nên :
Từ (1.18) ta suy ra :
Lúc này :
Ta nhân lần lượt cho phương trình y và x ta thu được kết quả :
Lấy ta được :
Ta còn có :
Ta đặt :
Ta suy ra :
Đặt :
Suy ra :
Suy ra :
Không gian làm việc của robot là vùng chứa các điểm, vị trí mà cơ cấu cuối của robot có
thể đạt tới. Việc xác định được không gian làm việc của robot, ta có thể đáp ứng được các
yêu cầu, nhiệm vụ làm việc trong thực tế của robot, cũng như nâng cấp và cải tiến robot
sau này.
Để xác định không gian làm việc của robot, nhóm đã sử dụng kết quả động học thuận và
dựa vào các bộ nghiệm của động học nghịch để xây dựng chương trình vẽ không gian làm
việc trên phần mềm Matlab. Hình dưới thể hiện kết quả không gian làm việc sau khi chạy
chương trình.
GVHD : Nguyễn Văn Thái
Quy hoạch quỹ đạo là một phần nhỏ của một vấn đề tổng thể như là dẫn đường
(navigation) hay quy hoạch chuyển động (Motion planning). Hệ thống cấp bậc điển hình
cho quy hoạch chuyển động như sau [2]:
Task planning – Thiết kế một vài mục tiêu. (Ví dụ như nhặt đồ vật trước mặt bạn
lên, gắp vật, thả vật, hàn, …)
Path planning – Đưa ra đường dẫn khả thi từ điểm đầu đến điểm cuối. Một đường
dẫn luôn bao gồm tập hợp của các điểm tham chiếu.
Trajectory planning – Đưa ra lịch trình theo thời gian làm sao để di chuyển theo
đường dẫn mà có tính ràng buộc ví dụ như vị trí, vận tốc, gia tốc
Trajectory following – Khi kế hoạch đã được lên thì cần một hệ thống đều khiển
để cho kế hoạch có thể di chuyển đấy đủ và chính xác nhất.
GVHD : Nguyễn Văn Thái
Ở đây ta chỉ đi sâu vào phân tích về Quy hoạch quỹ đạo (Trajectory Planning).
Quy hoạch quỹ đạo ở không gian làm việc là các điểm tham chiếu và nội suy nằm
trên trục tọa độ Descartes (vị trí và hướng) của một vị trí cụ thể trên cánh tay robot (thường
là khâu cuối – end effector)
Quy hoạch quỹ đạo ở không gian khớp là các điểm tham chiếu và nội suy trực tiếp
trên các vị trí khớp. Cả 2 quỹ đạo ở các không gian khác nhau được mô tả tại Hình 2-16
Đối với mỗi không gian khác nhau sẽ có những ưu nhược điểm riêng, ưu nhược
điểm của mỗi không gian sẽ được mô tả trong Bảng 3
Bảng 2-4 Ưu nhược điểm của các không gian sử dụng quy hoạch
Quỹ đạo vận tốc hình thang là quỹ đạo có gia tốc là hằng số, vận tốc có hình thang.
Điều này dẫn đến cấu hình vị trí đường cong s.
Ta có thể nội suy giữa 2 điểm dùng đa thức có các bậc khác nhau nhưng ta thường
sử dùng 2 loại sau:
− Cubic (đa thức bậc 3): Yêu cầu 4 điều kiện biên: vị trí và vận tốc
− Quintic (đa thức bậc 5): Yêu cầu 6 điều kiện biên: Vị trí, vận tốc và gia tốc
Tương tự như vậy thì quỹ đạo có các bậc cao hơn có thể sử dụng để nối các vi phân bậc
cao hơn của vị trí tại điểm waypoint.
GVHD : Nguyễn Văn Thái
Ở bài báo cáo này chúng em sử dụng quy hoạch quỹ đạo sử dụng đa thức bậc 3.
2.11.4 Quy hoạch quỹ đạo robot 3 bậc dùng đa thức bậc 3
Đa thức bậc ba :
Các phương trình ràng buộc được trình bày ở dạng ma trận :
Đặt
Do đó các tham số của đa thức bậc bac có thể được tính bằng công thức sau:
Các nghiệm có thể tính được theo các công thức sau :
Ta cần quy hoạch quỹ đạo di chuyển từ điểm A đến điểm B theo đa thức bậc 3 với
thời gian là tf, sau đó sẽ di chuyển từ điểm B về điểm A theo đa thức bậc 3 với thời gian.
GVHD : Nguyễn Văn Thái
Ta sẽ thực hiện đi thực hiện lại 5 lần và dừng tại vị trí điểm A khi đã quy hoạch
xong. Để thực hiện quy hoạch quỹ đạo từ điểm đến điểm ta sẽ thực hiện theo lưu đồ giải
thuật như sau:
Từ sơ đồ giải thuật Hình 4-5 và cơ sở lý thuyết đa thức bậc ba, ta thực hiện mô
phỏng và thực thi mô hình quỹ đạo theo đường thẳng.
2.11.6 Quy hoạch quỹ đạo theo hình tam giác
Ta cần quy hoạch quỹ đạo di chuyển từ điểm A đến điểm B, điểm B đến C, điểm C
về A theo đa thức bậc 3 với thời gian là t f. Ta sẽ thực hiện đi thực hiện lại 5 lần và dừng tại
vị trí điểm A khi đã quy hoạch xong.
Để thực hiện quy hoạch quỹ đạo từ điểm đến điểm ta sẽ thực hiện theo lưu đồ giải
thuật như sau :
GVHD : Nguyễn Văn Thái
Hình 2-20 Sơ đồ giải thuật quy hoạch quỹ đạo tam giác
Từ sơ đồ giải thuật Hình 4-6 và cơ sở lý thuyết đa thức bậc ba, ta thực hiện mô
phỏng và thực thi mô hình quỹ đạo theo hình tam giác.
GVHD : Nguyễn Văn Thái
Động cơ bước giảm tốc Size 42mm Nema 17 Planetary Gear Step Motor 57/11 là
động cơ bước được tích hợp hộp số giảm tốc tỉ số 57/11 giúp tăng lực kéo và độ chính xác
của động cơ, thích hợp cho các ứng dụng Robot cần chịu tải lớn và có độ chính xác cao
như cánh tay Robot, robot Scara,...., động cơ có chất lượng tốt, hộp số hoàn toàn bằng kim
loại cho độ bền và độ ổn định cao.
Thông số:
Bảng 3-2 Thông số động cơ bước Nema 17 Planetary Gear Step Motor 57/11
Thông số:
Bảng 3-3 Thông số động cơ bước Nema 17
Thông số kỹ thuật:
Vòng Bi Trục 8mm 8x22x7mm là vòng bi (bạc đạn) trục 8mm. Sử dụng chung với
thanh trục hoặc motor trục 8mm.
Thông số kỹ thuật:
Thông số kỹ thuật:
● Ròng rọc
Bảng 3-7 Thông số kĩ thuật ròng rọc
Thông số:
Bảng 3-8 Thông số kĩ thuật công tắc hành trình 5E4 10T125 loại có bánh xe
Thông số:
GVHD : Nguyễn Văn Thái
Thông số:
GVHD : Nguyễn Văn Thái
Bảng 3-10 Thông số kĩ thuật Arduino Shield CNC V3
Tương thích GRBL (mã nguồn mở chạy trên Arduino UNO R3 để điều khiển CNC
mini)
Hỗ trợ lên tới 4 trục (trục X, Y, Z và một trục thứ tư tùy chọn)
Hỗ trợ tới 2 Endstop (cảm biến đầu cuối) cho mỗi trục
Tính năng điều khiển spindle
Tính năng điều khiển dung dịch làm mát khi máy hoạt động
Sử dụng các mô đun điều khiển động cơ bước, giúp tiết kiệm chi phí khi thay thế,
nâng cấp
Thiết lập độ phân giải bước động cơ bằng jump đơn giả
Thiết kế nhỏ gọn, các đầu nối tiêu chuẩn thông dụng
Điện áp nguồn cấp đa dạng từ 12V tới 36V.
Tương thích với module A4988 và DRV8825
Tương thích với module Uno R3
Thông số :
Bảng 3-11 Thông số kĩ thuật mạch điều khiển động cơ bước A4988
Thông số:
3.1.17 Ốc vít:
Máng nhựa đi dây điện giúp mô hình trở nên gọn gàng.
GVHD : Nguyễn Văn Thái
3.2.1 Chuyển robot từ SolidWork sang Matlab thông qua Simscape Multibody Link :
Hình 3-22 Chuyển robot từ SolidWork sang Matlab thông qua Simscape Multibody Link :
Ta chuyển robot từ cơ khí được thiết kế từ SolidWork vào trong Matlab nhờ công
cụ SimScape Multibody Link.
Ta đóng gói robot lại thành một khối SubSystem :
GVHD : Nguyễn Văn Thái
Hình 3-23 Đóng gói robot lại thành một khối SubSystem
Ta đưa đầu vào robot là góc khớp. Đầu tiên ta cho đầu vào robot là các góc 0, đây
cũng là vị trí home của robot. Ta thực hiện mô phỏng để xem kết quả mà robot bằng cơ khí
mang lại.
Vị trí home của robot hoàn toàn chính xác, các góc khớp được đua vào làm cho vị
trí robot đúng so với tính toán.
Ta mô phỏng thêm để kiểm chứng lại cho chính xác :
GVHD : Nguyễn Văn Thái
Trục Z được đặt từ phải sang trái nên áp dụng quy tắc bàn tay phải ta có thể biết
được link 2 sẽ được quay lên trên một góc 90 độ. Việc này cũng chính xác so với việc đặt
trục theo phương pháp John Jcrag.
3.3 Xây dựng giao diện điều khiển bằng matlab và mô phỏng
− Msgbox(“Text cần hiển thị”): Dùng để hiển thị ra pop-up window thông báo câu
lệnh cho người dùng.
− …=str2num(get(handles.Tag,'string')): Dùng để lấy dữ liệu từ người ngoài nhập
vào (kiểu string).
− …=str2num(get(handles.Tag,'value')): Dùng để lấy dữ liệu từ người ngoài nhập
vào (kiểu value).
− set(handles.KetQua,'String',num2str(kq)): Dùng để xuất ra lại kết quả mong
muốn ra thành kiểu string.
− Axes(handles.axes): Lệnh này được sử dụng khi ta xài nhiều Axes (hình ảnh) để ta
mong muốn hiển thị trên axes nào thì chúng ta sẽ sử dụng lệnh này.
− Giao diện chính: bao gồm tên logo, tên đề tài, tên giảng viên hướng dẫn và nhóm
sinh viên thực hiện. Các nút nhấn chuyển sang giao diện: Kinematics (Kiểm chứng
động học), Exit (Đóng cửa sổ giao diện).
Hình 3-27 Giao diện điều khiển mô phỏng trên Design App - Matlab
Chèn chữ: ta kéo thả Label bên thanh công cụ “Component Library” ra giao diện
thiết kế, ghi nội dung bằng cách nhân đúp chuột vào thành label để thay đổi nội dung, định
dạng lại ô chữ ở các mục khác trong bảng Inspector :
Tạo nút nhấn: để tạo nút nhấn link sang các giao diện khác, ta chỉ cần kéo thả
button bên thanh công cụ ra giao diện thiết kế, vào viewcallback/callback để tạo ra chương
trình chức năng cho nút nhấn. Tại đây ta chỉ cần gõ vào tên của giao diện cần link như hình
dưới đây ;
function GOTOButtonPushed(app, event)
closereq;
run 'app1.mlapp';
Hàm “Closereq” dùng để đóng ứng dụng lại và hàm “run” dùng để mở một giao
diện khác mà ta đã tạo bằng desgin app.
Giao diện kiểm chứng động học: Ở phận giao diện này nhóm có menubar để tạo
ra sự chuyển tab một cách uyển chuyển và chuyên nghiệp, ta vào phần ‘COMPONENT
LIBRARY và kéo xuống phần ‘FIGURE TOOLS’ để kéo thả vào trong phần giao diện mà
ta muốn thiết kế:
GVHD : Nguyễn Văn Thái
Ở giao diện chính bao gồm tính toán động học thuận, động học nghịch cho Robot
đồng thời sẽ có thêm các ‘’edit fied’’ và các thanh ‘Slider’ dùng để thay đổi các góc của
robot. Ở đây nhóm có thiết kế thêm phần “UIAxes” dùng để thể hiện trạng thái của robot
khi ta thay đổi các góc theta.
Ở phần động học thuận, ta chỉ cần kéo các ‘Slider’ thì trạng thái robot sẽ lập tức
thay đổi theo mà không cần thông qua một nút nhận nào để thiết lập trạng thái. Đồng thời
khi ta nhấn “Switch On” thì file “Simulink” cũng sẽ bắt đầu mô phỏng và robot được ta
chuyển vào SimScape cũng chạy theo để mô phỏng các góc mà ta đặt trên giao diện. Để
làm được việc này, ta cần sử dụng câu lệnh :
set_param('awe/t1','Value','0');
set_param('awe/t2','Value','0');
set_param('awe/t3','Value','0');
set_param('awe/c','Commented',"on");
set_param('awe',"StartTime",'0','StopTime','inf');
set_param('awe',"SimulationCommand",'start');
Ta dùng câu lệnh “set_param” để gọi file “Simulink” và bắt đầu mô phỏng.
Về phần động học nghịch ta nhập tọa độ x,y,z và nhấn nút nhấn “Computed” sẽ
hiện ra kết quả của 3 góc theta, lúc này robot và trên “UIAxes” cũng sẽ thay đổi để đi đến
vị trí ta mong muốn.
Exit để thoát chương trình và Go Home để về lại giao diện chính.
GVHD : Nguyễn Văn Thái
Nếu ta nhấn nút “GO TO” thì sẽ chuyển đến giao diện chính để thực hiện công việc điều
khiển :
GVHD : Nguyễn Văn Thái
Giao diện điều khiển sẽ hiện lên và tắt đi giao diện chính :
Để thực hiện công việc mô phỏng, ta cần kéo Switch “ON - OFF”, lúc này, robot từ
simulink sẽ được chạy và thiết lập ở vị trí home khi các góc theta đều tiến về 0. Công việc
tiếp theo, ta chỉ cần mô phỏng động học thuận và ngược.
GVHD : Nguyễn Văn Thái
Sau khi gạt switch home thì trên biểu đồ thể hiện vị trí home của robot giống với
robot được gọi ra từ simulink, ở phần vị trí điểm đầu cuối của robot thể hiện vị trí home
của robot, các góc theta và các thanh Slider đề về không, “editField text ” thể hiện vị trí
của các thanh theta cũng tiến về không.
Tiến hành mô phỏng động học thuận cho robot :
1. Mô phỏng với góc theta 1, 2, 3 lần lượt là : 0, 90 và -90 độ ta thu được :
Theo quy tắc bàn tay phải thì góc hướng lên trên vì cùng chiều dương và góc
hướng xuống dưới vì góc âm ngược chiều dương. Vị trí robot được thể hiện ở các ô
“Position x”, “Position y” và “Positon z” tượng trương cho các vị trí của robot trên các trục
tham chiếu như được đặt ở phần cơ sở lý thuyết.
2. Mô phỏng với góc theta 1, 2, 3 lần lượt là : 90, 0 và -90 độ ta thu được :
GVHD : Nguyễn Văn Thái
Tương tự như trên do trục Z của robot hướng lên nên robot sẽ quay góc theta 1, 1 góc
90 độ về bên tay trái theo quy tắc bàn tay phải. Vị trí cũng được thể trên các ô “Position x”,
“Position y” và “Positon z”.
3. Mô phỏng ở 1 một góc bất kì ngẫu nhiên theta 1,2,3 lần lượt là -3.578,73.45 và -
97.52 :
Sau khi mô phỏng với trường hợp này ta cũng thu được các vị trí tương ứng với góc
khớp của robot. Ta sẽ kiểm chứng động học nghịch bằng các vị trí ở trên.
Tiến hành mô phỏng động học nghịch cho robot :
Trường hợp 1 : Mô phỏng động học nghịch robot với vị trí và 235, 52 và 162 tương
ứng với trường hợp 1 khi ta mô phỏng động học thuận :
GVHD : Nguyễn Văn Thái
Các góc được tính toán ra một cách chính xác và cung cấp cho robot di chuyển đến bị
trí chính xác, đối xứng với động học thuận thì hoàn toàn chính xác. Trên các ô “Position
x”, “Position y” và “Positon z” hiện thị ra vị trí hiện tại của robot, lúc này sự tính toán là
hoàn toàn khớp với vị trí ta mong muốn.
Trường hợp 2 : Mô phỏng động học nghịch robot với vị trí và -52, 267 và 162
tương ứng với trường hợp 2 khi ta mô phỏng động học thuận :
Cũng như trường hợp trên, thì trường hợp này việc tính toán ra kết quả cũng hoàn toàn
chính xác, vị trí robot hiện thị trên các ô vị trí cũng khớp với vị trí mong muốn của ta khi
sử dụng động học nghịch.
Ở trường hợp cuối cùng với vị trí lần lượt là 272; 35,06 và 102.3 :
GVHD : Nguyễn Văn Thái
Tương tự như các trường hợp trên, sự sai lệch không đáng kể là do việc làm tròn
số, tuy nhiên robot vẫn hoạt động một cách chính xác, vị trí tính toán được vẫn trùng khớp
với vị trí ta mong muốn.
Quy hoạch quỹ đạo cho robot :
Với khối đầu là quy hoạch quỹ đạo theo đường thẳng, khối này sẽ tính toán đưa ra các vị
trí của robot để quy hoạch quỹ đạo, sau đó được đưa vào khối động học nghịch để tính
toán ra các góc khớp theta chính xác và đưa vào robot để tiến hành, quy hoạch quỹ đạo,
một phần là đưa vào lại khối động học thuận để kiểm tra vị trí của robot.
Ở đây nhóm quy hoạch quỹ đạo dạng bậc ba với thời gian quy hoạch là 4s :
GVHD : Nguyễn Văn Thái
Hình 3-44 biểu đồ đường màu xanh thể hiện đường thẳng mà quỹ đạo robot đi qua
Kết quả thu được : Trên biểu đồ đường màu xanh thể hiện đường thẳng mà quỹ đạo
robot đi qua.
Trạng thái cuối của robot :
3.4 Xây dựng giao diện điều khiển trên mô hình thực với Window
Forms App:
Để có thể tạo ra một giao diện, ta click chọn Window Forms App và ngôn ngữ là c#.net:
Ở phần giao diện chủ đạo nhóm có thiết kế thêm phần đăng nhập với 2 ô textbox là
1 nút nhấn dùng để đăng nhập, nếu ta không nhập mật khẩu hoặc tài khoản thì sẽ có một
Message Box hiện ra thông báo để ta nhập vào và không cho phép để trống hoặc nếu ta
nhập sai tài khoản hoặc mật khẩu thì cũng sẽ có một Message Box hiện ra để cảnh báo.
Ở trường hợp ta không nhập mật khẩu hoặc tài khoản :
GVHD : Nguyễn Văn Thái
Hình 3-47 Giao diện đăng nhập thiếu tài khoản và mật khẩu
Hình 3-48 Giao diện khi nhập sai tài khoản hoặc mật khẩu
Việc này giúp cho người dùng dễ kiểm soát chương trình điều khiển một cách linh
hoạt.
Về phần ảnh bìa, để có thể chèn được ảnh bìa vào bên trong thanh “ToolBox” và
tìm kiếm “PictureBox”.
GVHD : Nguyễn Văn Thái
Sau đó ta chọn tỉ lệ ảnh cho phù hợp với khung hình bằng cách sửa đổi ở phần Properties :
Phần “SizeMode” ta chọn “StretchImage” để chọn ảnh tự điều chỉnh tỉ lệ cho phù
hợp với khung ảnh. Phần Size ta có thể chọn hoặc kéo trực tiếp trên “PictureBox”. Ta nên
đổi tên của các gói để dễ dàng lập trình.
Để có thể hiện thị được ảnh ra bên ngoài giao diện chính ta vào phần chương trình
và sử dụng các câu lệnh :
Khi vừa khởi động thì ảnh sẽ được hiện thị ra ngoài màn hình. Ta chỉ cần dán
đường dẫn của ảnh vào phần Bitmap.
Sau khi ta đăng nhập vào được thì giao diện sẽ được chuyển hướng đến giao diện
chính bằng câu lệnh :
this.Hide();
Form2 frm2 = new Form2();
popup popup = new popup();
frm2.ShowDialog();
Để có thể sử dụng được giao diện kết nối với máy tính thông qua truyền thông
UART ta cần phải kết nối với máy tính bằng gói Serial Port.
Sau đó để lấy được các cổng com đang kết nối với máy tính và hiện ra combo box
ta cần lấy “Combo Box”.
Để lấy được các port đang giao tiếp với máy tính và xuất lên “ComboBox” ta thực
hiện các lệnh :
comboBoxPort.DataSource = SerialPort.GetPortNames();
Để có thể kết nối được với cổng com ta chọn, ta cần thêm một nút nhấn “connect”.
Câu lệnh để ta có thể thiết lập port cần kết nối :
serialPort.PortName = comboBoxPort.Text;
serialPort.Open();
Tương tự với “Com Port” , “Baudrate” cũng được thiết lập tương tự.
Baudrate là một thuật ngữ được sử dụng trong viễn thông và kỹ thuật truyền dẫn để
chỉ tốc độ truyền dữ liệu trên một kênh liên lạc. Nó đo lường số lượng các ký tự (bits)
được truyền qua kênh trong một thời gian nhất định, thường được đo bằng đơn vị "baud"
(baud là số lượng tín hiệu truyền dẫn sử dụng mỗi giây).
Tuy nhiên, đôi khi thuật ngữ "baudrate" cũng được sử dụng để chỉ tốc độ truyền dữ
liệu tổng thể, bao gồm cả bit dữ liệu và các bit kiểm tra/tiền tố. Ví dụ, trong các giao thức
truyền thông như RS-232, "baudrate" thường được sử dụng để chỉ tốc độ truyền dữ liệu
tổng thể, bao gồm cả các bit kiểm tra và bit dừng.
GVHD : Nguyễn Văn Thái
Tóm lại, baudrate là tốc độ truyền dữ liệu trên kênh truyền dẫn, được đo bằng đơn
vị "baud" và có thể chỉ tốc độ truyền dữ liệu tổng thể hoặc chỉ tốc độ truyền dữ liệu bit dữ
liệu tùy thuộc vào ngữ cảnh sử dụng.
Ta cần tạo một chuỗi, sau đó thêm chuỗi đó vào “Combo Box” để chọn được
baudrate.
string[] bauds = { "1200", "2400", "4800", "9600", "115200" };
comboBoxBaud.Items.AddRange(bauds);
Đồng thời khi kết nối ta thể hiện lên label dòng chữ “Đang kết nối” hoặc “Chưa kết
nối” để thể hiện trạng thái hiện tại.
Ta gộp chung các khối lại với nhau : Phần kết nối, động học thuận và động học
nghịch. Để dễ kiểm soát ta dùng “Group Box”.
Về phần động học thuận, để sử dụng các thanh “Trackbar” ta cũng vào phần
ToolBox để chọn :
Sau đó ta điều chỉnh font, kích cỡ, màu sắc ở phần property :
GVHD : Nguyễn Văn Thái
Để “Textbox” có thể thay đổi theo khi ta kéo thanh trackbar thì ta phải cài đặt thuộc tính
“Mouse Move” thanh trackbar :
Hình 3-58 Phải cài đặt thuộc tính “Mouse Move” thanh trackbar
Ta cần thay đổi “textbox” để hiện thị các góc theta ra khi ta thay đổi, ta cần thêm hàm cho
động học thuận :
GVHD : Nguyễn Văn Thái
return vitri;
}
Ở hàm này, ta tạo ra một hàm con và trả về các giá trị về vị trí khi ta thay đổi các góc khớp
và hiển thị ra các “textbox”
Theta1_temp = (double)trackBarThe1.Value;
Theta2_temp = (double)trackBarthe2.Value;
Theta3_temp = (double)trackBarthe3.Value;
textBoxthe3.Text = Theta3_temp.ToString();
double Px = vitri[0];
double Py = vitri[1];
double Pz = vitri[2];
textBoxXFor.Text = Px.ToString();
textBoxyFor.Text = Py.ToString();
textBoxzFor.Text = Pz.ToString();
Để gửi dữ liệu sang cổng serial cho vi điều khiển ta cần hàm “Serial.Write()”. Ở
đây dữ liệu được gửi có dạng : “PulseTheta1+a+PulseTheta2+b+PulseTheta3+c+s”. Ta cần
lấy dữ liệu từ các “trackbar” đang được thay đổi và chuyển về dạng “Integer32” sau đó
GVHD : Nguyễn Văn Thái
hiện thị lên các “textBox”. Sau đó, ta lưu lại vào biến “theta_temp”. Ta gán giá trị đọc
được vào biến “Theta” sau đó cần tìm góc quay thêm so với góc đã tồn tại lúc trước, các
giá trị trước đó sau khi kết thúc ta, ta so sánh giá trị đọc được với giá trị trước đó, nếu có
sự thay đổi thì ta sẽ lấy góc hiện tại trừ đi góc trước đó, góc cung cấp “Theta_supply” sẽ là
hiệu của 2 góc đó. Xung cung cấp sẽ là góc “Theta_supply”, nhân với xung của 1 vòng là
200 và tỉ số truyền của puly sẽ là 3.75 do puly ở trục động cơ và puly to. Puly ở trục động
cơ là 16 răng và puly to dùng để truyền động là 60 răng nên sẽ có tỉ số truyền như vậy. Ta
có giảm bước của động cơ đi 16 lần.
Công thức truyền động :
trackBarThe1.Value = Convert.ToInt32(textBoxthe1.Text);
trackBarthe2.Value = Convert.ToInt32(textBoxthe2.Text);
trackBarthe3.Value = Convert.ToInt32(textBoxthe3.Text);
Theta1_temp = Convert.ToInt32(textBoxthe1.Text);
Theta2_temp = Convert.ToInt32(textBoxthe2.Text);
Theta3_temp = Convert.ToInt32(textBoxthe3.Text);
Theta1 = Theta1_temp;
Theta2 = Theta2_temp;
Theta3 = Theta3_temp;
if (Theta1_past != Theta1)
{
Theta1_supply = Theta1 - Theta1_past;
Theta1_past = Theta1;
}
else
Theta1_supply = 0;
if (Theta2_past != Theta2)
{
Theta2_supply = Theta2 - Theta2_past;
Theta2_past = Theta2;
}
else
GVHD : Nguyễn Văn Thái
Theta2_supply = 0;
if(Theta3_past != Theta3)
{
Theta3_supply = Theta3 - Theta3_past;
Theta3_past = Theta3;
}
else
Theta3_supply = 0;
Console.WriteLine(Theta1_supply);
Console.WriteLine(Theta2_supply);
Console.WriteLine(Theta3_supply);
Ta cần thực hiện các câu lệnh để có thể hiện ra thông báo :
if (!serialPort.IsOpen)
{
MessageBox.Show("Cổng serial chưa được kết nối", "Thông báo",
MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
Nếu cổng “serial” không được mở thì ta sẽ hiện ra một thông báo yêu cầu kết nối
với cổng COM.
Tương tự như vậy, khi ta “Set home” cho robot, ta reset tất cả các biến. có trong bài
và gửi một kí tự “r” xuống arduino.
double l1 = 105;
double l2 = 162;
double l3 = 130;
double d1 = 52;
Theta1 = 0;
Theta2 = 0;
Theta3 = 0;
Theta1_temp = 0;
Theta2_temp = 0;
Theta3_temp = 0;
Theta1_supply = 0;
GVHD : Nguyễn Văn Thái
Theta2_supply = 0;
Theta3_supply = 0;
Theta1_past = 0;
Theta2_past = 0;
Theta3_past = 0;
trackBarThe1.Value = Convert.ToInt32(Theta1);
trackBarthe2.Value = Convert.ToInt32(Theta1);
trackBarthe3.Value = Convert.ToInt32(Theta1);
Về động học nghịch dựa các công thức tính toán ở chương số 2, dựa vào đó ta viết
ra hàm để tính toán ra các góc khớp, đưa robot đến vị trí mà ta mong muốn.
Hàm được để tính động học nghịch được tính toán như sau:
double x = Convert.ToDouble(textBoxXInv.Text);
double y = Convert.ToDouble(textBoxyInv.Text);
double z = Convert.ToDouble(textBoxzInv.Text);
// Tinh theta1:
double alpha = Math.Atan2(x, y);
double theta1n = Math.Atan2(Math.Sqrt(1 - ((d1 / Math.Sqrt(x * x + y * y)) *
(d1 / Math.Sqrt(x * x + y * y)))), d1 / Math.Sqrt(x * x + y * y)) - alpha;
// Tinh theta2
double un = x * Math.Cos(theta1n) + y * Math.Sin(theta1n) - l1;
double v = z;
double betan = Math.Atan2(un, v);
double t2xn = ((un * un + v * v + l2 * l2 - l3 * l3) / (Math.Sqrt(((2 * un * l2) * (2
* un * l2)) + (2 * v * l2) * (2 * v * l2))));
double t2y1n = Math.Sqrt(1 - ((un * un + v * v + l2 * l2 - l3 * l3) /
(Math.Sqrt(((2 * un * l2) * (2 * un * l2)) + (2 * v * l2) * (2 * v * l2)))) * ((un * un + v * v
+ l2 * l2 - l3 * l3) / (Math.Sqrt(((2 * un * l2) * (2 * un * l2)) + (2 * v * l2) * (2 * v *
GVHD : Nguyễn Văn Thái
l2)))));
double t2y2n = -Math.Sqrt(1 - ((un * un + v * v + l2 * l2 - l3 * l3) /
(Math.Sqrt(((2 * un * l2) * (2 * un * l2)) + (2 * v * l2) * (2 * v * l2)))) * ((un * un + v * v
+ l2 * l2 - l3 * l3) / (Math.Sqrt(((2 * un * l2) * (2 * un * l2)) + (2 * v * l2) * (2 * v *
l2)))));
double theta2n = Math.Atan2(t2xn, t2y1n) - betan;
double theta2n2 = Math.Atan2(t2xn, t2y2n) - betan;
// Tinh toan theta3 :
double theta3n = Math.Atan2(v - l2 * Math.Sin(theta2n), un - l2 *
Math.Cos(theta2n)) - theta2n;
double theta3n2 = Math.Atan2(v - l2 * Math.Sin(theta2n2), un - l2 *
Math.Cos(theta2n2)) - theta2n2;
theta1ndeg = (Int32)theta1ndeg;
theta2ndeg = (Int32)theta2ndeg;
theta3ndeg = (Int32)theta3ndeg;
theta1ndeg = (Int32)theta1ndeg;
theta2n2deg = (Int32)theta2n2deg;
theta3n2deg = (Int32)theta3n2deg;
Các hàm toán học được sử dụng trong thư viện “Math” dùng để tính toán các hàm
“Sin”,”Cos”, “Căn bậc2”,… sau khi tính toán ra 2 bộ nghiệm ta lần lượt lưu vào các mảng
là “bonghiem1” và “bonghiem2”.
Ở phần này, ta tạo một “ComboBox” để lưu 2 bộ nghiệm vừa tính toán được, ta tạo
một chuỗi “string” để xác định ra các bộ nghiệm.
string[] Nghiem = { "Solution 1", "Solution 2" };
comboBoxNg.Items.AddRange(Nghiem);
GVHD : Nguyễn Văn Thái
Ở chuỗi String này ta lưu vào là “Solution 1” và “solution 2”, tiếp theo ta thêm vào
trong “ComboBox” để thêm chuỗi này vào bằng lệnh “AddRange” để thêm vào.
Khi load form sẽ mặc định là bộ nghiệm 1 được sử dụng bằng cách thêm vào phần
load form “comboBoxNg.Text = "Solution 1"” .
Để sử dụng các bộ nghiệm ta sử dụng các câu lệnh :
if (comboBoxNg.Text == "Solution 1")
{
textBoxThe1Inv.Text = bonghiem1[0].ToString();
textBox1The2Inv.Text = bonghiem1[1].ToString();
textBoxThe3Inv.Text = bonghiem1[2].ToString();
}
else
{
textBoxThe1Inv.Text = bonghiem2[0].ToString();
textBox1The2Inv.Text = bonghiem2[1].ToString();
textBoxThe3Inv.Text = bonghiem2[2].ToString();
}
Nếu ta chọn nghiệm 1 thì sẽ lấy các giá trị của bộ nghiệm 1 để thực hiện tính toán
và xuất ra các “textbox”. Còn ngược lại thì sẽ dùng bộ nghiệm còn lại và xuất ra để tính
toán.
Cũng như phần động học thuận, sau khi tính toán ra các góc thì cũng sẽ gửi đi các
xung tương ứng với các góc quay tiếp tục so với góc ban đầu. Dữ liệu được gửi có dạng :
“PulseTheta1+A+PulseTheta2+B+PulseTheta3+C+s”.
Trước khi dữ liệu được gửi ta cần nhấn vào nút “Tính toán góc khớp” để tính toán
ra được các góc khớp. Sau đó sẽ gửi xung cần điều khiển qua cổng Serial xuống arduino.
GVHD : Nguyễn Văn Thái
nghiệm
Về phần cơ khí, nhóm thiết kế trên phần mềm AutoCad và mô phỏng 3D trên phần
mềm SolidWork để xem hình dáng của cánh tay robot. Việc thiết kế bằng cả 2 phần mềm
giúp nhóm sinh viên có thể kiểm soát được độ chính xác của bản thiết kế một cách chi tiết
nhất.
Đây là bản vẽ tổng quan 3D của phần đế. Sau đây sẽ là phần chi tiết tất cả các
thành phần cấu tạo nên phần đế của robot :
GVHD : Nguyễn Văn Thái
Tổng thể về phần đế và kích thước từng lỗ được nhóm trình bày kĩ trong file
AutoCad.
Ta sẽ thiết kế đến khâu 1 :
GVHD : Nguyễn Văn Thái
Thiết kế link thứ 2 trên AutoCad chi tiết các thành phần:
Thông số 3D của khâu cuối của robot thiết kế trên phần mềm SolidWorks :
GVHD : Nguyễn Văn Thái
Sau khi thiết kế ta lắp ghép các link lại thành robot hoàn chỉnh :
GVHD : Nguyễn Văn Thái
Sau khi có được bản vẽ được lên một cách chi tiết, ta thực hiện thi công robot, vật liệu
chính được xử dụng trong báo cáo là Mica.
Các hình ảnh robot thi công được hoàn thiện với các rãnh nẹp điện và các ống ruột
gà được quấn một cách cẩn thận, phần đề được cố định trên một tấm gỗ có kích thước
40x60, do diện tích khá to nên nhưỡng vật dụng chứa trên đấy nhìn rất gọn gàng.
4.3 Thiết kế mạch điện cho cánh tay robot :
Ở phần điều khiển, có một module phục vụ để điều khiển cho động cơ Step là module
Shield CNC V3, như vậy ta chỉ cần cắm board này vào vi xử lý trung tâm là arduino uno
và nối dây như trên hình để có thể điều khiển được động cơ.
4.4 Thực nghiệm kiểm chứng robot :
Đầu tiên, ta tiến hành Set Home cho robot, lúc này cá góc của robot đều về 0 độ so với trục
tọa độ. Tọa độ điểm đầu cuối cũng tương đương với khi tính toán và mô phỏng.
Đối với khi ta set vị trí ban đầu của robot bằng nút nhấn “Home” trên giao diện
điều khiển của robot thì các góc của thanh “Track Bar” đều về không, các góc khớp đều
bằng không và điểm đầu cuối là tọa độ của điểm cuối cùng trên khâu 3 của robot so với tọa
độ đã được đặt ở phần cơ sở lý thuyết. Dưới đây là hình ảnh ở vị trí home của robot, các
góc đều bằng 0.
GVHD : Nguyễn Văn Thái
Như trên hình ta cũng thấy có các điểm được đánh dấu, ta sẽ tiến hành mô phỏng
động học của robot bằng cách kéo các thanh “Track Bar” để điểm cuối trên cánh tay robot
đi đến vị trí đấy.
Trường hợp 1 : Ta điều khiển robot đến vị trí được đánh dấu bên tay phải. Sau đó
ta rút ra được các góc khớp theta và cần lưu lại vị trí điểm đầu cuối để kiểm nghiệm động
học nghịch.
Sau khi gửi dữ liệu bằng nút “Send Forward” ta nhận được vị trí thực tế của robot :
GVHD : Nguyễn Văn Thái
Cánh tay robot đã đi đúng vị trí với các góc quay như vậy. Cũng đã tính toán được
vị trí của điểm đầu cuối robot.
Ta thử thêm 2 trường hợp để có thể đưa ra nhận xét chính xác nhất.
Trường hợp 2: với điểm được đánh dấu : chính giữa, ta cũng thực hiện giống như
trên và đã tìm kiếm được các góc theta phù hợp với vị trí này:
Sau khi gửi dữ liệu bằng nút “Send Forward” ta nhận được vị trí thực tế của robot ở
trường hợp này
GVHD : Nguyễn Văn Thái
Cũng như trường hợp trước, cánh tay điều khiển rất chính xác và trơn tru,
Trường hợp 3 :ta cũng đưa robot đi đến điểm được đánh dấu cuối cùng trên mặt phẳng :
Sau khi gửi dữ liệu bằng nút “Send Forward” ta nhận được vị trí thực tế của robot ở
trường hợp thứ ba này:
GVHD : Nguyễn Văn Thái
Trường hợp 1 : Ta sử dụng, các vị trí giống ở trường hợp 1 động học thuận để có thể đưa
điểm đầu cuối đến điểm trùng khớp như động học thuận :
Ta tính ra được các góc khớp dựa trên bộ nghiệm thứ 1, sau đó gửi qua serial cho
robot điều khiển.
Ngoài ra, ta cũng có thể tính toán được bộ nghiệm thứ 2.
GVHD : Nguyễn Văn Thái
Sau đó ta gửi dữ liệu của bộ nghiệm 1 xuống cho robot và kiểm chứng :
Sau khi gửi dữ liệu thì vị trí hoàn toàn đúng, điểm cuối trên cánh tay robot di
chuyển được đến điểm được đánh dấu trên mặt phẳng.
Trường hợp 2 của động học nghịch : Ta đưa cánh tay robot điểm vị trí được đánh
dấu trên mặt phẳng như ở trưởng hợp 2 của kiểm chứng động học thuận :
GVHD : Nguyễn Văn Thái
Ta tính toán bằng bộ nghiệm một ra được các góc hoàn toàn trùng hợp so với ở
trường hợp động học thuận.
Ta tính toán bằng bộ nghiệm thứ 2 :
Sau đó ta gửi dữ liệu được tính toán bằng động học nghịch qua cổng serial cho
arduino để điều khiển robot đến vị trí ở trường hợp 2 :
GVHD : Nguyễn Văn Thái
Vị trí hoàn toàn khớp so với động học thuận. Điểm cuối trên trên robot đến được
điểm được đánh dấu số 2.
Ta thử thêm một trường hợp cuối để đưa ra kết luận :
GVHD : Nguyễn Văn Thái
Sau đó ta tiến hành gửi dữ liệu này cho robot để có thể kiểm tra được sự chính xác trên mô
hình :
GVHD : Nguyễn Văn Thái
Cũng như các trường hợp trên, trường hợp này cũng hoàn toàn chính xác. Vị trí điểm đầu
cuối của robot cũng đi đến được vị trí được đánh dấu thứ ba.
Tổng hợp các trường hợp được kiểm chứng :
Bảng 4-1 Các vị trí kiểm nghiệm động học nghịch
− Qua đề tài, nhóm đã thực hiện thiết kế mô hình và điều khiển cánh tay robot 3 bậc
tự do thành công:
− Tính toán kích thước và thiết kế hình dạng robot qua phần mềm trên Solidworks.
− Tính toán được các phương trình về động học cho robot.
− Xây dựng được giao diện điều khiển trên phần mềm c#.net.
− Phần cơ khí còn khả phức tạp, điều khiển linh hoạt rất khó.
− Cánh tay robot còn khả nặng làm cho khả năng điều khiển ở link 1 còn rất khó
mang tải nên phải sử dụng động cơ có hộp số khả tốn kém.
− Phần điện còn khả đơn giản.
− Phần điều khiển còn khả thô, không thể quan sát được trực tiếp trên các biểu đồ.
− Điều khiển PID hoặc các bộ điều khiển bám cho robot.
− Thực hiện điều khiển không dây qua Joystick hoặc có thể điều khiển bằng mạng
Wifi và quan sát trực tiếp trên Web.
− Thiết kế nhỏ gọn lại cánh tay robot.
GVHD : Nguyễn Văn Thái
VÀ ARDUINO
clc;
close all;
%% Khai bao thong so va vi tri :
l1=105;
l2=162;
l3=130;
d1=52;
%% Position Desired
x=-25;
y=52;
z=162;
GVHD : Nguyễn Văn Thái
%% Tinh theta1 :
alpha=atan2d(x,y);
theta1n=atan2d(sqrt(1-(d1/sqrt(x^2+y^2))^2),d1/sqrt(x^2+y^2))-alpha;
theta1p=atan2d(-sqrt(1-(d1/sqrt(x^2+y^2))^2),d1/sqrt(x^2+y^2))-alpha;
%% Tinh theta2
un=x*cosd(theta1n)+y*sind(theta1n)-l1;
v=z;
betan=atan2d(un,v);
t2xn=((un^2+v^2+l2^2-l3^2)/(sqrt(((2*un*l2)^2)+(2*v*l2)^2)));
t2y1n=sqrt(1-((un^2+v^2+l2^2-l3^2)/(sqrt(((2*un*l2)^2)+(2*v*l2)^2)))^2);
t2y2n=-sqrt(1-((un^2+v^2+l2^2-l3^2)/(sqrt(((2*un*l2)^2)+(2*v*l2)^2)))^2);
theta2n=atan2d(t2xn,t2y1n)-betan;
theta2n2=atan2d(t2xn,t2y2n)-betan;
%% Tinh toan theta3 :
theta3n=atan2d(v-l2*sind(theta2n),un-l2*cosd(theta2n))-theta2n;
theta3n2=atan2d(v-l2*sind(theta2n2),un-l2*cosd(theta2n2))-theta2n2;
%------------------------------------------------------------------%
disp('b? nghi?m 1 theo rad là :')
nghiem1rad = [deg2rad(theta1n) deg2rad(theta2n) deg2rad(theta3n)];
disp(nghiem1rad)
disp('Gi?i bài toán ??ng h?c thu?n cho b? nghi?m 1 :')
p0ee1=fk_3dof_01(l1, l2, l3,d1 , deg2rad(theta1n), deg2rad(theta2n), deg2rad(theta3n));
disp(p0ee1)
%------------------------------------------------------------------%
disp('b? nghi?m 1 theo degree là :')
nghiem1deg = [(theta1n) (theta2n) (theta3n)];
disp(nghiem1deg)
%------------------------------------------------------------------%
disp('b? nghi?m 2 theo rad là :')
nghiem2rad = [deg2rad(theta1n) deg2rad(theta2n2) deg2rad(theta3n2)];
disp(nghiem2rad)
p0ee2=fk_3dof_01(l1, l2, l3,d1 , deg2rad(theta1n), deg2rad(theta2n2), deg2rad(theta3n2));
disp('Gi?i bài toán ??ng h?c thu?n cho b? nghi?m 2 :')
disp(p0ee2)
%------------------------------------------------------------------%
disp('b? nghi?m 2 theo degree là :')
nghiem2deg = [(theta1n) (theta2n2) (theta3n2)];
disp(nghiem2deg)
o Chương trình Code cho arduino :
#include <Arduino.h>
#include <Servo.h>
int en = 8;
int dirPin1 = 5; // dirX
int stepPin1 = 2; // stepX
int dirPin2 = 6; // dirY
int stepPin2 = 3; // stepY
int dirPin3 = 7; // dirZ
int stepPin3 = 4; // stepZ
int Xung_DC1 = 0; // hien thi kiem tra
GVHD : Nguyễn Văn Thái
int Xung_DC2 = 0;
int Xung_DC3 = 0;
float DL_DC1 = 0;
float DL_DC2 = 0;
float DL_DC3 = 0;
float DL_QuaKhu_DC1 = 0;
float DL_QuaKhu_DC2 = 0;
float DL_QuaKhu_DC3 = 0;
float DL_HienTai_DC1 = 0;
float DL_HienTai_DC2 = 0;
float DL_HienTai_DC3 = 0;
// So xung
float nStepMax;
float nStepMedium;
float nStepMin;
// Chan co so xung lon nhat, tb, nho nhat
int stepPinMax;
int stepPinMedium;
int stepPinMin;
// Bien hien thi de kiem tra
long nStep1;
long nStep2;
long nStep3;
int Dir3_TN = 0; // bien dieu khien huong dong co 3
int Dir3 = 1;
int SoBuoc = 60;
bool readX;
bool readY;
bool readZ;
int set = 0;
int x;
#define limitXpin 9
#define limitYpin 10
#define limitZpin 11
pinMode(stepPin1, OUTPUT);
pinMode(dirPin2, OUTPUT);
pinMode(stepPin2, OUTPUT);
pinMode(dirPin3, OUTPUT);
pinMode(stepPin3, OUTPUT);
pinMode(limitXpin, INPUT_PULLUP);
pinMode(limitYpin, INPUT_PULLUP);
pinMode(limitZpin, INPUT_PULLUP);
digitalWrite(en, LOW);
}
void NhanDuLieu()
{
String inChar = Serial.readString(); // Xem thêm về Serial.read() tại
http://arduino.vn/reference/library/serial/1/huong-dan-ham/read
delayMicroseconds(1);
if (inChar[0] == 'r')
{
int i, k;
long j;
nStep1 = 0;
nStep2 = 0;
nStep3 = 0;
digitalWrite(dirPin1, LOW);
digitalWrite(dirPin2, LOW);
digitalWrite(dirPin3, HIGH);
//*-----------------------------------------------------////
for (j = 0; j <= 51491; j++)
{
readY = digitalRead(limitYpin);
if (readY == 0)
{
j = 51491;
}
digitalWrite(stepPin2, HIGH);
delayMicroseconds(300);
digitalWrite(stepPin2, LOW);
delayMicroseconds(300);
}
//*-----------------------------------------------------////
for (k = 0; k < 12000; k++)
{
readZ = digitalRead(limitZpin);
if (readZ == 0)
k = 12000;
digitalWrite(stepPin3, HIGH);
_delay_ms(1);
digitalWrite(stepPin3, LOW);
_delay_ms(1);
}
for (i = 0; i <= 12000; i++)
{
GVHD : Nguyễn Văn Thái
readX = digitalRead(limitXpin);
if (readX== 0)
{
i = 12000;
}
digitalWrite(stepPin1, HIGH);
_delay_ms(1);
digitalWrite(stepPin1, LOW);
_delay_ms(1);
}
//*-----------------------------------------------------////
if (readX == 0)
{
digitalWrite(dirPin1, HIGH);
for (i = 0; i <= HomePulseX; i++)
{
digitalWrite(stepPin1, HIGH);
_delay_ms(1);
digitalWrite(stepPin1, LOW);
_delay_ms(1);
}
}
//*-----------------------------------------------------////
if (readZ == 0)
{
digitalWrite(dirPin3, LOW);
for (k = 0; k <= HomePulseZ; k++)
{
digitalWrite(stepPin3, HIGH);
_delay_ms(1);
digitalWrite(stepPin3, LOW);
_delay_ms(1);
}
}
//*-----------------------------------------------------////
if (readY == 0)
{
digitalWrite(dirPin2, HIGH);
for (j = 0; j <= HomePulseY; j++)
{
digitalWrite(stepPin2, HIGH);
_delay_ms(0.5);
digitalWrite(stepPin2, LOW);
_delay_ms(0.5);
}
}
}
//Servo control
for (x = 0; x < inChar.length(); x++)
{
GVHD : Nguyễn Văn Thái
{
digitalWrite(dirPin3, HIGH);
}
nStep3 = abs(nStep3);
inString = ""; // clear dữ liệu thứ nhất
}
else if (inChar[x] == 's')
{
set = 1;
}
Serial.println(inString);
}
}
void control()
{
for (int i = 0; i < nStep1; i++)
{
digitalWrite(stepPin1, HIGH);
_delay_ms(1);
digitalWrite(stepPin1, LOW);
_delay_ms(1);
}
for (long j = 0; j < nStep2; j++)
{
digitalWrite(stepPin2, HIGH);
delayMicroseconds(300);
digitalWrite(stepPin2, LOW);
delayMicroseconds(300);
}