I briefly worked with a project for a large company, known for its locks and entrance solutions. My part in had to do with the internal message passing system for their revolving doors, as well as testing the software. I also worked on the protocol and wrote quite a bit of its documentation.
The very first task was to assemble a control unit. A control unit is a number of custom computers running a popular Real Time OS, similar to FreeRTOS or SafeRTOS. The computers communicate using a popular message bus, popular in multiple large industries. Assembling it meant producing my own cables and connectors, and flashing the software. Mistakes were made in assembling it; sparks were shot, and appropriate countermeasures in the form of electrical tape were deployed. All in all, it went well, and I had my machine.
The code was mostly written in C and C++, although some tools were written in Python. The operating system of choice for the developers was Ubuntu, and other people at the company I worked for were developing an app in Kotlin that was used to control the machine.
One of the most important things I worked with was to ensure that very important messages were guaranteed to be sent through the system. Very important messages included when it was time to hit the brakes. A revolving door may rotate slowly, so people tend to forget what they are. Make no mistake. They consist of hundreds of kilograms of steel and glass. If it runs into you, you will be pushed, and you may get hurt. However, if it pinches your body part between a wing and the wall, then make no mistake, you will lose that body part. Therefore it’s of utmost importance that the machine notices you and immediately deploys the brakes if it thinks a collision is about to happen. I recently witnessed this work properly twice in short succession, here in Germany. A child decided to run through the opening with only centimeters to spare. The door stopped immediately to avoid a collision. With the child out of the way (he was now inside the chamber of the door), the door decided to move again. His father yelled at him to come back out, and the child ran out through an even smaller opening. Again, the safety measures worked perfectly and the brakes were deployed. That’s not to say I wasn’t scared, however. I have learned to not blindly trust safety equipment.
Since I was working on the messaging system and its protocol, I was often working tightly with the Kotlin team, giving them support as needed. I would update the documentation, add examples, or help them write their code. On occasion we also changed the protocol to better match what they were doing, and I made reference implementations they could study.