Thông báo

Collapse
No announcement yet.

Từ matlab đến điều khiển thực tế một đối tượng (hệ thống)

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Từ matlab đến điều khiển thực tế một đối tượng (hệ thống)

    Mình có một câu hỏi thế này :

    Trong thực tế khi điều khiển robot chẳng hạn, trước tiên chúng ta sẽ mô hình hóa robot, xây dựng giải thuật điều khiển (dùng các phương pháp điều khiển khác nhau : chẳng hạn PID, điều khiển fuzzy, đk trượt, điều khiển tuyến tính hóa ...) . Chúng ta sẽ mô phỏng trên matlab ( bằng simulink hay viết bằng m file ) . Vậy khi áp dụng vào thực nghiệm , bộ điều khiển đã xây dựng trên matlab chúng ta phải viết lại bằng ngôn ngữ lập trình cho vi điều khiển đúng không ? Hay có cách nào khác , mình dùng trực tiếp matlab giao tiếp với vi điều khiển được không ? Nếu phải lập trình trên vi điều khiển vậy vấn đề sẽ rất khó khăn (đối với các phương pháp điều khiển phức tạp : fuzzy, hay các phương pháp điều khiển cho hệ phi tuyến,hay sử dụng xử lý ảnh bằng máy tính...) . Vậy vấn đề sẽ được giải quyết như thế nào ? Mong các cao thủ có đôi lời giải thích cho mình rõ !

  • #2
    Câu hỏi quá rộng! Tùy trường hợp mà có cách giải quyết.
    Theo mình biết thường trong thực tế chỉ dùng các phương pháp điều khiển đơn giản (chủ yếu là PID, thỉnh thoảng gặp chút Fa-di). Mình đã từng mô phỏng điều khiển cánh tay robot bằng MATLAB sử dụng kỹ thuật điều khiển thích nghi và mình thấy việc lập trình cũng k có j rắc rối lắm. Do vậy lập trình điều khiển robot bằng vi xử lý có lẽ là k phức tạp lắm. Trường hợp các hệ thống đòi hỏi chính xác cao, thời gian đáp ứng nhanh thì dùng DSP.
    Còn các phương pháp điều khiển nâng cao (MPC) chủ yếu áp dụng cho những hệ thống động học chậm (công nghệ hóa học).
    Thân.

    Comment


    • #3
      cám ơn bạn vuongtv-ac đã trả lời. Vậy mình có thể dùng Matlab để tính toán bộ điều khiển , sau đó chỉ việc đưa tín hiệu điều khiển đã tính từ Matlab xuống vi điều khiển (qua cổng com,...) là được đúng không. Sẵn đây cho mình hỏi thêm cách lập trình cho robot bằng vi điều khiển dùng các kỹ thuật điều khiển nâng cao hơn (không phải là bộ PID đơn giản nữa) chẳng hạn như kỹ thuật gain scheduling, điều khiển trượt ... thì như thế nào ? Có bạn nào giải thích qua cho mình hướng làm được không ! Cám ơn rất nhiều !!!
      PS: ah bạn vuongtv-ac có thể đưa tài liệu về điều khiển cánh tay robot bằng MATLAB sử dụng kỹ thuật điều khiển thích nghi mà bạn nói lên cho mọi người tham khảo không ? Cám ơn bạn nhiều !

      Comment


      • #4
        Mình cũng gặp vấn đề như bạn. Mình đang làm con lắc với điều khiển trượt. Không biết kết nối làm sao? Rồi tính toán mô hình thực tế so với mô hình mô phỏng trên matlab như thê nào. vì bộ điều khiển của mình tính toán theo các thông số của mô hình toán học. Mong các bạn có kinh nghiệm hướng dẫn. Cám ơn

        Comment


        • #5
          Giải pháp tiện nhất để điều khiển một hệ thống thực là lập trình lại giải thuật điều khiển trên một chip vi điều khiển (đọc lại bài bạn vuongtv-ac đã trả lời ở trên).

          Hướng đi sử dụng trực tiếp Matlab và Simulink trên máy tính để điều khiển một hệ thống thực thì có mấy vấn đề các bạn cần giải quyết:

          - Có một bo mạch đệm, nó giao tiếp với máy tính (qua các ngõ giao tiếp thông thường như serial, USB, Ethernet, wifi...) và đồng thời nó cũng có các chân (input/output) để đọc tín hiệu cảm biến và ra lệnh cho hệ thống cần điều khiển.

          - Nếu bạn có hàm điều khiển (file .m) chạy trên Matlab, bạn cần tìm cách mở được cổng giao tiếp trên máy tính để giao tiếp được với bo mạch đệm.

          - Nếu bạn có một bộ điều khiển mô phỏng trên Simulink, bạn phải tìm cách (tạo thêm block mới chẳng hạn) làm cho Simulink kết nối được với bo mạch đệm.

          - Bạn chỉ cần lập trình chip trên bo mạch đệm với chức năng là trung gian truyền tín hiệu, không cần tính toán gì.

          ---

          Trên thế giới đã có nhiều công ty cung cấp các bo mạch đệm như vậy, kể cả Mathworks (ví dụ: xem gói "xPC target" trong Simulink, hình như cả gói Real time Embedded workshop gì đó). Nếu bạn muốn mua thì sẽ phải mua cả phần cứng và phần mềm, giá cả tùy theo độ tiện dụng và độ tin cậy.

          Nếu bạn muốn tự làm: cũng có thể nghiên cứu được. Các bạn có thể tham khảo cái này:

          Control an Arduino from MATLAB | File Exchange Pick of the WeekArduino Support from MATLAB

          MATLAB Support Package for Arduino (aka ArduinoIO Package) - File Exchange - MATLAB Central

          Run on Target Hardware | File Exchange Pick of the Week

          ---

          Nếu các bạn muốn tìm giải pháp ít tốn kém, có thể sử dụng phần mềm nguồn mở: hãy học cách cài Linux lên một bo ARM, chạy phần mềm Octave trên Linux (tôi gợi ý Octave vì nó tương thích tốt với Matlab, các file .m của Matlab mang sang Octave hầu như đều chạy được), rồi dùng các chân GPIO trên bo ARM để điều khiển (ngay trong Octave, bạn có thể can thiệp vào phần cứng, kích hoạt các chân GPIO).

          Comment


          • #6
            Rất cảm ơn của mod.
            Theo gợi ý của anh thì sử dụng mã nguồn mở: chạy phần mềm Octave có điều khiển trực tiếp lên các chân GPIO.
            Anh có tài liệu về Octave, cách đọc chân đầu vào và điều khiển đầu ra k ạ?

            Comment


            • #7
              Chào bạn kute_hvkt,

              Bạn cài Octave trên Raspbian, từ trong đó có cách truy cập các chân GPIO của bo Raspberry Pi:

              Raspberry Pi • View topic - Raspbian- Octave - installing packages

              Các bo kiểu Beaglebone Black cũng chạy được Linux như Ubuntu, có thể cài đặt Octave trên đó, tuy nhiên cách truy cập chân GPIO của các bo đó ngay trong Octave thì tôi chưa tìm hiểu.

              Comment


              • #8
                mình đã từng thấy Mathwork xây dựng một bộ dịch cho dsp của TI. Nên nếu bạn có tiền thì có thể đặt hàng một bộ dịch để dùng. Còn nếu muốn lập trình lại thì chuyển hết các bộ điều khiển sang miền z. Điều khiển phi tuyến thì mình ko rõ nhưng kể cả dùng Linear State Space cũng vẫn chuyển về dạng đa thức đc.

                Comment


                • #9
                  nếu trên bo Raspberry Pi và bo Beaglebone Black có thể sử dụng Octave điều khiển vào ra thì trên một bo nhúng khác xây dựng trên nền arm liệu có thể chạy được k?

                  Comment


                  • #10
                    Việc đó phụ thuộc chủ yếu vào khả năng porting Octave sang hệ điều hành chạy trên bo nhúng đó. Cùng gọi là ARM, nhưng có nhiều version khác nhau, có những version người ta cài đặt được Linux lên, có version không cài đặt được một bản Linux đầy đủ, cái này bạn phải tìm hiểu về cấu hình và cách dùng bo nhúng đó.

                    Cũng có những phiên bản hệ điều hành dùng nhân Linux nhưng thiếu nhiều thư viện, thì có khả năng Octave chưa cài được. Octave về bản chất cũng là một phần mềm thôi. Ví dụ như bạn muốn cài MATLAB trên một máy tính, bạn cần lên trang web của MATLAB xem phiên bản chạy trên OS tương ứng không. Đối với Octave cũng vậy, bạn tham khảo ở trang octave.org để biết là có phiên bản Octave chạy trên OS của bo nhúng của mình hay không.

                    Comment


                    • #11
                      rất cảm ơn ý kiến của bạn. hiện mình dùng qt. sẽ nghiên cứu cách cài Octave trên bo mình đang dùng.

                      Comment


                      • #12
                        Bạn [MENTION=217810]kute_hvkt[/MENTION] không biết đang đi học hay đi làm rồi? Bạn cần nghiên cứu triển khai thuật toán điều khiển trên bo phần cứng là để cho ứng dụng cụ thể nào không?

                        Nếu bạn đã đi làm, thì lưu ý chi phí thời gian dùng để phát triển sản phẩm. Trên thế giới bây giờ có nhiều bo mạch ARM chạy được Linux, có thể porting Octave lên được, tuy nhiên xét về độ phổ cập thì bo mạch kiểu Raspberry Pi được cộng đồng lớn sử dụng nên dễ tìm thư viện hơn, ở Việt Nam cũng dễ mua hơn các bo loại khác, nếu bạn chỉ cần nhanh chóng phát triển được sản phẩm thì dùng luôn Raspberry Pi chắc tốn ít thời gian.

                        Nếu tự làm việc porting Octave vào bo mạch của mình, ngoài việc chạy được Octave, còn cần có thư viện giúp Octave can thiệp vào GPIO (cái này tôi nhớ là khoảng nửa năm đầu của Raspberry Pi chưa có ai cung cấp thư viện dùng sẵn nên cũng khó khăn). Có một giải pháp bắc cầu, là nếu bạn cài được Linux và Octave thì chắc chắn bạn cũng có Python, có thể tìm cách dùng Python để gọi lệnh tính toán trong Octave, vì Python được tích hợp chặt chẽ với phần cứng nên dễ có thư viện can thiệp vào các chân phần cứng hơn. Xem thêm thông tin: A tool to convert MATLAB code to Python - Stack Overflow (ví dụ gói oct2py).

                        Comment


                        • #13
                          Còn một kiểu nữa là chuyển sang Scilab/Scicos - bộ này là mã nguồn mở của viện INRIA - Pháp, tương đương Matlab/Simulink. Mã nguồn Matlab chuyển sang Scilab khá đơn giản. Lưu đồ Simulink chuyển sang Scicos thì mất công hơn nhưng về cơ bản tương tự nhau cỡ 90%. Có 2 hướng chính (1) dùng máy tính công nghiệp chạy Scilab/Scicos để điều khiển trực tiếp và (2) biên dịch lưu đồ Scicos thành mã nguồn C, chỉnh sửa rồi biên dịch tiếp cho vi điều khiển chạy vật lý.
                          Phần mềm tự do hoặc không dùng máy tính nữa !.

                          Comment


                          • #14
                            rất cảm ơn các ý kiến của các Mod. Mình hiện còn đang là sinh viên. Mới bắt đầu nghiên cứu vấn đề này. Mình hướng ứng dụng vào hệ thống giải tính, cụ thể liên quan đến giải một hệ phương trình vi phân.

                            Comment


                            • #15
                              Các anh ai biết xin cho hỏi các hàm để làm việc với Laplace và tự động quá trình trong Octave tuơng tự với matlab như là step, tf, v.v.v với
                              nhóm điện tử facebook

                              Comment

                              Về tác giả

                              Collapse

                              matlab Tìm hiểu thêm về matlab

                              Bài viết mới nhất

                              Collapse

                              Đang tải...
                              X