In this course, you will be a member of the fictitious startup Sarnfleet, which aims to provide the next generation of logistics services for urban areas. Sarnfleet is a service for climate-neutral robot deliveries which combines the opportunities of digitalization with the challenges of the green energy transition. Sarnfleet simulates the energy market based on weather conditions to predict the availability of cheap green energy and routes its fleet of autonomous Duckiebots to provide the best service at a minimal cost. You will build a simulator and a prototype for an autonomous robot delivery system in the Duckie Town World that includes robot delivery vehicles, inductive charging stations, and renewable energy sources. Delivery agents are paid for their logistics services but need to pay for electricity. A weather simulation predicts cheap renewable energy availability in advance and optimizes traffic. Optimize Sarnfleets revenue by going for cheap green energy and profitable deliveries.
Duckietown aims to combine robotics and artificial intelligence. Its basic idea is a robotic ecosystem where fleets of autonomous cars (“Duckiebots”) and autonomous drones (“Duckiedrones”) interact with each other and the environment (“Duckietown”).
Duckietown is a special model for an urban environment. It is designed to simplify the existing world. Duckiebots operate within various constraints, e.g., predefined road sections, specific colors usage, and intersection signs:
Duckiebots and Duckiedrones
Duckiebots and Duckiedrones are Raspberry Pi 3B+ running the robotic operating system ROS on a dockerized Ubuntu. A Duckiebot has two physical wheels with encoders, a third 360-degree steel pseudo-wheel, a power bank, and a single monoscopic camera as an input source from the real world. A Duckiedrone features a camera and an infrared sensor for autonomous locaization and control and is fully programmable using the Duckietown Shell (dts) and Python.
ROS is an open-source framework providing low-level hardware functionality that Sarnfleet should use. The basic idea of this framework is to split various atomic and independent functionality into single “nodes,” e.g., camera node or wheels node, and modify/replace them modularly without changing other functionality.
You can either change the code in those existing nodes or define new nodes and connect them to the existing ones. Single nodes’ functionality is implemented in Python. Various Nodes are connected using communication channels, the so-called topics. Typically, a node defines a list of other nodes it receives some data from, and a list of nodes it sends some data to using the publish and subscribe methods in the Observer pattern. For example, a new node can subscribe to the camera node to receive camera input data, process it, and then publish the next calculated movement command to the wheels node.