diff --git a/.gitignore b/.gitignore
index 38adffa..f3432ba 100644
--- a/.gitignore
+++ b/.gitignore
@@ -26,3 +26,4 @@ coverage
*.njsproj
*.sln
*.sw?
+.lens/*
\ No newline at end of file
diff --git a/index.html b/index.html
index 38ad202..3f4e04e 100644
--- a/index.html
+++ b/index.html
@@ -2,7 +2,11 @@
+
+
+
+
TFR Mission Control
diff --git a/public/android-chrome-192x192.png b/public/android-chrome-192x192.png
new file mode 100644
index 0000000..3bd4078
Binary files /dev/null and b/public/android-chrome-192x192.png differ
diff --git a/public/android-chrome-512x512.png b/public/android-chrome-512x512.png
new file mode 100644
index 0000000..8ae8079
Binary files /dev/null and b/public/android-chrome-512x512.png differ
diff --git a/public/apple-touch-icon.png b/public/apple-touch-icon.png
new file mode 100644
index 0000000..e66f5df
Binary files /dev/null and b/public/apple-touch-icon.png differ
diff --git a/public/connected-favicon.ico b/public/connected-favicon.ico
new file mode 100644
index 0000000..52cda19
Binary files /dev/null and b/public/connected-favicon.ico differ
diff --git a/public/favicon-16x16.png b/public/favicon-16x16.png
new file mode 100644
index 0000000..b94466d
Binary files /dev/null and b/public/favicon-16x16.png differ
diff --git a/public/favicon-32x32.png b/public/favicon-32x32.png
new file mode 100644
index 0000000..6693a2c
Binary files /dev/null and b/public/favicon-32x32.png differ
diff --git a/public/favicon.ico b/public/favicon.ico
index df36fcf..7b37ffe 100644
Binary files a/public/favicon.ico and b/public/favicon.ico differ
diff --git a/public/site.webmanifest b/public/site.webmanifest
new file mode 100644
index 0000000..21b250a
--- /dev/null
+++ b/public/site.webmanifest
@@ -0,0 +1,11 @@
+{
+ "name": "Mission Control",
+ "short_name": "",
+ "icons": [
+ { "src": "/android-chrome-192x192.png", "sizes": "192x192", "type": "image/png" },
+ { "src": "/android-chrome-512x512.png", "sizes": "512x512", "type": "image/png" }
+ ],
+ "theme_color": "#ffffff",
+ "background_color": "#ffffff",
+ "display": "standalone"
+}
diff --git a/src/App.vue b/src/App.vue
index 92e2747..80da0d2 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -3,8 +3,10 @@ import Navbar from '@/components/Navbar.vue';
import { useRoslibStore } from '@/store/roslibStore';
import { onBeforeUnmount, onMounted } from 'vue';
import { gamepadInit } from '@/lib/controller/gamepad';
-
+import { useFavicon } from '@vueuse/core';
+import { computed } from 'vue';
const rosjs = useRoslibStore();
+
// All global subscribers & publishers that do not belong in a component put in here.
onMounted(() => {
// Create a new connection if the current one is stopped.
@@ -20,6 +22,13 @@ onBeforeUnmount(() => {
// Stop the websocket when the app unloads.
rosjs.stop = true;
});
+
+// changes favicon based on if web socket is connected or not
+const favicon = computed(() =>
+ rosjs.isWebSocketConnected ? 'connected-favicon.ico' : 'favicon.ico',
+);
+
+useFavicon(favicon);
diff --git a/src/assets/global.scss b/src/assets/global.scss
index 628328b..a4e1a1f 100644
--- a/src/assets/global.scss
+++ b/src/assets/global.scss
@@ -2,6 +2,7 @@
--nav-bar-size: 4rem;
--black: #000000;
--dark-grey: #212121;
+ --accent-color: hsl(240, 20%, 20%);
--grey: #303030;
--light-grey: #424242;
--error: #e50000;
@@ -17,6 +18,7 @@
list-style-type: none;
box-sizing: border-box;
text-decoration: none;
+
&:hover {
color: inherit;
text-decoration: none;
@@ -72,6 +74,16 @@ button {
}
}
+.dialogue-box {
+ padding: 10px;
+ border: 1px solid var(--light-grey);
+ border-radius: 5px;
+ background-color: var(--dark-grey);
+ color: var(--white);
+ width: 100%;
+}
+
+// Page Styles
.two-by-three-grid-page {
display: grid;
width: 100vw;
@@ -82,5 +94,10 @@ button {
// Can toggle off for debugging
> * {
overflow: hidden;
+ background-color: var(--accent-color);
+ padding: 5px;
+ border: var(--white) 1px solid;
+ border-radius: 1%;
+ margin: 0px 2px;
}
}
diff --git a/src/components/ExampleComponent.vue b/src/components/ExampleComponent.vue
index c3d7e5c..e4c1107 100644
--- a/src/components/ExampleComponent.vue
+++ b/src/components/ExampleComponent.vue
@@ -24,7 +24,12 @@ const onAndOffHandler = () => {
-
Example Data: {{ example.helloWorldSub.msg?.data }}
+
+
Example Data:
+
+ {{ example.helloWorldSub.msg?.data }}
+
+
diff --git a/src/components/PublishTesterComponent.vue b/src/components/PublishTesterComponent.vue
index 9288d80..c8e3c81 100644
--- a/src/components/PublishTesterComponent.vue
+++ b/src/components/PublishTesterComponent.vue
@@ -114,7 +114,7 @@ function publishTest() {
-
+
Received Message:
{{ receivedMessage }}
@@ -178,17 +178,6 @@ button {
flex-shrink: 0;
}
-.subscriber-box {
- margin-top: 20px;
- padding: 10px;
- border: 1px solid var(--light-grey);
- border-radius: 5px;
- background-color: var(--dark-grey);
- color: var(--white);
- width: 300px;
- max-height: 80px;
-}
-
pre {
white-space: pre-wrap;
word-wrap: break-word;
diff --git a/src/components/arm/ArmModel.vue b/src/components/arm/ArmModel.vue
index e33e6d7..3e7e61d 100644
--- a/src/components/arm/ArmModel.vue
+++ b/src/components/arm/ArmModel.vue
@@ -24,11 +24,4 @@ watch(modelRef, (model) => {
-
+
diff --git a/src/lib/roslibUtils/rosTypes.ts b/src/lib/roslibUtils/rosTypes.ts
index 9be823a..9ff40fa 100644
--- a/src/lib/roslibUtils/rosTypes.ts
+++ b/src/lib/roslibUtils/rosTypes.ts
@@ -11,6 +11,7 @@ export type TopicTypeMap = {
'std_msgs/Float32': StdMsg;
'std_msgs/Time': StdMsg;
'sensor_msgs/msg/CompressedImage': CompressedImage;
+ 'sensor_msgs/msg/NavSatFix': NavSatFix;
};
export type TopicType = keyof TopicTypeMap;
@@ -28,3 +29,23 @@ export type CompressedImage = {
format: 'jpg' | 'png';
data: Uint8Array;
};
+
+//https://docs.ros.org/en/noetic/api/sensor_msgs/html/msg/NavSatFix.html
+export type NavSatFix = {
+ header: {
+ stamp: {
+ sec: number;
+ nanosec: number;
+ };
+ frame_id: string;
+ };
+ status: {
+ status: number;
+ service: number;
+ };
+ latitude: number;
+ longitude: number;
+ altitude: number;
+ position_covariance: number[];
+ position_covariance_type: number;
+};
diff --git a/src/pages/Arm.vue b/src/pages/Arm.vue
index a6ac1af..6aa7032 100644
--- a/src/pages/Arm.vue
+++ b/src/pages/Arm.vue
@@ -9,9 +9,14 @@ import ArmModel from '../components/arm/ArmModel.vue';
-
- Not yet Implemented
-
+
diff --git a/src/pages/Cameras.vue b/src/pages/Cameras.vue
index 52c9632..1bb2b80 100644
--- a/src/pages/Cameras.vue
+++ b/src/pages/Cameras.vue
@@ -7,10 +7,6 @@ import CameraModule from '@/components/camera/CameraModule.vue';
-
Not yet Implemented
- Not yet Implemented
- Not yet Implemented
- Not yet Implemented
diff --git a/src/pages/DevTab.vue b/src/pages/DevTab.vue
index 338a6ac..000b3fe 100644
--- a/src/pages/DevTab.vue
+++ b/src/pages/DevTab.vue
@@ -8,11 +8,6 @@ import PublishTesterComponent from '@/components/PublishTesterComponent.vue';
-
Not yet Implemented
-
Not yet Implemented
-
Not yet Implemented
-
Not yet Implemented
-
Not yet Implemented
diff --git a/src/pages/Help.vue b/src/pages/Help.vue
index 39a5c9a..60f9677 100644
--- a/src/pages/Help.vue
+++ b/src/pages/Help.vue
@@ -1,14 +1,7 @@
-
-
Not yet Implemented
- Not yet Implemented
- Not yet Implemented
- Not yet Implemented
- Not yet Implemented
- Not yet Implemented
-
+
diff --git a/src/pages/Home.vue b/src/pages/Home.vue
index 4984aa5..858484b 100644
--- a/src/pages/Home.vue
+++ b/src/pages/Home.vue
@@ -1,15 +1,15 @@
-
+
-
Not yet Implemented
-
Not yet Implemented
-
Not yet Implemented
-
Not yet Implemented
-
Not yet Implemented
-
Not yet Implemented
+
+
+
diff --git a/src/pages/Map.vue b/src/pages/Map.vue
index df2a218..522f3b8 100644
--- a/src/pages/Map.vue
+++ b/src/pages/Map.vue
@@ -5,8 +5,6 @@ import InteractiveMap from '@/components/map/InteractiveMap.vue';
-
Not yet Implemented
- Not yet Implemented
diff --git a/src/pages/Science.vue b/src/pages/Science.vue
index 4ba0316..87e6127 100644
--- a/src/pages/Science.vue
+++ b/src/pages/Science.vue
@@ -1,14 +1,7 @@
-
-
Not yet Implemented
- Not yet Implemented
- Not yet Implemented
- Not yet Implemented
- Not yet Implemented
- Not yet Implemented
-
+
diff --git a/src/pages/Settings.vue b/src/pages/Settings.vue
index 524afe4..b2f5e81 100644
--- a/src/pages/Settings.vue
+++ b/src/pages/Settings.vue
@@ -6,11 +6,6 @@ import ConnectionSettings from '@/components/settings/ConnectionSettings.vue';
-
Not yet Implemented
- Not yet Implemented
- Not yet Implemented
- Not yet Implemented
- Not yet Implemented
diff --git a/src/pages/Telemetry.vue b/src/pages/Telemetry.vue
index dcdcd5e..ea969c3 100644
--- a/src/pages/Telemetry.vue
+++ b/src/pages/Telemetry.vue
@@ -145,10 +145,6 @@ function getMoteusStateProxy(
- Not yet Implemented
- Not yet Implemented
- Not yet Implemented
- Not yet Implemented
diff --git a/src/store/mapStore.ts b/src/store/mapStore.ts
new file mode 100644
index 0000000..8ac620c
--- /dev/null
+++ b/src/store/mapStore.ts
@@ -0,0 +1,41 @@
+import { defineStore } from 'pinia';
+import { createSubscriber } from '@/lib/roslibUtils/createSubscriber';
+import { useRoslibStore } from '@/store/roslibStore';
+
+// 0th Define any constants above
+// const TOPIC_MESSAGE_TYPE: TopicType = 'sensor_msgs/NavSatFix';
+
+export const useMapStore = defineStore('example', () => {
+ // 1st define any dependency stores
+ // This will most likely only be useRoslibStore
+ // 2nd define any state here in ref<>()
+ const mapNavSub = createSubscriber({
+ topicName: '/fix',
+ topicType: 'sensor_msgs/msg/NavSatFix',
+ //startingDefaultValue: { data: 'Hello World' },
+ });
+
+ function myFunction() {
+ const ros = useRoslibStore();
+ console.log(mapNavSub.msg.value);
+ console.log(mapNavSub.msg);
+ ros.ros.getTopics((bob) => {
+ console.log(bob);
+ });
+ }
+
+ // Call `myFunction` every 1000 milliseconds (1 second)
+ setInterval(myFunction, 1000);
+ //3rd define any getters in computed
+ //const allCapsData = computed(() => helloWorldSub.msg.value?.data.toUpperCase());
+ //4th define any functions
+ /*
+ const helloWorldPub = createPublisher({
+ topicName: TOPIC_NAME,
+ topicType: TOPIC_MESSAGE_TYPE,
+ });
+ */
+
+ // Return all state, getters and functions
+ return mapNavSub;
+});