diff --git a/Paths/airstrip.wima b/Paths/airstrip.wima new file mode 100644 index 0000000000000000000000000000000000000000..bf5d1f8fd694718a6d9b1c7f516baa628e13c28c --- /dev/null +++ b/Paths/airstrip.wima @@ -0,0 +1,3392 @@ +{ + "AreaItems": [ + { + "AreaType": "Measurement Area", + "BorderPolygonOffset": 6, + "BottomLayerAltitude": 5, + "LayerDistance": 1, + "NumberOfLayers": 1, + "ShowBorderPolygon": 0, + "maxAltitude": 30, + "polygon": [ + [ + -35.36216513478192, + 149.16497789845522 + ], + [ + -35.36213375235144, + 149.16517170689133 + ], + [ + -35.36295448541686, + 149.1652730399651 + ], + [ + -35.36296209471827, + 149.16508355733163 + ] + ] + }, + { + "AreaType": "Service Area", + "BorderPolygonOffset": 6, + "ShowBorderPolygon": 0, + "maxAltitude": 30, + "polygon": [ + [ + -35.36323921255457, + 149.16512854712016 + ], + [ + -35.36322713411004, + 149.1653199279989 + ], + [ + -35.363390460474086, + 149.1653465947412 + ], + [ + -35.36340978594098, + 149.165143366255 + ] + ] + }, + { + "AreaType": "Corridor", + "BorderPolygonOffset": 6, + "ShowBorderPolygon": 0, + "maxAltitude": 30, + "polygon": [ + [ + -35.362911050453505, + 149.16515300319543 + ], + [ + -35.3629125170391, + 149.16524945227013 + ], + [ + -35.363078701914105, + 149.1650480404527 + ], + [ + -35.363253686135984, + 149.16528902451972 + ], + [ + -35.363268351716464, + 149.16518538331297 + ], + [ + -35.36309263422199, + 149.1648418922889 + ] + ] + } + ], + "MissionItems": { + "fileType": "Plan", + "geoFence": { + "circles": [ + ], + "polygons": [ + ], + "version": 2 + }, + "groundStation": "QGroundControl", + "mission": { + "cruiseSpeed": 15, + "firmwareType": 3, + "hoverSpeed": 5, + "items": [ + { + "autoContinue": true, + "command": 22, + "doJumpId": 1, + "frame": 3, + "params": [ + 15, + 0, + 0, + null, + -35.36331664831048, + 149.16523460902775, + 15 + ], + "type": "SimpleItem" + }, + { + "AMSLAltAboveTerrain": 15, + "Altitude": 15, + "AltitudeMode": 1, + "autoContinue": true, + "command": 16, + "doJumpId": 2, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36307869775493, + 149.16504820037292, + 15 + ], + "type": "SimpleItem" + }, + { + "AMSLAltAboveTerrain": 15, + "Altitude": 15, + "AltitudeMode": 1, + "autoContinue": true, + "command": 16, + "doJumpId": 3, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36295229584077, + 149.1650821474246, + 15 + ], + "type": "SimpleItem" + }, + { + "TransectStyleComplexItem": { + "CameraCalc": { + "AdjustedFootprintFrontal": 25, + "AdjustedFootprintSide": 25, + "CameraName": "Manual (no camera specs)", + "DistanceToSurface": 15, + "DistanceToSurfaceRelative": true, + "version": 1 + }, + "CameraShots": 0, + "CameraTriggerInTurnAround": true, + "FollowTerrain": false, + "HoverAndCapture": false, + "Items": [ + { + "autoContinue": true, + "command": 16, + "doJumpId": 4, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.362138628232515, + 149.1651415949188, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 5, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36217686397981, + 149.1651710426633, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 6, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36218561730914, + 149.1651781104783, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 7, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36222299082324, + 149.1651827248569, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 8, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36221925333988, + 149.16517952204612, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 9, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.362181233103016, + 149.16514825511265, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 10, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36214234613452, + 149.16511863427604, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 11, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36214605757012, + 149.16509571356792, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 12, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36218559462716, + 149.16512550719554, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 13, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36222425963872, + 149.16515697463484, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 14, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.362258768786994, + 149.16518714223835, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 15, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.362293192865565, + 149.16519139246032, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 16, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36226764107793, + 149.16516779525404, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 17, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36222925760671, + 149.1651344647442, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 18, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.362189948893395, + 149.1651027971327, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 19, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36214976282961, + 149.16507283100162, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 20, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.362153462185724, + 149.16504998489276, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 21, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.362194296222235, + 149.16508012325247, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 22, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36223424761172, + 149.16511199071724, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 23, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.362273267679555, + 149.16514554846148, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 24, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.362311308885815, + 149.16518075560023, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 25, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36232645150974, + 149.1651954987901, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 26, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36235869491617, + 149.165199479772, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 27, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36235519284574, + 149.1651958910594, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 28, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36231755567896, + 149.1651587967166, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 29, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.3622788856925, + 149.1651233356274, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 30, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36223922999976, + 149.16508955099565, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 31, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36219863691512, + 149.16505748398265, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 32, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36215715589498, + 149.16502717365722, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 33, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.362160844198876, + 149.16500439580352, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 34, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36220297125585, + 149.16503487784303, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 35, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36224420509661, + 149.1650671441122, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 36, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36228449548406, + 149.16510115529948, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 37, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36232379333058, + 149.16513686996754, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 38, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.3623620507578, + 149.1651742446035, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 39, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36239004499214, + 149.1652033504575, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 40, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36242060222164, + 149.16520712325297, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 41, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36240668048576, + 149.16519192383979, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 42, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.362368899042515, + 149.16515262853554, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 43, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.362330022225606, + 149.16511497399986, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 44, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36229009740044, + 149.16507900610898, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 45, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.362249173209264, + 149.1650447686842, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 46, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36220729951191, + 149.1650123034386, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 47, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36216452732502, + 149.16498164992603, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 48, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36220212320197, + 149.1649828022838, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 49, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36224483968905, + 149.16501506398407, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 50, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36228661194968, + 149.16504913405413, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 51, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36232738909078, + 149.1650849709848, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 52, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.3623671214317, + 149.1651225311143, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 53, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.3624057605647, + 149.16516176868143, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 54, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.362443259413936, + 149.16520263588123, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 55, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36245045053365, + 149.16521080852084, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 56, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.3624796608392, + 149.16521441501627, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 57, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36244626177991, + 149.1651761697408, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 58, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36240800784521, + 149.16513519017926, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 59, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.362368610888794, + 149.1650958726322, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 60, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36232811890979, + 149.16505826500205, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 61, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36228658124142, + 149.16502241310783, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 62, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36224404849094, + 149.1649883606296, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 63, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36228384064437, + 149.16499363616984, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 64, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36232619900666, + 149.1650293883122, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 65, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36236751401869, + 149.16506693137237, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 66, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.362407735344505, + 149.16510621960984, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 67, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36244681398059, + 149.16514720515798, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 68, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36248470231566, + 149.1651898380822, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 69, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36250829365619, + 149.16521795021117, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 70, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36253640109355, + 149.16522142053927, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 71, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.362521428056006, + 149.16520289669202, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 72, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.362483889011514, + 149.16515868416002, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 73, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.362445114495785, + 149.1651161050187, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 74, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.362405151749606, + 149.16507521114423, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 75, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36236404946141, + 149.16503605235943, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 76, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.362321857708025, + 149.1649986763733, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 77, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36235837042258, + 149.16500351713407, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 78, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36240040215984, + 149.16504245270787, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 79, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36244130014174, + 149.16508316328247, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 80, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36248101454039, + 149.16512559925835, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 81, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36251949696991, + 149.16516970893377, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 82, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36255670054538, + 149.16521543856788, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 83, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36256402837569, + 149.16522483158428, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 84, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36259121503093, + 149.1652281882266, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 85, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36259072308269, + 149.165227535997, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 86, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.362553843088214, + 149.16518034302234, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 87, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36251564239424, + 149.1651347570504, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 88, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36247616754243, + 149.16509083362064, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 89, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.362435466626806, + 149.165048626247, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 90, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36239358923517, + 149.16500818635268, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 91, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36242768144969, + 149.16501270620984, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 92, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36246940943299, + 149.16505460230368, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 93, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.362509919586195, + 149.16509825859595, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 94, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36254916255392, + 149.16514362189812, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 95, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.362587090524656, + 149.16519063694204, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 96, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36261799582993, + 149.16523149475924, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 97, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36264440153541, + 149.16523475498042, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 98, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36261937144017, + 149.16520063161192, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 99, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36258170826446, + 149.16515222903993, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 100, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36254269043982, + 149.16510546772318, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 101, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36250236550347, + 149.16506040463318, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 102, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.362460782585124, + 149.16501709467232, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 103, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36249300416516, + 149.16502136652565, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 104, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36253444587318, + 149.16506605278457, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 105, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.362574590514214, + 149.16511248529125, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 106, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36261338917821, + 149.16516060747486, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 107, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36265079459497, + 149.16521036070586, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 108, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.362670459507505, + 149.16523797226813, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 109, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36269619419719, + 149.16524114964128, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 110, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36268145071334, + 149.16521985231347, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 111, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36264429676366, + 149.1651687813929, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 112, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36260571191062, + 149.1651193315611, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 113, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.362565743163906, + 149.16507156306508, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 114, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.362524439219285, + 149.1650255341034, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 115, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.362555166266205, + 149.1650296078154, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 116, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36259633555026, + 149.16507694923834, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 117, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.362636132364294, + 149.1651260236334, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 118, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36267450822202, + 149.16517677121098, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 119, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36271141636837, + 149.165229130143, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 120, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36272162755205, + 149.16524428980966, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 121, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36274677935258, + 149.16524739521552, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 122, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.362740756856404, + 149.16523821441112, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 123, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36270408938523, + 149.16518459433922, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 124, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.3626659181626, + 149.16513257609046, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 125, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.362626289694255, + 149.16508222304103, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 126, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.362585252261376, + 149.1650335965384, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 127, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.362614754819475, + 149.16503750791085, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 128, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.362655662958076, + 149.16508739457248, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 129, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36269512634535, + 149.16513900148018, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 130, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.362733096901245, + 149.1651922657589, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 131, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.362769528364474, + 149.1652471225143, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 132, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.362771667493064, + 149.16525046806817, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 133, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.3627963082177, + 149.16525351037322, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 134, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.362761579909254, + 149.16519979846552, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 135, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36272380639169, + 149.16514531068734, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 136, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.362684505100525, + 149.16509247259336, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 137, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.362643723918325, + 149.16504134855867, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 138, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36267220322459, + 149.16504512427105, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 139, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36271285959689, + 149.16509746475802, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 140, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36275200153257, + 149.1651515132221, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 141, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36278958134321, + 149.16520720381354, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 142, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.362820716320385, + 149.16525652395728, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 143, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.362844905314674, + 149.16525951048877, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 144, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.362817138959386, + 149.1652144917881, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 145, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.362779749785446, + 149.16515761744776, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 146, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.362740764679494, + 149.16510237779775, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 147, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36270023113888, + 149.16504884013906, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 148, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36272784162949, + 149.16505250066612, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 149, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.362768254167776, + 149.1651072176669, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 150, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36280708477969, + 149.16516363076235, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 151, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36284428615611, + 149.16522167122184, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 152, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.362868887579324, + 149.16526247149605, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 153, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.362892674483376, + 149.16526540838285, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 154, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36287105263473, + 149.16522874996966, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 155, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36283403642212, + 149.16516955974492, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 156, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.362795358137596, + 149.1651119896607, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 157, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36275506490468, + 149.16505610985718, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 158, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36278192795995, + 149.1650596712912, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 159, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36282210346615, + 149.16511669851116, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 160, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.3628606314389, + 149.16517541027488, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 161, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.3628974649378, + 149.16523573505108, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 162, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36291627649427, + 149.16526832244153, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 163, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36293970327167, + 149.16527121486473, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 164, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.362923546891096, + 149.16524263276716, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 165, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36288689382063, + 149.1651811876298, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 166, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36284851427965, + 149.1651213484661, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 167, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36280845502771, + 149.16506318818088, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 168, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36283466794958, + 149.16506666342192, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 169, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36287461232399, + 149.16512594335407, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 170, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.362912845191005, + 149.16518689656655, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 171, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36294931996976, + 149.16524944879728, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 172, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.362955022739946, + 149.16525965984144, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 173, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.3629564763944, + 149.16522346173872, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 174, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36293850511436, + 149.1651925413891, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 175, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36290041727409, + 149.16513048663916, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 176, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.362860586487066, + 149.16507009963422, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 177, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36288622858256, + 149.16507349919658, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 178, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.3629259469937, + 149.16513498146645, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 179, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36295790632206, + 149.1651878544676, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 180, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36295931429163, + 149.1651527939848, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 181, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36295121775511, + 149.1651394307009, + 15 + ], + "type": "SimpleItem" + }, + { + "autoContinue": true, + "command": 16, + "doJumpId": 182, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36291161057999, + 149.16507686427582, + 15 + ], + "type": "SimpleItem" + } + ], + "Refly90Degrees": false, + "TurnAroundDistance": 10, + "VisualTransectPoints": [ + [ + -35.362138628232515, + 149.1651415949188 + ], + [ + -35.36218561730914, + 149.1651781104783 + ], + [ + -35.362241062676134, + 149.16518495612607 + ], + [ + -35.36214420264205, + 149.16510716904486 + ], + [ + -35.36214976282961, + 149.16507283100162 + ], + [ + -35.36226764107793, + 149.16516779525404 + ], + [ + -35.362293192865565, + 149.16519139246032 + ], + [ + -35.362342691927736, + 149.16519750393837 + ], + [ + -35.36227607773614, + 149.16513443789245 + ], + [ + -35.362155309730774, + 149.16503857501112 + ], + [ + -35.362160844198876, + 149.16500439580352 + ], + [ + -35.36228449548406, + 149.16510115529948 + ], + [ + -35.36239004499214, + 149.1652033504575 + ], + [ + -35.362435610289715, + 149.16520897624724 + ], + [ + -35.36242232189206, + 149.1651942092223 + ], + [ + -35.36230584793835, + 149.16507927414332 + ], + [ + -35.36218021442836, + 149.16497989767555 + ], + [ + -35.36224404849094, + 149.1649883606296 + ], + [ + -35.362368610888794, + 149.1650958726322 + ], + [ + -35.3624796608392, + 149.16521441501627 + ], + [ + -35.36252241007477, + 149.16521969311657 + ], + [ + -35.36242662480596, + 149.16511121517672 + ], + [ + -35.362303052473266, + 149.16499618322416 + ], + [ + -35.36235837042258, + 149.16500351713407 + ], + [ + -35.36248101454039, + 149.16512559925835 + ], + [ + -35.36256402837569, + 149.16522483158428 + ], + [ + -35.362604654153564, + 149.1652298475086 + ], + [ + -35.3625325319787, + 149.16513922372346 + ], + [ + -35.36241076705717, + 149.16501046374367 + ], + [ + -35.362460782585124, + 149.16501709467232 + ], + [ + -35.36258170826446, + 149.16515222903993 + ], + [ + -35.36264440153541, + 149.16523475498042 + ], + [ + -35.36268336583649, + 149.16523956576793 + ], + [ + -35.36262893451556, + 149.16516471864406 + ], + [ + -35.36250881479915, + 149.16502346265838 + ], + [ + -35.362555166266205, + 149.1650296078154 + ], + [ + -35.36267450822202, + 149.16517677121098 + ], + [ + -35.36272162755205, + 149.16524428980966 + ], + [ + -35.36275925532889, + 149.16524893558116 + ], + [ + -35.36271866161877, + 149.16518844815832 + ], + [ + -35.36260007318456, + 149.16503556145787 + ], + [ + -35.362643723918325, + 149.16504134855867 + ], + [ + -35.362761579909254, + 149.16519979846552 + ], + [ + -35.3627963082177, + 149.16525351037322 + ], + [ + -35.36283283740736, + 149.16525802050597 + ], + [ + -35.36280341344741, + 149.16521086189567 + ], + [ + -35.362686271387396, + 149.1650469893915 + ], + [ + -35.36272784162949, + 149.16505250066612 + ], + [ + -35.36284428615611, + 149.16522167122184 + ], + [ + -35.362868887579324, + 149.16526247149605 + ], + [ + -35.36290449797882, + 149.16526686818895 + ], + [ + -35.36288430151004, + 149.16523225380922 + ], + [ + -35.36276853988522, + 149.16505789633507 + ], + [ + -35.36280845502771, + 149.16506318818088 + ], + [ + -35.362923546891096, + 149.16524263276716 + ], + [ + -35.36293970327167, + 149.16527121486473 + ], + [ + -35.36295575265208, + 149.16524148397144 + ], + [ + -35.362847662855096, + 149.1650683862527 + ], + [ + -35.36288622858256, + 149.16507349919658 + ], + [ + -35.36295790632206, + 149.1651878544676 + ], + [ + -35.36296001054073, + 149.16513545637298 + ], + [ + -35.3629242087591, + 149.16507853450966 + ] + ], + "version": 1 + }, + "complexItemType": "circularSurvey", + "deltaAlpha": 6, + "deltaR": 3, + "isSnakePath": true, + "polygon": [ + [ + -35.36216513478192, + 149.16497789845522 + ], + [ + -35.36213375235144, + 149.16517170689133 + ], + [ + -35.36295448541686, + 149.1652730399651 + ], + [ + -35.36296209471827, + 149.16508355733163 + ] + ], + "referencePointAlt": 0, + "referencePointLat": -35.361469832848464, + "referencePointLong": 149.16649934661973, + "transectMinLength": 5, + "type": "ComplexItem", + "version": 1 + }, + { + "AMSLAltAboveTerrain": 15, + "Altitude": 15, + "AltitudeMode": 1, + "autoContinue": true, + "command": 16, + "doJumpId": 183, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36295229584064, + 149.16508214742518, + 15 + ], + "type": "SimpleItem" + }, + { + "AMSLAltAboveTerrain": 15, + "Altitude": 15, + "AltitudeMode": 1, + "autoContinue": true, + "command": 16, + "doJumpId": 184, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36307869775492, + 149.16504820037255, + 15 + ], + "type": "SimpleItem" + }, + { + "AMSLAltAboveTerrain": 0, + "Altitude": 0, + "AltitudeMode": 1, + "autoContinue": true, + "command": 21, + "doJumpId": 185, + "frame": 3, + "params": [ + 0, + 0, + 0, + null, + -35.36331664831048, + 149.16523460902775, + 0 + ], + "type": "SimpleItem" + } + ], + "plannedHomePosition": [ + -35.36331664831048, + 149.16523460902775, + 585 + ], + "vehicleType": 2, + "version": 2 + }, + "rallyPoints": { + "points": [ + ], + "version": 2 + }, + "version": 1 + } +} diff --git a/src/FlightDisplay/FlightDisplayView.qml b/src/FlightDisplay/FlightDisplayView.qml index ec8585e921d10aa3a2a78d929020aedda80e8a2a..ca99402fd7eaa3dbd0f87ae72c67fbd5b88a3eb0 100644 --- a/src/FlightDisplay/FlightDisplayView.qml +++ b/src/FlightDisplay/FlightDisplayView.qml @@ -528,26 +528,6 @@ QGCView { FlightDisplayViewWidgets { id: flightDisplayViewWidgets z: _panel.z + 4 -<<<<<<< HEAD - height: ScreenTools.availableHeight - (singleMultiSelector.visible ? singleMultiSelector.height + _margins : 0) - wimaMenu.height - anchors.left: parent.left - anchors.right: altitudeSlider.visible ? altitudeSlider.left : parent.right - anchors.top: singleMultiSelector.bottom - qgcView: root - useLightColors: isBackgroundDark - missionController: _missionController - visible: singleVehicleView.checked && !QGroundControl.videoManager.fullScreen - } - - FlightDisplayWimaMenu { - id: wimaMenu - z: 1000 //_panel.z + 4 - anchors.right: altitudeSlider.visible ? altitudeSlider.left : parent.right - anchors.top: flightDisplayViewWidgets.bottom - visible: true - height: 300 - width: 200 -======= height: ScreenTools.availableHeight - (singleMultiSelector.visible ? singleMultiSelector.height + _margins : 0) anchors.left: parent.left anchors.right: altitudeSlider.visible ? altitudeSlider.left : parent.right @@ -568,7 +548,6 @@ QGCView { wimaController: wimaController ->>>>>>> bf3b5ebeb517fcf1caf74f7b1df73c550c4741b8 } //------------------------------------------------------------------------- diff --git a/src/FlightDisplay/FlightDisplayWimaMenu.qml b/src/FlightDisplay/FlightDisplayWimaMenu.qml index dc34789042dda69b4a87d337a1cdaa10a03812db..cfe31ede424c1d8f7f37382f07d392048ba72acb 100644 --- a/src/FlightDisplay/FlightDisplayWimaMenu.qml +++ b/src/FlightDisplay/FlightDisplayWimaMenu.qml @@ -19,15 +19,9 @@ import QGroundControl.FactControls 1.0 Item { id: _root - height: 400 - width: 250 - -<<<<<<< HEAD - Text { - id: enableWima - text: qsTr("WiMA") - font.pointSize: 40 -======= + height: 500 + width: 300 + property var wimaController // must be provided by the user // box containing all items @@ -161,8 +155,5 @@ Item { } } } - - ->>>>>>> bf3b5ebeb517fcf1caf74f7b1df73c550c4741b8 } } diff --git a/src/MissionManager/MissionController.cc b/src/MissionManager/MissionController.cc index 7c7291d4c77a6dce1661d0d8df55aa7d621db21b..e4b8496c4d0ff0980996531c7c858df98215a888 100644 --- a/src/MissionManager/MissionController.cc +++ b/src/MissionManager/MissionController.cc @@ -1053,6 +1053,31 @@ bool MissionController::readyForSaveSend(void) const return true; } +bool MissionController::setTakeoffCommand(SimpleMissionItem &missionItem, Vehicle &vehicle) +{ + if (vehicle.fixedWing() || vehicle.vtol() || vehicle.multiRotor()) { + MAV_CMD takeoffCmd = _controllerVehicle->vtol() ? MAV_CMD_NAV_VTOL_TAKEOFF : MAV_CMD_NAV_TAKEOFF; + if (_controllerVehicle->firmwarePlugin()->supportedMissionCommands().contains(takeoffCmd)) { + missionItem.setCommand(takeoffCmd); + } + } + else + return false; + + return true; +} + +bool MissionController::setLandCommand(SimpleMissionItem &missionItem, Vehicle &vehicle) +{ + MAV_CMD landCmd = vehicle.vtol() ? MAV_CMD_NAV_VTOL_LAND : MAV_CMD_NAV_LAND; + if (vehicle.firmwarePlugin()->supportedMissionCommands().contains(landCmd)) { + missionItem.setCommand(landCmd); + } else + return false; + + return true; +} + void MissionController::save(QJsonObject& json) { json[JsonHelper::jsonVersionKey] = _missionFileVersion; diff --git a/src/MissionManager/MissionController.h b/src/MissionManager/MissionController.h index 461bfaf595eff38f154684ee8f47894d30f364dc..0ed16524d2ae17965082e8043bd0854bdfebfd71 100644 --- a/src/MissionManager/MissionController.h +++ b/src/MissionManager/MissionController.h @@ -150,12 +150,18 @@ public: /// would return false is when it is still waiting on terrain data to determine correct altitudes. bool readyForSaveSend(void) const; + /// sets the command in missionItem to a land command + bool setLandCommand (SimpleMissionItem &missionItem, Vehicle &vehicle); + /// sets the command in missionItem to a takeoff command + bool setTakeoffCommand (SimpleMissionItem &missionItem, Vehicle &vehicle); + /// Sends the mission items to the specified vehicle static void sendItemsToVehicle(Vehicle* vehicle, QmlObjectListModel* visualMissionItems); static bool convertToMissionItems(QmlObjectListModel* visualMissionItems, QList& rgMissionItems, QObject* missionItemParent); + bool loadJsonFile(QFile& file, QString& errorString); bool loadTextFile(QFile& file, QString& errorString); diff --git a/src/Wima/WimaAreaData.cc b/src/Wima/WimaAreaData.cc index cdf2fbc73e866df194312b49750a50bf55ab8932..1f586f408ad871cdc78e8d52ee09e64dfcc17c44 100644 --- a/src/Wima/WimaAreaData.cc +++ b/src/Wima/WimaAreaData.cc @@ -26,6 +26,11 @@ QVariantList WimaAreaData::path() const return _path; } +QGeoCoordinate WimaAreaData::center() const +{ + return _center; +} + QList WimaAreaData::coordinateList() const { QList coordinateList; @@ -57,6 +62,15 @@ void WimaAreaData::setPath(const QVariantList &coordinateList) _path.append(coordinateList); } +void WimaAreaData::setCenter(const QGeoCoordinate ¢er) +{ + if (_center != center) { + _center = center; + + emit centerChanged(); + } +} + /*! * \fn void WimaAreaData::assign(const WimaAreaData &other) * @@ -66,12 +80,14 @@ void WimaAreaData::assign(const WimaAreaData &other) { setMaxAltitude(other.maxAltitude()); setPath(other.path()); + setCenter(other.center()); } void WimaAreaData::assign(const WimaArea &other) { setMaxAltitude(other.maxAltitude()); - setPath(other.path()); + setPath(other.path()); + setCenter(other.center()); } diff --git a/src/Wima/WimaAreaData.h b/src/Wima/WimaAreaData.h index f3774a73ceae68f2785d83c8eb8bf52487006488..7ef8ad14c5ed325b3beb76814aa9d8fe5b353eb9 100644 --- a/src/Wima/WimaAreaData.h +++ b/src/Wima/WimaAreaData.h @@ -19,9 +19,10 @@ public: //WimaAreaData(const WimaArea &other, QObject *parent = nullptr); WimaAreaData& operator=(const WimaAreaData& otherData) = delete; // avoid slicing - double maxAltitude() const; - QVariantList path() const; - QList coordinateList() const; + double maxAltitude() const; + QVariantList path() const; + QGeoCoordinate center() const; + QList coordinateList() const; virtual QString type() const = 0; @@ -29,11 +30,13 @@ public: signals: void maxAltitudeChanged (double maxAltitude); void pathChanged (const QVariantList& coordinateList); + void centerChanged (void); public slots: void setMaxAltitude(double maxAltitude); void setPath(const QList &coordinateList); - void setPath(const QVariantList &coordinateList); + void setPath(const QVariantList &coordinateList); + void setCenter(const QGeoCoordinate ¢er); protected: void assign(const WimaAreaData &other); @@ -46,5 +49,6 @@ private: // see WimaArea.h for explanation double _maxAltitude; QVariantList _path; + QGeoCoordinate _center; }; diff --git a/src/Wima/WimaController.SettingsGroup.json b/src/Wima/WimaController.SettingsGroup.json index c9b11b3484b82b27c51bc2bcaac43db351341f7d..34bb8620199c059f85bdcc3a8dda82030e5170ba 100644 --- a/src/Wima/WimaController.SettingsGroup.json +++ b/src/Wima/WimaController.SettingsGroup.json @@ -13,14 +13,16 @@ }, { "name": "MaxWaypointsPerPhase", - "shortDescription": "Determines the maximum number of waypoints per phase.", + "shortDescription": "Determines the maximum number of waypoints per phase. This number does not include the arrival and return path.", "type": "uint32", + "min" : 1, "defaultValue": 30 }, { "name": "StartWaypointIndex", "shortDescription": "The index of the start waypoint for the next mission phase.", - "type": "uint32", + "type": "uint32", + "min" : 1, "defaultValue": 1 }, { diff --git a/src/Wima/WimaController.cc b/src/Wima/WimaController.cc index 044f6964f874272572d087c8c004a06fc2e2edf3..3e48f46c9e3cfeeb9d73637e6551fa2e08678a71 100644 --- a/src/Wima/WimaController.cc +++ b/src/Wima/WimaController.cc @@ -23,16 +23,17 @@ WimaController::WimaController(QObject *parent) , _enableWimaController (settingsGroup, _metaDataMap[enableWimaControllerName]) , _overlapWaypoints (settingsGroup, _metaDataMap[overlapWaypointsName]) , _maxWaypointsPerPhase (settingsGroup, _metaDataMap[maxWaypointsPerPhaseName]) - , _nestPhaseStartWaypointIndex (settingsGroup, _metaDataMap[startWaypointIndexName]) + , _nextPhaseStartWaypointIndex (settingsGroup, _metaDataMap[startWaypointIndexName]) , _showAllMissionItems (settingsGroup, _metaDataMap[showAllMissionItemsName]) , _showCurrentMissionItems (settingsGroup, _metaDataMap[showCurrentMissionItemsName]) + , _lastMissionPhaseReached (false) { - _nestPhaseStartWaypointIndex.setRawValue(int(1)); + _nextPhaseStartWaypointIndex.setRawValue(int(1)); _showAllMissionItems.setRawValue(true); _showCurrentMissionItems.setRawValue(true); connect(&_overlapWaypoints, &Fact::rawValueChanged, this, &WimaController::updateNextWaypoint); connect(&_maxWaypointsPerPhase, &Fact::rawValueChanged, this, &WimaController::recalcCurrentPhase); - connect(&_nestPhaseStartWaypointIndex, &Fact::rawValueChanged, this, &WimaController::calcNextPhase); + connect(&_nextPhaseStartWaypointIndex, &Fact::rawValueChanged, this, &WimaController::calcNextPhase); } QmlObjectListModel* WimaController::visualItems() @@ -109,7 +110,7 @@ Fact *WimaController::showCurrentMissionItems() Fact *WimaController::startWaypointIndex() { - return &_nestPhaseStartWaypointIndex; + return &_nextPhaseStartWaypointIndex; } void WimaController::setMasterController(PlanMasterController *masterC) @@ -134,11 +135,11 @@ void WimaController::setDataContainer(WimaDataContainer *container) { if (container != nullptr) { if (_container != nullptr) { - disconnect(_container, &WimaDataContainer::dataValidChanged, this, &WimaController::fetchContainerData); + disconnect(_container, &WimaDataContainer::newDataAvailable, this, &WimaController::fetchContainerData); } _container = container; - connect(_container, &WimaDataContainer::dataValidChanged, this, &WimaController::fetchContainerData); + connect(_container, &WimaDataContainer::newDataAvailable, this, &WimaController::fetchContainerData); emit dataContainerChanged(); } @@ -151,8 +152,9 @@ void WimaController::nextPhase() void WimaController::previousPhase() { - if (_nestPhaseStartWaypointIndex.rawValue().toInt() > 0) { - _nestPhaseStartWaypointIndex.setRawValue( 1 + std::max(_startWaypointIndex + if (_nextPhaseStartWaypointIndex.rawValue().toInt() > 0) { + _lastMissionPhaseReached = false; + _nextPhaseStartWaypointIndex.setRawValue( 1 + std::max(_startWaypointIndex - _maxWaypointsPerPhase.rawValue().toInt() + _overlapWaypoints.rawValue().toInt(), 0)); } @@ -160,13 +162,14 @@ void WimaController::previousPhase() void WimaController::resetPhase() { - _nestPhaseStartWaypointIndex.setRawValue(int(1)); + _lastMissionPhaseReached = false; + _nextPhaseStartWaypointIndex.setRawValue(int(1)); } -void WimaController::uploadToVehicle() +bool WimaController::uploadToVehicle() { if (_currentMissionItems.count() < 1) - return; + return false; _missionController->removeAll(); // set homeposition of settingsItem @@ -174,7 +177,7 @@ void WimaController::uploadToVehicle() MissionSettingsItem* settingsItem = visuals->value(0); if (settingsItem == nullptr) { qWarning("WimaController::updateCurrentMissionItems(): nullptr"); - return; + return false; } settingsItem->setCoordinate(_takeoffLandPostion); @@ -216,6 +219,8 @@ void WimaController::uploadToVehicle() qWarning(" "); } _masterController->sendToVehicle(); + + return true; } void WimaController::removeFromVehicle() @@ -223,28 +228,9 @@ void WimaController::removeFromVehicle() _masterController->removeAllFromVehicle(); } -void WimaController::startMission() -{ - -} - -void WimaController::abortMission() -{ - -} - -void WimaController::pauseMission() -{ - -} - -void WimaController::resumeMission() -{ - -} - void WimaController::saveToCurrent() { + } void WimaController::saveToFile(const QString& filename) @@ -349,175 +335,173 @@ bool WimaController::extractCoordinateList(QmlObjectListModel &missionItems, QVa * * \sa WimaDataContainer, WimaPlaner, WimaPlanData */ -void WimaController::fetchContainerData(bool valid) +bool WimaController::fetchContainerData() { - if ( valid ) { - if (_container == nullptr) { - qWarning("WimaController::containerDataValidChanged(): No container assigned!"); - } - _localPlanDataValid = false; - _visualItems.clear(); - _missionItems.clear(); - WimaPlanData planData = _container->pull(); + // fetch only if valid, return true on sucess - // extract list with WimaAreas - QList areaList = planData.areaList(); + // reset visual items + _visualItems.clear(); + _missionItems.clear(); + _currentMissionItems.clear(); + _waypointPath.clear(); + _currentWaypointPath.clear(); - int areaCounter = 0; - int numAreas = 4; // extract only numAreas Areas, if there are more they are invalid and ignored - for (int i = 0; i < areaList.size(); i++) { - const WimaAreaData *areaData = areaList[i]; + emit visualItemsChanged(); + emit missionItemsChanged(); + emit currentMissionItemsChanged(); + emit currentWaypointPathChanged(); - if (areaData->type() == WimaServiceAreaData::typeString) { // is it a service area? - _serviceArea = *qobject_cast(areaData); - areaCounter++; - _visualItems.append(&_serviceArea); + _localPlanDataValid = false; + _lastMissionPhaseReached = false; - continue; - } + if (_container == nullptr) { + qWarning("WimaController::fetchContainerData(): No container assigned!"); + return false; + } - if (areaData->type() == WimaMeasurementAreaData::typeString) { // is it a measurement area? - _measurementArea = *qobject_cast(areaData); - areaCounter++; - _visualItems.append(&_measurementArea); + WimaPlanData planData = _container->pull(); - continue; - } + // extract list with WimaAreas + QList areaList = planData.areaList(); - if (areaData->type() == WimaCorridorData::typeString) { // is it a corridor? - _corridor = *qobject_cast(areaData); - areaCounter++; - //_visualItems.append(&_corridor); // not needed + int areaCounter = 0; + int numAreas = 4; // extract only numAreas Areas, if there are more they are invalid and ignored + for (int i = 0; i < areaList.size(); i++) { + const WimaAreaData *areaData = areaList[i]; - continue; - } + if (areaData->type() == WimaServiceAreaData::typeString) { // is it a service area? + _serviceArea = *qobject_cast(areaData); + areaCounter++; + _visualItems.append(&_serviceArea); - if (areaData->type() == WimaJoinedAreaData::typeString) { // is it a corridor? - _joinedArea = *qobject_cast(areaData); - areaCounter++; - _visualItems.append(&_joinedArea); + continue; + } - continue; - } + if (areaData->type() == WimaMeasurementAreaData::typeString) { // is it a measurement area? + _measurementArea = *qobject_cast(areaData); + areaCounter++; + _visualItems.append(&_measurementArea); - if (areaCounter >= numAreas) - break; + continue; } - QList tempMissionItems = planData.missionItems(); - // create mission items - _missionController->removeAll(); - QmlObjectListModel* missionControllerVisualItems = _missionController->visualItems(); + if (areaData->type() == WimaCorridorData::typeString) { // is it a corridor? + _corridor = *qobject_cast(areaData); + areaCounter++; + //_visualItems.append(&_corridor); // not needed + continue; + } - // find takeoff command - int begin = -1; - for (int i = 0; i < tempMissionItems.size(); i++) { - const MissionItem *missionItem = tempMissionItems[i]; - if ( missionItem->command() == MAV_CMD_NAV_VTOL_TAKEOFF - || missionItem->command() == MAV_CMD_NAV_TAKEOFF) { + if (areaData->type() == WimaJoinedAreaData::typeString) { // is it a corridor? + _joinedArea = *qobject_cast(areaData); + areaCounter++; + _visualItems.append(&_joinedArea); - _missionController->insertSimpleMissionItem(*missionItem, missionControllerVisualItems->count()); + continue; + } - QGeoCoordinate coordinate = missionItem->coordinate(); - _takeoffLandPostion.setAltitude(coordinate.altitude()); - _takeoffLandPostion.setLatitude(coordinate.latitude()); - _takeoffLandPostion.setLongitude(coordinate.longitude()); + if (areaCounter >= numAreas) + break; + } - begin = i + 1; - break; - } - } + // extract mission items + QList tempMissionItems = planData.missionItems(); + if (tempMissionItems.size() < 1) + return false; - // check if takeoff command found - if (begin < 0) { - qWarning("WimaController::containerDataValidChanged(): No takeoff found."); - return; + // create mission items + _missionController->removeAll(); + QmlObjectListModel* missionControllerVisualItems = _missionController->visualItems(); + + // create SimpleMissionItem by using _missionController + for ( int i = 0; i < tempMissionItems.size(); i++) { + const MissionItem *missionItem = tempMissionItems[i]; + _missionController->insertSimpleMissionItem(*missionItem, missionControllerVisualItems->count()); + } + // copy mission items from _missionController to _missionItems + for ( int i = 1; i < missionControllerVisualItems->count(); i++) { + SimpleMissionItem *visualItem = qobject_cast((*missionControllerVisualItems)[i]); + if (visualItem == nullptr) { + qWarning("WimaController::fetchContainerData(): Nullptr at SimpleMissionItem!"); + return false; } + SimpleMissionItem *visualItemCopy = new SimpleMissionItem(*visualItem, true, this); + _missionItems.append(visualItemCopy); + } + if (areaCounter != numAreas) + return false; - // copy mission items and create SimpleMissionItem by using _missionController - for ( int i = begin; i < tempMissionItems.size(); i++) { - const MissionItem *missionItem = tempMissionItems[i]; - _missionController->insertSimpleMissionItem(*missionItem, missionControllerVisualItems->count()); + if (!setTakeoffLandPosition()) + return false; - if ( missionItem->command() == MAV_CMD_NAV_VTOL_LAND - || missionItem->command() == MAV_CMD_NAV_LAND) - break; - } + updateWaypointPath(); - for ( int i = 1; i < missionControllerVisualItems->count(); i++) { - SimpleMissionItem *visualItem = qobject_cast((*missionControllerVisualItems)[i]); - if (visualItem == nullptr) { - qWarning("WimaController::containerDataValidChanged(): Nullptr at SimpleMissionItem!"); - return; - } - SimpleMissionItem *visualItemCopy = new SimpleMissionItem(*visualItem, true, this); - _missionItems.append(visualItemCopy); - } + // set _nextPhaseStartWaypointIndex to 1 + disconnect(&_nextPhaseStartWaypointIndex, &Fact::rawValueChanged, this, &WimaController::calcNextPhase); + _nextPhaseStartWaypointIndex.setRawValue(int(1)); + connect(&_nextPhaseStartWaypointIndex, &Fact::rawValueChanged, this, &WimaController::calcNextPhase); - if (areaCounter == numAreas) - _localPlanDataValid = true; + if(!calcNextPhase()) + return false; - updateWaypointPath(); - _nestPhaseStartWaypointIndex.setRawValue(int(1)); - calcNextPhase(); - } else { - _localPlanDataValid = false; - _visualItems.clear(); - _missionItems.clear(); - } emit visualItemsChanged(); emit missionItemsChanged(); -#ifdef QT_DEBUG - //qWarning("Mission Items count: "); - //qWarning() << _missionItems.count(); -#endif + + _localPlanDataValid = true; + return true; } -void WimaController::calcNextPhase() +bool WimaController::calcNextPhase() { - _startWaypointIndex = _nestPhaseStartWaypointIndex.rawValue().toInt()-1; - // check if data was fetched and mission end is not reached yet - if (_missionItems.count() < 1 || !_localPlanDataValid || _startWaypointIndex >= _missionItems.count()-2) - return; + if (_missionItems.count() < 1 || _lastMissionPhaseReached) + return false; + + _currentMissionItems.clear(); + _currentWaypointPath.clear(); + emit currentMissionItemsChanged(); + emit currentWaypointPathChanged(); + + _startWaypointIndex = _nextPhaseStartWaypointIndex.rawValue().toInt()-1; + if (_startWaypointIndex > _missionItems.count()-1) + return false; + int maxWaypointsPerPhaseInt = _maxWaypointsPerPhase.rawValue().toInt(); // determine end waypoint index - _endWaypointIndex = std::min(_startWaypointIndex + maxWaypointsPerPhaseInt - 1, _missionItems.count()-2); // -2 -> last item is land item + _endWaypointIndex = std::min(_startWaypointIndex + maxWaypointsPerPhaseInt - 1, _missionItems.count()-1); + if (_endWaypointIndex == _missionItems.count() - 1) + _lastMissionPhaseReached = true; // extract waypoints QList geoCoordinateList; // list with potential waypoints (from _missionItems), for _currentMissionItems if (!extractCoordinateList(_missionItems, geoCoordinateList, _startWaypointIndex, _endWaypointIndex)) { - qWarning("WimaController::updateCurrentMissionItems(): error on waypoint extraction."); - _currentMissionItems.clear(); - return; + qWarning("WimaController::calcNextPhase(): error on waypoint extraction."); + return false; } // set start waypoint index for next phase - if (_endWaypointIndex < _missionItems.count()-2) { - _startWaypointIndexList.append(_nestPhaseStartWaypointIndex.rawValue().toInt()); - - disconnect(&_nestPhaseStartWaypointIndex, &Fact::rawValueChanged, this, &WimaController::calcNextPhase); - int temp = 1 + std::max(_endWaypointIndex + 1 - _overlapWaypoints.rawValue().toInt(), 0); - _nestPhaseStartWaypointIndex.setRawValue(std::min(temp , _missionItems.count()-1)); - connect(&_nestPhaseStartWaypointIndex, &Fact::rawValueChanged, this, &WimaController::calcNextPhase); - } - else { - disconnect(&_nestPhaseStartWaypointIndex, &Fact::rawValueChanged, this, &WimaController::calcNextPhase); - _nestPhaseStartWaypointIndex.setRawValue(_missionItems.count()-1); // marks that end of mission is reached - connect(&_nestPhaseStartWaypointIndex, &Fact::rawValueChanged, this, &WimaController::calcNextPhase); + if (!_lastMissionPhaseReached) { + disconnect(&_nextPhaseStartWaypointIndex, &Fact::rawValueChanged, this, &WimaController::calcNextPhase); + int untruncated = std::max(_endWaypointIndex + 1 - _overlapWaypoints.rawValue().toInt(), 0); + int truncated = std::min(untruncated , _missionItems.count()-1); + _nextPhaseStartWaypointIndex.setRawValue(truncated + 1); + connect(&_nextPhaseStartWaypointIndex, &Fact::rawValueChanged, this, &WimaController::calcNextPhase); } // calculate path from home to first waypoint QList path; + if (!_takeoffLandPostion.isValid()){ + qWarning("WimaController::calcNextPhase(): _takeoffLandPostion not valid."); + return false; + } if ( !calcShortestPath(_takeoffLandPostion, geoCoordinateList[0], path) ) { - qWarning("WimaController::updateCurrentMissionItems(): Not able to calc path from home to first waypoint."); - _currentMissionItems.clear(); - return; + qWarning("WimaController::calcNextPhase(): Not able to calc path from home to first waypoint."); + return false; } // prepend to geoCoordinateList for (int i = path.size()-2; i >= 0; i--) // i = path.size()-2 : last coordinate already in geoCoordinateList @@ -526,9 +510,8 @@ void WimaController::calcNextPhase() // calculate path from last waypoint to home path.clear(); if ( !calcShortestPath(geoCoordinateList.last(), _takeoffLandPostion, path) ) { - qWarning("WimaController::updateCurrentMissionItems(): Not able to calc path from home to first waypoint."); - _currentMissionItems.clear(); - return; + qWarning("WimaController::calcNextPhase(): Not able to calc path from home to first waypoint."); + return false; } path.removeFirst(); // first coordinate already in geoCoordinateList geoCoordinateList.append(path); @@ -541,9 +524,8 @@ void WimaController::calcNextPhase() // set homeposition of settingsItem MissionSettingsItem* settingsItem = missionControllerVisuals->value(0); if (settingsItem == nullptr) { - qWarning("WimaController::updateCurrentMissionItems(): nullptr"); - _currentMissionItems.clear(); - return; + qWarning("WimaController::calcNextPhase(): nullptr"); + return false; } settingsItem->setCoordinate(_takeoffLandPostion); @@ -551,44 +533,38 @@ void WimaController::calcNextPhase() _missionController->insertSimpleMissionItem(coordinate, missionControllerVisuals->count()); } - // set homeposition for take off item (somehow not working with insertSimpleMissionItem) - SimpleMissionItem* takeoff = missionControllerVisuals->value(1); - if (takeoff == nullptr) { - qWarning("WimaController::updateCurrentMissionItems(): nullptr"); - _currentMissionItems.clear(); - return; + // set takeoff position for first mission item (bug) + SimpleMissionItem *takeoffItem = missionControllerVisuals->value(1); + if (takeoffItem == nullptr) { + qWarning("WimaController::calcNextPhase(): nullptr"); + return false; } - takeoff->setCoordinate(_takeoffLandPostion); + takeoffItem->setCoordinate(_takeoffLandPostion); // set land command for last mission item SimpleMissionItem *landItem = missionControllerVisuals->value(missionControllerVisuals->count()-1); if (landItem == nullptr) { - qWarning("WimaController::updateCurrentMissionItems(): nullptr"); - _currentMissionItems.clear(); - return; - } - // check vehicle type, before setting land command - Vehicle* controllerVehicle = _masterController->controllerVehicle(); - MAV_CMD landCmd = controllerVehicle->vtol() ? MAV_CMD_NAV_VTOL_LAND : MAV_CMD_NAV_LAND; - if (controllerVehicle->firmwarePlugin()->supportedMissionCommands().contains(landCmd)) { - landItem->setCommand(landCmd); - } else { - _currentMissionItems.clear(); - return; + qWarning("WimaController::calcNextPhase(): nullptr"); + return false; } + _missionController->setLandCommand(*landItem, *_masterController->controllerVehicle()); // copy to _currentMissionItems - _currentMissionItems.clear(); for ( int i = 1; i < missionControllerVisuals->count(); i++) { SimpleMissionItem *visualItem = missionControllerVisuals->value(i); if (visualItem == nullptr) { - qWarning("WimaController::updateCurrentMissionItems(): Nullptr at SimpleMissionItem!"); + qWarning("WimaController::calcNextPhase(): Nullptr at SimpleMissionItem!"); _currentMissionItems.clear(); - return; + return false; } SimpleMissionItem *visualItemCopy = new SimpleMissionItem(*visualItem, true, this); + qWarning() << visualItem->command(); + qWarning() << visualItem->coordinate(); + qWarning() << visualItemCopy->command(); + qWarning() << visualItemCopy->command(); + qWarning(" "); _currentMissionItems.append(visualItemCopy); } @@ -596,6 +572,8 @@ void WimaController::calcNextPhase() updateCurrentPath(); emit currentMissionItemsChanged(); + + return true; } void WimaController::updateWaypointPath() @@ -616,15 +594,25 @@ void WimaController::updateCurrentPath() void WimaController::updateNextWaypoint() { if (_endWaypointIndex < _missionItems.count()-2) { - disconnect(&_nestPhaseStartWaypointIndex, &Fact::rawValueChanged, this, &WimaController::calcNextPhase); - _nestPhaseStartWaypointIndex.setRawValue(1 + std::max(_endWaypointIndex + 1 - _overlapWaypoints.rawValue().toInt(), 0)); - connect(&_nestPhaseStartWaypointIndex, &Fact::rawValueChanged, this, &WimaController::calcNextPhase); + disconnect(&_nextPhaseStartWaypointIndex, &Fact::rawValueChanged, this, &WimaController::calcNextPhase); + _nextPhaseStartWaypointIndex.setRawValue(1 + std::max(_endWaypointIndex + 1 - _overlapWaypoints.rawValue().toInt(), 0)); + connect(&_nextPhaseStartWaypointIndex, &Fact::rawValueChanged, this, &WimaController::calcNextPhase); } } void WimaController::recalcCurrentPhase() { - _nestPhaseStartWaypointIndex.setRawValue(_startWaypointIndex + 1); + _lastMissionPhaseReached = false; + _nextPhaseStartWaypointIndex.setRawValue(_startWaypointIndex + 1); +} + +bool WimaController::setTakeoffLandPosition() +{ + _takeoffLandPostion.setAltitude(0); + _takeoffLandPostion.setLongitude(_serviceArea.center().longitude()); + _takeoffLandPostion.setLatitude(_serviceArea.center().latitude()); + + return true; } diff --git a/src/Wima/WimaController.h b/src/Wima/WimaController.h index febd6081af7837bd1e0a5cbe4a4480dabbbad5f5..70ed8720e97cadf964e3ddcf482a0520d3a6f5ae 100644 --- a/src/Wima/WimaController.h +++ b/src/Wima/WimaController.h @@ -85,12 +85,8 @@ public: Q_INVOKABLE void nextPhase(); Q_INVOKABLE void previousPhase(); Q_INVOKABLE void resetPhase(); - Q_INVOKABLE void uploadToVehicle(); + Q_INVOKABLE bool uploadToVehicle(); Q_INVOKABLE void removeFromVehicle(); - Q_INVOKABLE void startMission(); - Q_INVOKABLE void abortMission(); - Q_INVOKABLE void pauseMission(); - Q_INVOKABLE void resumeMission(); Q_INVOKABLE void saveToCurrent (); Q_INVOKABLE void saveToFile (const QString& filename); @@ -137,12 +133,13 @@ signals: void currentWaypointPathChanged (void); private slots: - void fetchContainerData (bool valid); - void calcNextPhase (void); + bool fetchContainerData(); + bool calcNextPhase(void); void updateWaypointPath (void); void updateCurrentPath (void); void updateNextWaypoint (void); void recalcCurrentPhase (void); + bool setTakeoffLandPosition(void); private: @@ -161,8 +158,6 @@ private: // _currentMissionItems contains a number of mission items which can be worked off with a single battery chrage QVariantList _waypointPath; // path connecting the items in _missionItems QVariantList _currentWaypointPath; // path connecting the items in _currentMissionItems - QList _startWaypointIndexList; // list containing the last start waypoint indices, used by previosPhase - QGeoCoordinate _takeoffLandPostion; @@ -170,7 +165,7 @@ private: SettingsFact _enableWimaController; // enables or disables the wimaControler SettingsFact _overlapWaypoints; // determines the number of overlapping waypoints between two consecutive mission phases SettingsFact _maxWaypointsPerPhase; // determines the maximum number waypoints per phase - SettingsFact _nestPhaseStartWaypointIndex; // index (displayed on the map, -1 to get index of item in _missionItems) of the mission item + SettingsFact _nextPhaseStartWaypointIndex; // index (displayed on the map, -1 to get index of item in _missionItems) of the mission item // defining the first element of the next phase SettingsFact _showAllMissionItems; // bool value, Determines whether the mission items of the overall mission are displayed or not. SettingsFact _showCurrentMissionItems; // bool value, Determines whether the mission items of the current mission phase are displayed or not. @@ -179,4 +174,5 @@ private: // (which is not part of the return path) of _currentMissionItem int _startWaypointIndex; // indes of the mission item stored in _missionItems defining the first element // (which is not part of the arrival path) of _currentMissionItem + bool _lastMissionPhaseReached; }; diff --git a/src/Wima/WimaDataContainer.cc b/src/Wima/WimaDataContainer.cc index 0190d333a9c5e68dc3ef1707271afc9230ea2b5d..b5447007d29e43aceac9a6bd280135d73408d9bb 100644 --- a/src/Wima/WimaDataContainer.cc +++ b/src/Wima/WimaDataContainer.cc @@ -3,29 +3,10 @@ WimaDataContainer::WimaDataContainer(QObject *parent) : QObject (parent) , _planData (this /* parent */) - , _dataValid (false) { } -/*! - * \fn bool WimaDataContainer::dataValid() const - * Returns \c true if the data is valid, \c false else. - */ -bool WimaDataContainer::dataValid() const/*! - * \fn bool dijkstraAlgorithm(int startIndex, int endIndex, const QList elements, QList &elementPath, double(*distance)(const T &t1, const T &t2)) - * Calculates the shortest path between the elements stored in \a elements. - * The \l {Dijkstra Algorithm} is used to find the shorest path. - * Stores the result inside \a elementPath when sucessfull. - * The function handle \a distance is used to calculate the distance between two elements. The distance must be positive. - * Returns \c true if successful, \c false else. - * - * \sa QList - */ -{ - return _dataValid; -} - /*! * \fn void WimaDataContainer::push(const WimaPlanData &planData) * @@ -36,9 +17,9 @@ bool WimaDataContainer::dataValid() const/*! */ void WimaDataContainer::push(const WimaPlanData &planData) { - setDataValid(false); _planData = planData; - setDataValid(true); + + emit newDataAvailable(); } /*! @@ -53,23 +34,6 @@ const WimaPlanData &WimaDataContainer::pull() const return _planData; } -/*! - * \fn void WimaDataContainer::setDataValid(bool valid) - * - * Sets the validity of the data to \a valid. - * Mainly for internal usage. Should be invoked from \c WimaPlaner only. - * - * \sa WimaPlanData - */ -void WimaDataContainer::setDataValid(bool valid) -{ - if ( _dataValid != valid ) { - _dataValid = valid; - - emit dataValidChanged(_dataValid); - } -} - /*! * \class WimaDataContainer * \brief Data container designed for data exchange between \c WimaPlaner and \c WimaController. diff --git a/src/Wima/WimaDataContainer.h b/src/Wima/WimaDataContainer.h index 4ba9cb48319398ef14625b9fcc1d48b63896b807..a7d680e349a859ed21d50f95940a8bea3dd9504f 100644 --- a/src/Wima/WimaDataContainer.h +++ b/src/Wima/WimaDataContainer.h @@ -17,16 +17,14 @@ public: bool dataValid() const; signals: - void dataValidChanged (bool valid); + void newDataAvailable(void); public slots: void push(const WimaPlanData &planData); const WimaPlanData &pull() const; - void setDataValid(bool valid); private: WimaPlanData _planData; - bool _dataValid; }; diff --git a/src/Wima/WimaPlaner.cc b/src/Wima/WimaPlaner.cc index f1f7f19824973619641d849a05e9da89a8dfff28..872dabe78efbae1e314a42454ed01f31ccb5ca7f 100644 --- a/src/Wima/WimaPlaner.cc +++ b/src/Wima/WimaPlaner.cc @@ -73,11 +73,11 @@ void WimaPlaner::setDataContainer(WimaDataContainer *container) { if (container != nullptr) { if (_container != nullptr) { - disconnect(this, &WimaPlaner::missionReadyChanged, _container, &WimaDataContainer::setDataValid); + disconnect(this, &WimaPlaner::missionReadyChanged, _container, &WimaDataContainer::newDataAvailable); } _container = container; - connect(this, &WimaPlaner::missionReadyChanged, _container, &WimaDataContainer::setDataValid); + connect(this, &WimaPlaner::missionReadyChanged, _container, &WimaDataContainer::newDataAvailable); emit dataContainerChanged(); } @@ -178,32 +178,9 @@ void WimaPlaner::removeAll() emit visualItemsChanged(); } -void WimaPlaner::startMission() -{ - -} - -void WimaPlaner::abortMission() -{ - -} - -void WimaPlaner::pauseMission() -{ - -} - -void WimaPlaner::resumeMission() -{ - -} - bool WimaPlaner::updateMission() { -#if TEST_FUN - TestPlanimetryCalculus::test(); - TestPolygonCalculus::test(); -#endif + QString errorString; setMissionReady(false); #define debug 0 @@ -306,11 +283,7 @@ bool WimaPlaner::updateMission() qgcApp()->showMessage( QString(tr("Not able to calculate the path from takeoff position to measurement area.")).toLocal8Bit().data()); return false; } -// path.clear(); -// path.append(end); -// path.append(start); -// path.append(end); -// path.append(end); + _arrivalPathLength = path.size()-1; // -1: last item is first measurement point for (int i = 1; i < path.count()-1; i++) { sequenceNumber = _missionController->insertSimpleMissionItem(path.value(i), missionItems->count()-1); _missionController->setCurrentPlanViewIndex(sequenceNumber, true); @@ -324,7 +297,7 @@ bool WimaPlaner::updateMission() qgcApp()->showMessage(QString(tr("Not able to calculate the path from measurement area to landing position.")).toLocal8Bit().data()); return false; } - + _returnPathLength = path.size()-1; // -1: fist item is last measurement point for (int i = 1; i < path.count()-1; i++) { sequenceNumber = _missionController->insertSimpleMissionItem(path.value(i), missionItems->count()); _missionController->setCurrentPlanViewIndex(sequenceNumber, true); @@ -338,13 +311,8 @@ bool WimaPlaner::updateMission() qWarning("WimaPlaner::updateMission(): landItem == nullptr"); return false; } else { - Vehicle* controllerVehicle = _masterController->controllerVehicle(); - MAV_CMD landCmd = controllerVehicle->vtol() ? MAV_CMD_NAV_VTOL_LAND : MAV_CMD_NAV_LAND; - if (controllerVehicle->firmwarePlugin()->supportedMissionCommands().contains(landCmd)) { - landItem->setCommand(landCmd); - } else { + if (!_missionController->setLandCommand(*landItem, *_masterController->controllerVehicle())) return false; - } } pushToContainer(); // exchange plan data with the WimaController via the _container @@ -662,23 +630,12 @@ WimaPlanData WimaPlaner::toPlanData() QList rgMissionItems; MissionController::convertToMissionItems(_missionController->visualItems(), rgMissionItems, this); - // remove warnings if you read this -// qWarning("WimaPlaner::toPlanData(): rgMissionItems"); -// for (auto item : rgMissionItems) { -// qWarning() << item->command(); -// qWarning() << item->param1(); -// qWarning() << item->param2(); -// qWarning() << item->param3(); -// qWarning() << item->param4(); -// qWarning() << item->param5(); -// qWarning() << item->param6(); -// qWarning() << item->param7(); -// qWarning(" "); -// } - + // add const qualifier... QList rgMissionItemsConst; - for (auto missionItem : rgMissionItems) - rgMissionItemsConst.append(missionItem); + for (int i = _arrivalPathLength + 1; i < rgMissionItems.size() - _returnPathLength; i++) { // i = _arrivalPathLength + 1: + 1 = MissionSettingsItem ... + rgMissionItemsConst.append(rgMissionItems.value(i)); + } + // store mavlink commands planData.append(rgMissionItemsConst); diff --git a/src/Wima/WimaPlaner.h b/src/Wima/WimaPlaner.h index e06625d084f2bf41fdc6ca41572415da91a475aa..dbc3fe04f1ac1cdf7280b4c5a93d99e7d590a26a 100644 --- a/src/Wima/WimaPlaner.h +++ b/src/Wima/WimaPlaner.h @@ -91,11 +91,6 @@ public: Q_INVOKABLE bool addCorridor(); /// Remove all areas from WimaPlaner and all mission items from MissionController Q_INVOKABLE void removeAll(); - - Q_INVOKABLE void startMission(); - Q_INVOKABLE void abortMission(); - Q_INVOKABLE void pauseMission(); - Q_INVOKABLE void resumeMission(); /// Recalculates vehicle corridor, flight path, etc. Q_INVOKABLE bool updateMission(); @@ -147,4 +142,6 @@ private: WimaMeasurementArea _measurementArea; // measurement area WimaServiceArea _serviceArea; // area for supplying WimaCorridor _corridor; // corridor connecting _measurementArea and _serviceArea + int _arrivalPathLength; // the number waypoints the arrival path consists of (path from takeoff to first measurement point) + int _returnPathLength; // the number waypoints the return path consists of (path from last measurement point to land) };