My goals for the build course are the following:
When deciding my learning goals for the build course I looked closely at the course summary to evaluate where my skills were against these goals.
There are areas where my skills were limited, through to others where my proficiency was more advanced. The goals I chose to focus on are areas where I need to increase my knowledge to be able to effectively understand how cyber-physical systems (CPS) are designed and built. I understand my proficiency will not reach the level of an engineer and nor do I seek to reach that level, as the goal is to understand the technology to a sufficient level where I can interrogate the functioning of these technologies so they are not ‘black boxes’ to me. My main goals for the build course are:
To relearn coding through gaining an understanding of python and other associated languages and frameworks relevant to CPS
To gain an understanding of how machines learn through learning concepts such as decision trees, artificial neural networks and natural language processing
To learn the basics of embedded programming, circuitry, 3D printing, and other skills relevant to creating CPS such as CAD.
To extend my knowledge of systems thinking and design from 2D to 3D.
While these areas are my focus, I accept there are others I will encounter through the build course relevant to understanding CPS that I am unaware of at the moment, and I will need to learn these to the appropriate level.
Baseline - Feb 2021
While I started my career as a software engineer, the majority of time has been in Systems Architecture. This includes formal training in both Zachman and Togaf. I have exposure to all elements including application, network, security, data, solutions and enterprise architecture. Through this work I have also learnt skills in system design and analysis, Project Management (Waterfall & Agile), processes such as Scrum & Lean as well as Business process design and and management.
While I understand Machine Learning (ML) at a conceptual level, having read material on the basics categories and applications, I had not built any systems or prototypes that involved ML. My limited understanding has resulted from evaluating AI-systems (e.g. Salesforce Einstein), and through researching how AI and API’s could complement each other. Nor have I used any hardware capable of running Machine Learning tasks. I have a deeper understanding of datasets and data pipelines, including databases, ETL and other data transfer technologies. My electrical or mechanical skills are very limited. I have never built anything involving connecting circuits, nor have I soldered, and my craft skills are also basic. I have not used a 3D printer, nor a laser cutter or virtually any other machine in the ANU maker space. I don’t even like building Lego or Meccano! While I have coded, all of my code ran on traditional computing devices and so I have not coded any embedded compute or ‘edge’ devices. While I have undertaken analysis of many systems, these have not been ‘cyber-physical’ and therefore I have not had to consider the interaction and feedback loops between the physical parts and the cyber elements .
A journey through the world of intelligent machines
The second semester has been an even crazier journey than the first. We have covered modelling, had a crash course in Machine Learning, explored system design guidelines, and evcen covered Human/Animal partnerships.
The following is a summary of the progress I have made in semester two.
Python: while we did less in semester two than previously, my experiences coding the CPS project deepened my knowledge of the syntax. While I still experienced inconvenience setting up development environments, I am now more comfortable with the various tools and command line interfaces. My key learning is that taking the time to properly setup and manage environments is worth the return on investment.
Systems Thinking and Design: extended learnings from semester one to include machine learning components. Focused on how design needs to change when these elements are included in the design process, including bringing forward testing earlier into the system lifecycle. Valuable tools use here are Causal Loop Diagrams and as https://ncase.me/loopy/
Machine Learning (ML): learnt topic including:
Neural Network or Artificial Neural Network (ANN)
Deep Neural Network (DNN) or Deep Learning
Machine Learning concepts: we explored model validation in the ML pipeline in order to explore questions of fairness and bias in Machine Learning. Applied techniques to interrogate these pipelines in order to better understand the output of the algorithms.
Machine learning tools: used Collab notebooks (for exploring modelling and datasets, Teachable Machines (model for CPS project), PyTorch (as recommended by guest lecturer https://pytorch.org/tutorials/beginner/pytorch_with_examples.html ),
Modelling techniques: including agent based modelling, Graph Theory to solve problems with Covid infections and contact tracing.
Extended my knowledge of data preparation (capture, classification, cleansing etc.) to understand the role it plays in training ML models and its impact on how the model then operates. Used the Coral Edge TPU for ML inference capabilities in my maker project.
Further information will be contained in the blogs.
End of Semester 1 - progress report
The first semester has been a whirlwind race through many different skill areas. Even before we began official classes we were sewing circuits. This was fascinating, as while I was aware of the history of computer programs being ‘sewed’ rather than ‘programmed’, I had not considered how laborious it would have been. A great introduction to the experiential learning style of the course.
Our initial focus was on coding, where we learnt python and how code could control and receive feedback from physical devices. Next up was systems analysis, which also gave us the chance to extend the coding skills into physical computing as we ran experiments that required taking readings from an external system via sensors. We then had a chance to assemble electrical circuits and sensors to construct a creature. This task allowed us to develop our skills in working with sensors and actuators to understand how the input of one could affect the output of another, as well as how to program for these microcontrollers.
The next CPS building blocks we investigated were data and networks, where we created a ‘standard’ for transferring pollution data across a network via both TCP/IP (Sockets) and HTTP. We used visualisation tools such as Tableau to analyse datasets and the choices that are made around data classification and representation. The last fortnight was an introduction to Machine Learning (ML) where we were asked to look at the skills we wanted to develop in semester 2 as well as a stretch task to start developing these skills.
In addition to the build homework we had the Maker project which further developed our skills. For my test facial recognition system I wanted to use as many skills as we had explored throughout the semester. This involved: coding in python, FLASK and HTML; building and connecting the circuits for two raspberry PI’s and touchscreens; 3D printing for the remote control case and also the back of the picture frame; machine learning for the facial recognition model, and data collection and curation for the inputs into this model. Supporting this was the required system design that considered how the human would interact with the system.
The following is a summary of the progress I have made in semester one.
Python: learnt syntax (e.g ; placement, function definitions etc.), concepts and frameworks. Experienced significant inconvenience setting up development environments to run my code on. Key Learning is that while the syntax may be familiar there is a greater learning curve on understanding the various frameworks of python and how to appropriately promote code from one environment to another
Systems Thinking and Design: observed the interaction between cyber and physical components through the homework tasks and maker project. Realised that the feedback loop should consider the physical as well as the cyber. My code would often work fine running on a laptop and then fail when run on the device as I had not considered a variable or parameter relevant only when running on the physical machine. Learnt to be more 'agile' in my design and development practice in order to test code earlier in the cycle so I can discover, isolate and troubleshoot issues.
Embedded Computing: built basic CPS systems and ran experiments on these such as the fridge in fortnight three. Key learning is that these sensors can be variable in their operation and therefore understanding the capability of these sensors through reading datasheets and testing is important in the design of CPS.
Circuitry, Sensors and Other ‘physical skills’: I learnt how to assemble basic circuits through the use of breadboards which was an easy introduction to learning about the flow of current, the use of resistors and connecting sensors and LED lights. These tasks were undertaken by closely following along in class or through help from others in the cohort and I did burn through a number of LED lights and other peripherals in my tasks. I used various sensors during my projects and realised how important the choice of component is in the design process as tolerance levels would differ significantly between components and this would need to be accounted for in the code. Also learnt the basics of 3D printing, hot glue guns, soldering and other skills (I am a whizz at blu tack!) in the assembly of my maker project.
Machine Learning (ML): learnt the basics through applying ML algorithms and libraries to create ML models that I used in my maker project. Extended my knowledge of data preparation (capture, classification, cleansing etc.) to understand the role it plays in training ML models and its impact on how the model then operates. Used the Coral Edge TPU for ML inference capabilities in my maker project.
Further information will be contained in the blogs.