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:
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
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
Đườ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
Comment