??当你想喝杯咖啡时,咖啡有时会洒出来,有时不会,为什么?偶然的机会,一些同事冲出办公室,你需要调整姿势和节奏来保持咖啡在杯子里。建立数学模型,找出影响或控制咖啡溢出的因素。
??现在假设,一个机器人拿着一杯咖啡快速行走。考虑到随机振动,设计一种机器人控制速度的策略。
??在快节奏的社会里,几乎所有的人都选择带着一杯咖啡散步。本文通过对三种不同类型的咖啡杯的研究,发现咖啡杯在使用过程中经常会出现咖啡溢出现象,并取得了较好的效果。
??我们将这个问题分解为两部分:人体行走和液体晃动。针对步行速度随时间变化的特点,将其简化为水平简谐运动和垂直简谐运动的合成,并对模型进行了修正。对于液体晃动,我们也将俯仰角的变化简化为一个简单的简谐运动,并通过液体平衡方程和机械平衡方程来表达这一过程。我们发现咖啡是否溢出与步幅、步频、杯形和咖啡量有关。并通过参数分析对模型进行了验证。通过最小二乘法对参数进行拟合,计算出在步长为0.65m,步长为1.1s,平均速度为0.85m/s的情况下,聚焦人的最大偏离角为10.8°,最大容量为94.8%。
??在机器人方面,在原有模型中加入了手部摆动的随机振动。振动与步幅呈正相关,与步频呈负相关。通过测试步行策略中各参数的组合,计算了两种杯子在合适步行策略下的速度、液界面最大偏差和咖啡的最大容量。我们发现,苗条的步频与较高的步频相匹配,而矮胖的步频与保守策略相匹配。根据该策略,可以保证咖啡的最大流速和最大容量而不溢出。
??1) 将人体行走过程简化为简谐运动
??2) 杯体之间没有相对运动。
??3) 在水平方向上,正方向与人类行走相同,而在垂直方向上,正方向是向上的。
??4) 液位保持为平面。
??在忙碌和紧张的环境下,经常看到白领们端着一杯咖啡散步。然而,咖啡洒出来,弄得乱七八糟,给我们带来不便,这一现象引发了人们对如何防止咖啡洒出杯子的思考。虽然这个问题微不足道,很难找到突破点,但它在一定程度上对机器人是有用的。
??显然,该问题由两部分组成:人体行走和液体晃动。一般来说,导致咖啡溢出的因素可能与步频、速度和复合因素有关。
??根据生物力学,人们倾向于以最少的能量消耗移动身体。也就是说,人们会选择直线,当步行速度集中时,人们会选择合理的步频,使步频起伏不大。液体在直线方向上的偏差随速度的增加而减小。由于该问题的背景是一个冲出办公室的人,由于步行速度快,我们忽略了与身体相对的手的摆动因素,而对于机器人,我们考虑了手的摆动。
??由于液体界面溢出的可能性与最大加速度有关,因此我们选择它作为是否会从杯子溢出的测量值,并计算在给定咖啡液位下的最大偏离角。
??在我们的生活中有不同类型的咖啡杯。因此本文特别选取了三种类型的杯子。
??我们目前面临以下问题:
??1) 用数学公式描述人的行走过程
??2) 定义不同受力情况下的液体分布
??3) 该模型应用于机器人时,应考虑机器人的随机振动。问题是如何测量振动。
clear all
min=[0.5, 0, 5.0, -1];
max=[1.5, 0.35, 7.5, 1];
best=min;
d=inf;
p=[];
x=[1:41];
x=(x-1).*(1/29);
y(1,:)=[1.30500000000000,1.16000000000000,1.16000000000000,1.01500000000000,0.5800000
00000000,0.870000000000000,0.580000000000000,0.870000000000000,0.493000000000000,0.6
67000000000000,0.580000000000000,0.580000000000000,0.580000000000000,0.580000000000
000,0.500000000000000,0.435000000000000,0.725000000000000,0.725000000000000,0.870000
000000000,0.725000000000000,1.01500000000000,1.01500000000000,0.870000000000000,1.01
500000000000,1.16000000000000,1.07300000000000,1.10200000000000,1.16000000000000,1.1
6000000000000,1.16000000000000,1.16000000000000,1.16000000000000,1.10200000000000,0.
928000000000000,0.870000000000000,0.870000000000000,0.725000000000000,0.87000000000
0000,0.725000000000000,0.812000000000000,0.783000000000000];
xi=[0:0.01:1.38];
y=interp1(x,y(1,:),xi,'spline');
x=xi;
[aa a]=size(x);
for i=(2:a-1)
if (y(i)<y(i-1)&&y(i)<y(i+1))||(y(i)>y(i-1)&&y(i)>y(i+1))
p=[p i];
end
end
[aa a]=size(p);
temp=0;
%for i=2:a-1
% [zz z]=size(xi);
x=xi;
%y=yi;
for a1=min(1):0.05:max(1)
for a2=min(2):0.01:max(2)
for a3=min(3):0.1:max(3)
for a4=min(4):0.1:max(4)
c=[a1 a2 a3 a4];
y(2,:)=c(1)+c(2)*cos(c(3)*x+c(4));
dd=sum(abs(y(1,:)-y(2,:)));
if dd<d
d=dd
best=c
zz=y(2,:);
end
end
end
end
end
plot(x,y(1,:),'b')
hold on
plot(x,zz,'r')
xlabel('t(s)')
ylabel('v1(m/s)')