我正在使用以下代码尝试初始化Waypoint任务并将其加载到飞机(DJI Mavic Air)上。
我首先检查航路点处理程序的状态,然后初始化一个航路点,将其添加到列表中,然后将该列表包括在已初始化的航路点任务中。然后运行将航点任务加载到飞机的方法,然后检查状态。调试的输出如下所示:
航点状态= READY_TO_UPLOAD;
新航点位置-55.555549621582,0.555555522441864
加载任务返回值-INVALID_REQUEST_IN_CURRENT_STATE
航点状态= READY_TO_UPLOAD
READY_TO_UPLOAD的状态表明,根据Windows SDK文档上载路点任务处于适当的状态,但是显然上载失败并且状态保持不变。
为了使航点任务成功加载,需要进行哪些更改才能由飞机运行?
//Check the initial state of the waypoint handler
var currentState = DJISDKManager.Instance.WaypointMissionManager.GetWaypointMissionHandler(0).GetCurrentState();
Debug.WriteLine("Waypoint state = {0}", currentState);
//Initialise new location coordinate
randomLocation.X = 55.55555;
randomLocation.Y = 0.55555555;
Debug.WriteLine("New waypoint location - {0},{1}", randomLocation.X, randomLocation.Y);
LocationCoordinate2D waypointLocation = new LocationCoordinate2D { latitude = randomLocation.X, longitude = randomLocation.Y };
// Create a waypoint instance and add to waypoint list
Waypoint waypoint = new Waypoint { location = waypointLocation };
waypointList.Add(waypoint);
//Create new waypoint mission instance and load in the waypoint list
WaypointMission waypointMission = new WaypointMission
{
waypointCount = 1,
autoFlightSpeed = 2.5,
finishedAction = WaypointMissionFinishedAction.NO_ACTION,
headingMode = WaypointMissionHeadingMode.USING_WAYPOINT_HEADING,
flightPathMode = WaypointMissionFlightPathMode.CURVED,
repeatTimes = 0,
waypoints = waypointList,
missionID = 1
};
//load the waypoint mission to the aircraft and check the current state
var load_retval = DJISDKManager.Instance.WaypointMissionManager.GetWaypointMissionHandler(0).LoadMission(waypointMission); ;
Debug.WriteLine("Load mission return value - {0}", load_retval);
currentState = DJISDKManager.Instance.WaypointMissionManager.GetWaypointMissionHandler(0).GetCurrentState();
Debug.WriteLine("Waypoint state = {0}", currentState);
经过漫长的曲折和错误,我弄清楚了开始航点任务所需的步骤:
将SDK设置为地面站模式
首先,您必须使用以下方法将SDK设置为地面站模式:
DJISDKManager.Instance.ComponentManager.GetFlightControllerHandler(0, 0).SetGroundStationModeEnabledAsync(new BoolMsg() { value = true })
载入任务
其次,您必须使用以下方法将航点任务加载到SDK:
DJISDKManager.Instance.WaypointMissionManager.GetWaypointMissionHandler(0).
LoadMission(waypointMission)
waypointMission
您的问题中的路标任务可能在哪里?这个Waypoit任务必须遵循一些限制。例如,总距离不能太长(不确定确切的数字是多少)。如果任务有问题,此方法将返回SDKError。
将航路点任务上传到无人机
任务加载到SDK之后,仍然必须将其上传到无人机。这可以通过以下方法完成:
DJISDKManager.Instance.WaypointMissionManager.GetWaypointMissionHandler(0).
UploadMission()
(可选)说明模拟器
此时,如果您不希望无人机真正起飞,则可以启动模拟模式。可以使用以下代码完成此操作:
FlightControllerHandler _flightControllerHandler = DJISDKManager.Instance.ComponentManager.GetFlightControllerHandler(0, 0);
var simSettings = new SimulatorInitializationSettings()
{
latitude = 0,
longitude = 0,
satelliteCount = 12
};
await _flightControllerHandler.StartSimulatorAsync(simSettings);
重要的satelliteCount
是大于10。否则,SDK会给出错误和GPS信号强度不够好的错误。
开始任务Finaly,您可以按照以下步骤开始路点任务
DJISDKManager.Instance.WaypointMissionManager.GetWaypointMissionHandler(0).StartMission()
其他注意事项:
async
已经等待,并且最好等待。即使您等待呼叫,我也注意到在方法完成时上传任务仍无法完成。因此,如果您StartMission()
在UploadMission()
此之后立即致电,可能会导致INVALID_REQUEST_IN_CURRENT_STATE
我通过使用一个单独的按钮来加载和启动任务来解决此问题。这样,我可以等待任务上传后再开始执行任务。
以上所有方法都返回一个SDKError
类型。如果一切顺利,那么NO_ERROR
检查每个呼叫是否都是重要的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句