Payload-SDK
Payload-SDK copied to clipboard
Editing Waypoint Files
Hello, I am trying to edit waypoint files in real time during flight so that I can checkpoint a particular mission and resume it later from half the way as suggested here: https://github.com/dji-sdk/Payload-SDK/issues/171
Let's say I have a waypoint mission KMZ file 1 with its wpml file being:
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:wpml="http://www.dji.com/wpmz/1.0.5">
<Document>
<wpml:missionConfig>
<wpml:flyToWaylineMode>safely</wpml:flyToWaylineMode>
<wpml:finishAction>goHome</wpml:finishAction>
<wpml:exitOnRCLost>executeLostAction</wpml:exitOnRCLost>
<wpml:executeRCLostAction>goBack</wpml:executeRCLostAction>
<wpml:takeOffSecurityHeight>20</wpml:takeOffSecurityHeight>
<wpml:globalTransitionalSpeed>6.70570850372314</wpml:globalTransitionalSpeed>
<wpml:droneInfo>
<wpml:droneEnumValue>67</wpml:droneEnumValue>
<wpml:droneSubEnumValue>1</wpml:droneSubEnumValue>
</wpml:droneInfo>
<wpml:payloadInfo>
<wpml:payloadEnumValue>53</wpml:payloadEnumValue>
<wpml:payloadSubEnumValue>0</wpml:payloadSubEnumValue>
<wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
</wpml:payloadInfo>
</wpml:missionConfig>
<Folder>
<wpml:templateId>0</wpml:templateId>
<wpml:executeHeightMode>relativeToStartPoint</wpml:executeHeightMode>
<wpml:waylineId>0</wpml:waylineId>
<wpml:distance>63.4997634887695</wpml:distance>
<wpml:duration>46.82470703125</wpml:duration>
<wpml:autoFlightSpeed>2.23523616790771</wpml:autoFlightSpeed>
<Placemark>
<Point>
<coordinates>
18.0648833227148,59.3520630245224
</coordinates>
</Point>
<wpml:index>0</wpml:index>
<wpml:executeHeight>57.3335762023926</wpml:executeHeight>
<wpml:waypointSpeed>2.23523616790771</wpml:waypointSpeed>
<wpml:waypointHeadingParam>
<wpml:waypointHeadingMode>followWayline</wpml:waypointHeadingMode>
<wpml:waypointHeadingAngle>0</wpml:waypointHeadingAngle>
<wpml:waypointPoiPoint>0.000000,0.000000,0.000000</wpml:waypointPoiPoint>
<wpml:waypointHeadingAngleEnable>0</wpml:waypointHeadingAngleEnable>
<wpml:waypointHeadingPoiIndex>0</wpml:waypointHeadingPoiIndex>
</wpml:waypointHeadingParam>
<wpml:waypointTurnParam>
<wpml:waypointTurnMode>toPointAndStopWithDiscontinuityCurvature</wpml:waypointTurnMode>
<wpml:waypointTurnDampingDist>0</wpml:waypointTurnDampingDist>
</wpml:waypointTurnParam>
<wpml:useStraightLine>1</wpml:useStraightLine>
<wpml:waypointGimbalHeadingParam>
<wpml:waypointGimbalPitchAngle>0</wpml:waypointGimbalPitchAngle>
<wpml:waypointGimbalYawAngle>0</wpml:waypointGimbalYawAngle>
</wpml:waypointGimbalHeadingParam>
<wpml:isRisky>0</wpml:isRisky>
</Placemark>
<Placemark>
<Point>
<coordinates>
18.0648711087943,59.3519900857892
</coordinates>
</Point>
<wpml:index>1</wpml:index>
<wpml:executeHeight>57.3335762023926</wpml:executeHeight>
<wpml:waypointSpeed>2.23523616790771</wpml:waypointSpeed>
<wpml:waypointHeadingParam>
<wpml:waypointHeadingMode>followWayline</wpml:waypointHeadingMode>
<wpml:waypointHeadingAngle>0</wpml:waypointHeadingAngle>
<wpml:waypointPoiPoint>0.000000,0.000000,0.000000</wpml:waypointPoiPoint>
<wpml:waypointHeadingAngleEnable>0</wpml:waypointHeadingAngleEnable>
<wpml:waypointHeadingPoiIndex>0</wpml:waypointHeadingPoiIndex>
</wpml:waypointHeadingParam>
<wpml:waypointTurnParam>
<wpml:waypointTurnMode>toPointAndStopWithDiscontinuityCurvature</wpml:waypointTurnMode>
<wpml:waypointTurnDampingDist>0</wpml:waypointTurnDampingDist>
</wpml:waypointTurnParam>
<wpml:useStraightLine>1</wpml:useStraightLine>
<wpml:waypointGimbalHeadingParam>
<wpml:waypointGimbalPitchAngle>0</wpml:waypointGimbalPitchAngle>
<wpml:waypointGimbalYawAngle>0</wpml:waypointGimbalYawAngle>
</wpml:waypointGimbalHeadingParam>
<wpml:isRisky>0</wpml:isRisky>
</Placemark>
<Placemark>
<Point>
<coordinates>
18.0647745995331,59.351949647703
</coordinates>
</Point>
<wpml:index>2</wpml:index>
<wpml:executeHeight>57.3335762023926</wpml:executeHeight>
<wpml:waypointSpeed>2.23523616790771</wpml:waypointSpeed>
<wpml:waypointHeadingParam>
<wpml:waypointHeadingMode>followWayline</wpml:waypointHeadingMode>
<wpml:waypointHeadingAngle>0</wpml:waypointHeadingAngle>
<wpml:waypointPoiPoint>0.000000,0.000000,0.000000</wpml:waypointPoiPoint>
<wpml:waypointHeadingAngleEnable>0</wpml:waypointHeadingAngleEnable>
<wpml:waypointHeadingPoiIndex>0</wpml:waypointHeadingPoiIndex>
</wpml:waypointHeadingParam>
<wpml:waypointTurnParam>
<wpml:waypointTurnMode>toPointAndStopWithDiscontinuityCurvature</wpml:waypointTurnMode>
<wpml:waypointTurnDampingDist>0</wpml:waypointTurnDampingDist>
</wpml:waypointTurnParam>
<wpml:useStraightLine>1</wpml:useStraightLine>
<wpml:waypointGimbalHeadingParam>
<wpml:waypointGimbalPitchAngle>0</wpml:waypointGimbalPitchAngle>
<wpml:waypointGimbalYawAngle>0</wpml:waypointGimbalYawAngle>
</wpml:waypointGimbalHeadingParam>
<wpml:isRisky>0</wpml:isRisky>
</Placemark>
<Placemark>
<Point>
<coordinates>
18.0646019551606,59.3519441830862
</coordinates>
</Point>
<wpml:index>3</wpml:index>
<wpml:executeHeight>57.3335762023926</wpml:executeHeight>
<wpml:waypointSpeed>2.23523616790771</wpml:waypointSpeed>
<wpml:waypointHeadingParam>
<wpml:waypointHeadingMode>followWayline</wpml:waypointHeadingMode>
<wpml:waypointHeadingAngle>0</wpml:waypointHeadingAngle>
<wpml:waypointPoiPoint>0.000000,0.000000,0.000000</wpml:waypointPoiPoint>
<wpml:waypointHeadingAngleEnable>0</wpml:waypointHeadingAngleEnable>
<wpml:waypointHeadingPoiIndex>0</wpml:waypointHeadingPoiIndex>
</wpml:waypointHeadingParam>
<wpml:waypointTurnParam>
<wpml:waypointTurnMode>toPointAndStopWithDiscontinuityCurvature</wpml:waypointTurnMode>
<wpml:waypointTurnDampingDist>0</wpml:waypointTurnDampingDist>
</wpml:waypointTurnParam>
<wpml:useStraightLine>1</wpml:useStraightLine>
<wpml:waypointGimbalHeadingParam>
<wpml:waypointGimbalPitchAngle>0</wpml:waypointGimbalPitchAngle>
<wpml:waypointGimbalYawAngle>0</wpml:waypointGimbalYawAngle>
</wpml:waypointGimbalHeadingParam>
<wpml:isRisky>0</wpml:isRisky>
</Placemark>
<Placemark>
<Point>
<coordinates>
18.0644947226768,59.3520272451001
</coordinates>
</Point>
<wpml:index>4</wpml:index>
<wpml:executeHeight>57.3335762023926</wpml:executeHeight>
<wpml:waypointSpeed>2.23523616790771</wpml:waypointSpeed>
<wpml:waypointHeadingParam>
<wpml:waypointHeadingMode>followWayline</wpml:waypointHeadingMode>
<wpml:waypointHeadingAngle>0</wpml:waypointHeadingAngle>
<wpml:waypointPoiPoint>0.000000,0.000000,0.000000</wpml:waypointPoiPoint>
<wpml:waypointHeadingAngleEnable>0</wpml:waypointHeadingAngleEnable>
<wpml:waypointHeadingPoiIndex>0</wpml:waypointHeadingPoiIndex>
</wpml:waypointHeadingParam>
<wpml:waypointTurnParam>
<wpml:waypointTurnMode>toPointAndStopWithDiscontinuityCurvature</wpml:waypointTurnMode>
<wpml:waypointTurnDampingDist>0</wpml:waypointTurnDampingDist>
</wpml:waypointTurnParam>
<wpml:useStraightLine>1</wpml:useStraightLine>
<wpml:waypointGimbalHeadingParam>
<wpml:waypointGimbalPitchAngle>0</wpml:waypointGimbalPitchAngle>
<wpml:waypointGimbalYawAngle>0</wpml:waypointGimbalYawAngle>
</wpml:waypointGimbalHeadingParam>
<wpml:isRisky>0</wpml:isRisky>
</Placemark>
<Placemark>
<Point>
<coordinates>
18.0645494112785,59.3521185037344
</coordinates>
</Point>
<wpml:index>5</wpml:index>
<wpml:executeHeight>57.3335762023926</wpml:executeHeight>
<wpml:waypointSpeed>2.23523616790771</wpml:waypointSpeed>
<wpml:waypointHeadingParam>
<wpml:waypointHeadingMode>followWayline</wpml:waypointHeadingMode>
<wpml:waypointHeadingAngle>0</wpml:waypointHeadingAngle>
<wpml:waypointPoiPoint>0.000000,0.000000,0.000000</wpml:waypointPoiPoint>
<wpml:waypointHeadingAngleEnable>0</wpml:waypointHeadingAngleEnable>
<wpml:waypointHeadingPoiIndex>0</wpml:waypointHeadingPoiIndex>
</wpml:waypointHeadingParam>
<wpml:waypointTurnParam>
<wpml:waypointTurnMode>toPointAndStopWithDiscontinuityCurvature</wpml:waypointTurnMode>
<wpml:waypointTurnDampingDist>0</wpml:waypointTurnDampingDist>
</wpml:waypointTurnParam>
<wpml:useStraightLine>1</wpml:useStraightLine>
<wpml:waypointGimbalHeadingParam>
<wpml:waypointGimbalPitchAngle>0</wpml:waypointGimbalPitchAngle>
<wpml:waypointGimbalYawAngle>0</wpml:waypointGimbalYawAngle>
</wpml:waypointGimbalHeadingParam>
<wpml:isRisky>0</wpml:isRisky>
</Placemark>
<Placemark>
<Point>
<coordinates>
18.0646802349397,59.3521474660272
</coordinates>
</Point>
<wpml:index>6</wpml:index>
<wpml:executeHeight>57.3335762023926</wpml:executeHeight>
<wpml:waypointSpeed>2.23523616790771</wpml:waypointSpeed>
<wpml:waypointHeadingParam>
<wpml:waypointHeadingMode>followWayline</wpml:waypointHeadingMode>
<wpml:waypointHeadingAngle>0</wpml:waypointHeadingAngle>
<wpml:waypointPoiPoint>0.000000,0.000000,0.000000</wpml:waypointPoiPoint>
<wpml:waypointHeadingAngleEnable>0</wpml:waypointHeadingAngleEnable>
<wpml:waypointHeadingPoiIndex>0</wpml:waypointHeadingPoiIndex>
</wpml:waypointHeadingParam>
<wpml:waypointTurnParam>
<wpml:waypointTurnMode>toPointAndStopWithDiscontinuityCurvature</wpml:waypointTurnMode>
<wpml:waypointTurnDampingDist>0</wpml:waypointTurnDampingDist>
</wpml:waypointTurnParam>
<wpml:useStraightLine>1</wpml:useStraightLine>
<wpml:waypointGimbalHeadingParam>
<wpml:waypointGimbalPitchAngle>0</wpml:waypointGimbalPitchAngle>
<wpml:waypointGimbalYawAngle>0</wpml:waypointGimbalYawAngle>
</wpml:waypointGimbalHeadingParam>
<wpml:isRisky>0</wpml:isRisky>
</Placemark>
<Placemark>
<Point>
<coordinates>
18.0648221683054,59.3521171690377
</coordinates>
</Point>
<wpml:index>7</wpml:index>
<wpml:executeHeight>57.3335762023926</wpml:executeHeight>
<wpml:waypointSpeed>2.23523616790771</wpml:waypointSpeed>
<wpml:waypointHeadingParam>
<wpml:waypointHeadingMode>followWayline</wpml:waypointHeadingMode>
<wpml:waypointHeadingAngle>0</wpml:waypointHeadingAngle>
<wpml:waypointPoiPoint>0.000000,0.000000,0.000000</wpml:waypointPoiPoint>
<wpml:waypointHeadingAngleEnable>0</wpml:waypointHeadingAngleEnable>
<wpml:waypointHeadingPoiIndex>0</wpml:waypointHeadingPoiIndex>
</wpml:waypointHeadingParam>
<wpml:waypointTurnParam>
<wpml:waypointTurnMode>toPointAndStopWithDiscontinuityCurvature</wpml:waypointTurnMode>
<wpml:waypointTurnDampingDist>0</wpml:waypointTurnDampingDist>
</wpml:waypointTurnParam>
<wpml:useStraightLine>1</wpml:useStraightLine>
<wpml:waypointGimbalHeadingParam>
<wpml:waypointGimbalPitchAngle>0</wpml:waypointGimbalPitchAngle>
<wpml:waypointGimbalYawAngle>0</wpml:waypointGimbalYawAngle>
</wpml:waypointGimbalHeadingParam>
<wpml:isRisky>0</wpml:isRisky>
</Placemark>
</Folder>
</Document>
</kml>
Let's say I want to create a new mission using the 2nd half of this mission where we start from the waypoint index 4 (5th waypoint) and continue till waypoint index 7 (8th waypoint). Thus, the new mission has 4 waypoints. To represent this I just edited my waypoint mission in the RC and created a new KMZ file with the waylines.wpml content as:
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:wpml="http://www.dji.com/wpmz/1.0.5">
<Document>
<wpml:missionConfig>
<wpml:flyToWaylineMode>safely</wpml:flyToWaylineMode>
<wpml:finishAction>goHome</wpml:finishAction>
<wpml:exitOnRCLost>executeLostAction</wpml:exitOnRCLost>
<wpml:executeRCLostAction>goBack</wpml:executeRCLostAction>
<wpml:takeOffSecurityHeight>20</wpml:takeOffSecurityHeight>
<wpml:globalTransitionalSpeed>6.70570850372314</wpml:globalTransitionalSpeed>
<wpml:droneInfo>
<wpml:droneEnumValue>67</wpml:droneEnumValue>
<wpml:droneSubEnumValue>1</wpml:droneSubEnumValue>
</wpml:droneInfo>
<wpml:payloadInfo>
<wpml:payloadEnumValue>53</wpml:payloadEnumValue>
<wpml:payloadSubEnumValue>0</wpml:payloadSubEnumValue>
<wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
</wpml:payloadInfo>
</wpml:missionConfig>
<Folder>
<wpml:templateId>0</wpml:templateId>
<wpml:executeHeightMode>relativeToStartPoint</wpml:executeHeightMode>
<wpml:waylineId>0</wpml:waylineId>
<wpml:distance>27.4170398712158</wpml:distance>
<wpml:duration>20.1444892883301</wpml:duration>
<wpml:autoFlightSpeed>2.23523616790771</wpml:autoFlightSpeed>
<Placemark>
<Point>
<coordinates>
18.0644947226768,59.3520272451001
</coordinates>
</Point>
<wpml:index>0</wpml:index>
<wpml:executeHeight>57.3335762023926</wpml:executeHeight>
<wpml:waypointSpeed>2.23523616790771</wpml:waypointSpeed>
<wpml:waypointHeadingParam>
<wpml:waypointHeadingMode>followWayline</wpml:waypointHeadingMode>
<wpml:waypointHeadingAngle>0</wpml:waypointHeadingAngle>
<wpml:waypointPoiPoint>0.000000,0.000000,0.000000</wpml:waypointPoiPoint>
<wpml:waypointHeadingAngleEnable>0</wpml:waypointHeadingAngleEnable>
<wpml:waypointHeadingPoiIndex>0</wpml:waypointHeadingPoiIndex>
</wpml:waypointHeadingParam>
<wpml:waypointTurnParam>
<wpml:waypointTurnMode>toPointAndStopWithDiscontinuityCurvature</wpml:waypointTurnMode>
<wpml:waypointTurnDampingDist>0</wpml:waypointTurnDampingDist>
</wpml:waypointTurnParam>
<wpml:useStraightLine>1</wpml:useStraightLine>
<wpml:waypointGimbalHeadingParam>
<wpml:waypointGimbalPitchAngle>0</wpml:waypointGimbalPitchAngle>
<wpml:waypointGimbalYawAngle>0</wpml:waypointGimbalYawAngle>
</wpml:waypointGimbalHeadingParam>
<wpml:isRisky>0</wpml:isRisky>
</Placemark>
<Placemark>
<Point>
<coordinates>
18.0645494112785,59.3521185037344
</coordinates>
</Point>
<wpml:index>1</wpml:index>
<wpml:executeHeight>57.3335762023926</wpml:executeHeight>
<wpml:waypointSpeed>2.23523616790771</wpml:waypointSpeed>
<wpml:waypointHeadingParam>
<wpml:waypointHeadingMode>followWayline</wpml:waypointHeadingMode>
<wpml:waypointHeadingAngle>0</wpml:waypointHeadingAngle>
<wpml:waypointPoiPoint>0.000000,0.000000,0.000000</wpml:waypointPoiPoint>
<wpml:waypointHeadingAngleEnable>0</wpml:waypointHeadingAngleEnable>
<wpml:waypointHeadingPoiIndex>0</wpml:waypointHeadingPoiIndex>
</wpml:waypointHeadingParam>
<wpml:waypointTurnParam>
<wpml:waypointTurnMode>toPointAndStopWithDiscontinuityCurvature</wpml:waypointTurnMode>
<wpml:waypointTurnDampingDist>0</wpml:waypointTurnDampingDist>
</wpml:waypointTurnParam>
<wpml:useStraightLine>1</wpml:useStraightLine>
<wpml:waypointGimbalHeadingParam>
<wpml:waypointGimbalPitchAngle>0</wpml:waypointGimbalPitchAngle>
<wpml:waypointGimbalYawAngle>0</wpml:waypointGimbalYawAngle>
</wpml:waypointGimbalHeadingParam>
<wpml:isRisky>0</wpml:isRisky>
</Placemark>
<Placemark>
<Point>
<coordinates>
18.0646802349397,59.3521474660272
</coordinates>
</Point>
<wpml:index>2</wpml:index>
<wpml:executeHeight>57.3335762023926</wpml:executeHeight>
<wpml:waypointSpeed>2.23523616790771</wpml:waypointSpeed>
<wpml:waypointHeadingParam>
<wpml:waypointHeadingMode>followWayline</wpml:waypointHeadingMode>
<wpml:waypointHeadingAngle>0</wpml:waypointHeadingAngle>
<wpml:waypointPoiPoint>0.000000,0.000000,0.000000</wpml:waypointPoiPoint>
<wpml:waypointHeadingAngleEnable>0</wpml:waypointHeadingAngleEnable>
<wpml:waypointHeadingPoiIndex>0</wpml:waypointHeadingPoiIndex>
</wpml:waypointHeadingParam>
<wpml:waypointTurnParam>
<wpml:waypointTurnMode>toPointAndStopWithDiscontinuityCurvature</wpml:waypointTurnMode>
<wpml:waypointTurnDampingDist>0</wpml:waypointTurnDampingDist>
</wpml:waypointTurnParam>
<wpml:useStraightLine>1</wpml:useStraightLine>
<wpml:waypointGimbalHeadingParam>
<wpml:waypointGimbalPitchAngle>0</wpml:waypointGimbalPitchAngle>
<wpml:waypointGimbalYawAngle>0</wpml:waypointGimbalYawAngle>
</wpml:waypointGimbalHeadingParam>
<wpml:isRisky>0</wpml:isRisky>
</Placemark>
<Placemark>
<Point>
<coordinates>
18.0648221683054,59.3521171690377
</coordinates>
</Point>
<wpml:index>3</wpml:index>
<wpml:executeHeight>57.3335762023926</wpml:executeHeight>
<wpml:waypointSpeed>2.23523616790771</wpml:waypointSpeed>
<wpml:waypointHeadingParam>
<wpml:waypointHeadingMode>followWayline</wpml:waypointHeadingMode>
<wpml:waypointHeadingAngle>0</wpml:waypointHeadingAngle>
<wpml:waypointPoiPoint>0.000000,0.000000,0.000000</wpml:waypointPoiPoint>
<wpml:waypointHeadingAngleEnable>0</wpml:waypointHeadingAngleEnable>
<wpml:waypointHeadingPoiIndex>0</wpml:waypointHeadingPoiIndex>
</wpml:waypointHeadingParam>
<wpml:waypointTurnParam>
<wpml:waypointTurnMode>toPointAndStopWithDiscontinuityCurvature</wpml:waypointTurnMode>
<wpml:waypointTurnDampingDist>0</wpml:waypointTurnDampingDist>
</wpml:waypointTurnParam>
<wpml:useStraightLine>1</wpml:useStraightLine>
<wpml:waypointGimbalHeadingParam>
<wpml:waypointGimbalPitchAngle>0</wpml:waypointGimbalPitchAngle>
<wpml:waypointGimbalYawAngle>0</wpml:waypointGimbalYawAngle>
</wpml:waypointGimbalHeadingParam>
<wpml:isRisky>0</wpml:isRisky>
</Placemark>
</Folder>
</Document>
</kml>
I did manage to write a python script which is capable of getting a KMZ file and the waypoint index at which I can clip the mission to generate a new KMZ file. The problem I had howevever is that I am not sure how to calculate the values:
<wpml:distance>27.4170398712158</wpml:distance>
<wpml:duration>20.1444892883301</wpml:duration>
I am assuming the RC uses some kind of logic to compute those values. I would also like to know if the drone would fly properly if those two values were wrong.