Robobot architecture: Difference between revisions

From Rsewiki
 
(29 intermediate revisions by the same user not shown)
Line 1: Line 1:
Back to [[Robobot B]]
Back to [[Robobot_B | Robobot]]


== Software block overview ==
== Display and LED-band ==
 
=== O-LED display ===
 
[[file:o-led-display-ann.jpg | 500 px]]
 
The primary function of this display is the battery voltage. The AS encoder is not used by Robobot.
 
=== LED-band ===
 
[[file:led-band-annotated.jpg | 750px]]
 
The Teensy maintains the LED band. Most LEDs show sensor values. The last 3 LEDs can be set by commands to the Teensy.
 
== Hardware block overview ==


[[File:robobot-in-blocks-2024.png | 600px]]
[[File:robobot-in-blocks-2024.png | 600px]]


Figure 1. The main building blocks.
Figure 1. The main hardware building blocks.


=== Software building blocks ===
== Software building blocks ==


[[File:robobot-function-blocks.png | 600px]]
[[File:robobot-function-blocks.png | 600px]]
Line 13: Line 27:
Figure 2. The main software building blocks.  
Figure 2. The main software building blocks.  


The blocks marked with a blue dot are available in the repository as source code.


==== Mission app====
==== Mission app====
The mission app block is the 'brain' of the robot.
The mission app block is the robot's top-level controller.
 
The mission app is a Python app with a few essential capabilities.
 
It can subscribe to several messages from the Teensy interface and command the Teensy board to perform actions (like changing the motor voltage).


