This page will contain high-level documentation on the various utilities for RJ RoboCup Software. Utilities are everything not directly necessary to launch our AI program, soccer (what a confusing name).
First, read the Referee section of the Our Stack page and this section of the rulebook. This will give you some background on what the SSL Game Controller does. This program is given by the league and helps simulate what it will be like at competition, where the (human) referee sits at a different computer to the one that runs our software and gives game commands from there.
Installation is simple. First, create an empty directory named
ssl-game-controller at the same level as your clone of
~/coding/robocup/ ├── robocup-software/ ├── ssl-game-controller/
Then, download the latest release binary in the SSL GC repo and put it into that
folder. Finally, make the release binary executable by
cd``ing to the
``ssl-game-controller repo and running
chmod +x <name of release binary>.
When you want to launch the game controller,
cd to your
ssl-game-controller directory and run the release binary with
release binary>. (You can tab-complete this by typing
./ and then hitting
tab.) The binary will output a message saying it has launched the UI at a
specific URL–click that link to open the UI.
Operation instructions can be found in the FAQ of the SSL GC repo.
Our launch files are pretty similar to the ones introduced in ROS wiki tutorials, but we also use flags on launch to easily switch between certain nodes (for example we can switch between sim radio and network radio by setting a particular to the proper boolean value). Alias for common launch configurations can be found in the makefile.
We use cmake and ninja. We prefer using clang as the C++ compiler compared to
gcc, but either will work.
Most of the details on the high-level construction of our build system can
been ascertained by reading the root
If you are adding a new C++ file, it is best to just follow the existing
format by reading through
CMakeLists.txt in the relevant directories.
Debugging C++ Code
Setting up a debugger for our C++ side code is actually quite simple!
In particular, we have had success using LLDB,
made by the same group that develops the clang compiler.
As of summer 2022, the ubuntu-setup script installs clang-10 using a script
which also includes lldb-10
(so you should not need to install anything new for this).
All you need to do is start soccer or sim in one terminal tab, and in another
sudo lldb-10 -n name_of_particular_proc.
How do you find this particular name?
Well it depends on what file/node you wish to debug.
As of the time of writing this article, we do not use any ros2 node
composition, so each node is its own process.
Looking in the soccer launch file a node’s “executable_name” corresponds to
the process name to place after
Another method to find the process names of nodes is to run
top in a new
terminal tab and look in there.
How do you use lldb? Google what you want to do and follow the top result or follow the lldb tutorial on their website. CS2110 and CS2200 will introduce you to gdb which is another debugger for C/C++; if you already know that, the commands are basically the same (the syntax is different in many places though).
There is also another method which involves commenting out the node you want
to run in the launch files and running it separately in a new terminal tab
with a debugging prefix. This method is slower and not as consistent, so I
won’t explain it here. Check out
util/debug-cpp.sh if you
are curious, or if the first method I explained stops working.
We use Github Actions. The configuration for that can be found in