[学习记录]使用matlab机构仿真
[学习记录]使用matlab进行连杆机构运动学分析的一些收获
最近想要学习一下机构仿真的方法,以下是一些看到的方法和完成动画的方法
理论推导的过程
封闭矢量多边形法
运动分析就是按照已知的运动规律来确定机构中其他构件的位置等规律。仿真就要构件的位置;速度;加速度
通过构建封闭的矢量多边形,求得机构中其他构件的所求参数。
(例如):
这样一个四杆机构,建立直角坐标系,将各构件表示为杆矢,l1→+l2→=l3→+l4→\mathop{l1}\limits ^{\rightarrow}+\mathop{l2}\limits ^{\rightarrow}=\mathop{l3}\limits ^{\rightarrow}+\mathop{l4}\limits ^{\rightarrow}l1→+l2→=l3→+l4→再将各杆矢用指数形式的复数表示。l1⋅eiθ1+l2⋅e2θ2=l3⋅eiθ3+l4l1·e^{i\theta1} +l2·e^{2\theta2} = l3·e^{i\theta3} +l4l1⋅eiθ1+l2⋅e2θ2=l3⋅eiθ3+l4之后便可以依据几何关系等对时间t求导求得各构件的速度、加速度。
使用appdesigner做成app
导入数据
将各个EditField
中的数据拿过来,依据理论推导的公式求得各个量,若使用计时器,声明为全局变量,方便在timer_handler
回调中画图;若使用for循环,不需声明为全局变量。
for循环
for循环不太推荐,不知为何appdesigner中的运算速度比较慢,使用for有时会比较卡顿。而且for不能实现点动,使用计时器能随时暂停。即使如此,我也来一下注意事项吧。
由于计算速度不快,每3°画一下已经能够实现动画效果,但是为实现保留最后一个画面的图形,可以判断一下是不是[1:3:range]
数组中的最后一个再使用cla()
计时器
在初始创建的startupFcn函数中初始化定时器timer_init(app)
,
function timer_init(app)
app.Timer_id = timer;
app.Timer_id.StartDelay = 0.01; % 开启的延时生效时间
app.Timer_id.Period = 0.041;% 周期
app.Timer_id.ExecutionMode = 'fixedSpacing';
app.Timer_id.TimerFcn = @(~, ~) timer_handler(app);
end
% 定时器启动
function timer_start(app)
start(app.Timer_id);
end
% 定时停止
function timer_stop(app)
stop(app.Timer_id);
end
% 删除定时器
function timer_delete(app)
delete(app.Timer_id);
end
%定时器回调
function timer_handler(app)
这里添加你需要的功能,在这里应该是逐帧画图
end
创建Timer_id
属性,否则无法调用Timer_id
定时器
在关闭该app时应当停止并删除定时器,因此在UIFigureCloseRequest
函数中
function UIFigureCloseRequest(app, event)
timer_stop(app);
timer_delete(app);
end
一些示例
示例中只有最后一个使用了计时器,感觉使用计时器更加丝滑,不知道为什么,推荐使用吧只能说

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐
所有评论(0)