NUsight: Building an
effective debugging tool
Josephus Paye II
Co-Team Leader, NUbots
NUsight
A collection of tools that provide realtime visualisation of debug data from one or more robots
🌐 web-based
many 🤖 to many 💻
The Elements of a Visual Debugging Tool
The Elements of a Visual Debugging Tool
Data
Rendering
Networking
the values and images to visualise
getting data from a robot into the debugging tool
displaying the data in a user interface, with interactive controls
Five Key Principles
Five Key Principles
Keep it simple
Use UDP with stateless messages
Use declarative, data-driven rendering
Go beyond numbers and graphs
Give users control over what is visualised
1. Keep It Simple
1. Keep It Simple
The system
is wrong
The debugger
is wrong
1. Keep It Simple
Minimise the number of settings and configuration options in the tool
Adopt design patterns and principles
that exclude certain classes of bugs
Keep the tool strictly as a viewer, responsible for displaying data only
2. Use UDP with Stateless Messages
2. Use UDP with Stateless Messages
TCP vs UDP
2. Use UDP with Stateless Messages
message Image {
message Lens {
enum Projection {
UNKNOWN = 0;
RECTILINEAR = 1;
EQUIDISTANT = 2;
EQUISOLID = 3;
}
Projection projection = 1;
float focal_length = 2;
float fov = 3;
fvec2 centre = 4;
fvec2 k = 5;
}
uint32 format = 1;
uvec2 dimensions = 2;
bytes data = 3;
uint32 camera_id = 4;
string name = 5;
google.protobuf.Timestamp timestamp = 6;
mat4 Hcw = 7;
Lens lens = 8;
}
Stateless messaging
3. Use Declarative,
Data-driven Rendering
3. Use Declarative,
Data-driven Rendering
Declarative vs Imperative Rendering
<!-- Declarative: SVG -->
<svg width="200" height="200">
<rect width="100" height="100" fill="green" />
</svg>
<!-- Imperative: Canvas 2D -->
<canvas id="canvas" width="200" height="200" />
<script>
let canvas = document.getElementById('canvas');
let ctx = canvas.getContext('2d');
ctx.fillStyle = 'green';
ctx.fillRect(0, 0, 100, 100);
</script>
3. Use Declarative,
Data-driven Rendering
Data-driven Rendering
React.js
MobX
4. Go Beyond Numbers and Graphs
4. Go Beyond Numbers and Graphs
Make it look real where possible
Localisation
Vision
4. Go Beyond Numbers and Graphs
Visualise with context and system info
5. Give Users Control Over What is Visualised
5. Give Users Control Over What is Visualised
Give control where the data goes in (input)
# NUsight.yaml
# Select which data to send
reaction_handles:
# Overview information for the dashboard, designed for minimum bandwidth
overview: true
# Motor positions, orientation, etc.
sensor_data: false
# Raw image
image: false
# compressed image
compressed_image: false
# Classified image
classified_image: false
# Vision objects including goals, balls and debugging lines
vision_object: false
# Visual mesh data
visual_mesh: false
# Green horizon data
green_horizon: false
# Localisation state estimates and uncertainties
localisation: false
# Data for chart tool in NUsight
data_point: false
5. Give Users Control Over What is Visualised
Give control where the data comes out
Conclusion
Keep it simple
Use UDP with stateless networking
Use declarative, data-driven rendering
Go beyond numbers and graphs
Give users control over what is visualised
A realtime visual debugging tool is very useful and improves development efficiency when building complex systems like soccer playing robots.
Acknowledgement
Thanks to Brendan Annable, creator of NUsight, and Trent Houliston, contributor to NUsight, as well as the rest of the NUbots team for their help in preparing this presentation.
Links
NUsight is open source and available on GitHub (github.com/NUbots/NUsight2) and can be referred to when building your own debugging tool.
We are also happy to answer any questions you may have - email nubots@newcastle.edu.au
Thanks!
NUsight: Building an effective debugging tool for soccer playing robots
By josephuspaye
NUsight: Building an effective debugging tool for soccer playing robots
This talk was given remotely at the Humanoid Virtual Workshops held for RoboCup 2020. More information about NUsight and NUbots can be found at https://nubook.nubots.net
- 1,128