Thông báo

Collapse
No announcement yet.

Lập trình đồ họa với matlab

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

  • Lập trình đồ họa với matlab

    Lập trình đồ họa mình đề cập là hiển thị trạng thái của một vật thể, đối tượng trong quá trình mô phỏng. Chẳng hạn, mô tả mức nước trong bình chứa, mô tả vị trí cánh tay con lắc ngược, mô phỏng robot ... Như vậy ở đây có cả đối tượng đồ họa 2-D, 3-D.Mình không đề cập đến GUI vì 2 cái này khác nhau, mặc dù có thể nhúng lập trình đồ họa vào trong lúc tạo GUI.Gần đây, qua bt thày giao về nhà mình có tìm hiểu chút ít về vấn đề này, đồng thời muốn chia sẻ cùng học hỏi. Mình trình bày thông qua ví dụ về robot, các bạn có thể mở rộng hoàn toàn tương tự sang các đối tượng khác.
    Nhiều bạn quan tâm đến mô phỏng đồ họa robot bằng Simmechanics kết hợp Solidwork. Mình rất thích dùng Solidwork nhưng không thích dùng Simmechanics vì mình chỉ quan tâm đến mô tả toán học của robot. Ban đầu, mình chỉ trình bày về tạo đối tượng đồ họa đơn giản: tạo bình mức, tạo robot 2-D, tao robot 3-D đơn giản..Gọi là đơn giản vì chỉ sử dụng lệnh plot hay plot3...Nếu các bạn quan tâm, mình sẽ trình bày thêm về lập trình đồ họa MATLAB nâng cao, sử dụng lệnh patch (đây là một lệnh rất thuuuuu' viiiiiiii. ^^)
    Ví dụ về lập trình mô phỏng robot đơn giản: Ở đây có robot cylinder, theta là khối lượng vật robot cầm.

    Khối đồ họa được nhúng đoạn script ở dưới để các bạn tham khảo:

    Code:
    function drawRobot(u)
    height_tower = u(1);
    length_arm = u(2);
    angle_arm = u(3);
    t = u(4);
    p = plot3(length_arm*cos(angle_arm), length_arm*sin(angle_arm), height_tower,'*');
    set(p,'Color','red');
    persistent tower_handle
    persistent arm_handle
    if t==0,
    figure(1)
    track_width=10;
    hold on;
    tower_handle = drawTower(height_tower, [],'normal');
    arm_handle = drawArm(height_tower, length_arm, angle_arm, [],'normal');
    axis([-track_width, track_width, -track_width, track_width, 0, track_width]);
    else
    title('Robot Cylinder Three Degrees of Freedom');
    xlabel('T.V.Vuong, Automatics Control');
    axis square
    grid on;
    drawTower(height_tower, tower_handle);
    drawArm(height_tower, length_arm, angle_arm, arm_handle);
    end
    function handle = drawTower(height_tower, handle, mode)
    X = [0, 0];
    Y = [0, 0];
    Z = [0, height_tower];
    if isempty(handle),
    handle = plot3(X,Y,Z,'LineWidth',3,'EraseMode', mode);
    else
    set(handle,'XData',X,'YData',Y,'ZData',Z);
    end
    function handle = drawArm(height_tower, length_arm, angle_arm, handle, mode)
    X = [0, length_arm*cos(angle_arm)];
    Y = [0, length_arm*sin(angle_arm)];
    Z = [height_tower, height_tower];
    if isempty(handle),
    handle = plot3(X,Y,Z,'LineWidth',3,'EraseMode', mode);
    else
    set(handle,'XData',X,'YData',Y,'ZData',Z);
    end
    Kết quả khi cho giá trị đặt là tọa độ (10,10,10) nhờ bộ đk,thu được:

    Đường màu xanh là robot,đường màu đỏ là quỹ đạo trạng thái của end-effector. Trong quá trình mô phỏng, bạn sẽ thấy nó chuyển động ntn.
    Một số ví dụ khác (khó hơn, sử dụng lệnh patch và khó hơn nữa có thể sử dụng cả file vẽ Solidwork, mình sẽ trình bày nếu nhiều bạn quan tâm):

    Mình gửi kèm file mô phỏng. Trong đó có nhiều file các bạn chỉ quan tâm file drawRobot thôi há.2 file Simulink 1 là version R2010b dự phòng và 1 bản mình convert sang R2009a, chạy được file nào thì chạy.
    Upload trên diễn đàn khó quá, chuyển sang mediafire:
    http://www.mediafire.com/?8r11n2rqfsrttam
    Last edited by vuongtv-ac; 27-06-2011, 15:20.

  • #2
    Thực sự vấn đề này rất hữu ích, Mình cũng đã từng tìm hiểu về các mô phỏng động - ví dụ: toàn nhà bị rung theo một tín hiệu dao động nào đó.
    Tks bạn đã chia sẻ những kiến thức quý báu này.

    Comment


    • #3
      Bài viết rất hay mà có ít người quan tâm nhỉ!!!
      Mình xin ủng hộ 2 tay, mong là vuongtv-ac sẽ tiếp tục viết thêm về vấn đề lập trình độ họa 3-D trong Matlab này.

      Comment


      • #4
        Bạn vuongtv-ac ơi!
        Minh thấy cái này rất hay, bạn có thể Post lên mấy cái mô phỏng lấy từ file Solidworks qua không? bạn cho mình e-mail để mình trao đổi thêm được không?

        Comment


        • #5
          Hi. Theo tìm hiểu, mình cho rằng có 2 cách để thiết kế mô phỏng đồ họa 3-D trong môi trường Matlab/Simulink, mà ở đó mô phỏng động học robot là ví dụ kinh điển nhất. Phương án sử dụng Toolbox SimMechanics và công cụ SimMechanics Link mình không đề cập đến vì sự hạn chế về khía cạnh học thuật, đồng thời quá thiên về tay chân. Mình chỉ quan tâm đến 2 phương án sử dụng lệnh thuần túy, cũng có thể tạo GUI, đấy là:
          Một là, tự tạo ra các hàm vẽ các khối cơ bản (khối trụ, khối cầu, khối lập phương...) và các khối tùy biến, sử dụng lệnh patch trong Matlab, với đầu vào là tọa độ và màu (x,y,z,c) hoặc các đỉnh, mặt và màu (vertices, faces, colors). Cách này mang tính chất thủ công do Matlab không mạnh về thiết kế đồ họa như Solidworks, Inventor hay Catia đồng thời đòi hỏi năng lực tư duy hình học không gian cao. Nhưng hướng đi này, theo ý kiến chủ quan, không hề tồi vì giúp phát triển nhiều kỹ năng.
          Hai là, sử dụng các công cụ thiết kế 3-D xuất ra file mã nhị phân thông dụng STL. Lập trình hàm đọc file STL để thu được thông tin về vật thể 3-D ((x,y,z,c) hoặc (v,f,c)), sử dụng lệnh patch để tiến hành xây dựng hiển thị đồ họa trên nền Figure của Matlab. Và đây là nội dung mình muốn giới thiệu.
          Do điều kiện thời gian bận rộn, ít nhất phải sang tháng 1 mình mới có thời gian để viết bài. Cũng chính vì vậy, file mô phỏng hoàn thiện hiện giờ không sẵn. Tuy mình có file nhưng chưa hoàn chỉnh nên cũng ko muốn public. Nếu bạn không cần gấp có thể đợi. Thân mến.
          Last edited by vuongtv-ac; 14-12-2011, 04:49.

          Comment


          • #6
            Ví dụ mẫu về xử lý bản vẽ CAD 3D trên MATLAB:

            Comment


            • #7
              Like anh vuongtv-ac nhé!
              Bài viết của anh rất hay, anh có thể cho em hỏi thêm về cách thiết kế con robotic của anh trên matlab dc không vậy ?

              Comment


              • #8
                Cái cách thứ nhất anh đưa ra khá giống với phần mềm easy-rob mà em biết, vậy anh có thể nói rõ hơn về cách tạo ra các khổi để thiết kế không vậy?

                Comment


                • #9
                  Anh vuongtv-ac có thể chia sẻ tài liệu về lập trình đồ họa trong matlab được ko ạ?Lúc đầu,khi mô phỏng robot,em cũng đi theo hướng thiết kế Assembly trên Solidworks rồi link sang Matlab,hic,nhưng cái sơ đồ khối ấy thì em chưa biết làm thế nào với nó-->bế tắc.Em chuyển sang hướng dùng matlab đọc file stl như anh nói,nhưng chưa có tài liệu bài bản,rất mong anh có thể chia sẻ giúp đỡ.Em cảm ơn!

                  Comment


                  • #10
                    Rất tiếc không có tài liệu bài bản nào cả bạn ạ, kể cả là một bài viết tutorial trên web cũng không có đâu. Tất cả là do mày mò và học hỏi, tổng hợp từ nhiều người nhiều nguồn

                    Comment


                    • #11
                      mình đang cần sự giúp đỡ về mô phỏng 3D bằng matlab. các demo của bạn vuongtv-ac rất hay. không biết có thể trao đổi cùng nhau như thế nào đây. email của mình: nguyentienan2004@yahoo.com.
                      Cho xin thông tin liên hệ đi bạn vuongtv-ac ơi
                      đang cần gấp lắm.

                      Comment


                      • #12
                        vuongtv-ac
                        e đang học về kỹ thuật robot, và có 1 bài tập về lập trình robot bằng matlap
                        e đọc bài của anh thấy hay!! anh có thể gửi e chút tài liệu về nó đc k??
                        email của em : lv.chung@gmail.com
                        chân thành cảm ơn anh!!

                        Comment


                        • #13
                          Bạn có thể hướng dẫn mình các bước cơ bản được không vậy? Mình chỉ mới biết xuất file STL rồi đưa vào Fig thôi còn đưa vào Gui như bạn thì mình mới học nên cũng chưa rõ lắm.

                          Comment

                          Về tác giả

                          Collapse

                          vuongtv-ac Tìm hiểu thêm về vuongtv-ac

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

                          Collapse

                          Đang tải...
                          X