一点点小补充
- M3508 转矩常数0.3,也就是每增加1A电流力矩增加0.3牛米
- AK80-6 转矩常数 0.09 这个好像不用管
对于四足,电机相对,力矩Tp由TB和TF共同提供,会比以上计算更简单
五连杆正运动学解算

以杆 L5 的中心为原点,可以得到
A=(−2L5,0)B=(−2L5+L1cosφ1,L1sinφ1)D=(2L5+L4cosφ4,L4sinφ4)E=(2L5,0)
通过五连杆左右两部分列写 C 点坐标,可以得到下列等式
{xB+L2cosφ2=xD+L3cosφ3yB+L2sinφ2=yD+L3sinφ3
求解得到
φ2=2arctan(A+CB+A2+B2−C2)φ3=π−2arctan(A+D−B+A2+B2−D2)
其中
A=2L2(xD−xB)B=2L2(yD−yB)C=L22+LBD2−L32D=L32+LBD2−L22LBD=(xD−xB)2+(yD−yB)2
可以得到 C 点坐标
xC=−2L5+L1cos(φ1)+L2cos(φ2)yC=L1sin(φ1)+L2sin(φ2)
则
L0=xc2+yc2φ0=arctanxcyc
VMC
关键是在每个需要控制的自由度上构造合适的虚拟构件来产生合适的虚拟力。虚拟力不是实际执行机构的作用力或力矩,而是通过执行机构的作用经过机构转换而成。对于一些控制问题,我们可能需要将工作空间 (Task Space) 的力或力矩映射成关节空间 (Joint Space) 的关节力矩。
在五连杆中,需要获得机构末端沿腿的推力 F 与沿中心轴的力矩 Tb,对应极坐标 L0,φ0 与 A,E 两个关节转动副力矩 TA,TE 的关系。所以定义
x=[L0φ0]q=[φ1φ4]
对正运动学模型 x=f(q) 做微分得
f′=[∂φ1∂L0∂φ1∂φ0∂φ4∂L0∂φ4∂φ0]
这就是 x 对 q 的雅各比矩阵,记作 J。得到对应的全微分方程为
Δx=JΔq
通过雅各比矩阵 J 将关节速度 q˙ 映射为五连杆姿态变化率 x˙。根据虚功原理,可以得到
TTΔq+(−F)TΔx=0T=[TATE]Fpole=[FTb]
将全微分方程带入之后可得
T=JTFpole
但是上述推导中的正运动学模型直接求雅各比矩阵比较困难,因为模型中有大量的平方与三角函数的运算,结果比较复杂。所以进行下列改进
由于雅各比矩阵实际上描述的是两坐标微分的线性映射关系,所以可以计算速度映射来得到雅各比矩阵。由于 L0,φ0 实际上就是 C 点的极坐标,所以首先求出 C 点直角坐标速度
x˙C=−L1φ˙1sinφ1−L2φ˙2sinφ2y˙C=L1φ˙1cosφ1+L2φ˙2cosφ2
通过五连杆左右两部分列写 C 点坐标求导可以得到 φ˙2
{x˙B−L2φ˙2sinφ2=x˙D−L3φ˙3sinφ3yB+L2sinφ2=yD+L3sinφ3
消去 φ˙3 得到 φ˙2
φ˙2=L2sin(φ3−φ2)(x˙D−x˙B)cosφ3+(y˙D−y˙B)sinφ3
其中
x˙B=−L2φ˙1sinφ1y˙B=L2φ˙1cosφ1x˙D=−L4φ˙4sinφ4y˙D=L4φ˙4sinφ4
并且其中的 φ˙1,φ˙4 都是直接测出来的,带入之后得到
x˙C=−L1φ˙1sinφ1−L2L2sin(φ3−φ2)(x˙D−x˙B)cosφ3+(y˙D−y˙B)sinφ3sinφ2y˙C=L1φ˙1cosφ1+L2L2sin(φ3−φ2)(x˙D−x˙B)cosφ3+(y˙D−y˙B)sinφ3cosφ2
化简之后得到
[x˙Cy˙C]=[sin(φ2−φ3)L1sin(φ1−φ2)sinφ3−sin(φ2−φ3)L1sin(φ1−φ2)cosφ3sin(φ2−φ3)L4sin(φ3−φ4)sinφ2−sin(φ2−φ3)L4sin(φ3−φ4)cosφ2][φ˙1φ˙4]
记作
[x˙Cy˙C]=J[φ˙1φ˙4]
根据上式可以得到关节力矩 T 与虚拟力 Frect 的关系
T=JTFrectFrect=[FxFy]
利用旋转矩阵将 Frect 旋转到杆的方向,旋转矩阵记作 R
[FxFy]=[cosθ−sinθsinθcosθ][FcFt]
将杆的方向里转到极坐标方向的力 Fpole,旋转矩阵记作 M
[FcFt]=[01L010][FTb]
依次带入得到最终的关节力矩与虚拟力之间的映射关系
T=JTRMFpole
令
A=sin(φ2−φ3)L1sin(φ1−φ2)B=sin(φ2−φ3)L4sin(φ3−φ4)
最终带入得到
T=[−Acos(θ+φ3)−Bcos(θ+φ2)L0Asin(θ+φ3)L0Bsin(θ+φ2)]Fpole
但是在这里解算中的 φ0,φ1,φ2,φ3,φ4 都是逆时针为正的,所以最终得到的 T 也是逆时针的,要施加到电机上需要取负值,因此最终结果为
T=[Acos(θ+φ3)Bcos(θ+φ2)−L0Asin(θ+φ3)−L0Bsin(θ+φ2)]Fpole
注意,这里的·解算中,对于每个关节电机转矩的方向是顺时针为正,其他都是按照图上的方向的
1 2 3 4 5 6 7 8 9 10 11
| Eigen::Matrix<float, 2, 2> trans; float A = l1 * sin(angle1 - angle2) / sin(angle2 - angle3); float B = l4 * sin(angle3 - angle4) / sin(angle2 - angle3); trans << -A * cos(theta.now + angle3), A * sin(theta.now + angle3) / L0.now, -B * cos(theta.now + angle2), B * sin(theta.now + angle2) / L0.now;
this->jointF->setTorque(-trans(0, 0) * this->Fset - trans(0, 1) * this->Tbset); this->jointB->setTorque(-trans(1, 0) * this->Fset - trans(1, 1) * this->Tbset); this->wheel->setTorque(this->Twset);
|
虚功原理
理论力学次叙——虚功原理
是分析静力学中关键且重要的原理
- 一个原为静止的质点系,如果约束是理想双面定常约束,则系统继续保持静止的条件是所有作用于该系统的主动力对作用点的虚位移所作的功的和为零
- 在结构力学刚体体系中表述为:设满足理想约束的刚体体系上作用的任意平衡力系,又假设体系发生满足约束条件的无限小的刚体位移,则主动力在位移上所做的虚功总和恒为零
- 在结构力学变形体体系中表述为:体系在任意平衡力系作用下,给体系以几何可能的位移和变形,体系上所有外力所作的虚功总和恒等于体系各截面所有内力在微段变形上所作的虚功总和。
总之就是
- 当系统平衡且处于理想约束时,所有主动力的虚功之和为0
- 当系统平衡且处于理想约束时,外力的虚功等于内力的虚功
虚功 δW 就是力在虚位移上做的功
则虚功原理表达式为
δWin(内力做的虚功)=δWex(外力做的虚功)
或: ∑i=1nFi∗δqi=0 (F是主动力,矢量)