大疆MSDK虚拟摇杆功能介绍

一、背景

目前有一个无人机自动跟随输电线路导线功能需要研发,主要是实现无人机根据杆塔跟随导线进行自主巡检。

自主巡检为啥不用航线任务?

1.航线规划工作量较大
2.导地线位置会受风偏、覆冰改变,基于规划航线开展导地线自主巡检存在拍不到,或炸机的风险
3.航线任务只会根据预设航点进行巡检,且过程中无法对无人机位置进行微调,而导线多是不规则的弧垂状,所以航线任务巡检拍摄的精准度可能存在问题。

二、目的

弄清楚虚拟摇杆功能的原理和实现,并分析依赖虚拟摇杆功能是否能满足无人机自动跟随导线功能的研发及存在的难点。

三、过程

虚拟摇杆功能介绍

虚拟摇杆是大疆MSDK中提供的功能,利用此功能可以用代码对无人机发送命令操控无人机。目前V4,V5版本都支持此功能。

如何使用虚拟摇杆操控无人机

流程:

1.连接上飞机,切换成 virtualStickControl 模式(需满足下图中所述条件才能成功开启虚拟摇杆模式)
2.发送 control data
3.结束后关闭 virtualStickControl 模式(虚拟摇杆启动发送数据过程中遥控器摇杆是无效的,所以使用完后记得关闭虚拟摇杆功能)

FlightControlData数据

在开启虚拟摇杆模式成功后,就可以发送控制指令了。和遥控器上的两个摇杆控制能力一样,你可以控制飞行器的升降、水平旋转、水平方向的前进后退、向左向右。运动指令的参数是一个FlightControlData 类型的结构体,前面提到可以控制四个维度的运动,因此有四个浮点型的值可以设置:
[图片上传失败...(image-7b6e18-1667215053280)]
为了让用户可以更加灵活的控制飞行器运动,这四个维度的参数值在不同模式下代表着不同的含义。
[图片上传失败...(image-e18c4d-1667215053280)]

水平方向:

水平方向 X、Y 轴的运动的控制模式是一致的,因此组合在一起,枚举名叫 RollPitchControlMode。
在设置水平运动的值时需要先确定此时选择的参考坐标系。为了更方便的控制姿态,DJI 提供了两个坐标系:Body Coordinate(机身坐标系) 和 Ground(World) Coordinate(世界坐标系)。

坐标系:

设置坐标系的方法:flightController.setRollPitchCoordinateSystem(FlightCoordinateSystem.GROUND)

机身坐标系:Body Coordinate

[图片上传失败...(image-fa7a90-1667215053280)]
机身坐标系类似第一人称视角,飞行器的正前方是 X 轴,与前方垂直的侧面测试 Y 轴。

世界坐标系:Ground(World) Coordinate

[图片上传失败...(image-7880da-1667215053280)]
地面坐标系就像是地面有个控制中心的视角,南北方向是 X 轴,东西方向是 Y 轴。

模式:
RollPitchControlModeAngle(角度)模式

如果是机身坐标系,角度就是机身X、Y轴的旋转角度。取值范围是 - 30 到 30 度。
如果是地面坐标系,那么就是相对地面的移动角度。

RollPitchControlModeVelocity(速度)模式

X、Y 轴的移动速度,取值范围 -15 到 15 米每秒。

设置水平方向模式的方法:flightController.setRollPitchControlMode(RollPitchControlMode.ANGLE);

竖直方向:

模式:
Velocity(速度)模式

调整高度的速度,取值范围是 -4 到 4。正的值表示往高处飞,负数表示下降时的速度。

Position(高度位置)模式

直接设置想要到达的高度值,取值范围是 0 到 500 米。也就是说最高可以让飞行器飞到 500 米的高度。

设置竖直方向模式的方法:flightController.setVerticalControlMode(VerticalControlMode.POSITION);

旋转方向:

模式
Angle(角度)模式

相对于机头的旋转角度,取值范围注意不是 0 - 360,而是 -180 到 180。正的角度表示顺时针旋转,负的角度值表示逆时针。

AngularVelocity(角速度)模式

旋转时的角速度,取值范围是 -100 到 100。负数表示逆时针方向旋转。如果你想要飞行器以个指定的角速度匀速旋转,那么应该选择这个模式。

设置旋转方向模式的方法: flightController.setYawControlMode(YawControlMode.ANGLE);;

发送指令

VirtualStick API 设计参照的是遥控器操纵杆的通讯方式,比如你把一个摇杆往上推,飞行器此时对应的操作是升高。那么在你往上推的时刻,遥控器是以一个频率持续给飞行器发送升高指令。在你松开的时候,摇杆回到中心,指令停止。并不是只发送了一条指令。和这个场景类似,如果你要控制飞行器运动,你的指令也应该是持续发送的。官方给出的发送频率是 10 到 25 赫兹。换算一下,那么程序应该以 0.04 秒 - 0.1 秒的频率就发送一次控制指令。

使用虚拟摇杆是否能控制无人机精准停靠

由于虚拟摇杆只能控制无人机以设定的速度前进,关于是否需要考虑无人机从静止到设定速度的加速,减速及惯性等因素,对此疑问进行了相关测试。
1.设定0.5m/s的速度,持续发送指令10s,无人机执行完命令停止后与起始点距离4.68米。
2.设定1m/s的速度,持续发送指令10s,无人机执行完命令停止后与起始点距离9米。
3.设定2m/s的速度,持续发送指令10s,无人机执行完命令停止后与起始点距离17.1米。
4.设定3m/s的速度,持续发送指令10s,无人机执行完命令停止后与起始点距离24.7米。

以上均为使用模拟器测试的结果,且同条件下多次测试结果相差在厘米级。

四、总结

虚拟摇杆和遥控器摇杆功能类似,也只能控制无人机朝某个方向以设定的速度前进,如果要让无人机精准的停在某个位置,需要通过坐标轴计算出无人机当前的位置和目标位置之间的矢量,然后给无人机传入相同方向的速度矢量,同时不断监听无人机的位置,当无人机快要达到目标的时候开始减速,其中涉及一些算法还需要后期去测试完善。

你可能感兴趣的:(大疆MSDK虚拟摇杆功能介绍)