一、背景
目前有一個無人機自動跟隨輸電線路導線功能需要研發(fā),主要是實現(xiàn)無人機根據(jù)桿塔跟隨導線進行自主巡檢。
自主巡檢為啥不用航線任務(wù)?
1.航線規(guī)劃工作量較大
2.導地線位置會受風偏、覆冰改變,基于規(guī)劃航線開展導地線自主巡檢存在拍不到,或炸機的風險
3.航線任務(wù)只會根據(jù)預設(shè)航點進行巡檢,且過程中無法對無人機位置進行微調(diào),而導線多是不規(guī)則的弧垂狀,所以航線任務(wù)巡檢拍攝的精準度可能存在問題。
二、目的
弄清楚虛擬搖桿功能的原理和實現(xiàn),并分析依賴虛擬搖桿功能是否能滿足無人機自動跟隨導線功能的研發(fā)及存在的難點。
三、過程
虛擬搖桿功能介紹
虛擬搖桿是大疆MSDK中提供的功能,利用此功能可以用代碼對無人機發(fā)送命令操控無人機。目前V4,V5版本都支持此功能。
如何使用虛擬搖桿操控無人機
流程:
1.連接上飛機,切換成 virtualStickControl 模式(需滿足下圖中所述條件才能成功開啟虛擬搖桿模式)
2.發(fā)送 control data
3.結(jié)束后關(guān)閉 virtualStickControl 模式(虛擬搖桿啟動發(fā)送數(shù)據(jù)過程中遙控器搖桿是無效的,所以使用完后記得關(guān)閉虛擬搖桿功能)
FlightControlData數(shù)據(jù)
在開啟虛擬搖桿模式成功后,就可以發(fā)送控制指令了。和遙控器上的兩個搖桿控制能力一樣,你可以控制飛行器的升降、水平旋轉(zhuǎn)、水平方向的前進后退、向左向右。運動指令的參數(shù)是一個FlightControlData 類型的結(jié)構(gòu)體,前面提到可以控制四個維度的運動,因此有四個浮點型的值可以設(shè)置:
[圖片上傳失敗...(image-7b6e18-1667215053280)]
為了讓用戶可以更加靈活的控制飛行器運動,這四個維度的參數(shù)值在不同模式下代表著不同的含義。
[圖片上傳失敗...(image-e18c4d-1667215053280)]
水平方向:
水平方向 X、Y 軸的運動的控制模式是一致的,因此組合在一起,枚舉名叫 RollPitchControlMode。
在設(shè)置水平運動的值時需要先確定此時選擇的參考坐標系。為了更方便的控制姿態(tài),DJI 提供了兩個坐標系:Body Coordinate(機身坐標系) 和 Ground(World) Coordinate(世界坐標系)。
坐標系:
設(shè)置坐標系的方法:flightController.setRollPitchCoordinateSystem(FlightCoordinateSystem.GROUND)
機身坐標系:Body Coordinate
[圖片上傳失敗...(image-fa7a90-1667215053280)]
機身坐標系類似第一人稱視角,飛行器的正前方是 X 軸,與前方垂直的側(cè)面測試 Y 軸。
世界坐標系:Ground(World) Coordinate
[圖片上傳失敗...(image-7880da-1667215053280)]
地面坐標系就像是地面有個控制中心的視角,南北方向是 X 軸,東西方向是 Y 軸。
模式:
RollPitchControlModeAngle(角度)模式
如果是機身坐標系,角度就是機身X、Y軸的旋轉(zhuǎn)角度。取值范圍是 - 30 到 30 度。
如果是地面坐標系,那么就是相對地面的移動角度。
RollPitchControlModeVelocity(速度)模式
X、Y 軸的移動速度,取值范圍 -15 到 15 米每秒。
設(shè)置水平方向模式的方法:flightController.setRollPitchControlMode(RollPitchControlMode.ANGLE);
豎直方向:
模式:
Velocity(速度)模式
調(diào)整高度的速度,取值范圍是 -4 到 4。正的值表示往高處飛,負數(shù)表示下降時的速度。
Position(高度位置)模式
直接設(shè)置想要到達的高度值,取值范圍是 0 到 500 米。也就是說最高可以讓飛行器飛到 500 米的高度。
設(shè)置豎直方向模式的方法:flightController.setVerticalControlMode(VerticalControlMode.POSITION);
旋轉(zhuǎn)方向:
模式
Angle(角度)模式
相對于機頭的旋轉(zhuǎn)角度,取值范圍注意不是 0 - 360,而是 -180 到 180。正的角度表示順時針旋轉(zhuǎn),負的角度值表示逆時針。
AngularVelocity(角速度)模式
旋轉(zhuǎn)時的角速度,取值范圍是 -100 到 100。負數(shù)表示逆時針方向旋轉(zhuǎn)。如果你想要飛行器以個指定的角速度勻速旋轉(zhuǎn),那么應(yīng)該選擇這個模式。
設(shè)置旋轉(zhuǎn)方向模式的方法: flightController.setYawControlMode(YawControlMode.ANGLE);;
發(fā)送指令
VirtualStick API 設(shè)計參照的是遙控器操縱桿的通訊方式,比如你把一個搖桿往上推,飛行器此時對應(yīng)的操作是升高。那么在你往上推的時刻,遙控器是以一個頻率持續(xù)給飛行器發(fā)送升高指令。在你松開的時候,搖桿回到中心,指令停止。并不是只發(fā)送了一條指令。和這個場景類似,如果你要控制飛行器運動,你的指令也應(yīng)該是持續(xù)發(fā)送的。官方給出的發(fā)送頻率是 10 到 25 赫茲。換算一下,那么程序應(yīng)該以 0.04 秒 - 0.1 秒的頻率就發(fā)送一次控制指令。
使用虛擬搖桿是否能控制無人機精準停靠
由于虛擬搖桿只能控制無人機以設(shè)定的速度前進,關(guān)于是否需要考慮無人機從靜止到設(shè)定速度的加速,減速及慣性等因素,對此疑問進行了相關(guān)測試。
1.設(shè)定0.5m/s的速度,持續(xù)發(fā)送指令10s,無人機執(zhí)行完命令停止后與起始點距離4.68米。
2.設(shè)定1m/s的速度,持續(xù)發(fā)送指令10s,無人機執(zhí)行完命令停止后與起始點距離9米。
3.設(shè)定2m/s的速度,持續(xù)發(fā)送指令10s,無人機執(zhí)行完命令停止后與起始點距離17.1米。
4.設(shè)定3m/s的速度,持續(xù)發(fā)送指令10s,無人機執(zhí)行完命令停止后與起始點距離24.7米。
以上均為使用模擬器測試的結(jié)果,且同條件下多次測試結(jié)果相差在厘米級。
四、總結(jié)
虛擬搖桿和遙控器搖桿功能類似,也只能控制無人機朝某個方向以設(shè)定的速度前進,如果要讓無人機精準的停在某個位置,需要通過坐標軸計算出無人機當前的位置和目標位置之間的矢量,然后給無人機傳入相同方向的速度矢量,同時不斷監(jiān)聽無人機的位置,當無人機快要達到目標的時候開始減速,其中涉及一些算法還需要后期去測試完善。