两连杆机器鱼的简单建模以及MATLAB仿真(2)

上一篇文章中,写过了关于两连杆机器鱼建模的方法。实际上,有一个细节值得注意,那就是在联立(1)和(2)方程,求解鱼头加速度,这一步中,是如何联立求解的。一般有两种方式:

  • (1) 假设当前加速度已知,因此,鱼尾的力可以根据(2)式求出,从而把求出的F代入到(1)式中去,求出VbV_bVb​。这也是我们上一篇文章中,使用到的联立求解办法。
  • (2) 假设当前加速度未知,那么需要联立(1)和(2)式共同求解出VbV_bVb​。这是我们这篇文章会着重介绍的,现在看不明白不要紧。

通过之后的仿真我们可以看到,这两种联立求解方式的不同,最终仿真的结果是类似的。但是,非常重要的一点,上一篇文章的求解方式在多连杆机器鱼中,极易造成计算结果发散,而本文介绍的求解方法的数值性能要稳定得多!!!

1 两连杆机器鱼的建模

本文延续上一篇文章的记号和公式,这里只是着重介绍计算V˙b\dot{V}_bV˙b​和Ω˙b\dot{\Omega}_bΩ˙b​的方式。

上一篇文章说到,对于鱼头的受力分析可以表达为:
F+Fdrag=mbV˙b+mbΩb×VbM+Mdrag=JbΩ˙b+Ωb×JbΩb(1)\begin{aligned} F+F_{d r a g} &=m_{b} \dot{V}_{b}+m_{b} \Omega_{b} \times V_{b} \\ M+M_{d r a g} &=J_{b} \dot{\Omega}_{b}+\Omega_{b} \times J_{b} \Omega_{b} \end{aligned}\tag{1} F+Fdrag​M+Mdrag​​=mb​V˙b​+mb​Ωb​×Vb​=Jb​Ω˙b​+Ωb​×Jb​Ωb​​(1)
对于鱼尾的受力分析则表达为:
F=−mtV˙tM=−JtΩ˙t−Ωt×JtΩt+rbt×F(2)\begin{aligned} F &=-m_{t} \dot{V}_{t} \\ M &=-J_{t} \dot{\Omega}_{t}-\Omega_{t} \times J_{t} \Omega_{t}+r_{b t} \times F \end{aligned}\tag{2} FM​=−mt​V˙t​=−Jt​Ω˙t​−Ωt​×Jt​Ωt​+rbt​×F​(2)
另外,V˙t\dot{V}_tV˙t​和Ω˙t\dot{\Omega}_tΩ˙t​与V˙b\dot{V}_bV˙b​和Ω˙b\dot{\Omega}_bΩ˙b​的关系为:
V˙t=V˙b+Ωt×Vb+Ω˙t×rbt+Ωt×Ωt×rbtΩ˙t=Ω˙b+θ¨e3(3)\begin{array}{l}{\dot{V}_{t}=\dot{V}_{b}+\Omega_{t} \times V_{b}+\dot{\Omega}_{t} \times r_{b t}+\Omega_{t} \times \Omega_{t} \times r_{b t}} \\ {\dot{\Omega}_{t}=\dot{\Omega}_{b}+\ddot{\theta} \mathbf{e}_{3}}\end{array}\tag{3} V˙t​=V˙b​+Ωt​×Vb​+Ω˙t​×rbt​+Ωt​×Ωt​×rbt​Ω˙t​=Ω˙b​+θ¨e3​​(3)
由于我们假设了,鱼头的加速度V˙b\dot{V}_bV˙b​和Ω˙b\dot{\Omega}_bΩ˙b​未知,所以我们不能直接求出FFF和MMM,而是要联立(1)(2)(3)式求解V˙b\dot{V}_bV˙b​和Ω˙b\dot{\Omega}_bΩ˙b​。求解过程如下:

