绕三轴旋转公式

本文中定义旋转正方向是指沿轴从正往负看,逆时针为正。
NED坐标系到机体坐标系的变换

1.绕轴旋转公式

1.1 绕x轴旋转 ϕ \phi ϕ角度

(1) R x ( ϕ ) = [ x ′ y ′ z ′ ] = [ 1 0 0 0 c o s ϕ s i n ϕ 0 − s i n ϕ c o s ϕ ] [ x y z ] R_x(\phi)=\left[ \begin{matrix}x'\\ y'\\ z'\end{matrix} \right]= \left[ \begin{matrix} 1 & 0 & 0 \\ 0 & cos\phi & sin\phi \\ 0 & -sin\phi & cos\phi \end{matrix} \right] \left[ \begin{matrix} x\\ y\\ z \end{matrix} \right]\tag{1} Rx(ϕ)=xyz=1000cosϕsinϕ0sinϕcosϕxyz(1)
其中, [ x , y , z ] [ \begin{matrix}x,y,z\end{matrix}] [x,y,z]表示旋转 θ \theta θ之前坐标的坐标,而 [ x ′ , y ′ , z ′ ] [ \begin{matrix}x',y',z'\end{matrix}] [x,y,z]表示旋转之后的坐标,同理可以得到其他两轴的旋转公式。

1.2 绕y轴旋转 θ \theta θ

(2) R y ( θ ) = [ x ′ y ′ z ′ ] = [ c o s θ 0 − s i n θ 0 1 0 s i n θ 0 c o s θ ] [ x y z ] R_y(\theta)=\left[ \begin{matrix} x'\\ y'\\ z' \end{matrix} \right]= \left[ \begin{matrix} cos\theta& 0& -sin\theta \\ 0& 1& 0 \\ sin\theta& 0& cos\theta \end{matrix} \right] \left[ \begin{matrix} x\\ y\\ z \end{matrix} \right]\tag{2} Ry(θ)=xyz=cosθ0sinθ010sinθ0cosθxyz(2)

1.3 绕z轴旋转 ψ \psi ψ

(3) R z ( ψ ) [ x ′ y ′ z ′ ] = [ c o s ψ s i n ψ 0 − s i n ψ c o s ψ 0 0 0 1 ] [ x y z ] R_z(\psi)\left[ \begin{matrix} x'\\ y'\\ z' \end{matrix} \right]= \left[ \begin{matrix} cos\psi& sin\psi& 0 \\ -sin\psi& cos\psi& 0 \\ 0& 0& 1 \end{matrix} \right] \left[ \begin{matrix} x\\ y\\ z \end{matrix} \right]\tag{3} Rz(ψ)xyz=cosψsinψ0sinψcosψ0001xyz(3)

1.4 北东地坐标系转换到机体转换矩阵

R N E D 2 b = R x ( ϕ ) R y ( θ ) R z ( ψ ) = R_{NED2b}=R_x(\phi)R_y(\theta)R_z(\psi)= RNED2b=Rx(ϕ)Ry(θ)Rz(ψ)= (4) [ c o s ( θ ) c o s ( ψ ) c o s ( θ ) s i n ( ψ ) − s i n ( θ ) c o s ( ψ ) s i n ( θ ) s i n ( p h i ) − s i n ( ψ ) c o s ( ϕ ) s i n ( ψ ) s i n ( θ ) s i n ( ϕ ) + c o s ( ψ ) c o s ( ϕ ) c o s ( θ ) s i n ( ϕ ) s i n ( ψ ) s i n ( ϕ ) + c o s ( p s i ) s i n ( θ ) c o s ( ϕ ) s i n ( ψ ) s i n ( θ ) c o s ( ϕ ) − c o s ( ψ ) s i n ( ϕ ) c o s ( θ ) c o s ( ϕ ) ] \left[ \begin{matrix} cos(\theta)cos(\psi) & cos(\theta)sin(\psi) & -sin(\theta)\\ cos(\psi)sin(\theta)sin(phi)-sin(\psi)cos(\phi) & sin(\psi)sin(\theta)sin(\phi)+cos(\psi)cos(\phi) & cos(\theta)sin(\phi)\\ sin(\psi)sin(\phi)+cos(psi)sin(\theta)cos(\phi) & sin(\psi)sin(\theta)cos(\phi)-cos(\psi)sin(\phi) & cos(\theta)cos(\phi) \end{matrix} \right]\tag{4} cos(θ)cos(ψ)cos(ψ)sin(θ)sin(phi)sin(ψ)cos(ϕ)sin(ψ)sin(ϕ)+cos(psi)sin(θ)cos(ϕ)cos(θ)sin(ψ)sin(ψ)sin(θ)sin(ϕ)+cos(ψ)cos(ϕ)sin(ψ)sin(θ)cos(ϕ)cos(ψ)sin(ϕ)sin(θ)cos(θ)sin(ϕ)cos(θ)cos(ϕ)(4)
(5) [ X b Y b Z b ] = R N E D 2 b [ X N E D Y N E D Z N E D ] \left[ \begin{matrix} X_{b}\\Y_{b}\\Z_{b} \end{matrix} \right]=R_{NED2b} \left[ \begin{matrix} X_{NED}\\Y_{NED}\\Z_{NED} \end{matrix} \right]\tag{5} XbYbZb=RNED2bXNEDYNEDZNED(5)

2.角速度转换公式

根据北东地坐标系旋转到机体坐标系的顺序可知
(5) [ p q r ] = [ 1 0 0 ] ϕ ˙ + R x ( ϕ ) [ 0 1 0 ] θ ˙ + R x ( ϕ ) R y ( θ ) [ 0 0 1 ] ψ ˙ = [ 1 0 − s i n θ 0 c o s ϕ c o s θ s i n ϕ 0 − s i n ϕ c o s θ c o s ϕ ] [ ϕ ˙ θ ˙ ψ ˙ ] \left[ \begin{matrix} p\\q\\r \end{matrix} \right]= \left[ \begin{matrix} 1\\0\\0 \end{matrix} \right] \dot{\phi}+ R_x(\phi)\left[\begin{matrix}0\\1\\0 \end{matrix} \right]\dot{\theta}+ R_x(\phi)R_y(\theta) \left[\begin{matrix}0\\0\\1 \end{matrix} \right]\dot{\psi} = \left[ \begin{matrix} 1 & 0 & -sin\theta \\ 0 & cos\phi & cos\theta sin\phi \\ 0 & -sin\phi & cos\theta cos\phi \end{matrix} \right] \left[ \begin{matrix} \dot{\phi}\\\dot{\theta}\\\dot{\psi} \end{matrix} \right]\tag{5} pqr=100ϕ˙+Rx(ϕ)010θ˙+Rx(ϕ)Ry(θ)001ψ˙=1000cosϕsinϕsinθcosθsinϕcosθcosϕϕ˙θ˙ψ˙(5)
根据矩阵转置可求得
[ ϕ ˙ θ ˙ ψ ˙ ] = [ 1 t a n θ s i n ϕ t a n θ c o s ϕ 0 c o s ϕ − s i n ϕ 0 − s i n ϕ c o s θ c o s ϕ c o s θ ] [ p q r ] \left[ \begin{matrix} \dot{\phi}\\\dot{\theta}\\\dot{\psi} \end{matrix} \right] = \left[ \begin{matrix} 1 & tan\theta sin\phi & tan\theta cos\phi \\ 0 & cos\phi & -sin\phi \\ 0 & \frac{-sin\phi}{cos\theta} & \frac{cos\phi}{cos\theta} \end{matrix} \right] \left[ \begin{matrix} p\\q\\r \end{matrix} \right] ϕ˙θ˙ψ˙=100tanθsinϕcosϕcosθsinϕtanθcosϕsinϕcosθcosϕpqr

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
飞行器原理介绍: 四飞行器通过调节四个电机转速来改变旋翼转速,实现升力的变化,从而控制飞行器的姿态和位置。结构上,本次应用中使用四飞行器的飞行模式是X 模式,如图所示,四飞行器的四个电机一对正转,一对反转使得垂直方向旋转的反扭矩平衡, 从而保证了飞行的稳定。四飞行器可以用作航拍、玩具等,在我们生活中已经越来越常见。 四飞行器整机正面和背面: 四飞行器硬件结构框图: 四飞行器飞行模式(X 模式) 四飞行器的基本飞行状态可以分为:垂直飞行、水平飞行(俯仰和翻滚)、偏航飞行,详见说明见附件内容。 PID 平衡控制 对于四飞行器平衡控制算法中,电机的转速并不是单独由油门来决定,而是以油门为基准整合上空间三俯仰(Pitch)、翻滚(Roll)和偏航(Yaw)的控制量来决定,如下公式所示。例如,四飞行器机头向下倾斜时(对应俯仰),为了达到平衡,电机3 和电机4 增大转速,电机1 和电机2 减小转速,此时俯仰控制量应该向负增大(控制量的正负由姿态芯片MPU6050 摆放决定)。 上述的三控制量则由本系统中使用的增量式PD 控制得到(PID 控制算法的一种)。以俯仰控制量为例,MPU6050 可以得到空间三旋转角速率,正好是角度的微分,所以可以得到以下计算公式。 由于实际偏航角(Yaw)无法由MPU6050 测得,需要用电子罗盘,但是电子罗盘在四个电机的电磁作用下,精度受影响较大,所以上式中偏航(Yaw)控制量去除比例项,仅由微分项得到。MPU6050 的姿态刷新频率约为10ms 一次。 四飞行器硬件+软件设计分析截图:
一、平衡小车原理: 自平衡小车是利用车模自身动力使小车保持相对的平衡,是一个动态平衡的过程。维持车模平衡的动力来自车轮的运动,由两个直流电机驱动。对车模的控制可以分解为三个控制任务: 1、控制小车平衡:通过控制小车车轮正反转使小车保持直立平衡。 2、控制小车速度:通过控制小车的倾角实现小车前后运动和速度的控制,其实最终的仍是通过控制电机的转速实现。 3、控制小车方向:通过控制小车两个电机之间的转速差来实现转向控制。 分解为三个控制任务显得相对简单一点,但是在最终的控制过程中都归结为对一个控制量的控制,这样三个任务之间就会存在耦合,会相互干扰。三个任务中控制平衡是关键,所以对小车的速度和方向控制应该尽量的平滑。 二、硬件方案设计 小车的硬件分为三个部分,分别是主控部分、小车姿态获取部分以及电机驱动部分。主控板采用目前常用的arduino UNO,同时也可以使用其他arduino通用控制板做主控。 小车姿态获取可以有很多方案,使用最多的就是通过加速度计和陀螺仪获取小车姿态。理论上只需要两加速度计(垂直方向Z和沿小车运动方向X)和一个单陀螺仪(沿小车车轮方向,获取绕小车轮的角速度)。陀螺仪通过角度积分可以获得小车角度,但是经过积分会产生累计误差,并且会越来越大,X与Z加速度计的值也可以算出小车的倾角,但是加速度计的瞬时误差较大,所以结合陀螺仪和加速度计两者获得的角度做数据融合可得真实角度。我们使用一个集成了三加速度计和三陀螺仪的集成芯片MPU6050,这样极大的简化了我们的传感器电路。 小车通过两个直流电机驱动车轮运动来获得动力,直流电机的驱动电路设计关系到整个系统的稳定性,因为电机反转时会产生反向电动势会干扰到电源系统内其他设备的运行。我们选用L298P做电机驱动器,它内部包含4通道逻辑驱动电路,可同时驱动两个直流电机,输出电流可达2.5A。 三、软件设计之小车姿态获取---卡尔曼滤波 在开始之前应该对MPU6050进行设置,主要设置角速度以及加速度的量程,加速度量程有±2g、±4g±8g与±16g,角速度量程分别为±250、±500、±1000与±2000°/sec (dps),可准确的追踪快速动作与慢速动作。在使用之前先设置好量程以便后面的换算。我们小车轮与传感器Y平行,即绕Y旋转则有: 那竖直方向弧度计算公式为: angle = atan2(x, z) //结果以弧度表示并介于 -pi 到 pi 之间(不包括 -pi) 如果要换算成具体角度: angle = atan2(x, z) *(180/3.14) 陀螺仪获取角速度积分得到角度公式为:anglen = anglen-1 + gyronn*dt ,式中anglen 为第N次采样的角度值,anglen-1 为第N-1次的角度值,gyronn为两次采样值之间的角速度值,dt为两次采样之间的时间。然后将换算后的两个角度数据进行卡尔曼滤波融合,可获得小车真实角度,也可以采用更简单的互补滤波算法。 注意加速度计所得角度与陀螺仪积分角度的方向。 四、软件设计之小车姿态调整---PID参数整定 小车的姿态获取最终结果是一个角度,就是小车偏离平衡位置的倾角。通过以小车的这个倾角为变量进行PID控制,输出用于控制车轮转速的PWM值,那么相当于小车只有一个角度反馈环路,虽然能使小车平衡,但是增加了控制难度,所以通常会使用带测速的电机,再加入一个小车速度反馈环路,这样使得小车更容易控制。关于PID的有下面一个简单易懂的描述: 假设我们想把一个小球稳定在一个光滑的坡顶,这显然是一个不平衡的系统,稍有扰动小球就会滚下来。假设恰好平衡的位置坐标是L,我们可以测量到小球的位置是x,那么怎么给小球施加f(x)的力反馈,让它能够平衡呢? 最直观的想法就是f(x) =Kp*(L-x),简单的说就是你在左边我就向右推,你在右边我就向左推,这就是比例因子P; 现在考虑两种情况,同样是在x位置,小球静止和小球具有速度V这两种情况。很明显,如果V>0,我们只需要施加更小的力,因为小球自身的惯性会让它运动向平衡位置。所以可以修正f(x) = Kp*(L-x) – Kd*V。因为速度一般不容易测量,我们常常用位置的变化Δx除以测量的时间差Δt来计算速度,所以这就是微分因子D; 情况继续发生变化,上面考虑的是斜坡静止的情况,如果这个变态的斜坡是移动的怎么办呢?(例如两轮平衡机器人实际上是可以运动的,对于静止的磁悬浮来说,不需要考虑这个参数)这时候我们需要不断的累加并平均x值,来计算平衡位置的L,这个就是积分因子I; 当PID用在我们自平衡小车中时,我们使用角度PD环与速度PI环进行控制。 pwm=angle*k1+angle_dot*k2+range*k3+wheel_speed*k4; PID参数整定步奏如下: 1、将k1,k2,k3,k4均设为0; 2、逐步增大k1,使得小车刚好能够来回摆动。 3、再逐步增大k2,使得小车相对平稳,太大会使小车发生抖动; 4、增大k3,使得小车能够来回走动(不是摆动也不是抖动); 5、增大k4,使得小车能稳定自平衡。 具体参数调整过程比较繁琐,需要自己体会每个参数的作用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值