1 00:00:05,239 --> 00:00:07,259 [music] 2 00:00:09,825 --> 00:00:11,845 [music] 3 00:00:16,560 --> 00:00:19,760 Hello, Pyon AU26 and choir to the 4 00:00:19,760 --> 00:00:22,800 hecklers in the first row. I hope you've 5 00:00:22,800 --> 00:00:25,039 had a nice break/change over and that 6 00:00:25,039 --> 00:00:28,400 you are in ballroom 3 for a talk about 7 00:00:28,400 --> 00:00:31,199 launching rockets with Python by Amber 8 00:00:31,199 --> 00:00:34,079 Taylor and Freddy Mccclaclin. Please 9 00:00:34,079 --> 00:00:36,559 give them a big hand as they get up on 10 00:00:36,559 --> 00:00:40,010 the stage. [applause and cheering] 11 00:00:47,520 --> 00:00:48,399 All right. 12 00:00:48,399 --> 00:00:50,879 Hello everyone. It's good to see so many 13 00:00:50,879 --> 00:00:52,879 people coming to an aerospace talk at 14 00:00:52,879 --> 00:00:54,719 Pyon, which is great. 15 00:00:54,719 --> 00:00:56,079 Um, I'm Freddy. 16 00:00:56,079 --> 00:00:56,960 I'm Amber. 17 00:00:56,960 --> 00:00:58,480 And we're here to talk about launching 18 00:00:58,480 --> 00:01:00,960 rockets with Python. 19 00:01:00,960 --> 00:01:02,399 Yeah. 20 00:01:02,399 --> 00:01:05,199 So, I we're both students at RMIT. I 21 00:01:05,199 --> 00:01:07,040 study computer science and computer 22 00:01:07,040 --> 00:01:08,560 engineering, and I was lucky enough to 23 00:01:08,560 --> 00:01:10,720 lead the team this year for RMIT's 24 00:01:10,720 --> 00:01:11,680 rocketry team. 25 00:01:11,680 --> 00:01:13,520 Yep. And I'm just studying base computer 26 00:01:13,520 --> 00:01:15,520 science. Um, and I was the ground 27 00:01:15,520 --> 00:01:17,040 control lead. So, I'm the one who's 28 00:01:17,040 --> 00:01:18,479 pushing the button to launch the rocket. 29 00:01:18,479 --> 00:01:21,439 and operating that system. Yeah. 30 00:01:21,439 --> 00:01:24,799 And before we start, here's our rocket. 31 00:01:24,799 --> 00:01:27,799 Yeah. 32 00:01:34,321 --> 00:01:36,341 [applause] 33 00:01:37,520 --> 00:01:39,600 Uh yeah, that was our rocket Horizon. 34 00:01:39,600 --> 00:01:42,000 And Horizon uh is part of competition 35 00:01:42,000 --> 00:01:44,720 rocketry. Competition rocketry has two 36 00:01:44,720 --> 00:01:48,000 main scoring criteria. That's to fly as 37 00:01:48,000 --> 00:01:50,320 close to 10,000 feet as possible and 38 00:01:50,320 --> 00:01:52,320 then to try and make as much stuff as 39 00:01:52,320 --> 00:01:53,920 you can yourself because it's a student 40 00:01:53,920 --> 00:01:56,159 competition. 41 00:01:56,159 --> 00:01:57,680 And this is what I tell everyone 42 00:01:57,680 --> 00:01:59,360 competition rocketry is like, you know, 43 00:01:59,360 --> 00:02:00,719 you're launching in the desert and 44 00:02:00,719 --> 00:02:02,640 you're going like supersonic and all 45 00:02:02,640 --> 00:02:05,600 that kind of cool stuff. And that's what 46 00:02:05,600 --> 00:02:09,920 it's actually like. Um, yeah, that's the 47 00:02:09,920 --> 00:02:12,480 pretty much the physical embodiment of a 48 00:02:12,480 --> 00:02:14,080 lot of the best code I've written at 49 00:02:14,080 --> 00:02:17,040 some of these competitions. [laughter] 50 00:02:17,040 --> 00:02:19,200 Um, and this is a competition rocket. 51 00:02:19,200 --> 00:02:20,560 There's multiple different systems, and 52 00:02:20,560 --> 00:02:22,319 this is only a few of them. But the 53 00:02:22,319 --> 00:02:23,920 three main systems we're here to talk 54 00:02:23,920 --> 00:02:27,040 about today are avionics, the ground 55 00:02:27,040 --> 00:02:29,200 support equipment, and the ground 56 00:02:29,200 --> 00:02:31,520 control station, which controls all of 57 00:02:31,520 --> 00:02:35,239 these electronic systems. 58 00:02:36,239 --> 00:02:39,040 And then all of this is taken to the 59 00:02:39,040 --> 00:02:40,560 international rocket engineering 60 00:02:40,560 --> 00:02:43,040 competition uh where 150 teams from 61 00:02:43,040 --> 00:02:45,200 around the world come together to 62 00:02:45,200 --> 00:02:46,720 compete in a range of different 63 00:02:46,720 --> 00:02:49,360 categories in Texas. There's categories 64 00:02:49,360 --> 00:02:52,160 for aerospace particularly and a lot of 65 00:02:52,160 --> 00:02:53,120 different disciplines. There's 66 00:02:53,120 --> 00:02:55,360 simulation and so forth and there's one 67 00:02:55,360 --> 00:02:57,360 in particular for software. 68 00:02:57,360 --> 00:02:59,920 Yeah. And that is the live telemetry 69 00:02:59,920 --> 00:03:01,599 visualization competition which tests 70 00:03:01,599 --> 00:03:03,760 our ability to record live telemetry 71 00:03:03,760 --> 00:03:06,480 either during the flight or before the 72 00:03:06,480 --> 00:03:08,560 flight. And we're recording telemetry. 73 00:03:08,560 --> 00:03:10,319 Some teams can do live video as well. 74 00:03:10,319 --> 00:03:12,959 And the focus is mainly on um clear 75 00:03:12,959 --> 00:03:14,480 communication, unique and pretty 76 00:03:14,480 --> 00:03:16,159 visualization sort of doing something 77 00:03:16,159 --> 00:03:18,000 novel with the data. Uh we built our 78 00:03:18,000 --> 00:03:19,840 ground control station for both before 79 00:03:19,840 --> 00:03:21,680 flight and during the flight and gave 80 00:03:21,680 --> 00:03:24,159 ourselves a few requirements such as um 81 00:03:24,159 --> 00:03:25,760 monitoring as we actually fill the 82 00:03:25,760 --> 00:03:27,680 rocket with propellant as well as 83 00:03:27,680 --> 00:03:29,840 showing useful data from the systems. We 84 00:03:29,840 --> 00:03:31,519 get the temperature, pressure, weight 85 00:03:31,519 --> 00:03:34,799 and everything. But let's step back a 86 00:03:34,799 --> 00:03:37,280 bit. What is a ground control station? 87 00:03:37,280 --> 00:03:39,280 How do they work? You know, what are we 88 00:03:39,280 --> 00:03:41,120 looking at? These are the existing 89 00:03:41,120 --> 00:03:43,599 ground control systems that you'd find. 90 00:03:43,599 --> 00:03:44,959 They're really simple. They're just kind 91 00:03:44,959 --> 00:03:47,200 of a a box almost like a plunger but not 92 00:03:47,200 --> 00:03:47,942 quite 93 00:03:47,942 --> 00:03:48,000 [laughter] 94 00:03:48,000 --> 00:03:50,159 um with a few switches, lights. They 95 00:03:50,159 --> 00:03:52,400 tell you when the rocket's ready to go. 96 00:03:52,400 --> 00:03:53,760 They're not very competitive. They're 97 00:03:53,760 --> 00:03:56,720 not very, I guess, precise. We need 98 00:03:56,720 --> 00:03:58,000 something more fine and tuned. We want 99 00:03:58,000 --> 00:03:59,760 to be able to control the rocket, fill 100 00:03:59,760 --> 00:04:01,680 it, purge it, do all of that stuff. 101 00:04:01,680 --> 00:04:03,439 Plus, we want something that looks cool. 102 00:04:03,439 --> 00:04:06,480 Uh is safer, more user friendly, has 103 00:04:06,480 --> 00:04:07,920 built-in features for that sort of 104 00:04:07,920 --> 00:04:10,640 stuff. Yeah. And so we built our own 105 00:04:10,640 --> 00:04:12,799 custom ground control station using 106 00:04:12,799 --> 00:04:16,639 Python and C++. And this is a full suite 107 00:04:16,639 --> 00:04:18,160 launching the rocket, monitoring the 108 00:04:18,160 --> 00:04:20,720 systems, everything all in one thing. 109 00:04:20,720 --> 00:04:22,639 Runs on a Raspberry Pi at less than 5% 110 00:04:22,639 --> 00:04:26,960 CPU, which is pretty impressive. And um 111 00:04:26,960 --> 00:04:28,160 this system connects to all the 112 00:04:28,160 --> 00:04:29,759 auxiliary parts. So we have radio 113 00:04:29,759 --> 00:04:31,680 antennas plugging in. We have control 114 00:04:31,680 --> 00:04:33,840 boxes. Uh the flight computers are 115 00:04:33,840 --> 00:04:35,759 remotely accessed. That sort of stuff. 116 00:04:35,759 --> 00:04:37,600 This collects telemetry and lets us 117 00:04:37,600 --> 00:04:40,479 launch our rocket with our control 118 00:04:40,479 --> 00:04:43,759 pendant. Uh we actually we built this in 119 00:04:43,759 --> 00:04:46,320 a Pelican case. It's a laser cut surface 120 00:04:46,320 --> 00:04:49,120 and everything. Um 121 00:04:49,120 --> 00:04:51,360 and this is a custom USB device we've 122 00:04:51,360 --> 00:04:53,600 made. Uh it's for hybrid launch systems. 123 00:04:53,600 --> 00:04:55,520 So you can see it's got filling and 124 00:04:55,520 --> 00:04:57,600 purging of the nitrous. We can have 125 00:04:57,600 --> 00:05:00,639 oxygen as well. Um and originally we 126 00:05:00,639 --> 00:05:02,000 wanted to stand next to the rocket and 127 00:05:02,000 --> 00:05:03,199 sort of mess with the valves on the 128 00:05:03,199 --> 00:05:04,560 tanks, but we were told we can't do 129 00:05:04,560 --> 00:05:08,160 that. it's too dangerous. Um, and we 130 00:05:08,160 --> 00:05:09,520 were told we have to be far away from 131 00:05:09,520 --> 00:05:11,680 it. So, this is our way of remotely 132 00:05:11,680 --> 00:05:14,479 launching the rocket. Um, and you can 133 00:05:14,479 --> 00:05:16,000 see we can also visualize the input 134 00:05:16,000 --> 00:05:19,039 state on software as well. And you might 135 00:05:19,039 --> 00:05:21,120 be wondering why not use software to do 136 00:05:21,120 --> 00:05:24,240 the launching. Well, hardware means we 137 00:05:24,240 --> 00:05:26,080 can have more safety checks. There's a 138 00:05:26,080 --> 00:05:28,240 key you have to physically um plug into 139 00:05:28,240 --> 00:05:32,080 the device and turn. Um, and it means we 140 00:05:32,080 --> 00:05:33,520 can restrict who's launching the rocket 141 00:05:33,520 --> 00:05:35,520 to only people who are trained who can 142 00:05:35,520 --> 00:05:37,840 safely handle those kinds of systems 143 00:05:37,840 --> 00:05:40,320 because rocketry is dangerous and you 144 00:05:40,320 --> 00:05:42,800 can get very hurt if things go wrong. 145 00:05:42,800 --> 00:05:46,160 Um, so this controller interfaces as a 146 00:05:46,160 --> 00:05:47,840 USB controller which isn't that 147 00:05:47,840 --> 00:05:50,080 different from a game pad. Um, which 148 00:05:50,080 --> 00:05:52,240 actually reminds me, 149 00:05:52,240 --> 00:05:55,240 um, 150 00:05:58,240 --> 00:06:00,000 I'm a software engineer and a 151 00:06:00,000 --> 00:06:01,440 programmer. I don't know much about 152 00:06:01,440 --> 00:06:03,680 electronics or electrical engineering. 153 00:06:03,680 --> 00:06:06,160 Um, and I was a bit daunted by this 154 00:06:06,160 --> 00:06:08,560 project because I don't know how to make 155 00:06:08,560 --> 00:06:11,360 a PCB, but we found one that actually is 156 00:06:11,360 --> 00:06:14,000 used in arcade machines. Um, so like 157 00:06:14,000 --> 00:06:16,000 Pac-Man or whatever with the joysticks 158 00:06:16,000 --> 00:06:18,639 and everything. Um, and it's responsive. 159 00:06:18,639 --> 00:06:20,560 if it's reliable and it does everything 160 00:06:20,560 --> 00:06:23,520 we need. Um, and on the software side, 161 00:06:23,520 --> 00:06:25,520 this plugs into Pygame, which is 162 00:06:25,520 --> 00:06:27,120 probably a bit of a strange choice for 163 00:06:27,120 --> 00:06:30,160 rockets, but we can run a headless 164 00:06:30,160 --> 00:06:32,319 Pygame interface in the back and and and 165 00:06:32,319 --> 00:06:34,880 use that instead of writing our own HID 166 00:06:34,880 --> 00:06:37,039 human interface device library. It's a 167 00:06:37,039 --> 00:06:39,554 bit cursed, but I'm proud of it. 168 00:06:39,554 --> 00:06:41,199 [laughter] 169 00:06:41,199 --> 00:06:43,759 Um on board the rocket is our student 170 00:06:43,759 --> 00:06:45,759 researched and developed flight computer 171 00:06:45,759 --> 00:06:48,240 which is a custom PCB not made by me but 172 00:06:48,240 --> 00:06:50,560 by the avionics team nicknamed 173 00:06:50,560 --> 00:06:52,240 Australas. This collects the telemetry 174 00:06:52,240 --> 00:06:53,520 about the rocket. It transmits it 175 00:06:53,520 --> 00:06:55,919 through radio. Um detects the flight 176 00:06:55,919 --> 00:06:57,360 state and deploys the recovery so the 177 00:06:57,360 --> 00:07:00,479 rocket can safely land. Um this is I've 178 00:07:00,479 --> 00:07:02,160 heard very fun to assemble. It's got 179 00:07:02,160 --> 00:07:05,680 about 600 components on the board which 180 00:07:05,680 --> 00:07:08,240 is a lot for a PCB. How big do you have 181 00:07:08,240 --> 00:07:10,479 a Do you have it on you, Freddy? 182 00:07:10,479 --> 00:07:12,319 Yeah, I afterwards I can show you. I've 183 00:07:12,319 --> 00:07:14,400 got it. Not on me, but yeah, it's very 184 00:07:14,400 --> 00:07:15,120 small. It's like that. 185 00:07:15,120 --> 00:07:18,240 Yeah, very tedious and errors. 186 00:07:18,240 --> 00:07:19,599 Oh, yeah. A lot of 187 00:07:19,599 --> 00:07:23,360 foreshadowing there. [laughter] 188 00:07:23,360 --> 00:07:25,840 And uh so getting into the software, 189 00:07:25,840 --> 00:07:28,319 when we arrive on a launch day, um the 190 00:07:28,319 --> 00:07:30,400 operator opens up the computer and all 191 00:07:30,400 --> 00:07:31,840 they have to do to get this entire thing 192 00:07:31,840 --> 00:07:34,479 spun up is just write rocket run in the 193 00:07:34,479 --> 00:07:37,039 terminal. That's it. Um, we wanted a 194 00:07:37,039 --> 00:07:38,639 system that would start up everything 195 00:07:38,639 --> 00:07:42,080 automatically, very quick and easy. Um, 196 00:07:42,080 --> 00:07:44,080 and there are GCS systems out there that 197 00:07:44,080 --> 00:07:46,479 are like big monolithic single packages, 198 00:07:46,479 --> 00:07:48,319 like a single binary or just like one 199 00:07:48,319 --> 00:07:50,319 thing. Um, but we wanted more 200 00:07:50,319 --> 00:07:52,560 flexibility as mentioned by Amber to 201 00:07:52,560 --> 00:07:55,280 kind of do whatever we wanted. So, we 202 00:07:55,280 --> 00:07:57,440 opted for spawning separate processes 203 00:07:57,440 --> 00:07:59,039 for whatever we needed and then piping 204 00:07:59,039 --> 00:08:01,120 it back to a manager, which I'll touch 205 00:08:01,120 --> 00:08:03,039 on. Um, and then we start up everything. 206 00:08:03,039 --> 00:08:04,720 We start up binaries. We start up web 207 00:08:04,720 --> 00:08:08,400 servers like other Python processes. 208 00:08:08,400 --> 00:08:10,240 And this is exactly how we start it up. 209 00:08:10,240 --> 00:08:12,800 The GCS starts up with a click CLI. And 210 00:08:12,800 --> 00:08:15,120 we have a few different modes. So the 211 00:08:15,120 --> 00:08:17,280 main one is the run mode. We start it up 212 00:08:17,280 --> 00:08:18,879 in like a production kind of release 213 00:08:18,879 --> 00:08:20,800 thing where it only starts up what it 214 00:08:20,800 --> 00:08:22,720 needs for that. Um tweaks a few little 215 00:08:22,720 --> 00:08:24,879 things. And we have a dev mode which 216 00:08:24,879 --> 00:08:27,120 will start it up with debug tools and 217 00:08:27,120 --> 00:08:28,879 all the extra fluff that you don't want 218 00:08:28,879 --> 00:08:31,360 when you're launching a rocket. 219 00:08:31,360 --> 00:08:34,080 And in that same file, uh, we start up 220 00:08:34,080 --> 00:08:36,159 all of our services and everything boots 221 00:08:36,159 --> 00:08:38,560 quite quickly. Uh, which is important 222 00:08:38,560 --> 00:08:40,719 because when we're setting up, we want 223 00:08:40,719 --> 00:08:41,919 it to be quick, but also when we're 224 00:08:41,919 --> 00:08:44,399 developing, we want it to be quick. So, 225 00:08:44,399 --> 00:08:45,920 because it starts up so quickly and 226 00:08:45,920 --> 00:08:47,600 starts all these services quickly, we 227 00:08:47,600 --> 00:08:49,440 can just, you know, make a change and 228 00:08:49,440 --> 00:08:50,880 then start the whole thing up rather 229 00:08:50,880 --> 00:08:53,040 than making like a single separate, you 230 00:08:53,040 --> 00:08:54,560 know, dev harness to just to start this 231 00:08:54,560 --> 00:08:57,200 one thing up. And this all goes through 232 00:08:57,200 --> 00:09:00,959 our custom process manager. 233 00:09:00,959 --> 00:09:03,120 Each service has its own little startup 234 00:09:03,120 --> 00:09:04,399 function based on the environment and 235 00:09:04,399 --> 00:09:05,680 the configuration that we're currently 236 00:09:05,680 --> 00:09:08,000 in as seen on the left. Um, just a 237 00:09:08,000 --> 00:09:09,360 little excerpt. And then on the right, 238 00:09:09,360 --> 00:09:11,680 we've got our logged subprocess object 239 00:09:11,680 --> 00:09:13,279 which does all of our custom process 240 00:09:13,279 --> 00:09:15,519 management stuff and it's based on the 241 00:09:15,519 --> 00:09:17,680 Python subprocess library. It's pretty 242 00:09:17,680 --> 00:09:20,399 similar. It uses it. And the key 243 00:09:20,399 --> 00:09:22,320 difference is that it unifies the output 244 00:09:22,320 --> 00:09:24,320 from everything that's running on the 245 00:09:24,320 --> 00:09:27,120 computer. And uh don't look too hard at 246 00:09:27,120 --> 00:09:28,399 that code or I'll start getting 247 00:09:28,399 --> 00:09:30,511 questions about it. 248 00:09:30,511 --> 00:09:32,800 [snorts] But this is what it looks like. 249 00:09:32,800 --> 00:09:35,920 So from our custom manager, it combines 250 00:09:35,920 --> 00:09:37,519 all of the output from everything and 251 00:09:37,519 --> 00:09:40,800 logs it in this um in this window here. 252 00:09:40,800 --> 00:09:42,160 It's all got log levels. It's all 253 00:09:42,160 --> 00:09:44,240 colored so it looks pretty. And it shows 254 00:09:44,240 --> 00:09:45,920 the operator like just what they need 255 00:09:45,920 --> 00:09:47,920 based on whatever configuration you're 256 00:09:47,920 --> 00:09:49,440 using. 257 00:09:49,440 --> 00:09:50,959 That's important because we need to know 258 00:09:50,959 --> 00:09:54,880 if something goes wrong um on our 259 00:09:54,880 --> 00:09:56,800 system, our GCS system or another 260 00:09:56,800 --> 00:09:59,279 system. And this kind of terminal 261 00:09:59,279 --> 00:10:00,959 interface here is a very simple way to 262 00:10:00,959 --> 00:10:03,519 do that. And it's all backed up. It's 263 00:10:03,519 --> 00:10:05,040 all logged on different levels. 264 00:10:05,040 --> 00:10:07,040 Everything that's hidden is logged. So 265 00:10:07,040 --> 00:10:08,480 something goes wrong, we can go back and 266 00:10:08,480 --> 00:10:09,760 look at this and see exactly what 267 00:10:09,760 --> 00:10:11,760 happened from anything at any time, 268 00:10:11,760 --> 00:10:17,120 which uh has come quite useful. 269 00:10:17,120 --> 00:10:19,040 So, back to our overview. Once 270 00:10:19,040 --> 00:10:20,240 everything's set up, we have control 271 00:10:20,240 --> 00:10:21,920 over all these different streams and 272 00:10:21,920 --> 00:10:24,560 they come back and they're uh shown in 273 00:10:24,560 --> 00:10:26,959 that view. And the whole thing is based 274 00:10:26,959 --> 00:10:29,279 on these configurations. So, there's no 275 00:10:29,279 --> 00:10:31,120 human input or human error introduced on 276 00:10:31,120 --> 00:10:33,680 the day which um is very common. So, 277 00:10:33,680 --> 00:10:36,079 there's no like go to desktop, double 278 00:10:36,079 --> 00:10:38,240 click, run me version 3 final, and then 279 00:10:38,240 --> 00:10:40,240 it'll like no no none of that. It's just 280 00:10:40,240 --> 00:10:42,720 rocket run. It's all programmatic and it 281 00:10:42,720 --> 00:10:44,800 makes it a lot easier. 282 00:10:44,800 --> 00:10:46,640 And because everything's its own 283 00:10:46,640 --> 00:10:48,880 process, it has that added advantage. If 284 00:10:48,880 --> 00:10:50,399 something completely dies, it doesn't 285 00:10:50,399 --> 00:10:52,720 take out everything else with it. Um, 286 00:10:52,720 --> 00:10:54,880 unless it's dependent, of course. But 287 00:10:54,880 --> 00:10:56,640 out of all these processes, we have a 288 00:10:56,640 --> 00:11:00,480 very key one. That's our front end API. 289 00:11:00,480 --> 00:11:04,800 Yeah. So, the front end API sort of 290 00:11:04,800 --> 00:11:06,480 with the process manager. It gets all 291 00:11:06,480 --> 00:11:08,079 the data ingested from the other systems 292 00:11:08,079 --> 00:11:09,920 and passes it through this standardized 293 00:11:09,920 --> 00:11:12,640 websocket API. And this lets us do kind 294 00:11:12,640 --> 00:11:15,920 of anything we want. Um we can graph 295 00:11:15,920 --> 00:11:17,360 this data. We can set it to web 296 00:11:17,360 --> 00:11:19,600 browsers. We can send it to Unity, 297 00:11:19,600 --> 00:11:22,480 Python, other tools. Um and we use this 298 00:11:22,480 --> 00:11:24,079 to visualize the state of the system as 299 00:11:24,079 --> 00:11:26,000 well as monitor the inputs like I 300 00:11:26,000 --> 00:11:29,440 mentioned earlier. Um, we can also since 301 00:11:29,440 --> 00:11:32,320 there's an API over the over networking, 302 00:11:32,320 --> 00:11:34,000 uh, we can monitor the rocket launch 303 00:11:34,000 --> 00:11:37,440 remotely like how um, uh, NASA's Johnson 304 00:11:37,440 --> 00:11:39,360 Space Center monitors the rocket 305 00:11:39,360 --> 00:11:41,120 launches at Cape Canaveral from about a 306 00:11:41,120 --> 00:11:43,120 thousand miles away. We're not doing it 307 00:11:43,120 --> 00:11:45,120 from that far, but same principle. 308 00:11:45,120 --> 00:11:46,000 We could, 309 00:11:46,000 --> 00:11:47,839 um, the main use of the API though is 310 00:11:47,839 --> 00:11:50,560 this lovely uh, modular interface I 311 00:11:50,560 --> 00:11:52,640 built using Python Flask and a bit of 312 00:11:52,640 --> 00:11:56,640 static HTML um, generation. Um, and it 313 00:11:56,640 --> 00:11:59,920 pieces together different HTML files and 314 00:11:59,920 --> 00:12:02,399 scripts and stuff. Um, listens to the 315 00:12:02,399 --> 00:12:05,839 websocket telemetry data and uses it to 316 00:12:05,839 --> 00:12:08,160 graph everything we need. So, we can get 317 00:12:08,160 --> 00:12:10,240 a big overview of the system. Uh, and 318 00:12:10,240 --> 00:12:12,399 also there's a 3D model of rocket that 319 00:12:12,399 --> 00:12:14,160 spins showing you how the rocket's 320 00:12:14,160 --> 00:12:16,240 oriented, which is pretty cool. Uh, it 321 00:12:16,240 --> 00:12:18,880 also supports live cameras, too. 322 00:12:18,880 --> 00:12:22,000 Um, so here's a clip from IRC a few 323 00:12:22,000 --> 00:12:23,440 months ago when we went to America 324 00:12:23,440 --> 00:12:26,240 showing the actual recording in action. 325 00:12:26,240 --> 00:12:28,560 Uh, the rocket's about to take off here. 326 00:12:28,560 --> 00:12:30,720 Um, don't mind the desync. It's 327 00:12:30,720 --> 00:12:32,603 networking stuff. And so it's taken off. 328 00:12:32,603 --> 00:12:34,240 [snorts] It's flying through the air. 329 00:12:34,240 --> 00:12:38,240 It's sort of gently going. It's cruising 330 00:12:38,240 --> 00:12:40,000 now. So the motor's turned off. It's run 331 00:12:40,000 --> 00:12:43,839 out of fuel. Um, and it's still going up 332 00:12:43,839 --> 00:12:45,680 and up and up. And we've got all these 333 00:12:45,680 --> 00:12:47,519 different graphs to track the system as 334 00:12:47,519 --> 00:12:50,399 it goes. And it's about to hit 335 00:12:50,399 --> 00:12:52,320 Apogee where it deploys the first 336 00:12:52,320 --> 00:12:56,000 recovery shoot. Um, and it is sort of 337 00:12:56,000 --> 00:12:57,200 falling down. We're skipping through it 338 00:12:57,200 --> 00:13:00,720 cuz it's quite long footage. Um, rocket 339 00:13:00,720 --> 00:13:02,560 still coming down. Coming down quite 340 00:13:02,560 --> 00:13:05,120 quickly. Too quickly actually. Uh, and 341 00:13:05,120 --> 00:13:08,880 it lands on its butt. Um, the mains 342 00:13:08,880 --> 00:13:11,279 didn't deploy properly, so it hit the 343 00:13:11,279 --> 00:13:15,120 ground at about 250 gs of force. 344 00:13:15,120 --> 00:13:19,040 um which would normally destroy a rocket 345 00:13:19,040 --> 00:13:21,040 um lawn darting like that, but for some 346 00:13:21,040 --> 00:13:24,560 reason ours survived. Um the engineering 347 00:13:24,560 --> 00:13:26,079 team on structures did a great job with 348 00:13:26,079 --> 00:13:28,240 the carbon fiber shell and all the 349 00:13:28,240 --> 00:13:29,600 computers inside were still beeping 350 00:13:29,600 --> 00:13:32,240 angrily at us um when when we found the 351 00:13:32,240 --> 00:13:36,399 rocket, which yeah, it's pretty fun. Oh, 352 00:13:36,399 --> 00:13:40,124 it can also run Doom. [laughter] 353 00:13:40,160 --> 00:13:42,034 Anyway, 354 00:13:42,034 --> 00:13:44,054 [applause] 355 00:13:45,200 --> 00:13:46,800 um here's a more detailed screenshot 356 00:13:46,800 --> 00:13:49,279 just showing you everything from before 357 00:13:49,279 --> 00:13:52,480 in a static thing. Um 358 00:13:52,480 --> 00:13:54,000 yeah, it just lets you look at stuff. 359 00:13:54,000 --> 00:13:56,320 It's it gives a whole overview while 360 00:13:56,320 --> 00:13:58,880 being quickly readable. Um fun fact 361 00:13:58,880 --> 00:14:01,760 about this though, while we were 362 00:14:01,760 --> 00:14:04,160 modifying the flight computer a bit, um 363 00:14:04,160 --> 00:14:06,079 we destroyed the barometer with a heat 364 00:14:06,079 --> 00:14:08,800 gun accidentally. And if you look at the 365 00:14:08,800 --> 00:14:10,320 altitude here, the rocket's actually 366 00:14:10,320 --> 00:14:13,760 sitting still on the launch rail. But it 367 00:14:13,760 --> 00:14:16,399 thinks the altitude's underground but 368 00:14:16,399 --> 00:14:18,000 also going up slowly over time. And 369 00:14:18,000 --> 00:14:20,480 that's because we reprogrammed the GPS 370 00:14:20,480 --> 00:14:23,600 to use as altitude, which isn't a great 371 00:14:23,600 --> 00:14:26,480 idea. GPS is prone to drifting and other 372 00:14:26,480 --> 00:14:30,000 issues, but it worked well enough. Um, 373 00:14:30,000 --> 00:14:31,600 this is the ground support equipment 374 00:14:31,600 --> 00:14:33,120 page where we can see an overview of 375 00:14:33,120 --> 00:14:35,600 like all of the plumbing of the the 376 00:14:35,600 --> 00:14:37,920 equipment at the bottom that fills the 377 00:14:37,920 --> 00:14:42,079 rockets uh and has a bunch of solenoids, 378 00:14:42,079 --> 00:14:43,839 valves, and other complex stuff that I 379 00:14:43,839 --> 00:14:46,160 don't understand. Um, you've got the 380 00:14:46,160 --> 00:14:48,079 mirror of the input controls there as 381 00:14:48,079 --> 00:14:50,320 well as a log so we can time inputs and 382 00:14:50,320 --> 00:14:52,240 and have everything be really like 383 00:14:52,240 --> 00:14:56,040 nicely controlled. 384 00:14:56,639 --> 00:14:58,725 Oh. [laughter] 385 00:14:59,120 --> 00:15:02,120 Yeah, 386 00:15:03,199 --> 00:15:05,220 I'm glad you guys know what it's like. 387 00:15:05,220 --> 00:15:06,079 [laughter] 388 00:15:06,079 --> 00:15:09,279 So, how do we test it? Um, we've 389 00:15:09,279 --> 00:15:11,279 implemented a few different methods. Um, 390 00:15:11,279 --> 00:15:13,279 and of course, we do test it all in the 391 00:15:13,279 --> 00:15:15,120 lab all together before we launch it. 392 00:15:15,120 --> 00:15:16,959 But, there's a lot of pure software 393 00:15:16,959 --> 00:15:18,720 testing. We have to test all the 394 00:15:18,720 --> 00:15:20,399 different processes that we're starting, 395 00:15:20,399 --> 00:15:22,720 the way that they're managed. Um, and we 396 00:15:22,720 --> 00:15:24,880 have a few things that run on GitHub 397 00:15:24,880 --> 00:15:26,959 actions as well. 398 00:15:26,959 --> 00:15:29,839 Yeah, I had a lot of fun with that. 399 00:15:29,839 --> 00:15:31,600 So, these are our two main devices that 400 00:15:31,600 --> 00:15:33,440 we're that we're testing, our fly 401 00:15:33,440 --> 00:15:35,920 computer and the GSC. They both read and 402 00:15:35,920 --> 00:15:38,000 write data and they both do it in 403 00:15:38,000 --> 00:15:40,160 completely different ways. The flag 404 00:15:40,160 --> 00:15:42,160 computer uses longrange radio which is 405 00:15:42,160 --> 00:15:43,920 half duplex, so only one person can talk 406 00:15:43,920 --> 00:15:46,560 at a time and the GSC uses network. It 407 00:15:46,560 --> 00:15:48,639 talks over TCP and it's full duplex and 408 00:15:48,639 --> 00:15:49,759 it's completely different to the flat 409 00:15:49,759 --> 00:15:52,800 computer. So they're different devices, 410 00:15:52,800 --> 00:15:54,320 different commands, and you know, 411 00:15:54,320 --> 00:15:56,320 they're they're actual physical devices. 412 00:15:56,320 --> 00:15:58,800 They're running on, you know, STM32 and 413 00:15:58,800 --> 00:16:02,000 then another random chip in the GSC um 414 00:16:02,000 --> 00:16:03,920 and firmware that's running on them 415 00:16:03,920 --> 00:16:05,920 outside of our repo. So, you know, 416 00:16:05,920 --> 00:16:07,440 what's the best way to kind of test this 417 00:16:07,440 --> 00:16:09,440 thing? 418 00:16:09,440 --> 00:16:11,360 We ended up uh using software in the 419 00:16:11,360 --> 00:16:12,959 loop. So, we just make a complete 420 00:16:12,959 --> 00:16:15,680 software double of the devices that are 421 00:16:15,680 --> 00:16:18,320 normally coming into this system. And 422 00:16:18,320 --> 00:16:22,160 the system runs with no idea if they're 423 00:16:22,160 --> 00:16:23,360 real or not. Kind of runs into 424 00:16:23,360 --> 00:16:25,519 production mode the whole time um for 425 00:16:25,519 --> 00:16:28,399 testing and development as well. Um so 426 00:16:28,399 --> 00:16:30,160 it's a bit like real avionics hardware 427 00:16:30,160 --> 00:16:31,279 and the loop testing. You know, you like 428 00:16:31,279 --> 00:16:33,199 inject the stuff straight into it. So 429 00:16:33,199 --> 00:16:34,800 you can see here we've got an emulator 430 00:16:34,800 --> 00:16:37,199 that's kind of I've tried to illustrate 431 00:16:37,199 --> 00:16:38,800 it. It's injecting the bites into the 432 00:16:38,800 --> 00:16:41,440 same place that the regular devices 433 00:16:41,440 --> 00:16:43,279 would give their data to. So for the 434 00:16:43,279 --> 00:16:45,839 flight computer that's making a fake 435 00:16:45,839 --> 00:16:48,720 mocked stream of the serial byes and 436 00:16:48,720 --> 00:16:50,399 then the GSC there's another server on 437 00:16:50,399 --> 00:16:52,720 loop back that we talk to and we can 438 00:16:52,720 --> 00:16:54,880 completely simulate any kind of scenario 439 00:16:54,880 --> 00:16:58,959 or data that we that we'd like to and 440 00:16:58,959 --> 00:17:00,639 because we're doing this in dev mode as 441 00:17:00,639 --> 00:17:02,880 well it makes it really easy to test a 442 00:17:02,880 --> 00:17:04,959 whole lot more code at once while we're 443 00:17:04,959 --> 00:17:07,679 developing. So instead of say putting 444 00:17:07,679 --> 00:17:09,199 all the data through you know the 445 00:17:09,199 --> 00:17:11,360 websocket ent websocket entry point we 446 00:17:11,360 --> 00:17:13,919 set up the whole system and it's lean 447 00:17:13,919 --> 00:17:15,280 enough to start off quickly enough but 448 00:17:15,280 --> 00:17:17,120 yeah it makes testing everything at once 449 00:17:17,120 --> 00:17:20,000 a lot easier and we've deployed it to 450 00:17:20,000 --> 00:17:22,240 GitHub as well. 451 00:17:22,240 --> 00:17:25,839 So all runs automatically on GitHub and 452 00:17:25,839 --> 00:17:27,360 the key test that we do on GitHub is 453 00:17:27,360 --> 00:17:29,600 like a blackbox test of the whole thing. 454 00:17:29,600 --> 00:17:31,520 It aims to cover the setup, the startup 455 00:17:31,520 --> 00:17:34,320 and the output all in one go. Um the 456 00:17:34,320 --> 00:17:37,520 unit tests are separate and our script 457 00:17:37,520 --> 00:17:39,200 uh that we recommend people set up their 458 00:17:39,200 --> 00:17:41,440 system with is also tested in this. Um 459 00:17:41,440 --> 00:17:43,919 but the main idea is please push 460 00:17:43,919 --> 00:17:47,360 something to main that works. Um the it 461 00:17:47,360 --> 00:17:49,120 it checks that it builds starts up in 462 00:17:49,120 --> 00:17:51,760 dev and that you get the right output 463 00:17:51,760 --> 00:17:55,120 based on reax matches. So going into 464 00:17:55,120 --> 00:17:57,440 this it's failed of course every time 465 00:17:57,440 --> 00:17:59,120 someone pushes a PR it triggers the 466 00:17:59,120 --> 00:18:01,120 build and test and that will build all 467 00:18:01,120 --> 00:18:02,799 of the dependencies for the process 468 00:18:02,799 --> 00:18:07,039 manager and builds our binaries 469 00:18:07,039 --> 00:18:09,919 to do that it uses this setup script and 470 00:18:09,919 --> 00:18:12,880 that setup script will you know it's the 471 00:18:12,880 --> 00:18:14,640 same one we use for setting up the 472 00:18:14,640 --> 00:18:15,919 system for installation. So if you 473 00:18:15,919 --> 00:18:18,240 change that, guess it as well. And then 474 00:18:18,240 --> 00:18:20,160 it builds everything including building 475 00:18:20,160 --> 00:18:23,039 protobuff for 10 minutes. Then starts up 476 00:18:23,039 --> 00:18:25,840 as mentioned earlier. So once it's all 477 00:18:25,840 --> 00:18:28,480 set up, we use this simple blackbox test 478 00:18:28,480 --> 00:18:30,080 as you can see on the right. That's the 479 00:18:30,080 --> 00:18:31,840 entire thing. That'll start up all of 480 00:18:31,840 --> 00:18:34,400 the processes. It'll do the um checking 481 00:18:34,400 --> 00:18:35,919 of all the outputs. Obviously, a lot of 482 00:18:35,919 --> 00:18:37,760 it's hidden, but there's really only 483 00:18:37,760 --> 00:18:39,679 three things you need to edit uh at a 484 00:18:39,679 --> 00:18:41,200 minimum to do one of these tests. You 485 00:18:41,200 --> 00:18:43,440 just say what you want to start up. So, 486 00:18:43,440 --> 00:18:46,480 dev mode and then your reax matches for 487 00:18:46,480 --> 00:18:48,160 what needs to succeed and what counts as 488 00:18:48,160 --> 00:18:50,880 a failure. Um, and then we've done it. 489 00:18:50,880 --> 00:18:52,400 Now, we can just test if the code's 490 00:18:52,400 --> 00:18:54,720 going to start up and do what you expect 491 00:18:54,720 --> 00:18:59,320 um on that high blackbox level. 492 00:18:59,679 --> 00:19:02,160 And through this process, we've learned 493 00:19:02,160 --> 00:19:04,799 a lot. Um, and we've got some changes in 494 00:19:04,799 --> 00:19:06,720 mind before we, you know, get to that 495 00:19:06,720 --> 00:19:10,120 version one. 496 00:19:10,880 --> 00:19:12,158 Yeah. 497 00:19:12,158 --> 00:19:13,760 [laughter] 498 00:19:13,760 --> 00:19:16,799 C++ and Python together was a horrible 499 00:19:16,799 --> 00:19:19,520 idea in practice. The idea sounded 500 00:19:19,520 --> 00:19:22,320 really good at the time. You do C++ for 501 00:19:22,320 --> 00:19:24,480 performance and type safety, but that 502 00:19:24,480 --> 00:19:26,320 ended up causing uh more problems than 503 00:19:26,320 --> 00:19:27,919 it did offer solutions. And we're 504 00:19:27,919 --> 00:19:30,160 currently um in the middle of rewriting 505 00:19:30,160 --> 00:19:32,960 some of the C++ parts into Python um 506 00:19:32,960 --> 00:19:34,880 along with a refactor of a lot of the 507 00:19:34,880 --> 00:19:36,160 other systems. You know, it's amazing 508 00:19:36,160 --> 00:19:38,480 how much technical day and changes you 509 00:19:38,480 --> 00:19:42,000 can think of after 2 years. And the 510 00:19:42,000 --> 00:19:43,919 focus here was that we wanted to make 511 00:19:43,919 --> 00:19:46,960 this maintainable for students. Um, of 512 00:19:46,960 --> 00:19:49,200 course, using C++ for its intended 513 00:19:49,200 --> 00:19:51,440 purpose would give the performance and 514 00:19:51,440 --> 00:19:53,520 the type safety that we were after, but 515 00:19:53,520 --> 00:19:55,760 we found that moving to Python would 516 00:19:55,760 --> 00:19:57,280 lower the barrier to entry to these 517 00:19:57,280 --> 00:19:58,640 students who are coming to join our team 518 00:19:58,640 --> 00:20:00,880 for about a year or two at a time, makes 519 00:20:00,880 --> 00:20:02,720 it easier for us to maintain code 520 00:20:02,720 --> 00:20:05,600 quality and just, you know, get things 521 00:20:05,600 --> 00:20:08,320 happening um to a higher quality and a 522 00:20:08,320 --> 00:20:11,360 bit quicker. Um, so that was the 523 00:20:11,360 --> 00:20:13,440 decision we made and IPC between two 524 00:20:13,440 --> 00:20:15,360 different languages was harder than it 525 00:20:15,360 --> 00:20:18,160 needed to be. 526 00:20:18,160 --> 00:20:22,640 Yeah. So some other issues we had were 527 00:20:22,640 --> 00:20:25,600 well you can read teamwork. Um, this is 528 00:20:25,600 --> 00:20:27,600 a big project and a lot of us are 529 00:20:27,600 --> 00:20:29,200 working on a project like this for the 530 00:20:29,200 --> 00:20:30,880 first time where university students we 531 00:20:30,880 --> 00:20:32,880 haven't really had much industry 532 00:20:32,880 --> 00:20:34,960 experience and 533 00:20:34,960 --> 00:20:36,640 big projects need lots of teamwork, 534 00:20:36,640 --> 00:20:38,320 communication, all that sort of stuff. 535 00:20:38,320 --> 00:20:40,720 Um 536 00:20:40,720 --> 00:20:42,159 naturally there's going to be issues 537 00:20:42,159 --> 00:20:45,200 with um code style differences. Typos we 538 00:20:45,200 --> 00:20:46,799 had a typo like you can see there 539 00:20:46,799 --> 00:20:49,520 lunchtime launch time that's you know um 540 00:20:49,520 --> 00:20:50,880 we've had typos that have broken the 541 00:20:50,880 --> 00:20:53,039 codebase and been completely invisible 542 00:20:53,039 --> 00:20:54,880 to the the human eye. Um and there's 543 00:20:54,880 --> 00:20:56,080 lots of mistakes cuz we're still 544 00:20:56,080 --> 00:20:57,760 learning. A large portion of our 545 00:20:57,760 --> 00:20:59,200 development time actually goes into 546 00:20:59,200 --> 00:21:01,440 project management and fixing mistakes 547 00:21:01,440 --> 00:21:03,919 and code review and stuff more than we'd 548 00:21:03,919 --> 00:21:06,559 want. Um, but we've been working on that 549 00:21:06,559 --> 00:21:08,400 by writing more documentation. We've 550 00:21:08,400 --> 00:21:10,000 added linting, spellch checkcking, auto 551 00:21:10,000 --> 00:21:13,760 formatting. Um, and that's a git tree on 552 00:21:13,760 --> 00:21:14,960 the right. I don't know if anyone 553 00:21:14,960 --> 00:21:16,640 recognizes that. It shouldn't look like 554 00:21:16,640 --> 00:21:20,080 that. That's not healthy. [laughter] 555 00:21:20,080 --> 00:21:21,760 There's a bunch of duplicate commits 556 00:21:21,760 --> 00:21:24,960 because I accidentally pushed a secret 557 00:21:24,960 --> 00:21:28,320 to a dev branch and we had to rewrite 558 00:21:28,320 --> 00:21:30,240 the history and merge it and it was it 559 00:21:30,240 --> 00:21:31,679 was messy. I I don't want to go into it. 560 00:21:31,679 --> 00:21:36,159 It's embarrassing. Um, but yeah. Um, 561 00:21:36,159 --> 00:21:39,520 also radio is really hard. It's it's 562 00:21:39,520 --> 00:21:41,679 magic. Um, 563 00:21:41,679 --> 00:21:44,159 yeah, it's fun. It's cool when it works. 564 00:21:44,159 --> 00:21:45,440 But that sword looking thing in the 565 00:21:45,440 --> 00:21:48,400 middle is a Yagi antenna. Uh, we use it 566 00:21:48,400 --> 00:21:51,679 for Laura 433 and 915 MHz. I think that 567 00:21:51,679 --> 00:21:56,159 one's 430. No, that's 915. Um, we've 568 00:21:56,159 --> 00:21:57,520 learned that radios are really fiddly 569 00:21:57,520 --> 00:21:59,760 sensitive equipment. both the antennas 570 00:21:59,760 --> 00:22:01,120 and the boards. There's lots of issues 571 00:22:01,120 --> 00:22:03,440 with shorting, with interference, other 572 00:22:03,440 --> 00:22:06,559 stuff like that. Um, that photo on the 573 00:22:06,559 --> 00:22:09,520 left is from I think 10 or 11 at 574 00:22:09,520 --> 00:22:13,520 nighttime. Uh, we forgot to test 433 MHz 575 00:22:13,520 --> 00:22:15,120 till we got to America at the 576 00:22:15,120 --> 00:22:17,760 competition. Um, and that photo on the 577 00:22:17,760 --> 00:22:20,400 right is at 3:00 a.m. We still didn't 578 00:22:20,400 --> 00:22:21,679 quite have it working. We thought we 579 00:22:21,679 --> 00:22:23,280 did, but there was a zed in the 580 00:22:23,280 --> 00:22:24,720 hexodimal, which I don't think is 581 00:22:24,720 --> 00:22:26,400 supposed to be there. [laughter] 582 00:22:26,400 --> 00:22:29,120 Um, however, we spent a few more hours 583 00:22:29,120 --> 00:22:32,320 on it, eventually got it working and 584 00:22:32,320 --> 00:22:34,555 we came first place. 585 00:22:34,555 --> 00:22:36,575 [applause and cheering] 586 00:22:43,520 --> 00:22:45,280 First place in the live telemetry 587 00:22:45,280 --> 00:22:47,679 visualization challenge, which was that 588 00:22:47,679 --> 00:22:50,400 really cool video you saw earlier. U, we 589 00:22:50,400 --> 00:22:52,240 also we won a total of four awards. 590 00:22:52,240 --> 00:22:54,080 Actually, we also got second place in 591 00:22:54,080 --> 00:22:56,880 our category of 10,000 ft hybrid rockets 592 00:22:56,880 --> 00:22:58,640 and second place in the payload 593 00:22:58,640 --> 00:23:01,410 challenge. So, very proud of that. 594 00:23:01,410 --> 00:23:01,679 [laughter] 595 00:23:01,679 --> 00:23:03,600 Yeah, the the team did a great job. 596 00:23:03,600 --> 00:23:06,705 Yeah. [applause] 597 00:23:10,400 --> 00:23:13,860 Yeah. So, great work team. Um, 598 00:23:13,860 --> 00:23:15,039 [laughter] 599 00:23:15,039 --> 00:23:16,559 thank you everyone for coming. Uh, 600 00:23:16,559 --> 00:23:19,840 GitHub is at this giant QR code. I 601 00:23:19,840 --> 00:23:21,919 didn't expect it to be so big. Uh, and 602 00:23:21,919 --> 00:23:23,760 that's all of the code for the ground 603 00:23:23,760 --> 00:23:26,000 control station and everything. Um, you 604 00:23:26,000 --> 00:23:28,400 can see our GitHub handles and websites 605 00:23:28,400 --> 00:23:31,200 there. And um, we are both open to 606 00:23:31,200 --> 00:23:33,679 sponsors and GitHub workflow credits as 607 00:23:33,679 --> 00:23:36,000 well as grad rolls if anyone's if anyone 608 00:23:36,000 --> 00:23:37,440 would like to talk to us afterwards. 609 00:23:37,440 --> 00:23:37,840 Yeah. 610 00:23:37,840 --> 00:23:39,440 And we'd love to take some questions as 611 00:23:39,440 --> 00:23:39,760 well. 612 00:23:39,760 --> 00:23:41,760 Yeah. Yeah. Any questions? 613 00:23:41,760 --> 00:23:44,320 Yeah. Thank you so much for that, Amber 614 00:23:44,320 --> 00:23:47,039 and Freddy. Um, I used to be part of a 615 00:23:47,039 --> 00:23:49,520 university competition team. Um, and 616 00:23:49,520 --> 00:23:51,440 based on what you have shown here, ours 617 00:23:51,440 --> 00:23:53,120 might as well have been put together 618 00:23:53,120 --> 00:23:56,320 entirely out of duct tape and zip ties. 619 00:23:56,320 --> 00:23:58,960 Um, so I'll go around the room and see 620 00:23:58,960 --> 00:24:01,679 if anybody has questions. Please make 621 00:24:01,679 --> 00:24:03,919 sure observe how I am holding the mic. 622 00:24:03,919 --> 00:24:05,840 Please hold it the same way when you ask 623 00:24:05,840 --> 00:24:08,320 your questions so that everybody here 624 00:24:08,320 --> 00:24:11,679 and also on the stream can hear you. 625 00:24:11,679 --> 00:24:13,520 Okay. So, there's going to be a version 626 00:24:13,520 --> 00:24:15,279 1.0.0 627 00:24:15,279 --> 00:24:17,600 coming in. What um height are you 628 00:24:17,600 --> 00:24:22,400 looking for? 10,000 mters or or higher. 629 00:24:22,400 --> 00:24:24,799 Uh as in the altitude? 630 00:24:24,799 --> 00:24:25,360 Yes. 631 00:24:25,360 --> 00:24:29,440 Uh we we go for the 10,000 ft uh 632 00:24:29,440 --> 00:24:32,159 category, but um there's other ones 633 00:24:32,159 --> 00:24:34,240 we're looking to do later as well. Um 634 00:24:34,240 --> 00:24:37,679 experimental flights to say 75,000 ft um 635 00:24:37,679 --> 00:24:39,919 which is about where your commercial uh 636 00:24:39,919 --> 00:24:42,080 airlines go and stuff like that. But 637 00:24:42,080 --> 00:24:43,840 yeah, it's really really about the 638 00:24:43,840 --> 00:24:45,279 accuracy at the moment. But we're we're 639 00:24:45,279 --> 00:24:46,720 getting into kind of those really high 640 00:24:46,720 --> 00:24:48,000 altitude flights. 641 00:24:48,000 --> 00:24:49,440 Yeah. And maybe the common line 642 00:24:49,440 --> 00:24:52,440 eventually. 643 00:24:54,960 --> 00:24:57,520 Hello. Um I have a question and a 644 00:24:57,520 --> 00:24:59,679 recommendation. So first recommendation 645 00:24:59,679 --> 00:25:01,679 for people doing your boards. Uh if 646 00:25:01,679 --> 00:25:03,919 you're not already using it, Lava Linaro 647 00:25:03,919 --> 00:25:06,000 automated validation architecture. It's 648 00:25:06,000 --> 00:25:07,760 a board lab management software written 649 00:25:07,760 --> 00:25:11,039 in Python. Um and it's what the like the 650 00:25:11,039 --> 00:25:12,799 Linux kernel uses to test on a bunch of 651 00:25:12,799 --> 00:25:14,559 embedded equipment. 652 00:25:14,559 --> 00:25:16,080 The second part is about your software 653 00:25:16,080 --> 00:25:18,720 in the loop. Um, I want to know how many 654 00:25:18,720 --> 00:25:21,039 weird problems you've had with software 655 00:25:21,039 --> 00:25:22,400 in the loop and it not matching your 656 00:25:22,400 --> 00:25:24,559 embedded hardware. In a previous life, I 657 00:25:24,559 --> 00:25:26,960 worked uh embedded uh like embedded 658 00:25:26,960 --> 00:25:29,440 machine learning DevOps. Um, and we had 659 00:25:29,440 --> 00:25:31,120 the research team swear up and down that 660 00:25:31,120 --> 00:25:32,880 an algorithm improvement was 10 to 100 661 00:25:32,880 --> 00:25:34,880 times faster on their research machines 662 00:25:34,880 --> 00:25:36,880 and then it ran 10 to 100 times slower 663 00:25:36,880 --> 00:25:38,559 on the ARM boards and that was because 664 00:25:38,559 --> 00:25:40,320 Intel Xeon processors have a larger 665 00:25:40,320 --> 00:25:43,679 cache. What problems have you happened? 666 00:25:43,679 --> 00:25:46,880 Um, in all honesty, the emulation 667 00:25:46,880 --> 00:25:49,600 doesn't emulate on the exact hardware 668 00:25:49,600 --> 00:25:51,840 level. It will just do the, you know, 669 00:25:51,840 --> 00:25:53,440 the digital level of like what the 670 00:25:53,440 --> 00:25:56,080 actual data is. Um, we have looked into 671 00:25:56,080 --> 00:25:58,640 and attempted to fully simulate the 672 00:25:58,640 --> 00:26:02,000 entire firmware on a, um, uh, you know, 673 00:26:02,000 --> 00:26:03,440 an emulator and stuff like that, which 674 00:26:03,440 --> 00:26:05,120 we would like to get into. It is the 675 00:26:05,120 --> 00:26:07,200 preferred option. Um, and I'm not sure 676 00:26:07,200 --> 00:26:08,720 the difficulties we've had with that, 677 00:26:08,720 --> 00:26:10,799 but in terms of emulating the digital 678 00:26:10,799 --> 00:26:14,480 stream, just all the niche use, all the 679 00:26:14,480 --> 00:26:16,480 niche things that happen with the actual 680 00:26:16,480 --> 00:26:19,840 board, like um weird timing errors and 681 00:26:19,840 --> 00:26:21,039 stuff like that that you wouldn't have 682 00:26:21,039 --> 00:26:23,360 thought of, a lot of those kind of 683 00:26:23,360 --> 00:26:27,120 hardware specific things um that we we 684 00:26:27,120 --> 00:26:28,799 didn't even think of and then figuring 685 00:26:28,799 --> 00:26:31,679 out how to test them um is is the 686 00:26:31,679 --> 00:26:36,039 difficult part. But yeah, 687 00:26:38,559 --> 00:26:40,400 hello. Sorry, kind of piggybacking off 688 00:26:40,400 --> 00:26:42,720 that. I'm curious what the latency 689 00:26:42,720 --> 00:26:44,559 thresholds you have to deal with are 690 00:26:44,559 --> 00:26:47,200 like. How long is too long for a signal 691 00:26:47,200 --> 00:26:48,720 to get from one part of the rocket to 692 00:26:48,720 --> 00:26:51,919 the other before the control system 693 00:26:51,919 --> 00:26:53,993 fails? [clears throat] 694 00:26:54,559 --> 00:26:57,440 Um the the flight computer is an 695 00:26:57,440 --> 00:27:00,159 interesting one. So Laura is um 696 00:27:00,159 --> 00:27:02,159 incredibly resilient. I've seen someone 697 00:27:02,159 --> 00:27:05,360 transmit Laura off a pad instead of an 698 00:27:05,360 --> 00:27:08,240 antenna um and have it be received. 699 00:27:08,240 --> 00:27:09,760 That's why we're so close to the thing 700 00:27:09,760 --> 00:27:13,760 sometimes. But uh the latency has like a 701 00:27:13,760 --> 00:27:17,039 very um significant on the air time. So 702 00:27:17,039 --> 00:27:18,880 it's transmitting for a long one. And 703 00:27:18,880 --> 00:27:22,799 then um we ended up just finding that 704 00:27:22,799 --> 00:27:26,000 you know we have to empirically guess 705 00:27:26,000 --> 00:27:27,919 how long the on the air time is based on 706 00:27:27,919 --> 00:27:31,039 the distance and stuff like that. And uh 707 00:27:31,039 --> 00:27:33,279 so the timing for that once we dialed in 708 00:27:33,279 --> 00:27:36,000 was okay. For the timing on the rocket 709 00:27:36,000 --> 00:27:39,039 um we're still trying to we're doing CAN 710 00:27:39,039 --> 00:27:41,440 on the rocket between devices. Um that's 711 00:27:41,440 --> 00:27:43,600 still under development but between the 712 00:27:43,600 --> 00:27:46,480 GSSE and stuff we have a lot of uh 713 00:27:46,480 --> 00:27:48,400 networking troubles with trying to go 714 00:27:48,400 --> 00:27:49,520 between 715 00:27:49,520 --> 00:27:52,240 like 2 km sometimes. 716 00:27:52,240 --> 00:27:52,559 Yeah. 717 00:27:52,559 --> 00:27:54,720 Yeah. So we're sending wireless um 718 00:27:54,720 --> 00:27:58,480 signals usually 5 GHz or 2.4 for, but 719 00:27:58,480 --> 00:28:01,440 we've also started using 60 as well. Um, 720 00:28:01,440 --> 00:28:04,320 and we've had issues with wireless Wi-Fi 721 00:28:04,320 --> 00:28:06,080 things melting in the sun or just 722 00:28:06,080 --> 00:28:07,919 breaking mysteriously or all sorts of 723 00:28:07,919 --> 00:28:09,440 other issues. We've wasted probably 724 00:28:09,440 --> 00:28:11,679 entire weeks of our lives trying to 725 00:28:11,679 --> 00:28:14,000 figure out what's going on wrong and and 726 00:28:14,000 --> 00:28:16,720 fix it. Um 727 00:28:16,720 --> 00:28:19,520 the networking stuff I think after 5 728 00:28:19,520 --> 00:28:21,279 seconds it goes into a safe mode where 729 00:28:21,279 --> 00:28:23,600 you can't actually control the ground 730 00:28:23,600 --> 00:28:26,240 equipment anymore and then you have to 731 00:28:26,240 --> 00:28:28,480 reactivate the entire system. Um which 732 00:28:28,480 --> 00:28:30,080 can be really annoying if someone drives 733 00:28:30,080 --> 00:28:31,760 in like stops their car in front of a 734 00:28:31,760 --> 00:28:33,600 wireless antenna which happened a few 735 00:28:33,600 --> 00:28:35,120 times. 736 00:28:35,120 --> 00:28:37,360 Um and that can cause us to have to 737 00:28:37,360 --> 00:28:39,600 delay a launch by a few hours as well. 738 00:28:39,600 --> 00:28:40,799 Yeah. Don't park in front of the 739 00:28:40,799 --> 00:28:41,279 antenna. 740 00:28:41,279 --> 00:28:43,600 Please don't. [laughter] 741 00:28:43,600 --> 00:28:45,919 Um, but the system is fairly resilient. 742 00:28:45,919 --> 00:28:47,520 Most of the, well, all of the control 743 00:28:47,520 --> 00:28:48,960 happens before the rocket takes off. 744 00:28:48,960 --> 00:28:51,360 Once it's in the sky, it's on its own. 745 00:28:51,360 --> 00:28:53,279 So, we're not dealing with too many fine 746 00:28:53,279 --> 00:28:56,640 latencies there. Yeah. Thank you. 747 00:28:56,640 --> 00:28:58,159 Uh, yeah. Just want to know about the 748 00:28:58,159 --> 00:29:01,360 outfits. Um, tell us about those. And, 749 00:29:01,360 --> 00:29:04,080 uh, with the uni, it's a uni project, I 750 00:29:04,080 --> 00:29:06,159 understand. How how long's it been 751 00:29:06,159 --> 00:29:07,760 going? Does it build each year, get 752 00:29:07,760 --> 00:29:09,039 better? Do you build on the previous 753 00:29:09,039 --> 00:29:11,600 years? How does that work? 754 00:29:11,600 --> 00:29:14,110 Someone thought I was a zookeeper. 755 00:29:14,110 --> 00:29:15,760 [laughter] 756 00:29:15,760 --> 00:29:18,399 Uh but no, these these are what we wear 757 00:29:18,399 --> 00:29:20,000 uh out on the range. They're just our 758 00:29:20,000 --> 00:29:22,720 work shirts cuz we're setting this up um 759 00:29:22,720 --> 00:29:24,559 pretty much in Broken Hill and in the 760 00:29:24,559 --> 00:29:25,840 middle of an oil field when we go over 761 00:29:25,840 --> 00:29:27,039 to Texas. 762 00:29:27,039 --> 00:29:29,760 Um but I think they're pretty cool. 763 00:29:29,760 --> 00:29:32,559 And uh yeah, the club's been around 764 00:29:32,559 --> 00:29:37,520 since 2019. And then around 2020 765 00:29:37,520 --> 00:29:40,880 uh 4 um cuz we had a bit of a a pause 766 00:29:40,880 --> 00:29:44,960 over co we restarted in 2024. So from 4 767 00:29:44,960 --> 00:29:48,000 to 5 to 26 uh we've been incrementally 768 00:29:48,000 --> 00:29:49,679 doing all this new stuff and this 769 00:29:49,679 --> 00:29:51,039 project started 2 years ago. 770 00:29:51,039 --> 00:29:54,000 Yeah. And to add on to that um this was 771 00:29:54,000 --> 00:29:56,159 a hybrid rocket launch which I won't go 772 00:29:56,159 --> 00:29:57,760 into the details but you have a solid 773 00:29:57,760 --> 00:30:01,440 component and a fluid propellant. Um the 774 00:30:01,440 --> 00:30:02,960 hybrids are tricky because you have all 775 00:30:02,960 --> 00:30:04,159 these different pressure systems and 776 00:30:04,159 --> 00:30:05,440 stuff. Most of the teams at the 777 00:30:05,440 --> 00:30:07,360 competition are launching solid rockets. 778 00:30:07,360 --> 00:30:10,320 Um we went from 779 00:30:10,320 --> 00:30:12,320 having 780 00:30:12,320 --> 00:30:14,640 basically a commercial product for 781 00:30:14,640 --> 00:30:16,960 hybrids to building our own one in about 782 00:30:16,960 --> 00:30:19,760 8 months which is a very tight timeline. 783 00:30:19,760 --> 00:30:21,600 Most student teams take a few years to 784 00:30:21,600 --> 00:30:24,640 do that. Um what was the question again? 785 00:30:24,640 --> 00:30:26,799 Sorry. 786 00:30:26,799 --> 00:30:29,679 Um and yeah, it's a university project. 787 00:30:29,679 --> 00:30:32,880 It's funded by the university. So we get 788 00:30:32,880 --> 00:30:35,440 um all these opportunities from um the 789 00:30:35,440 --> 00:30:36,720 department and there's other clubs as 790 00:30:36,720 --> 00:30:38,480 well. We've got like a rover club and a 791 00:30:38,480 --> 00:30:40,480 car club. Um there's a battlebot club 792 00:30:40,480 --> 00:30:41,679 now. So 793 00:30:41,679 --> 00:30:43,760 yeah, very very good opportunity from uh 794 00:30:43,760 --> 00:30:44,559 the university. 795 00:30:44,559 --> 00:30:45,520 Yeah, it's been a great learning 796 00:30:45,520 --> 00:30:48,080 experience. Yeah. 797 00:30:48,080 --> 00:30:49,520 Thank you. 798 00:30:49,520 --> 00:30:52,399 All right, give it up again for Amber 799 00:30:52,399 --> 00:30:54,981 and Freddy. Thank you so very much. 800 00:30:54,981 --> 00:30:57,001 [applause] 801 00:30:59,679 --> 00:31:01,520 And please let me present you with a 802 00:31:01,520 --> 00:31:03,840 little speaker gift that we here at Pyon 803 00:31:03,840 --> 00:31:07,039 give out at every conference. And 804 00:31:07,039 --> 00:31:09,679 this time you get a lovely snake themed 805 00:31:09,679 --> 00:31:11,600 mug. 806 00:31:11,600 --> 00:31:14,399 All right, that is it for this session. 807 00:31:14,399 --> 00:31:16,000 We're going to have another one coming 808 00:31:16,000 --> 00:31:19,240 up soon.