diff --git a/src/components/BreadCrumbTrail.tsx b/src/components/BreadCrumbTrail.tsx index 6345b2f..90fcd45 100644 --- a/src/components/BreadCrumbTrail.tsx +++ b/src/components/BreadCrumbTrail.tsx @@ -3,7 +3,7 @@ import React, { useState, useEffect } from 'react'; import { Polyline, Marker, Popup } from 'react-leaflet'; import { useROS } from '@/ros/ROSContext'; -import { useWaypoints } from '@/contexts/WaypointContext'; +import { useWaypoints, LatLngTuple } from '@/contexts/WaypointContext'; import ROSLIB from 'roslib'; import L from 'leaflet' @@ -18,6 +18,8 @@ const BreadcrumbTrail: React.FC = () => { const [breadcrumbs, setBreadcrumbs] = useState([]); const [paused, setPaused] = useState(false); const [lastFix, setLastFix] = useState(null); + const [antennaLoc, setAntennaLoc] = useState([0, 0]); + const [antennaHead, setAntennaHead] = useState(0); useEffect(() => { if (!ros) return; @@ -28,6 +30,18 @@ const BreadcrumbTrail: React.FC = () => { messageType: 'sensor_msgs/NavSatFix', }); + const antennaFixTopic = new ROSLIB.Topic({ + ros, + name: '/base_station/fix', + messageType: 'sensor_msgs/NavSatFix', + }); + + const antennaBearingTopic = new ROSLIB.Topic({ + ros, + name: '/antenna/tracker_bearing', + messageType: 'std_msgs/Float32', + }); + const handleFix = (message: any) => { if (paused) return; // Assuming the /fix message contains 'latitude' and 'longitude' @@ -40,9 +54,25 @@ const BreadcrumbTrail: React.FC = () => { setLastFix(newFix); }; + const handleAntennaFix = (message: any) => { + // Assuming the /fix message contains 'latitude' and 'longitude' + const { latitude, longitude } = message; + setAntennaLoc([latitude, longitude]); + }; + + const handleAntennaBearing = (message: any) => { + // Assuming the message contains float32 + const angle = message.data * 360; + setAntennaHead(angle); + }; + fixTopic.subscribe(handleFix); + antennaFixTopic.subscribe(handleAntennaFix); + antennaBearingTopic.subscribe(handleAntennaBearing); return () => { fixTopic.unsubscribe(handleFix); + antennaFixTopic.unsubscribe(handleAntennaFix); + antennaBearingTopic.unsubscribe(handleAntennaBearing); }; }, [ros, paused]); @@ -107,17 +137,17 @@ const BreadcrumbTrail: React.FC = () => { maxWidth: '300px', }} > -
+
GPS Fix Status
-
+
ROS Connection:{' '} {connectionStatus}
{lastFix ? ( -
+
Last Fix:
{/* TODO: Is this enough percision? */} @@ -128,15 +158,26 @@ const BreadcrumbTrail: React.FC = () => { Time: {new Date(lastFix.timestamp).toLocaleTimeString()}
) : ( -
No fix data received yet.
+
No fix data received yet.
)} -
+
Total Fixes: {breadcrumbs.length}
-
+
Total Distance: {totalDistance.toFixed(2)} km
-
+
+ Antenna Location: +
+ {/* TODO: Is this enough percision? */} + Lat: {antennaLoc[0].toFixed(6)} +
+ Lon: {antennaLoc[1].toFixed(6)} +
+
+ Antenna Heading: {antennaHead.toFixed(1)}° +
+