由(2)和(3)得出FFF和MMM与V˙b\dot{V}_bV˙b​和Ω˙b\dot{\Omega}_bΩ˙b​的关系 :
F=−mtV˙b+mtr^btΩ˙b+mt(rbt×θ¨e3−Ωt×Vb−Ωt×Ωt×rbt)M=−mtr^btV˙b−(Jt−mtr^btr^bt)Ω˙b−Jtθ¨e3−Ωt×JtΩt+rbt×mt(rbt×θ¨e3−Ωt×Vb−Ωt×Ωt×rbt)(4)\begin{aligned} F &=-m_{t} \dot{V}_{b}+m_{t}\hat{r}_{bt}\dot{\Omega}_{b}+m_{t}(r_{bt}\times\ddot\theta\mathbf{e}_3-{\Omega_{t}} \times V_{b}-\Omega_{t} \times \Omega_{t} \times r_{b t}) \\ M &=-m_{t}\hat{r}_{b t} \dot{V}_{b} -(J_{t} - m_{t}\hat{r}_{b t} \hat{r}_{bt})\dot{\Omega}_{b} -J_{t}\ddot{\theta} \mathbf{e}_{3}-\Omega_{t} \times J_{t} \Omega_{t}\\ &+ r_{b t} \times m_{t}(r_{bt}\times\ddot\theta\mathbf{e}_3-{\Omega_{t}} \times V_{b}-\Omega_{t} \times \Omega_{t} \times r_{b t}) \end{aligned}\tag{4} FM​=−mt​V˙b​+mt​r^bt​Ω˙b​+mt​(rbt​×θ¨e3​−Ωt​×Vb​−Ωt​×Ωt​×rbt​)=−mt​r^bt​V˙b​−(Jt​−mt​r^bt​r^bt​)Ω˙b​−Jt​θ¨e3​−Ωt​×Jt​Ωt​+rbt​×mt​(rbt​×θ¨e3​−Ωt​×Vb​−Ωt​×Ωt​×rbt​)​(4)
把上式简化记为:
F=−mtV˙b+mtr^btΩ˙b+F1M=−mtr^btV˙b−(Jt−mtr^btr^bt)Ω˙b+M1(5)\begin{aligned} F &=-m_{t} \dot{V}_{b}+m_{t}\hat{r}_{bt}\dot{\Omega}_{b}+F_1 \\ M &=-m_{t}\hat{r}_{b t} \dot{V}_{b} -(J_{t} - m_{t}\hat{r}_{b t} \hat{r}_{bt})\dot{\Omega}_{b} +M_1 \end{aligned}\tag{5} FM​=−mt​V˙b​+mt​r^bt​Ω˙b​+F1​=−mt​r^bt​V˙b​−(Jt​−mt​r^bt​r^bt​)Ω˙b​+M1​​(5)
其中:
F1=mt(rbt×θ¨e3−Ωt×Vb−Ωt×Ωt×rbt)M1=−Jtθ¨e3−Ωt×JtΩt+rbt×mt(rbt×θ¨e3−Ωt×Vb−Ωt×Ωt×rbt)\begin{aligned} F_1 &=m_{t}(r_{bt}\times\ddot\theta\mathbf{e}_3-{\Omega_{t}} \times V_{b}-\Omega_{t} \times \Omega_{t} \times r_{b t}) \\ M_1 &=-J_{t}\ddot{\theta} \mathbf{e}_{3}-\Omega_{t} \times J_{t} \Omega_{t} + r_{b t} \times m_{t}(r_{bt}\times\ddot\theta\mathbf{e}_3-{\Omega_{t}} \times V_{b}-\Omega_{t} \times \Omega_{t} \times r_{b t}) \end{aligned} F1​M1​​=mt​(rbt​×θ¨e3​−Ωt​×Vb​−Ωt​×Ωt​×rbt​)=−Jt​θ¨e3​−Ωt​×Jt​Ωt​+rbt​×mt​(rbt​×θ¨e3​−Ωt​×Vb​−Ωt​×Ωt​×rbt​)​
再把(5)和(1)联立 :
−(mt+mb)V˙b+mtr^btΩ˙b=mbΩb×Vb−F1−Fdrag−mtr^btV˙b−(Jt+Jb−mtr^btr^bt)Ω˙b=Ωb×JbΩb−M1−Mdrag(6)\begin{aligned} -(m_{t}+m_{b}) \dot{V}_{b}+m_{t}\hat{r}_{bt}\dot{\Omega}_{b}&=m_{b} \Omega_{b} \times V_{b}-F_1-F_{d r a g} \\ -m_{t}\hat{r}_{b t} \dot{V}_{b} -(J_{t}+J_{b}- m_{t}\hat{r}_{b t} \hat{r}_{bt})\dot{\Omega}_{b}&=\Omega_{b} \times J_{b} \Omega_{b} -M_1-M_{d r a g} \end{aligned}\tag{6} −(mt​+mb​)V˙b​+mt​r^bt​Ω˙b​−mt​r^bt​V˙b​−(Jt​+Jb​−mt​r^bt​r^bt​)Ω˙b​​=mb​Ωb​×Vb​−F1​−Fdrag​=Ωb​×Jb​Ωb​−M1​−Mdrag​​(6)
记:
H=[−(mt+mb)mtr^bt−mtr^bt−(Jt+Jb−mtr^btr^bt)]H= \left[\begin{matrix} -(m_{t}+m_{b}) & m_{t}\hat{r}_{bt}\\ -m_{t}\hat{r}_{b t} & -(J_{t}+J_{b}- m_{t}\hat{r}_{b t} \hat{r}_{bt}) \end{matrix}\right] H=[−(mt​+mb​)−mt​r^bt​​mt​r^bt​−(Jt​+Jb​−mt​r^bt​r^bt​)​]
则有:
[V˙bΩ˙b]=H−1[mbΩb×Vb−F1−FdragΩb×JbΩb−M1−Mdrag](7)\left[\begin{matrix} \dot{V}_{b}\\ \dot{\Omega}_{b} \end{matrix}\right] =H^{-1} \left[\begin{matrix} m_{b} \Omega_{b} \times V_{b}-F_1-F_{d r a g}\\ \Omega_{b} \times J_{b} \Omega_{b} -M_1-M_{d r a g} \end{matrix}\right]\tag{7} [V˙b​Ω˙b​​]=H−1[mb​Ωb​×Vb​−F1​−Fdrag​Ωb​×Jb​Ωb​−M1​−Mdrag​​](7)
这样我们得到了最终的计算表达式(7)。