It can subscribe to data streams from the Teensy interface and command the robot to perform actions (like forward and turn velocity).
It attaches to the camera video stream and connects to the IO board (e.g. the start and stop buttons.
It attaches to the camera video stream and connects to the IO board (e.g. the start and stop buttons.


Line 29: Line 41:
The Teensy interface connects the Teensy USB interface and the MQTT protocol.
The Teensy interface connects the Teensy USB interface and the MQTT protocol.


The interface can create log files for most data types. The configuration file robot.ini in svn/robobot/teensy_interface/build controls this.
The Teensy interface further has closed-loop control for forward velocity and implements turn-rate commands.


The Teensy interface is started from the ''on_reboot.bash'' in the home directory (/home/local)
The interface decodes many essential data types and allows these data streams to be logged.
The logged files are text-based and intended for Matlab for analysis and debugging.
See more details in [[Robobot teensy interface]].


==== Mosquitto MQTT server ====
==== Mosquitto MQTT server ====
Line 41: Line 55:


The camera streamer is a small Python app that takes data from the camera and streams the video to socket port 7123.
The camera streamer is a small Python app that takes data from the camera and streams the video to socket port 7123.
This means that the stream is also available on Wi-Fi.
This means that the stream is also available on Wi-Fi.
 
See [[Robobot webcam server]] for more details
The camera is configured in the Python file ''svn/robobot/stream_server/stream_server.py''.
 
The streamer is started from the ''on_reboot.bash'' in the home directory (/home/local)


==== IP-disp ====
==== IP-disp ====


IP_disp is a silent app that is started at reboot (by ''on_reboot.bash'') and has two tasks:
IP_disp is a silent app that is started at reboot (by ''on_reboot.bash'') and has two tasks:
* Detect the IP net address of the Raspberry and send it to the small display on the Teensy board.
* Detect the IP net address of the Raspberry and send it to the small display on the Teensy board (inactive if the Teensy_interface is running.)
* Detect if the "start" button is pressed, and start the mission app.
* Detect if the "start" button is pressed, and start the mission app.
* Detect if the "start" button is pressed for more than 5 seconds to shut down the robot.


==== Digital IO ====
==== Digital IO ====
Line 59: Line 70:


The IO is connected to the Raspberry PI pins GPIO06 (stop), 13 (start), 16, 19, 20, 21, and 26.
The IO is connected to the Raspberry PI pins GPIO06 (stop), 13 (start), 16, 19, 20, 21, and 26.
See details in [[Robobot circuits]].
See details in [[Robobot circuits]].


Line 69: Line 79:


The firmware is in ''svn/robobot/teensy_firmware_8'', compiled with ''./compile'' and uploaded to the Teensy by ''./upload''. NB! An upload will cut the battery power, so press the ''power'' switch during upload.
The firmware is in ''svn/robobot/teensy_firmware_8'', compiled with ''./compile'' and uploaded to the Teensy by ''./upload''. NB! An upload will cut the battery power, so press the ''power'' switch during upload.
See details in [[Robobot circuits]].
See details in [[Robobot circuits]].


==Software architecture==
== Start buttons (and external power) ==
 
The software architecture is based on the old NASREM architecture, and this is the structure for the description on this page.
 
(The National Aeronautics and Space Administration (NASA) and the US National Institute of Standards and Technology (NIST) have developed a Standard Reference Model Telerobot Control System Architecture called NASREM. Albus, J. S. (1992), A reference model architecture for intelligent systems design.)
 
[[File:nasrem.png | 700px]]
 
Figure 3. The NASREM model divides the control software into a two-dimensional structure. The columns are software functions: Sensor data processing, modelling, and behaviour control.
 
The rows describe abstraction levels:
* Level 1 with the primary control of the wheels for forward velocity and turn rate. This level also maintains the robot pose (position, orientation, and velocity, based on wheel odometry.
* Level 2 is drive select, where the drive can be controlled by just odometry (forward velocity and turn rate) or follow a line based on the line sensor. This level also includes other sensor detections like crossing lines and distances.
* Level 3 is where the overall behaviour is decided and includes camera sensor object detections like navigation codes and other objects.
 
=== Level 1; Pose and drive control ===
 
[[File:robobot_level_1.png | 800px]]
 
Figure 4. The lowest level in the control software. The encoder ticks are received from the hardware (from the Teensy board) into the sensor interface. The encoder values are then modeled into an odometry pose. The pose is used to control the wheel velocity using a PID controller.
The desired wheel velocity for each wheel is generated in the mixer from a desired linear and rotational velocity.
The heading control translates rotation velocity to the desired heading and uses a PID controller to implement.
 
More [[Robobot level 1]] details of the individual blocks.
 
=== Level 2; drive select ===
 
[[File:robobot_level_2.png | 800px]]


Figure 5. At level 2 further sensor data is received, modeled, and used as optional control sources.
[[file:start-buttons.png | 600px]]


More [[robobot level 2]] details of the individual blocks.
The two start buttons are quite different. The Arduino mission start will start the mission code in the Teensy. The mqtt-client reads the Python mission start.


=== Level 3; behaviour ===
Both buttons can shut down the robot when pressed for 5 seconds.


[[File:robobot_level_3.png | 800px]]
The digital-io can only be used for a shutdown if a mission is not running (mqtt-client will reserve all IO).


Figure 6. At level 3, the drive types are used to implement more abstract behaviour, e.g. follow the tape line to the axe challenge, detect the situation where the axe is out of the way, and then continue the mission.
=== External power ===


[[Robobot level 3 details]]
On the digital-io board, there are power pins available for 3V, 5V, and 12V. 12V is the battery voltage, which can vary from 10 to 16V.

Latest revision as of 12:57, 9 February 2025

Back to Robobot

Display and LED-band

O-LED display

The primary function of this display is the battery voltage. The AS encoder is not used by Robobot.

LED-band

The Teensy maintains the LED band. Most LEDs show sensor values. The last 3 LEDs can be set by commands to the Teensy.

Hardware block overview

Figure 1. The main hardware building blocks.

Software building blocks

Figure 2. The main software building blocks.

The blocks marked with a blue dot are available in the repository as source code.

Mission app

The mission app block is the robot's top-level controller.

It can subscribe to data streams from the Teensy interface and command the robot to perform actions (like forward and turn velocity). It attaches to the camera video stream and connects to the IO board (e.g. the start and stop buttons.

The mission app is in svn/robobot/mqtt_python; its main file is mqtt-client.py.

Teensy interface

The Teensy interface connects the Teensy USB interface and the MQTT protocol.

The Teensy interface further has closed-loop control for forward velocity and implements turn-rate commands.

The interface decodes many essential data types and allows these data streams to be logged. The logged files are text-based and intended for Matlab for analysis and debugging. See more details in Robobot teensy interface.

Mosquitto MQTT server

This Mosquitto server is an open-source MQTT protocol server - see https://mosquitto.org/. This server is running as a service.

Camera streamer

The camera streamer is a small Python app that takes data from the camera and streams the video to socket port 7123. This means that the stream is also available on Wi-Fi. See Robobot webcam server for more details

IP-disp

IP_disp is a silent app that is started at reboot (by on_reboot.bash) and has two tasks:

  • Detect the IP net address of the Raspberry and send it to the small display on the Teensy board (inactive if the Teensy_interface is running.)
  • Detect if the "start" button is pressed, and start the mission app.
  • Detect if the "start" button is pressed for more than 5 seconds to shut down the robot.

Digital IO

This is the board on top of the Robobot. It provides digital IO and a power supply for external devices.

The IO is connected to the Raspberry PI pins GPIO06 (stop), 13 (start), 16, 19, 20, 21, and 26. See details in Robobot circuits.

Teensy PCB

The Teensy board is a baseboard used in the more straightforward 'Regbot' robot. This board has most of the hardware interfaces and offers all sensor data to be streamed in a publish-subscribe protocol. All communication is based on clear text lines.

The firmware is in svn/robobot/teensy_firmware_8, compiled with ./compile and uploaded to the Teensy by ./upload. NB! An upload will cut the battery power, so press the power switch during upload. See details in Robobot circuits.

Start buttons (and external power)

The two start buttons are quite different. The Arduino mission start will start the mission code in the Teensy. The mqtt-client reads the Python mission start.

Both buttons can shut down the robot when pressed for 5 seconds.

The digital-io can only be used for a shutdown if a mission is not running (mqtt-client will reserve all IO).

External power

On the digital-io board, there are power pins available for 3V, 5V, and 12V. 12V is the battery voltage, which can vary from 10 to 16V.