ardrone是rotors仿真框架提供的一款机型,因为该机型与我们实际使用的机型参数相近,所以这里对它的参数做特别整理和记录。
根据ardrone.yaml
,其关键参数如下所示:
# Ardrone vehicle parameters
mass: 1.52
inertia: {xx: 0.0347563, xy: 0.0, xz: 0.0, yy: 0.0458929, yz: 0.0, zz: 0.0977}
# angle should be expressed in rad
# direction 1 means counter clockwise, -1 clockwise
# The order of the rotors matters for the calculation of the allocation matrix.
rotor_configuration:
'0': {angle: -0.78539, arm_length: 0.18, rotor_force_constant: 8.54858e-06, rotor_moment_constant: 1.6e-2, direction: 1.0}
'1': {angle: 2.35619, arm_length: 0.18, rotor_force_constant: 8.54858e-06, rotor_moment_constant: 1.6e-2, direction: 1.0}
'2': {angle: 0.78539, arm_length: 0.18, rotor_force_constant: 8.54858e-06, rotor_moment_constant: 1.6e-2, direction: -1.0}
'3': {angle: -2.35619, arm_length: 0.18, rotor_force_constant: 8.54858e-06, rotor_moment_constant: 1.6e-2, direction: -1.0}
更详细的参数可以参见ardrone.xacro
文件。
其电机标号convention与PX4一致,如下图所示:
control allocation matrix如下:
[ τ x τ y τ z F ] = [ c f d ⋅ sin θ 0 c f d ⋅ sin θ 1 c f d ⋅ sin θ 2 c f d ⋅ sin θ 3 − c f d ⋅ cos θ 0 − c f d ⋅ cos θ 1 − c f d ⋅ cos θ 2 − c f d ⋅ cos θ 3 n ⋅ c f c m n ⋅ c f c m n ⋅ c f c m n ⋅ c f c m c f c f c f c f ] [ ω 0 2 ω 1 2 ω 2 2 ω 3 2 ] \begin{bmatrix} \tau_x\\ \tau_y\\ \tau_z \\ F \end{bmatrix}= \begin{bmatrix} c_fd\cdot\text{sin}\theta_0 & c_fd\cdot\text{sin}\theta_1 & c_fd\cdot\text{sin}\theta_2 & c_fd\cdot\text{sin}\theta_3 \\ -c_fd\cdot\text{cos}\theta_0 & -c_fd\cdot\text{cos}\theta_1 & -c_fd\cdot\text{cos}\theta_2 & -c_fd\cdot\text{cos}\theta_3 \\ n\cdot c_f c_m & n\cdot c_f c_m & n\cdot c_f c_m & n\cdot c_f c_m \\ c_f & c_f & c_f & c_f \end{bmatrix} \begin{bmatrix} {\omega_0}^2 \\ {\omega_1}^2 \\ {\omega_2}^2 \\ {\omega_3}^2 \end{bmatrix} τxτyτzF = cfd⋅sinθ0−cfd⋅cosθ0n⋅cfcmcfcfd⋅sinθ1−cfd⋅cosθ1n⋅cfcmcfcfd⋅sinθ2−cfd⋅cosθ2n⋅cfcmcfcfd⋅sinθ3−cfd⋅cosθ3n⋅cfcmcf ω02ω12ω22ω32
其中 n n n表示旋向(逆时针为1,顺时针为-1), c f c_f cf是拉力系数, c m c_m cm是力矩系数。这里力矩系数与其他文献或某些书籍可能不一致,但是在代码里是与其他参数一起配套使用是没有问题的。下面全权老师的课件,矩阵的第4行,用的是 c M c_M cM,这里 c M = c f c m c_M=c_fc_m cM=cfcm。因此,以后要注意自己用的参数对应的是什么公式。
注意!原始的ardrone.xacro
和ardrone.yaml
文件中,arm_length
参数是有问题的,github上有网友也提出来了(Ardrone Arm Length And Stability #488)。修改方式有两种,以下二选一即可:
ardrone.yaml
的arm_length
改为0.18
(比如我上面的代码片)ardrone.yaml
的arm_length
改为0.18
;且ardrone.xacro
中的arm_length
改为0.18
,sqrt2
(1.4142135623730951, 2 \sqrt{2} 2)全部替换为sqrt2_inv
(0.70710678119, 1 2 \frac{1}{\sqrt{2}} 21)