2 MATLAB代码实现

clc;
clear all;
close all;% 物理参数
mb = 1.0;
Jb = 0.01;% 物理参数
mt = 0.2;
Jt = 0.001;
r = 0.1;% 关节运动
theta = 0;
dtheta = 0;
ddtheta = 0;
a = pi*2;
b = pi/4;% 运动状态
Vb = zeros(3,1);
dVb = zeros(3,1);
Wb = zeros(3,1);
dWb = zeros(3,1);
Vt = zeros(3,1);
dVt = zeros(3,1);
Wt = zeros(3,1);
dWt = zeros(3,1);
Yaw = 0;
Pos = zeros(3,1);% 阻力系数
CFb = 10*[0.1; 0.01; 0];
CMb = [0; 0; 1];
CFt = [0.1; 0.1; 0.1];% 力
F = zeros(3,1);
M = zeros(3,1);
Flist = [];
Mlist = [];% 其他辅助变量
e3 = [0;0;1];
time = [];
The = [];
Vel = [];
WVel = [];
Poslist = [];
ta = 0;
TA = [];
%% 主要仿真过程
for t = 0:0.01:40% 关节运动规律theta = b*cos(a*t);dtheta = -a*b*sin(a*t);ddtheta = -a*a*b*cos(a*t);r_bt = r*[cos(theta);sin(theta);0];% 速度Wt = Wb + dtheta*e3;Vt = Vb + cross(Wt,r_bt);% 阻力Fdb = -0.5*CFb.*[sign(Vb(1))*Vb(1)*Vb(1); sign(Vb(2))*Vb(2)*Vb(2); sign(Vb(3))*Vb(3)*Vb(3)];Mdb = -0.5*CMb.*[sign(Wb(1))*Wb(1)*Wb(1); sign(Wb(2))*Wb(2)*Wb(2); sign(Wb(3))*Wb(3)*Wb(3)];Fdt = -0.5*CFt.*[sign(Vt(1))*Vt(1)*Vt(1); sign(Vt(2))*Vt(2)*Vt(2); sign(Vt(3))*Vt(3)*Vt(3)];% 计算力F1 = mt*(cross(r_bt,ddtheta*e3)-cross(Wt,Vb)-cross(Wt,cross(Wt,r_bt)));M1 = -Jt*ddtheta*e3 - cross(Wt, Jt*Wt) + cross(r_bt, F1);K = [mb*cross(Wb,Vb) - F1 - Fdb;cross(Wb, Jb*Wb) - M1 - Mdb];% 计算H矩阵r_bt_crossmat = zeros(3,3);r_bt_crossmat(1,2) = -r_bt(3);r_bt_crossmat(1,3) = r_bt(2);r_bt_crossmat(2,1) = r_bt(3);r_bt_crossmat(2,3) = -r_bt(1);r_bt_crossmat(3,1) = -r_bt(2);r_bt_crossmat(3,2) = r_bt(1);H = [-(mt+mb)*eye(3), mt*r_bt_crossmat;-mt*r_bt_crossmat, -(Jt+Jb)*eye(3)+mt*r_bt_crossmat*r_bt_crossmat];Hinv = inv(H);% 分析头部连杆U = Hinv*K;dVb = U(1:3);dWb = U(4:6);Vb = Vb + dVb*0.01;Wb = Wb + dWb*0.01;% 位置更新Yaw = Yaw + Wb(3)*0.01;R = [cos(Yaw), -sin(Yaw), 0;sin(Yaw), cos(Yaw), 0;0, 0, 1];Vw = R*Vb;Pos = Pos + Vw*0.01;Poslist = [Poslist, Pos];% 收集数据time = [time, t];Flist = [Flist, F];Mlist = [Mlist, M];Vel = [Vel, Vb];WVel = [WVel, Wb];ta = ta + F/mb*0.01;TA = [TA, ta];
end
%% 绘图
figure(1)
subplot(3,2,1)
title('力');
hold on
plot(time, Flist(1,:),'r')
ylabel('X')
grid on
subplot(3,2,3)
plot(time, Flist(2,:),'g')
ylabel('Y')
grid on
subplot(3,2,5)
plot(time, Flist(3,:),'b')
ylabel('Z')
grid on
subplot(3,2,2)
title('力矩');
hold on
plot(time, Mlist(1,:),'r')
ylabel('X')
grid on
subplot(3,2,4)
plot(time, Mlist(2,:),'g')
ylabel('Y')
grid on
subplot(3,2,6)
plot(time, Mlist(3,:),'b')
ylabel('Z')
grid onfigure(2)
subplot(3,2,1)
title('速度');
hold on
plot(time, Vel(1,:),'r')
ylabel('X')
grid on
subplot(3,2,3)
plot(time, Vel(2,:),'g')
ylabel('Y')
grid on
subplot(3,2,5)
plot(time, Vel(3,:),'b')
ylabel('Z')
grid on
subplot(3,2,2)
title('角速度');
hold on
plot(time, WVel(1,:),'r')
ylabel('X')
grid on
subplot(3,2,4)
plot(time, WVel(2,:),'g')
ylabel('Y')
grid on
subplot(3,2,6)
plot(time, WVel(3,:),'b')
ylabel('Z')
grid onfigure(4)
plot(Poslist(1,:),Poslist(2,:))
grid on
axis equal

