Hello, so this is a more in-depth introduction to the RTES Project, the final course in the RTES series. What we want to do is go over what's expected of you to complete this course and prior knowledge that you need to have in order to be successful completing this course. The pre-requisites and required skills for this RTES project course are most easily stated as the first two courses in the series, real-time embedded system concepts and practices and real-time embedded systems theory and analysis. You really need all the knowledge, skills, theory and understanding from those two courses, either by having taken them, completed them, or having similar knowledge and understanding from industry experience or coursework at another university. For this course, you need to be an intermediate to advanced C programmer. You really have to dig in depth into C programming and build a deal with larger bodies of code and things like that. Deal with interfaces to drivers and lower level code. Really, you have to be beyond proficient. If you started out the series as a proficiency C programmer and have completed the first two courses and especially if you completed the third optional third course as well I think you will do fine. You might be a beginning advanced C programmer, but you've done quite a bit of programming just to complete those courses that come before this one series. It's not required, but you can implement this project using C++ and if you do plan to use C++, you should be an intermediate C++ programmer. I will certainly be talking about options where you can avoid C++ if you would like. That is quite possible. It's not required that you be a C++ programmer, but it can help, especially if you want to use Machine Vision Libraries that we use for the project. But you can also write your own code from the ground up all in C. You really need to be an intermediate POSIX thread programmer. That can again be obtained by taking the first two courses in the series or from prior experience. You need to be an intermediate have an intermediate understanding of real-time scheduling, SCHED_FIFO, the real-time extensions POSIX, which you can learn from the first two courses in the series. Finally, you need to have a Linux platform at home, which is covered in resources at the beginning of this course in case you're not quite sure what you need at home but basically a Raspberry Pie or a Jetson Nano system on which you can complete the project along with a USB camera and that's it really. Other than that you just need a computer to work on and clocks that you can observe and we'll talk about that. They can be Virtual digital clocks or real physical clocks. In RTES project, you must complete real-time software with a multiservice design. One of the key things you'll learn is how to decouple I0 from acquisition of data camera data. You must decouple NAN flash I0 from observations using the camera. You must use two or more amp REAL-TIME services to solve this problem and you can and really will need to include any number of additional SMP or AMP services. So you really have to understand multicore Pthreads programming to complete this course. Then you can apply what you've learned in the first two courses in the series to analyze the safety and feasibility of this system. One of the things that I think is great about this course is it really forces you to validate and verify glitch free operation of a real-time system, using Rate Monotonic Analysis and verifying that your implementation meets your design and analysis goals. The only way you can really be successful, fully successful at this RTES project is if you spend a fair amount of time looking at the jitter and drift of your services and events in your system. All students I've talked to who've had full credit or near full credit solutions at the end, have said they've spent substantial time looking at the actual timing, variation in response time, latency, and how that evolves over time in the form of jitter and drift. This continues the series as we stated. The standard path is take all four courses and the three preceding this, the advanced of this, you can't get away with just taking the first two and then this last course and skipping the third. That specifically covers mission critical design, which you don't actually need to be successful as a real-time designer. But if you really want to say real-time embedded systems designer for mission critical systems then you need third course as well. So you could take the standard path and do all four, that's what we recommend. You can jump in at the RTES theory analysis if you think you already know RMA basics and you can always backtrack. You can go back to the first course, if you find out that you need a little bit more help, you can exit after our RTES three analysis and jump ahead to this RTES project if you want to. You want to skip mission critical or you can complete the full series. Here's some references to take a look at if you're not sure whether you have the prerequisite knowledge. These are used in the earlier courses. Linux SCHED FIFO and Linux SCHED DEADLINE, for example, are things that you want to have experienced with or know about already, before starting this course, as well as the POSIX REAL-TIME Extensions. Take a look at those references and see if you think you're ready for this course. Having completed the first three courses in the series means you are ready to start this course. Welcome to the course. Here's the overview of the home lab equipment, required equipment for the course, which if you've taken course one, two or three or all three, you already know. The simplest option is option $180 Raspberry Pi 3B, or Raspberry Pi 4, either one can be used for this course. Or an NVIDIA Jetson Nano, just really exciting and interesting alternative. You can use Virtual-Box with Ubuntu LTS, but only for software development. That option won't allow you to complete this course. It'll just assist you, give you another platform to develop code on. But unfortunately, you really can't test timing nor interface the hardware required for this course. Well, with option three, you really need option one or option two. It would be possible instead of option one or two to use a native Linux laptop. So that could work. Another embedded system that I've used for this course is the Intel NUC, which actually works quite well if properly configured. I recommend option one. Option two is a second alternative, especially if you're interested, really interested in machine vision or machine learning combined with real-time systems, that would be a nice option. I use option one and two, normally myself. That's what I've used to develop the entire course. They work absolutely fine. I have tips and tricks for both that will help you in resources and that kind of thing as well. So all the starter code that I provide, examples have been tested on Systems, either Raspberry Pi or NVIDIA Jetson Nano. Okay, so course number four RTES project. It builds upon things learned in course one. Here's a list of all the things that were covered in course one. You might want to take a look at that and see if you feel confident about using those things now to build a system, here's everything that was covered in course two. You really need to use all of this knowledge and skills from course two in this course. Course 3 is really the only one that has optional knowledge. We don't ask you to build a fault tolerant error detection recovery type system here. Because of cost and just logistics of trying to do that. But you will build a system that you will essentially prove might be a little bit of a strong work but close to prove correct itself and it certainly demonstrate the correct itself. The course focus here is the systems design lifecycle for a real time embedded system. Analysis, design, implementation, validation and verification. I like Barry Boehm saying about validation and verification. Validation is making sure that you built the right thing, verification is making sure that you built the thing right. You learn more about debugging, tracing, what constitutes acceptance testing, you do peer views and we have auto graders that assess your timing through syslog traces, and then you deliver and present to your peers in the auto grader in this course. What RTES theory analysis is most important? This is just a quick review. This course has a strong focus on CPU and shared memory real time services. Beyond concepts, you really need to know how to manage and balance out computing resources, memory resources, IOS resources, storage resources, and have well controlled, predictable timing for systems and software that span all those resources. You really need to understand the rate monotonic least upper bound, you really need to know how to do exact feasibility analysis, and most likely the best approach for this is fixed priority, policy, namely, rate monotonic and use of SCHED FIFO. But it's nice to understand the options, and it would be possible to approach this with a different policy like earliest deadline first and SCHED deadline, which is new to Linux. But I recommend sticking to SCHED FIFO and really applying what was covered in good detail in the first two courses in this series. You learn and apply real-time service design patterns in this course based upon what I'll recommend, and based upon what prior students have done to solve this problem, this very same problem that you're going to work on. You'll need to understand how to use secondary resources and synchronization. In other words, shared memory for example, and the flash file system in particular on this project. You need to know how to watch out for pitfalls like priority, unbounded priority inversion, deadlock, live-lock. You basically need to know how to design a multiservice system and deal with the challenges of rate monotonic analysis. You need to be able to apply discrete math, and the calculus bound or the rate monotonic least upper bound, and apply it at least using this equation, the sum of the C sub I over T sub I less than m times two the one over m minus one, the RM LUB but preferably actually with exact analysis using the Lehoczky, Sha, Ding theorem. You really need to use that in this course, and that gives you an overview of what you need to know to start this course. More of an advanced C program are very comfortable with Linux POSIX threads for sure, and a good working knowledge of exact analysis for fixed priority rate monotonic theory. Thank you very much.