Animal-Computer Interaction and Animal-Cyber Systems (a term we coined in our past Project Entitled ‘Animal-Cyber Systems (ACS) – Gaining Access to Farm Animal Welfare’) require a practical and reproducible approach to teaching students. This teaching is about animal behaviour and acquiring hands-on experience in software and hardware development of IoT devices, machine learning and artificial intelligence algorithms, edge and cloud computing systems and the related communication protocols applicable in the real world.
However, where to start? We covered ML and AI approaches in our previous blogs, but much needs to be said about computing systems, sensors and edge and cloud computing, including the communication protocols.
The broad areas of animal-computer interaction often engage students with little or no experience with wearable sensing and actuating devices in hardware and software. Also, those researchers familiar with sensor systems for collecting data rarely have experience in combined IoT/edge/cloud computing systems. Furthermore, integrating the concepts of networking, computing software, and hardware in practice is not trivial. At the same time, there is a growing demand to know (at least in basics) all these areas and educate students in undergraduate and graduate study programs.
How do we prioritize knowledge sharing and its acquisition, in addition to fostering interdisiciplinary collaboration? We believe in a few guiding principles:
- Demystify programming: to all mindsets in animal-in-computing research: from low-level programming C++/Arduino on Arduino to Python on Raspberry Pi over to
Kubernetes in clouds, the researchers and students need to acquire some basic skills.
- Normalise heterogeneity: in systems via multiple and multiple diverse how devices (sensor, server, desktop), over to communication protocols (MQTT, HTTP,
AMQP) and various tools (RabbitMQ, Elasticsearch, Logstash, k3s, etc)
- Implement and contribute to Free and Open Source software, including data sharing and data processing, and whenever possible, also use open source hardware.
- Motivate and have fun: The focus is on animals and humans and the computing system architectures helping us understand animals and the environment better – rather than on the high-tech design of new fancy devices!
Conceptually, the devices we use can be classified into three categories based on their hardware capabilities:
- Sensing and actuating devices (“IoT”) on microprocessors (e.g., Arduino Uno WiFi Rev2): these are simple devices used on animal wearables and in their surroundings. They usually have no storage and have low processing and communication capabilities.
- Edge-constrained devices, such as Raspberry Pi 4 Model B, with low-to-medium storage, higher than microprocessor processing and communication capabilities.
- Cloud/Edge servers: highest storage and processing capabilities in the system, from off-the-shelf computers to cloud data centres.
Regarding networking, IoT and edge-constrained devices are usually placed in a local area network, whereas communication to edge/cloud computers involves a comprehensive area network implementation. In a combined IoT-edge-cloud system, three protocols are interesting to know about:
- Message Queue Telemetry Transport (MQTT) – most popular in IoT worlds: based on a publish/subscribe model; it uses a broker where clients can publish or subscribe to the so-called topics. When a publisher sends a specific message to a particular topic, all subscribers receive the same message.
- Hypertext Transfer Protocol (HTTP) – most widely used in the internet today: uses a client/server model consisting of a server responding to requests from a client based on the resource or information that the client requests.
- Advanced Message Queuing Protocol (AMQP) – scalable message exchange: based on publish/subscribe model, with a more complex broker entity ensuring that all messages published by AMQP clients (acting as publishers) are forwarded to other AMQP clients (acting as consumers).
If we would like to build something like an “edge computing animal studies lab” the best is to start with widely available and popular solutions, such as Arduino-based boards which support a variety of low-cost sensors/actuators. We can use off-the-shelf single-board computers (Raspberry Pi), local servers, or various cloud platforms for cutting-edge and cloud computing experiments.
For software, let us opt for free and open-source implementations such as Arduino sketches, phyton processing scripts, and containerization tools such as Kubernetes.
We now list a few useful open-source tools to learn about to this end:
[pip] How to install python packages: https://packaging.python.org/en/latest/tutorials/installing-packages/
[Docker] Docker Engine installation on Ubuntu: https://docs.docker.com/engine/install/ubuntu/
[Python] Python: https://www.python.org/downloads/
[OpenSSH] OpenSSH Server: https://ubuntu.com/server/docs/serviceopenssh
[git] Git for linux: https://git-scm.com/download/linux
[curl] CURL: https://curl.se/download.html
[Helm] Helm: https://helm.sh/docs/intro/install/#from-script
[Arduino IDE] How to install Arduino IDE: https://www.arduino.cc/en/Guide/
[mosquitto-clients] mosquitto-clients (v1.6.9-1): https://packages.ubuntu.com/focal/mosquitto-clients
[amqp-tools] Package: amqp-tools (0.10.0-1): https://packages.ubuntu.com/focal/amqp-tools
[k3s] K3s container orchestrator: https://rancher.com/docs/k3s/latest/en/installation/install-options/
[RabbitMQ] RabbitMQ: https://www.rabbitmq.com/
[Elasticsearch] Elasticsearch: https://www.elastic.co/elasticsearch/
[Logstash] Logstash: https://www.elastic.co/logstash/