From b0e715377e8d4f6d2da310887369f9b7b23a7087 Mon Sep 17 00:00:00 2001 From: Kush Makkapati Date: Sat, 2 Aug 2025 21:40:45 +0100 Subject: [PATCH 1/2] Add moveable mission home location --- .../components/mapComponents/homeMarker.jsx | 9 ++- gcs/src/components/missions/missionsMap.jsx | 16 +++++ gcs/src/helpers/dataFormatters.js | 2 +- gcs/src/missions.jsx | 63 ++++++++++++++++++- 4 files changed, 86 insertions(+), 4 deletions(-) diff --git a/gcs/src/components/mapComponents/homeMarker.jsx b/gcs/src/components/mapComponents/homeMarker.jsx index 5811106b7..2f2345631 100644 --- a/gcs/src/components/mapComponents/homeMarker.jsx +++ b/gcs/src/components/mapComponents/homeMarker.jsx @@ -11,7 +11,12 @@ import resolveConfig from "tailwindcss/resolveConfig" import tailwindConfig from "../../../tailwind.config" const tailwindColors = resolveConfig(tailwindConfig).theme.colors -export default function HomeMarker({ lat, lon, lineTo = null }) { +export default function HomeMarker({ + lat, + lon, + updateMissionHomePositionDragCb, + lineTo = null, +}) { return ( <> {lineTo !== null && ( { + updateMissionHomePosition(x, y) + }} lineTo={ filteredMissionItems.length > 0 && [ intToCoord(filteredMissionItems[0].y), @@ -331,6 +335,18 @@ function MapSectionNonMemo({ + { + updateMissionHomePosition( + clickedGpsCoords.lat, + clickedGpsCoords.lng, + ) + }} + > +
+

Set home position

+
+
)} diff --git a/gcs/src/helpers/dataFormatters.js b/gcs/src/helpers/dataFormatters.js index 252435115..6fd634e3a 100644 --- a/gcs/src/helpers/dataFormatters.js +++ b/gcs/src/helpers/dataFormatters.js @@ -8,7 +8,7 @@ export function intToCoord(val) { } export function coordToInt(val) { - return val * 1e7 + return parseInt(val * 1e7) } export const dataFormatters = { diff --git a/gcs/src/missions.jsx b/gcs/src/missions.jsx index 573478131..22814e489 100644 --- a/gcs/src/missions.jsx +++ b/gcs/src/missions.jsx @@ -11,7 +11,8 @@ import { ResizableBox } from "react-resizable" import { v4 as uuidv4 } from "uuid" // Custom component and helpers -import { Button, Divider, FileButton, Tabs } from "@mantine/core" +import { Button, Divider, FileButton, Tabs, Tooltip } from "@mantine/core" +import { IconInfoCircle } from "@tabler/icons-react" import Layout from "./components/layout" import MissionItemsTable from "./components/missions/missionItemsTable" import MissionsMapSection from "./components/missions/missionsMap" @@ -403,6 +404,53 @@ export default function Missions() { } } + function updateMissionHomePosition(lat, lon) { + const newHomePosition = { + lat: Number.isInteger(lat) ? lat : coordToInt(lat), + lon: Number.isInteger(lon) ? lon : coordToInt(lon), + alt: 0.1, + } + setHomePosition(newHomePosition) + + // Also update the first waypoint if it is a home position waypoint + if (missionItems.length > 0 && isGlobalFrameHomeCommand(missionItems[0])) { + // Check if the first item is a home position command + const updatedMissionItems = [...missionItems] + updatedMissionItems[0] = { + ...updatedMissionItems[0], + x: newHomePosition.lat, + y: newHomePosition.lon, + } + setMissionItems(updatedMissionItems) + } else { + // If the first item is not a home position command, add a new home position item + const newHomeMissionItem = { + id: uuidv4(), + seq: 0, + x: newHomePosition.lat, + y: newHomePosition.lon, + z: 0.1, + frame: parseInt( + Object.keys(MAV_FRAME_LIST).find( + (key) => MAV_FRAME_LIST[key] === "MAV_FRAME_GLOBAL", + ), + ), + command: 16, // MAV_CMD_NAV_WAYPOINT + param1: 0, + param2: 0, + param3: 0, + param4: 0, + current: 0, + autocontinue: 1, + target_component: targetInfo.target_component, + target_system: targetInfo.target_system, + mission_type: 0, + mavpackettype: "MISSION_ITEM_INT", + } + setMissionItems((prevItems) => [newHomeMissionItem, ...prevItems]) + } + } + return ( {/* Banner to let people know that things are still under development */} @@ -472,7 +520,17 @@ export default function Missions() {
-

Home location

+

+ Home location{" "} + + + + + +

Lat:{" "} {intToCoord(homePosition?.lat).toFixed( @@ -509,6 +567,7 @@ export default function Missions() { markerDragEndCallback={updateMissionItem} rallyDragEndCallback={updateRallyItem} addNewMissionItem={addNewMissionItem} + updateMissionHomePosition={updateMissionHomePosition} mapId="missions" />

From dad5df2c47490f88f4a7340025b225bc7c63f6b6 Mon Sep 17 00:00:00 2001 From: Kush Makkapati Date: Sat, 2 Aug 2025 21:44:15 +0100 Subject: [PATCH 2/2] Remove unused deconstructed var --- gcs/src/components/missions/missionsMap.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gcs/src/components/missions/missionsMap.jsx b/gcs/src/components/missions/missionsMap.jsx index 3e955bd46..d869ca8ad 100644 --- a/gcs/src/components/missions/missionsMap.jsx +++ b/gcs/src/components/missions/missionsMap.jsx @@ -290,7 +290,7 @@ function MapSectionNonMemo({ { + updateMissionHomePositionDragCb={({ x, y }) => { updateMissionHomePosition(x, y) }} lineTo={