一点点小补充

  • M3508 转矩常数0.3,也就是每增加1A电流力矩增加0.3牛米
  • AK80-6 转矩常数 0.09 这个好像不用管

对于四足,电机相对,力矩Tp由TB和TF共同提供,会比以上计算更简单

五连杆正运动学解算

1710491620264.png

以杆 L5L_5 的中心为原点,可以得到

A=(L52,0)B=(L52+L1cosφ1,L1sinφ1)D=(L52+L4cosφ4,L4sinφ4)E=(L52,0)A=(-\frac{L_5}{2}, 0)\\B=(-\frac{L_5}{2}+L_1\cos\varphi_1,L_1\sin\varphi_1)\\D=(\frac{L_5}{2}+L_4\cos\varphi_4,L_4\sin\varphi_4)\\E=(\frac{L_5}{2},0)

通过五连杆左右两部分列写 C 点坐标,可以得到下列等式

{xB+L2cosφ2=xD+L3cosφ3yB+L2sinφ2=yD+L3sinφ3\left\{\begin{aligned}&x_B+L_2\cos\varphi_2=x_D+L_3\cos\varphi_3\\&y_B+L_2\sin\varphi_2=y_D+L_3\sin\varphi_3\end{aligned}\right.

求解得到

φ2=2arctan(B+A2+B2C2A+C)φ3=π2arctan(B+A2+B2D2A+D)\varphi_2=2\arctan(\frac{B+\sqrt{A^2+B^2-C^2}}{A+C})\\\varphi_3=\pi-2\arctan(\frac{-B+\sqrt{A^2+B^2-D^2}}{A+D})

其中

A=2L2(xDxB)B=2L2(yDyB)C=L22+LBD2L32D=L32+LBD2L22LBD=(xDxB)2+(yDyB)2A=2L_2(x_D-x_B)\\B=2L_2(y_D-y_B)\\C=L_2^2+L_{BD}^2-L_3^2\\D=L_3^2+L_{BD}^2-L_2^2\\L_{BD}=\sqrt{(x_D-x_B)^2+(y_D-y_B)^2}

可以得到 C 点坐标

xC=L52+L1cos(φ1)+L2cos(φ2)yC=L1sin(φ1)+L2sin(φ2)x_C=-\frac{L_5}{2}+L_1\cos(\varphi_1)+L_2\cos(\varphi_2)\\y_C=L_1\sin(\varphi_1)+L_2\sin(\varphi_2)

L0=xc2+yc2φ0=arctanycxcL_0=\sqrt{x_c^2+y_c^2}\\\varphi_0=\arctan{\frac{y_c}{x_c}}

VMC

关键是在每个需要控制的自由度上构造合适的虚拟构件来产生合适的虚拟力。虚拟力不是实际执行机构的作用力或力矩,而是通过执行机构的作用经过机构转换而成。对于一些控制问题,我们可能需要将工作空间 (Task Space) 的力或力矩映射成关节空间 (Joint Space) 的关节力矩。

在五连杆中,需要获得机构末端沿腿的推力 FF 与沿中心轴的力矩 TbT_b,对应极坐标 L0,φ0L_0,\varphi_0A,EA,E 两个关节转动副力矩 TA,TET_A,T_E 的关系。所以定义

x=[L0φ0]q=[φ1φ4]x=\begin{bmatrix}L_0\\\varphi_0\end{bmatrix}\\q=\begin{bmatrix}\varphi_1\\\varphi_4\end{bmatrix}

对正运动学模型 x=f(q)x=f(q) 做微分得

f=[L0φ1L0φ4φ0φ1φ0φ4]f'=\begin{bmatrix}\frac{\partial L_0}{\partial \varphi_1}&\frac{\partial L_0}{\partial \varphi_4}\\\frac{\partial \varphi_0}{\partial \varphi_1}&\frac{\partial \varphi_0}{\partial \varphi_4}\end{bmatrix}

这就是 x 对 q 的雅各比矩阵,记作 JJ。得到对应的全微分方程为

Δx=JΔq\Delta x=J\Delta q

通过雅各比矩阵 JJ 将关节速度 q˙\dot{q} 映射为五连杆姿态变化率 x˙\dot{x}。根据虚功原理,可以得到

TTΔq+(F)TΔx=0T=[TATE]Fpole=[FTb]T^T\Delta q+(-F)^T\Delta x=0\\T=\begin{bmatrix}T_A\\T_E\end{bmatrix}\\F_{pole}=\begin{bmatrix}F\\T_b\end{bmatrix}

将全微分方程带入之后可得

T=JTFpoleT=J^TF_{pole}

但是上述推导中的正运动学模型直接求雅各比矩阵比较困难,因为模型中有大量的平方与三角函数的运算,结果比较复杂。所以进行下列改进

由于雅各比矩阵实际上描述的是两坐标微分的线性映射关系,所以可以计算速度映射来得到雅各比矩阵。由于 L0,φ0L_0,\varphi_0 实际上就是 CC 点的极坐标,所以首先求出 CC 点直角坐标速度

x˙C=L1φ˙1sinφ1L2φ˙2sinφ2y˙C=L1φ˙1cosφ1+L2φ˙2cosφ2\dot{x}_C=-L_1\dot{\varphi}_1\sin\varphi_1-L_2\dot{\varphi}_2\sin\varphi_2\\\dot{y}_C=L_1\dot{\varphi}_1\cos\varphi_1+L_2\dot{\varphi}_2\cos\varphi_2

通过五连杆左右两部分列写 C 点坐标求导可以得到 φ˙2\dot\varphi_2

{x˙BL2φ˙2sinφ2=x˙DL3φ˙3sinφ3yB+L2sinφ2=yD+L3sinφ3\left\{\begin{aligned}&\dot x_B-L_2\dot\varphi_2\sin\varphi_2=\dot x_D-L_3\dot\varphi_3\sin\varphi_3\\&y_B+L_2\sin\varphi_2=y_D+L_3\sin\varphi_3\end{aligned}\right.

消去 φ˙3\dot\varphi_3 得到 φ˙2\dot\varphi_2

φ˙2=(x˙Dx˙B)cosφ3+(y˙Dy˙B)sinφ3L2sin(φ3φ2)\dot\varphi_2=\frac{(\dot x_D-\dot x_B)\cos\varphi_3+(\dot y_D-\dot y_B)\sin\varphi_3}{L_2\sin(\varphi_3-\varphi_2)}

其中

x˙B=L2φ˙1sinφ1y˙B=L2φ˙1cosφ1x˙D=L4φ˙4sinφ4y˙D=L4φ˙4sinφ4\dot x_B=-L_2\dot\varphi_1\sin\varphi_1\\\dot y_B=L_2\dot\varphi_1\cos\varphi_1\\\dot x_D=-L_4\dot\varphi_4\sin\varphi_4\\\dot y_D=L_4\dot\varphi_4\sin\varphi_4

并且其中的 φ˙1,φ˙4\dot\varphi_1,\dot\varphi_4 都是直接测出来的,带入之后得到

x˙C=L1φ˙1sinφ1L2(x˙Dx˙B)cosφ3+(y˙Dy˙B)sinφ3L2sin(φ3φ2)sinφ2y˙C=L1φ˙1cosφ1+L2(x˙Dx˙B)cosφ3+(y˙Dy˙B)sinφ3L2sin(φ3φ2)cosφ2\dot{x}_C=-L_1\dot{\varphi}_1\sin\varphi_1-L_2\frac{(\dot x_D-\dot x_B)\cos\varphi_3+(\dot y_D-\dot y_B)\sin\varphi_3}{L_2\sin(\varphi_3-\varphi_2)}\sin\varphi_2\\\dot{y}_C=L_1\dot{\varphi}_1\cos\varphi_1+L_2\frac{(\dot x_D-\dot x_B)\cos\varphi_3+(\dot y_D-\dot y_B)\sin\varphi_3}{L_2\sin(\varphi_3-\varphi_2)}\cos\varphi_2

化简之后得到

[x˙Cy˙C]=[L1sin(φ1φ2)sinφ3sin(φ2φ3)L4sin(φ3φ4)sinφ2sin(φ2φ3)L1sin(φ1φ2)cosφ3sin(φ2φ3)L4sin(φ3φ4)cosφ2sin(φ2φ3)][φ˙1φ˙4]\begin{bmatrix}\dot x_C\\\dot y_C\end{bmatrix}=\begin{bmatrix}\frac{L_1\sin(\varphi_1-\varphi_2)\sin\varphi_3}{\sin(\varphi_2-\varphi_3)}&\frac{L_4\sin(\varphi_3-\varphi_4)\sin\varphi_2}{\sin(\varphi_2-\varphi_3)}\\-\frac{L_1\sin(\varphi_1-\varphi_2)\cos\varphi_3}{\sin(\varphi_2-\varphi_3)}&-\frac{L_4\sin(\varphi_3-\varphi_4)\cos\varphi_2}{\sin(\varphi_2-\varphi_3)}\end{bmatrix}\begin{bmatrix}\dot \varphi_1\\\dot \varphi_4\end{bmatrix}

记作

[x˙Cy˙C]=J[φ˙1φ˙4]\begin{bmatrix}\dot x_C\\\dot y_C\end{bmatrix}=J\begin{bmatrix}\dot \varphi_1\\\dot \varphi_4\end{bmatrix}

根据上式可以得到关节力矩 TT 与虚拟力 FrectF_{rect} 的关系

T=JTFrectFrect=[FxFy]T=J^TF_{rect}\\F_{rect}=\begin{bmatrix}F_x\\F_y\end{bmatrix}

利用旋转矩阵将 FrectF_{rect} 旋转到杆的方向,旋转矩阵记作 RR

[FxFy]=[cosθsinθsinθcosθ][FcFt]\begin{bmatrix}F_x\\F_y\end{bmatrix}=\begin{bmatrix}\cos\theta&\sin\theta\\-\sin\theta&\cos\theta\end{bmatrix}\begin{bmatrix}F_c\\F_t\end{bmatrix}

将杆的方向里转到极坐标方向的力 FpoleF_{pole},旋转矩阵记作 MM

[FcFt]=[01L010][FTb]\begin{bmatrix}F_c\\F_t\end{bmatrix}=\begin{bmatrix}0&\frac{1}{L_0}\\1&0\end{bmatrix}\begin{bmatrix}F\\T_b\end{bmatrix}

依次带入得到最终的关节力矩与虚拟力之间的映射关系

T=JTRMFpoleT=J^TRMF_{pole}

A=L1sin(φ1φ2)sin(φ2φ3)B=L4sin(φ3φ4)sin(φ2φ3)A=\frac{L_1\sin(\varphi_1-\varphi_2)}{\sin(\varphi_2-\varphi_3)}\\B=\frac{L_4\sin(\varphi_3-\varphi_4)}{\sin(\varphi_2-\varphi_3)}

最终带入得到

T=[Acos(θ+φ3)Asin(θ+φ3)L0Bcos(θ+φ2)Bsin(θ+φ2)L0]FpoleT=\begin{bmatrix}-A\cos(\theta+\varphi_3)&\frac{A\sin(\theta+\varphi_3)}{L_0}\\-B\cos(\theta+\varphi_2)&\frac{B\sin(\theta+\varphi_2)}{L_0}\end{bmatrix}F_{pole}

但是在这里解算中的 φ0,φ1,φ2,φ3,φ4\varphi_0,\varphi_1,\varphi_2,\varphi_3, \varphi_4 都是逆时针为正的,所以最终得到的 TT 也是逆时针的,要施加到电机上需要取负值,因此最终结果为

T=[Acos(θ+φ3)Asin(θ+φ3)L0Bcos(θ+φ2)Bsin(θ+φ2)L0]FpoleT=\begin{bmatrix}A\cos(\theta+\varphi_3)&-\frac{A\sin(\theta+\varphi_3)}{L_0}\\B\cos(\theta+\varphi_2)&-\frac{B\sin(\theta+\varphi_2)}{L_0}\end{bmatrix}F_{pole}

注意,这里的·解算中,对于每个关节电机转矩的方向是顺时针为正,其他都是按照图上的方向的

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);

虚功原理

理论力学次叙——虚功原理

是分析静力学中关键且重要的原理

  1. 一个原为静止的质点系,如果约束是理想双面定常约束,则系统继续保持静止的条件是所有作用于该系统的主动力对作用点的虚位移所作的功的和为零
  2. 在结构力学刚体体系中表述为:设满足理想约束的刚体体系上作用的任意平衡力系,又假设体系发生满足约束条件的无限小的刚体位移,则主动力在位移上所做的虚功总和恒为零
  3. 在结构力学变形体体系中表述为:体系在任意平衡力系作用下,给体系以几何可能的位移和变形,体系上所有外力所作的虚功总和恒等于体系各截面所有内力在微段变形上所作的虚功总和。

总之就是

  1. 当系统平衡且处于理想约束时,所有主动力的虚功之和为0
  2. 当系统平衡且处于理想约束时,外力的虚功等于内力的虚功

虚功 δW\delta W 就是力在虚位移上做的功

则虚功原理表达式为

δWin(内力做的虚功)=δWex(外力做的虚功)\delta W_{in}(\text{内力做的虚功}) = \delta W_{ex}(\text{外力做的虚功})

或: i=1nFiδqi=0 (F是主动力,矢量)\sum_{i=1}^n F_i * \delta q_i=0\ (F \text{是主动力,矢量})