3 仿真结果


和上一篇文章中4.3部分的仿真结果对比,几乎是完全相同的,当然仿真参数也没有改动。

两连杆机器鱼的简单建模以及MATLAB仿真(2)相关推荐

  1. 两连杆机器鱼的简单建模以及MATLAB仿真

    两连杆机器鱼的简单建模方法 在机器鱼的建模过程中,无可避免地会遇到一个问题,那就是: 机器鱼的推进力是如何产生的呢? 如果不想明白这个问题,我们没有对推力建模,机器鱼甚至都无法前进,这样我们的建模工作 ...

  2. 设定行车路线实验matlab,桥式吊车小车运动控制系统的建模及MATLAB仿真讲解.doc...

    桥式吊车小车运动控制系统的建模及MATLAB仿真讲解 线性系统理论上机实验报告 题目:桥式吊车小车运动控制系统的建模及MATLAB仿真 班级:控制[专研]-12: 学号:2012309030122号: ...

  3. 二阶倒立摆matlab建模与仿真,二级倒立摆的建模与MATLAB仿真.pdf

    二级倒立摆的建模与MATLAB仿真 MATLAB 二级倒立摆的建模与 仿真 刘文斌,等 二级倒立摆的建模与MATLAB仿真 刘文斌,千树川 3000) (四川理工学院电子与信息工程系 四川自贡,64 ...

  4. matlab反馈模型,—倒立摆状态反馈系统的建模及matlab仿真.docx

    倒立摆状态反馈系统的建模及matlab仿真 课题名称:倒立摆状态反馈系统的建模及matlab仿真 学生姓名: 谢凯 学 号:2011330380229 班 级:电气工程及其自动化2班 指导老师:高金凤 ...

  5. 斜齿轮啮合 matlab,渐开线斜齿轮曲面精确建模及MatLab仿真

    第 38 卷 2010 年第 24 期 本栏目编辑 陆秋云通用 47 渐开线斜齿轮曲面精确建模及 MatLab 仿真 逄明华* 丛晓霞 河南科技学院机电学院 河南新乡 453003 摘要:由于渐开线斜 ...

  6. 通信对抗干扰技术简单综述与MATLAB仿真

    由于公式太多,一个一个敲过来实在费时.请点击下面链接阅读原文,造成不便十分抱歉 通信对抗干扰技术简单综述与MATLAB仿真 - 子木的文章 - 知乎 https://zhuanlan.zhihu.co ...

  7. dc dc变换器的建模及matlab仿真,基于Matlab的AC/DC变换器的系统建模和仿真.pdf

    基于Matlab的AC/DC变换器的系统建模和仿真 Research.Developmentl 基于 Matlab的AC/DC变换器的 系统建模和仿真 1'lleM odelingand Simula ...

  8. 【雷达】FMCW雷达系统信号处理建模与matlab仿真

    1 内容介绍 随着毫米波雷达技术的日益成熟和人们对安全性的迫切需要,近年来,防撞雷达系统得到了深入研究和广泛应用,如自动巡航控制.碰撞报警和防碰撞系统以及有待发展的雷达成像和汽车的自动驾驶系统等.中频 ...

  9. 三相两相坐标变换matlab仿真,交流电机的三相静止到两相静止及两相静止到两相旋转坐标变换的分析及MATLAB仿真...

    一 笼 一田娜侧如 伺服电动机资 一 交流电机的三相静止到两相静止及两相静止到两相旋转坐标变换的分析及日 仿真 兰州交通大学自动化与电气工程学院 吴炳娇 摘 要 矢量变换在交流电机复杂模型的简化中发挥 ...

最新文章

  1. Python几种加密算法
  2. hdu 2553 N皇后问题【dfs】
  3. 聊聊程序员的成长与价值提升
  4. leetcode914. 卡牌分组
  5. vijos-1003等价表达式
  6. 美团 Flink 大作业部署与状态稳定性优化实践
  7. JCam2 v1.6.0 USB摄像头工具全新发布及使用详解
  8. C# WinForm开发系列之DataTimePicker控件显示月份的限制和关于DataTimePicker和monthCalendar的样式设置问题
  9. ddr2之OCD、ODT和Post CAS技术
  10. Docker部署服务(二)上传镜像至Habor
  11. 图像修复 python_50.图像修复
  12. elasticsearch配置告警方案问题记录
  13. 为何恢复出来的MP4视频文件打不开
  14. android 音频显示器,安卓手机投屏(带声音同步)教程
  15. 小程序图片加载不出来(显示)
  16. python中一个函数调用另一个函数中的变量
  17. 关于安卓启动模拟器时出现~~~~have you declared this activity in your AndroidMainfest.xml?问题
  18. C++黑客攻击系统-重复验证
  19. 好用的mac录屏软件推荐:白菜录屏mac中文免费版
  20. 微信小程序自定义标签组件component封装、组件生命周期,组件通信

热门文章

  1. 【C++】什么情况下会产生临时变量
  2. 鸿蒙系统的微内核是什么
  3. Spring aop 循环依赖 Is there an unresolvable circular reference?
  4. JavaScript结课报告
  5. Adb shell命令直接打开语言设置界面
  6. Spring boot + netty开发即时通讯 IM
  7. window系统 任务计划程序
  8. 揭秘linux启动过程
  9. AI技术 | PIFuHD-由高清图片生成3D人物模型对BIM的启示
  10. 谷歌文件系统论文中文版