手持无刷云台三轴全角度到底有多少坑

手持无刷三轴稳定器的全角度

玩过无人机和无刷电机,再转云台的第一印象就是:
手持云台就是无刷电机+姿态解算+姿态控制;刚好就是无人机姿态控制和无刷电机的集合体。
再入坑三轴稳定器就会发现:无刷电机+姿态控制只是完成了云台的最基本的控制,一不小心云台就会乱串乱动。哈哈哈!
于是尝试这解决这一些列的问题,于是进入到全角度控制:

姿态解算的全角度

欧拉角有全角度吗?很显然欧拉角没有办法识别全角度,但是四元素可以表示全角度。三个电机的霍尔传感器,磁编码器可以表示全角度,陀螺仪积分可以表示全角度。既然这么多条件都可以表示全角度,那全角度控制就不是问题啦。

四元素表示全角度

细心研究姿态解算的伙伴可以发现:四元素在机子旋转到每一个方位的时候,Q1 Q2 Q3 Q4都会有不同的数值,这些不同的数值组合就可以表示全角度。
1、欧拉角由余弦向量表示
2、余弦向量可以表示全角度
所以想要做全角度就需要了解余弦向量的原理。

陀螺仪直接积分

陀螺仪直接积分就是很好的一个表示全角度的方法,唯一的缺点就是陀螺仪积分会产生漂移。所以怎样跟余弦向量组合一起又是一个学问了。

三轴共轴的坑

跑完了全角度的坑,接下来简单介绍下共轴的坑。以大疆灵眸三为例:假如挂手机那个电机是电机1,中间电机是电机2,手柄那里那个电机是电机3.(此处没有图片,只能自行脑补了)。当电机2转角足够大时,电机1的控制旋转方向刚好跟电机3的重合,这个就是共轴,所以共轴时三轴就变成了两轴,而且稳定性控制直接下降,处理的不好会导致电机乱动。
目前解决的办法就是电机二偏离重心角过大时实现自动跟随功能,防止角度过大而与电机3控制方向重合。

三轴全角度控制的象限

为了更好的分析在某些角度的时候出现的电机乱动现象。我把三轴云台分成几个部分.以开机回中时各个电机的角度为0°。则电机1分为:
1、电机1角度在[-45°,45°]
2、电机1角度在[45°,135°]
3、电机1角度在[135°,180°]和[-180°,-135°]
4、电机1角度在[-135°,-45°]
电机2也分为这四种状态
1、电机1角度在[-45°,45°]
2、电机1角度在[45°,135°]
3、电机1角度在[135°,180°]和[-180°,-135°]
4、电机1角度在[-135°,-45°]
欧拉角pitch也分为四种状态
1、pitch角度在[-45°,45°]
2、pitch角度在[45°,135°]
3、pitch角度在[135°,180°]和[-180°,-135°]
4、pitch角度在[-135°,-45°]
然后分完这些状态之后,需要解决的问题就是在某种状态下的共轴跟随,打杆处理、跟随模式的跟随。虽然有些状态这些处理是一样的,但是为了清晰明了,我还是分了这么多的状态,要不下次自己再看程序,都不知道自己到底写了个啥。

陀螺仪角速度转换到各个电机的角速度

若云台是正交的结构,那么电机角度都回到零度的时候,相对应的陀螺仪的XYZ轴可以跟电机123对应,但是当电机角度不是0°的时候,这个一一对应关系将被打破,所以先要做坐标变换。变换细节就要自己去摸索了,这里暂时不介绍。毕竟这个跟结构有关系。

欧拉角对应电机外环角度

欧拉角对应电机外环角度也需要做变换,并且在电机从小角度切换到大角度时怎么能顺畅的切换,这个我也是碰了很久的坑:
1、若单纯的使用sin cos变换的话就会出现角度不是0°时某一个轴动的时候会引起其他轴联动
2、根据电机切换到角度判断欧拉角与电机的对应关系时需要注意航向角可不为0,切换过去时需要以0°角切换
3、共轴、跟随时也需要切换
总之也都碰了很久的坑。

电机存在限位

目前市面上的手持云台,一般电机都带有限位,当电机达到限位时又需要做什么样子的处理呢;
1、电机1达到限位,需要切换横竖屏
2、电机2达到限位:
电机2达到限位时基本达到共轴的条件,这时需要做共轴处理
3、电机3达到限位:
电机1、2角度均为零度
俯仰轴属于大角度(大疆的有做处理,其他牌子暂时未发现处理的)

  • 7
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
对于三轴云台的 MATLAB 模型,你可以使用刚体动力学原理来建立模型。以下是一个简单的三轴云台的 MATLAB 模型示例: ```matlab % 定义系统参数 m = 1; % 云台质量 l = 0.5; % 云台长度 g = 9.8; % 重力加速度 % 定义初始条件 theta = pi/4; % 云台初始角度 theta_dot = 0; % 云台初始角速度 phi = pi/6; % 摄像头初始角度 phi_dot = 0; % 摄像头初始角速度 % 定义控制输入 tau_theta = 0; % 云台控制输入力矩 tau_phi = 0; % 摄像头控制输入力矩 % 定义模型参数 I_theta = (1/3) * m * l^2; % 云台转动惯量 I_phi = (1/12) * m * l^2; % 摄像头转动惯量 % 定义系统动力学方程 syms theta_ddot phi_ddot; eq1 = I_theta * theta_ddot + m * g * l * sin(theta) == tau_theta; eq2 = I_phi * phi_ddot == tau_phi; % 解动力学方程 sol = solve(eq1, eq2, theta_ddot, phi_ddot); % 将解析解转换为函数 theta_ddot_func = matlabFunction(sol.theta_ddot); phi_ddot_func = matlabFunction(sol.phi_ddot); % 定义时间范围和时间步长 t = 0:0.01:10; % 模拟系统响应 theta_dot = zeros(size(t)); phi_dot = zeros(size(t)); theta = zeros(size(t)); phi = zeros(size(t)); for i = 2:length(t) % 计算角加速度 theta_ddot = theta_ddot_func(theta(i-1), phi(i-1), tau_theta); phi_ddot = phi_ddot_func(theta(i-1), phi(i-1), tau_phi); % 更新角速度和角度 theta_dot(i) = theta_dot(i-1) + theta_ddot * (t(i) - t(i-1)); phi_dot(i) = phi_dot(i-1) + phi_ddot * (t(i) - t(i-1)); theta(i) = theta(i-1) + theta_dot(i) * (t(i) - t(i-1)); phi(i) = phi(i-1) + phi_dot(i) * (t(i) - t(i-1)); end % 绘制云台和摄像头的角度随时间的变化曲线 figure; subplot(2,1,1); plot(t, theta); xlabel('时间 (s)'); ylabel('云台角度 (rad)'); title('云台角度随时间的变化'); subplot(2,1,2); plot(t, phi); xlabel('时间 (s)'); ylabel('摄像头角度 (rad)'); title('摄像头角度随时间的变化'); ``` 这个示例代码通过求解刚体动力学方程,模拟了三轴云台系统在给定控制输入下的角度随时间的变化。你可以通过修改控制输入和初始条件来进一步研究系统的响应行为。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值