From ce035182daabb99331c5cbcd2a48b3cc4e9b4027 Mon Sep 17 00:00:00 2001 From: neuenfeldttj Date: Fri, 19 Apr 2024 11:51:15 -0400 Subject: [PATCH 1/4] added names to yaml --- config/teleop.yaml | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/config/teleop.yaml b/config/teleop.yaml index 8c05ad09a..fae9a33da 100644 --- a/config/teleop.yaml +++ b/config/teleop.yaml @@ -121,4 +121,24 @@ teleop: ik_multipliers: x: 1 y: 1 - z: 1 \ No newline at end of file + z: 1 + + cameras: + - name: "ZED" + port: 0 + - name: "Long Range Camera" + port: 1 + - name: "Mast Gimbal Camera" + port: 2 + - name: "Suspension Camera" + port: 3 + - name: "ISH Camera 1" + port: 4 + - name: "ISH Camera 2" + port: 5 + - name: "ISH Camera 3" + port: 6 + - name: "SA Camera 1" + port: 7 + - name: "SA Camera 2" + port: 8 From cf6718fda2f71494c853dcdeb0ae992706cfac2e Mon Sep 17 00:00:00 2001 From: Sarah Shapin Date: Tue, 23 Apr 2024 12:45:14 -0400 Subject: [PATCH 2/4] Update skeleton created --- deps/dawn | 2 +- deps/manif | 2 +- src/teleoperation/backend/consumers.py | 1 + .../frontend/src/components/CameraFeed.vue | 8 ++++++-- .../src/components/CameraSelection.vue | 4 ++++ .../frontend/src/components/Cameras.vue | 20 ++++++++++++------- 6 files changed, 26 insertions(+), 11 deletions(-) diff --git a/deps/dawn b/deps/dawn index e12af2be9..5096820bf 160000 --- a/deps/dawn +++ b/deps/dawn @@ -1 +1 @@ -Subproject commit e12af2be97514e32ccc0d2d1ec1995bec7201c97 +Subproject commit 5096820bfc553c002ab97c05002b3c22c00a7f8f diff --git a/deps/manif b/deps/manif index 03c497df3..c8a9fcbfe 160000 --- a/deps/manif +++ b/deps/manif @@ -1 +1 @@ -Subproject commit 03c497df3364e999cec46fe4f974eae1959a34e1 +Subproject commit c8a9fcbfe157b55a7a860577febdc5350043a722 diff --git a/src/teleoperation/backend/consumers.py b/src/teleoperation/backend/consumers.py index 1b83fdea9..1c6cb6051 100644 --- a/src/teleoperation/backend/consumers.py +++ b/src/teleoperation/backend/consumers.py @@ -130,6 +130,7 @@ def connect(self): self.brushed_motors = rospy.get_param("brushed_motors/controllers") self.xbox_mappings = rospy.get_param("teleop/xbox_mappings") self.sa_config = rospy.get_param("teleop/sa_controls") + self.camera_info = rospy.get_param("teleop/cameras") self.tf_buffer = tf2_ros.Buffer() self.tf_listener = tf2_ros.TransformListener(self.tf_buffer) diff --git a/src/teleoperation/frontend/src/components/CameraFeed.vue b/src/teleoperation/frontend/src/components/CameraFeed.vue index efbce30af..f5c693f9f 100644 --- a/src/teleoperation/frontend/src/components/CameraFeed.vue +++ b/src/teleoperation/frontend/src/components/CameraFeed.vue @@ -25,6 +25,7 @@ import { defineComponent } from 'vue' import { mapActions } from 'vuex' import Checkbox from './Checkbox.vue' +import CameraSelection from './CameraSelection.vue' export default defineComponent({ props: { @@ -42,7 +43,8 @@ export default defineComponent({ } }, components: { - Checkbox + Checkbox, + CameraSelection }, data() { @@ -53,7 +55,9 @@ export default defineComponent({ // IK Mode IKCam: false, - quality: 2 + quality: 2, + + props: [] } }, diff --git a/src/teleoperation/frontend/src/components/CameraSelection.vue b/src/teleoperation/frontend/src/components/CameraSelection.vue index 909dff7c7..228994460 100644 --- a/src/teleoperation/frontend/src/components/CameraSelection.vue +++ b/src/teleoperation/frontend/src/components/CameraSelection.vue @@ -28,6 +28,10 @@ export default { names: { type: Array, required: true + }, + ports: { + type: Array, + required: true } }, data() { diff --git a/src/teleoperation/frontend/src/components/Cameras.vue b/src/teleoperation/frontend/src/components/Cameras.vue index 786f7b60b..6a04cdcc2 100644 --- a/src/teleoperation/frontend/src/components/Cameras.vue +++ b/src/teleoperation/frontend/src/components/Cameras.vue @@ -2,8 +2,8 @@

Cameras ({{ num_available }} available)

-
-
+ + +
+ +
@@ -73,12 +78,13 @@ export default { mission: { type: String, // {'sa', 'ik', 'other'} required: true - } + }, }, data() { return { camsEnabled: reactive(new Array(9).fill(false)), names: reactive(Array.from({ length: 9 }, (_, i) => 'Camera: ' + i)), + ports: reactive(Array.from({ length: 9 }, (_, i) => 'Port: ' + i)), cameraIdx: 0, cameraName: '', capacity: 4, From 865eccaa49ea2864f04aebc17c5a1cea57197b48 Mon Sep 17 00:00:00 2001 From: Sarah Shapin Date: Tue, 23 Apr 2024 19:40:02 -0400 Subject: [PATCH 3/4] Camera Names/Ports (IDs) hard-coded + functional --- src/teleoperation/backend/consumers.py | 10 ++++ src/teleoperation/db.sqlite3 | Bin 139264 -> 139264 bytes .../frontend/src/components/CameraDisplay.vue | 6 ++- .../frontend/src/components/CameraFeed.vue | 2 +- .../frontend/src/components/Cameras.vue | 47 ++++-------------- 5 files changed, 27 insertions(+), 38 deletions(-) diff --git a/src/teleoperation/backend/consumers.py b/src/teleoperation/backend/consumers.py index 1c6cb6051..d1001681a 100644 --- a/src/teleoperation/backend/consumers.py +++ b/src/teleoperation/backend/consumers.py @@ -190,6 +190,8 @@ def receive(self, text_data): self.mast_gimbal(message) elif message["type"] == "max_streams": self.send_res_streams() + elif message["type"] == "camera_info": + self.send_camera_info() elif message["type"] == "sendCameras": self.change_cameras(message) elif message["type"] == "takePanorama": @@ -674,6 +676,14 @@ def send_res_streams(self): self.send(text_data=json.dumps({"type": "max_resolution", "res": res})) self.send(text_data=json.dumps({"type": "max_streams", "streams": streams})) + def send_camera_info(self): + rospy.logerr(self.camera_info) + for x in self.camera_info: + rospy.logerr(x) + names = [ x['name'] for x in self.camera_info ] + ports = [ x['port'] for x in self.camera_info ] + self.send(text_data=json.dumps({"type": "camera_info", "names": names, "ports": ports})) + def capture_panorama(self) -> None: try: response = self.capture_panorama_srv() diff --git a/src/teleoperation/db.sqlite3 b/src/teleoperation/db.sqlite3 index b8faa90637c5ec8f9ac8e6e70a1b1965e05498d0..afc8279548ab6f448704570cf75b25cad52922ce 100644 GIT binary patch delta 25 gcmZoTz|nAkV}dke^h6nF#^}a`)&$0_2}}#*0dx@vfdBvi delta 25 gcmZoTz|nAkV}dke)I=F)#;C@G)&$0_2}}#*0dw{Ue*gdg diff --git a/src/teleoperation/frontend/src/components/CameraDisplay.vue b/src/teleoperation/frontend/src/components/CameraDisplay.vue index 532d7b1d5..9f1feab27 100644 --- a/src/teleoperation/frontend/src/components/CameraDisplay.vue +++ b/src/teleoperation/frontend/src/components/CameraDisplay.vue @@ -3,7 +3,7 @@
- +
@@ -23,6 +23,10 @@ export default defineComponent({ type: Array, required: true }, + ports: { + type: Array, + required: true + }, streamOrder: { //array of camera indices to stream. -1 indicates not used type: Array, diff --git a/src/teleoperation/frontend/src/components/CameraFeed.vue b/src/teleoperation/frontend/src/components/CameraFeed.vue index f5c693f9f..f9029230c 100644 --- a/src/teleoperation/frontend/src/components/CameraFeed.vue +++ b/src/teleoperation/frontend/src/components/CameraFeed.vue @@ -67,7 +67,7 @@ export default defineComponent({ }, mounted: function () { - this.startStream(this.id) + // this.startStream(this.id) // this.$nextTick(() => { // const canvas: HTMLCanvasElement = document.getElementById( // 'stream-' + this.id diff --git a/src/teleoperation/frontend/src/components/Cameras.vue b/src/teleoperation/frontend/src/components/Cameras.vue index 6a04cdcc2..210a28cee 100644 --- a/src/teleoperation/frontend/src/components/Cameras.vue +++ b/src/teleoperation/frontend/src/components/Cameras.vue @@ -2,44 +2,14 @@

Cameras ({{ num_available }} available)

- - -
+
- -
@@ -50,7 +20,7 @@
- +
@@ -83,8 +53,8 @@ export default { data() { return { camsEnabled: reactive(new Array(9).fill(false)), - names: reactive(Array.from({ length: 9 }, (_, i) => 'Camera: ' + i)), - ports: reactive(Array.from({ length: 9 }, (_, i) => 'Port: ' + i)), + names: reactive([]), + ports: reactive([]), cameraIdx: 0, cameraName: '', capacity: 4, @@ -100,6 +70,10 @@ export default { if (msg.type == 'max_streams') { this.streamOrder = new Array(msg.streams).fill(-1) } + if (msg.type == 'camera_info') { + this.names = msg.names + this.ports = msg.ports + } }, capacity: function (newCap, oldCap) { if (newCap < oldCap) { @@ -119,7 +93,8 @@ export default { created: function () { window.setTimeout(() => { - this.sendMessage({ type: 'max_streams' }) + this.sendMessage({ type: 'max_streams' }), + this.sendMessage({ type: 'camera_info' }) }, 250) }, From 5b0990725ce40cb23c443f13d8ed8629430bbd1f Mon Sep 17 00:00:00 2001 From: Sarah Shapin Date: Tue, 23 Apr 2024 19:43:52 -0400 Subject: [PATCH 4/4] removed extra logerr and formatted properly --- src/teleoperation/backend/consumers.py | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/src/teleoperation/backend/consumers.py b/src/teleoperation/backend/consumers.py index 5927226ad..49eb54e8f 100644 --- a/src/teleoperation/backend/consumers.py +++ b/src/teleoperation/backend/consumers.py @@ -476,11 +476,7 @@ def arm_controller_callback(self, msg): def sa_joint_callback(self, msg): names = msg.name z = msg.position[names.index("sa_z")] - self.send( - text_data=json.dumps( - {"type": "sa_z", "sa_z": z} - ) - ) + self.send(text_data=json.dumps({"type": "sa_z", "sa_z": z})) def drive_controller_callback(self, msg): hits = [] @@ -687,11 +683,8 @@ def send_res_streams(self): self.send(text_data=json.dumps({"type": "max_streams", "streams": streams})) def send_camera_info(self): - rospy.logerr(self.camera_info) - for x in self.camera_info: - rospy.logerr(x) - names = [ x['name'] for x in self.camera_info ] - ports = [ x['port'] for x in self.camera_info ] + names = [x["name"] for x in self.camera_info] + ports = [x["port"] for x in self.camera_info] self.send(text_data=json.dumps({"type": "camera_info", "names": names, "ports": ports})) def capture_panorama(self) -> None: