The robot page is arguably the most important page in the Dashboard. It provides information across several tabs, accessible in the top navigation bar.
The Mission Control page gathers both sensing and actuation interaction channels of the Duckiedrone.
Each block in mission control can be resized and underlying properties edited through the menu accessible in the top right corner of each block.
Mission control graphs are a rendering of the underlying truth. E.g., camera images are rendered at 2 Hz but they are actually streamed at 30 Hz. To access the underlying truth, ask your instructor for developer’s access, or reach out to Duckietown staff on Slack.
Mission Control
The mission control page is fully configurable. Blocks can be rearranged, new ones created, and the properties of each easily edited and saved. Create your own missions at will!
This page provides heartbeats
to the drone. It needs to be open for the drone to fly.
The top bar summarizes:
the
hostname
(“vehicle"),the “Mission", i.e., the particular layout of the blocks and their properties; and
the “Bridge” status, i.e., the connection between the drone and the base station. The bridge needs to be “connected” for data to be exchanged between Duckiedrone and the base station.
Sensing
Motors PWM signals: this graph shows the commands sent to each motor (
m1
, ... ,m4
) by the flight controller, and is the closest thing we can do for measuring motor speeds (motors do not have embedded encoders). They
axis shows the intensity of the signal - the higher, the faster that motor spins. Bounds in default are (1000
-2000
). Thex
axis shows time, with0
on the right being the present instant.The meaning of these commands might not be immediately relatable to the drone’s behavior, as humans are more familiar with higher-level representations such as Euler angles (roll, pitch, yaw), and thrust (the sum of all vertical components of lift from each motor) commands.
Protip: play with motor commands in a safe way by plugging in a wall charger to the Raspberry Pi and detaching the battery.
This configuration will allow the Raspberry Pi to power all the drone’s subsystems (flight controller, sensors, etc.) while not being able to provide enough power to actually spin the motors. It is the idea configuration for development, as the battery can be charged while having access to all subsystems, too.
When ready to fly, disarm the drone, plug in the battery, remove the Pi power cable, and enjoy a smooth power transition with no reboots!
Heartbeat monitors: the drone requires heartbeats to fly, as a safety measure. Heartbeats act as a “dead man switch”, i.e., if heartbeats are lost for any reason the drone disarms.
Heartbeat monitoring can be disabled on each individual signal, but it might cause catastrophic outcomes. Don’t disable heartbeat monitoring unless you really know what you are doing.
Time-of-flight (ToF) sensor: the time of flight sensor measures distance.
It has a minimum range and maximum ranges associated with the mode of operation. The default settings provide measurements between (0.03-1.2) meters.
GOOD BUG ToF measures 1-2cm when the minimum should be 3
ToF data is collected at 30 Hz. Mission control streams at 5 Hz by default.
Inertial Measurement Unit (IMU) - Orientation: the IMU includes an accelerometer and gyroscope, measuring linear and angular accelerations. This data is combined to show the drone's orientation (roll, pitch, yaw), expressed in degrees.
IMU data is measured in the 2-3 kHZ range on the flight controller, provided to the Raspberry Pi at 22 Hz, and rendered in Mission Control at 5 Hz.
The “Calibrate IMU” button can be used to reset and remove bias from the measurements. The data will be saved in the configurations folder and propagated to autonomous nodes too.
Camera: the camera streams 640x480 resolution images at 30 Hz, rendered by default at 2 Hz in Mission Control.
Actuation
Heartbeats: these signals are sent by each block in the pipeline (
joystick
,altitude
,state
(estimation),PID
) to the flight controller, and are safety signals. If for any reason one of the heartbeats stops publishing, the drone will disarm. Heartbeats can be manually overridden, but this is not encouraged unless you know what you are doing.
Arm / Disarm: Drones (yes, even happy Duckiedrones) have spinning propellers, hence are inherently dangerous. To minimize the chance of accidents, the drone is equipped with 3 arming states:
disarmed (
0
): This is the safe state. When disarmed, the motors will never receive commands.armed (
1
): This is a dangerous state: When armed, the propellers will spin with idle motor commands, but not receive inputs from external nodes (e.g., the PID control node). Don’t let this terminology fool you though: you don’t want to have your fingers anywhere near spinning propellers. Never arm a drone near you, or when other humans or pets are around it!
flight (
2
): This is the most dangerous state:and an additional browser-interface-inspired layer of security:
pre-check: this is not a state of the Duckiedrone but rather a human miss-clicking prevention system. Unless
pre-check
is set toclear
, the interface will not allow toggling any other state. This means two consecutive willful clicks are necessary to get the propellers spinning ( 1.pre-check
→clear
; 2.disarmed
→ armed
Remote control: this is a virtual joystick used to manually control the drone. It can be used to control all robot “axis” (roll, pitch, yaw, thrust).
When used concurrently to autonomous mode, the “Override” parameters allow maintaining manual control on all or a subset of the axis.
Override = On → the input to the flight controller for that axis comes from the joystick
Override = Off → the input to the flight controller comes from the autonomy pipeline if present, if not still from the joystick.
Remote control commands are sensitive. Go slowly, be cautious, get familiar with the interface and always look directly at the drone while operating it!
Remote control commands:
W: pitch forward
S: pitch backwards
A: roll left
D: roll right
Drag green ball ↕ with mouse: increase / decrease thrust
Drag green ball ↔ with mouse: yaw counter-clockwise and clock-wise
Spacebar: emergency stop (disarms the drone)
PID reset: TODO
Troubleshooting
Problem: The power button does not generate the intended outcome.
Solution: The power button currently only works through the Info page of the Dashboard. If you find it unresponsive on other pages, just navigate back to Robot > Info.
Add Comment